Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12:Update
xen
58cf9260-x86-EFI-avoid-Xen-when-looking-for-mod...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 58cf9260-x86-EFI-avoid-Xen-when-looking-for-mod-kexec-pos.patch of Package xen
References: bsc#1014136 # Commit e22e1c47958a4778cd7baa3980f74e52f525ba28 # Date 2017-03-20 09:27:12 +0100 # Author Jan Beulich <jbeulich@suse.com> # Committer Jan Beulich <jbeulich@suse.com> x86/EFI: avoid Xen image when looking for module/kexec position When booting straight from EFI, we don't further try to relocate Xen. As a result, so far we also didn't avoid the area Xen uses when looking for a location to put modules or the kexec area. Introduce a fake module slot to deal with that without having to fiddle with a lot of code. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com> --- a/xen/arch/x86/efi/boot.c +++ b/xen/arch/x86/efi/boot.c @@ -79,7 +79,11 @@ static struct file __initdata xsm; static multiboot_info_t __initdata mbi = { .flags = MBI_MODULES | MBI_LOADERNAME }; -static module_t __initdata mb_modules[4]; +/* + * The array size needs to be one larger than the number of modules we + * support - see __start_xen(). + */ +static module_t __initdata mb_modules[5]; static CHAR16 __initdata newline[] = L"\r\n"; --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -786,6 +786,17 @@ void __init __start_xen(unsigned long mb mod[i].reserved = 0; } + if ( efi_enabled ) + { + /* + * This needs to remain in sync with xen_in_range() and the + * respective reserve_e820_ram() invocation below. + */ + mod[mbi->mods_count].mod_start = PFN_DOWN(mbi->mem_upper); + mod[mbi->mods_count].mod_end = __pa(_end) - + (mbi->mem_upper & PAGE_MASK); + } + modules_headroom = bzimage_headroom(bootstrap_map(mod), mod->mod_end); bootstrap_map(NULL); @@ -923,8 +934,9 @@ void __init __start_xen(unsigned long mb if ( mod[j].reserved ) continue; - /* Don't overlap with other modules. */ - end = consider_modules(s, e, size, mod, mbi->mods_count, j); + /* Don't overlap with other modules (or Xen itself). */ + end = consider_modules(s, e, size, mod, + mbi->mods_count + efi_enabled, j); if ( highmem_start && end > highmem_start ) continue; @@ -948,9 +960,9 @@ void __init __start_xen(unsigned long mb */ while ( !kexec_crash_area.start ) { - /* Don't overlap with modules. */ - e = consider_modules(s, e, PAGE_ALIGN(kexec_crash_area.size), - mod, mbi->mods_count, -1); + /* Don't overlap with modules (or Xen itself). */ + e = consider_modules(s, e, PAGE_ALIGN(kexec_crash_area.size), mod, + mbi->mods_count + efi_enabled, -1); if ( s >= e ) break; if ( e > kexec_crash_area_limit )
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor