[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for-xen-4.5 v4 12/18] x86: move modules data from mbi to boot_info and remove mbi
>>> On 18.10.14 at 00:35, <andrew.cooper3@xxxxxxxxxx> wrote: > On 17/10/2014 15:12, Daniel Kiper wrote: >> @@ -593,16 +582,17 @@ static void __init efi_arch_handle_module(struct file >> *file, const CHAR16 *name, >> >> /* >> * If options are provided, put them in >> - * mb_modules[mbi.mods_count].string after the filename, with a space >> - * separating them. place_string_u32() prepends strings and adds >> separating >> + * boot_info_efi.mods[boot_info_efi.mods_nr].cmdline >> + * after the filename, with a space separating them. >> + * place_string_u32() prepends strings and adds separating >> * spaces, so the call order is reversed. >> */ >> if ( options ) >> - place_string_u32(&mb_modules[mbi.mods_count].string, options); >> - place_string_u32(&mb_modules[mbi.mods_count].string, local_name.s); >> - mb_modules[mbi.mods_count].mod_start = file->addr >> PAGE_SHIFT; >> - mb_modules[mbi.mods_count].mod_end = file->size; >> - ++mbi.mods_count; >> + >> place_string_u32(&boot_info_efi.mods[boot_info_efi.mods_nr].cmdline, >> options); >> + place_string_u32(&boot_info_efi.mods[boot_info_efi.mods_nr].cmdline, >> local_name.s); >> + boot_info_efi.mods[boot_info_efi.mods_nr].start = file->addr >> >> PAGE_SHIFT; >> + boot_info_efi.mods[boot_info_efi.mods_nr].end = file->size; > > end is surely start + size (give or take a fencepost) ? How did the > pre-existing code work? You should look at pre-existing code first: setup.c, following the "Iterate backwards over all superpage-aligned RAM regions" comment, has for ( i = 0; !efi_enabled && i < mbi->mods_count; i++ ) { if ( mod[i].mod_start & (PAGE_SIZE - 1) ) panic("Bootloader didn't honor module alignment request."); mod[i].mod_end -= mod[i].mod_start; mod[i].mod_start >>= PAGE_SHIFT; mod[i].reserved = 0; } i.e. mod_start after this point no longer holds a byte address, and mod_end now holds only the size. The EFI code leverages this to make sure addresses beyond 4Gb can be expressed (which can't be in multiboot). >> @@ -723,16 +720,15 @@ void __init noreturn __start_xen(unsigned long mbi_p, >> boot_info_t *boot_info_ptr >> * we can relocate the dom0 kernel and other multiboot modules. Also, >> on >> * x86/64, we relocate Xen to higher memory. >> */ >> - for ( i = 0; !efi_enabled && i < mbi->mods_count; i++ ) >> + for ( i = 0; !efi_enabled && i < boot_info->mods_nr; i++ ) >> { >> - if ( mod[i].mod_start & (PAGE_SIZE - 1) ) >> + if ( boot_info->mods[i].start & (PAGE_SIZE - 1) ) >> panic("Bootloader didn't honor module alignment request."); >> - mod[i].mod_end -= mod[i].mod_start; >> - mod[i].mod_start >>= PAGE_SHIFT; >> - mod[i].reserved = 0; >> + boot_info->mods[i].end -= boot_info->mods[i].start; >> + boot_info->mods[i].start >>= PAGE_SHIFT; >> } >> >> - modules_headroom = bzimage_headroom(bootstrap_map(mod), mod->mod_end); >> + modules_headroom = bzimage_headroom(bootstrap_map(boot_info->mods), >> boot_info->mods->end); > > The old code was playing a little fast-and-loose with pointers vs arrays. > > Please convert to the more-appropriate mods[0] as you are transforming > the code anyway, which helps highlight the bzimage_headroom() check > applies to the dom0 kernel only. I disagree - arrays getting converted to pointers anyway when used in expressions makes it rather pointless to use [0], being more code to type, read, and parse, and hence making things (even if only slightly) less legible. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |