[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH V2 05/12] replace split_value() with truncate_string()



On Thu, Jul 24, 2014 at 12:19 AM, Jan Beulich <JBeulich@xxxxxxxx> wrote:
>>>> On 22.07.14 at 02:43, <roy.franz@xxxxxxxxxx> wrote:
>> --- a/xen/arch/x86/efi/boot.c
>> +++ b/xen/arch/x86/efi/boot.c
>> @@ -466,7 +466,13 @@ static char *__init get_value(const struct file *cfg, 
>> const char *section,
>>              break;
>>          default:
>>              if ( match && strncmp(ptr, item, ilen) == 0 && ptr[ilen] == '=' 
>> )
>> -                return ptr + ilen + 1;
>> +            {
>> +                ptr += ilen + 1;
>> +                /* strip off any leading spaces */
>
> Coding style.
>
>> +                while ( *ptr && isspace(*ptr) )
>> +                    ptr++;
>> +                return ptr;
>> +            }
>
> It's unclear how this whole hunk is related to the patch subject.
>
>> @@ -489,14 +495,19 @@ bool_t __init load_file(EFI_FILE_HANDLE dir_handle, 
>> CHAR16 *name,
>>      return 0;
>>  }
>>
>> -static void __init split_value(char *s)
>> +/* Truncate string at first space, and return pointer
>> + * to remainder of string.
>> + */
>
> Coding style again.
>
>> +char * __init truncate_string(char *s)
>
> Non-static function without declaration in any header.
>
>>  {
>> -    while ( *s && isspace(*s) )
>> -        ++s;
>> -    place_string(&mb_modules[mbi.mods_count].string, s);
>>      while ( *s && !isspace(*s) )
>>          ++s;
>> -    *s = 0;
>> +    if (*s)
>> +    {
>> +        *s = 0;
>> +        return(s + 1);
>> +    }
>> +    return(NULL);
>
> None of the callers uses the return value - why is the function return
> type not "void"? Also, if there is a reason, then no parentheses around
> the return expression please.

I am making these changes to make the basic functionality share-able
with the arm64
stub.  The users of this function's return value come in when the arm
stub is added.
The declaration is added to efi-shared.h when it is moved - I can make
it static here until then.
I very deliberately am separating code refactoring from code movement
patches which causes
the separation between the creation of a function with a return value
that is not currently used.

>
>> @@ -893,7 +904,8 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE 
>> *SystemTable)
>>      }
>>      if ( !name.s )
>>          blexit(L"No Dom0 kernel image specified.");
>> -    split_value(name.s);
>> +    place_string(&mb_modules[mbi.mods_count].string, name.s);
>> +    truncate_string(name.s);
>>      load_ok = load_file(dir_handle, s2w(&name), &kernel);
>>      efi_bs->FreePool(name.w);
>>      if ( !load_ok )
>> @@ -907,7 +919,8 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE 
>> *SystemTable)
>>      name.s = get_value(&cfg, section.s, "ramdisk");
>>      if ( name.s )
>>      {
>> -        split_value(name.s);
>> +        place_string(&mb_modules[mbi.mods_count].string, name.s);
>> +        truncate_string(name.s);
>>          load_ok = load_file(dir_handle, s2w(&name), &ramdisk);
>>          efi_bs->FreePool(name.w);
>>          if ( !load_ok )
>> @@ -920,7 +933,8 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE 
>> *SystemTable)
>>      if ( name.s )
>>      {
>>          microcode_set_module(mbi.mods_count);
>> -        split_value(name.s);
>> +        place_string(&mb_modules[mbi.mods_count].string, name.s);
>> +        truncate_string(name.s);
>>          load_ok = load_file(dir_handle, s2w(&name), &ucode);
>>          efi_bs->FreePool(name.w);
>>          if ( !load_ok )
>> @@ -930,7 +944,8 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE 
>> *SystemTable)
>>      name.s = get_value(&cfg, section.s, "xsm");
>>      if ( name.s )
>>      {
>> -        split_value(name.s);
>> +        place_string(&mb_modules[mbi.mods_count].string, name.s);
>> +        truncate_string(name.s);
>>          load_ok = load_file(dir_handle, s2w(&name), &xsm);
>>          efi_bs->FreePool(name.w);
>>          if ( !load_ok )
>
> Looking at all these I wonder why you didn't retain split_value() as a
> simple wrapper.
I should be able to do that.
>
> Furthermore splitting out the place_string() doesn't seem very
> efficient, as imo the goal ought to be for efi_start() to become
> common code (or at least the module loading part of fit), i.e.
> there's no win at all from the change you're doing here.

I don't think that combining the x86 and arm efi_start() will work out
that cleanly.  Arm is using device tree from getting information from
GRUB and/or the firmware, so I think you'd end up with a lot of conditional
code.

>
> Jan
>

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.