[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH for-xen-4.5 v4 07/18] x86/efi: add place_string_u32() function
Add place_string_u32() function and rename place_string() to place_string_char(). We need place_string_u32() to play with u32 MBD and boot_info structures members in later patches. Signed-off-by: Daniel Kiper <daniel.kiper@xxxxxxxxxx> --- v4 - suggestions/fixes: - improve commit message (suggested by Andrew Cooper). --- xen/arch/x86/efi/efi-boot.h | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h index 5c85854..9458e7f 100644 --- a/xen/arch/x86/efi/efi-boot.h +++ b/xen/arch/x86/efi/efi-boot.h @@ -103,14 +103,14 @@ static void __init relocate_trampoline(unsigned long phys) *(u16 *)(*trampoline_ptr + (long)trampoline_ptr) = phys >> 4; } -static void __init place_string(u32 *addr, const char *s) +static void __init place_string_char(char **addr, const char *s) { static char *__initdata alloc = start; if ( s && *s ) { size_t len1 = strlen(s) + 1; - const char *old = (char *)(long)*addr; + const char *old = *addr; size_t len2 = *addr ? strlen(old) + 1 : 0; alloc -= len1 + len2; @@ -126,7 +126,16 @@ static void __init place_string(u32 *addr, const char *s) memcpy(alloc + len1, old, len2); } } - *addr = (long)alloc; + *addr = alloc; +} + +static void __init place_string_u32(u32 *addr, const char *s) +{ + char *s_new = (char *)(long)*addr; + + place_string_char(&s_new, s); + + *addr = (long)s_new; } static void __init efi_arch_process_memory_map(EFI_SYSTEM_TABLE *SystemTable, @@ -192,7 +201,7 @@ static void __init efi_arch_process_memory_map(EFI_SYSTEM_TABLE *SystemTable, static void *__init efi_arch_allocate_mmap_buffer(UINTN map_size) { - place_string(&mbi.mem_upper, NULL); + place_string_u32(&mbi.mem_upper, NULL); mbi.mem_upper -= map_size; mbi.mem_upper &= -__alignof__(EFI_MEMORY_DESCRIPTOR); if ( mbi.mem_upper < xen_phys_start ) @@ -280,10 +289,10 @@ static void __init efi_arch_handle_cmdline(CHAR16 *image_name, { name.w = cmdline_options; w2s(&name); - place_string(&mbi.cmdline, name.s); + place_string_u32(&mbi.cmdline, name.s); } if ( cfgfile_options ) - place_string(&mbi.cmdline, cfgfile_options); + place_string_u32(&mbi.cmdline, cfgfile_options); /* Insert image name last, as it gets prefixed to the other options. */ if ( image_name ) { @@ -292,7 +301,7 @@ static void __init efi_arch_handle_cmdline(CHAR16 *image_name, } else name.s = "xen"; - place_string(&mbi.cmdline, name.s); + place_string_u32(&mbi.cmdline, name.s); if ( mbi.cmdline ) mbi.flags |= MBI_CMDLINE; @@ -587,12 +596,12 @@ 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() prepends strings and adds separating + * separating them. place_string_u32() prepends strings and adds separating * spaces, so the call order is reversed. */ if ( options ) - place_string(&mb_modules[mbi.mods_count].string, options); - place_string(&mb_modules[mbi.mods_count].string, local_name.s); + 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; -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |