[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.5] EFI/early: add /mapbs to map EfiBootServices{Code, Data}
commit cbf41e0514389b65f545e1b1cbb290b0dcec3a45 Author: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> AuthorDate: Thu Jun 18 08:55:26 2015 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Jun 18 08:55:26 2015 +0200 EFI/early: add /mapbs to map EfiBootServices{Code,Data} From: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> To help on certain platforms to run. Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> master commit: f36886bdf48ca2968379e3a0aa607044537ecf76 master date: 2015-06-10 12:02:43 +0200 --- xen/arch/x86/efi/efi-boot.h | 12 ++++++++---- xen/common/efi/boot.c | 18 +++++++++++++++--- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h index 9f41793..2dd69f6 100644 --- a/xen/arch/x86/efi/efi-boot.h +++ b/xen/arch/x86/efi/efi-boot.h @@ -148,12 +148,16 @@ static void __init efi_arch_process_memory_map(EFI_SYSTEM_TABLE *SystemTable, switch ( desc->Type ) { - default: - type = E820_RESERVED; - break; - case EfiConventionalMemory: case EfiBootServicesCode: case EfiBootServicesData: + if ( map_bs ) + { + default: + type = E820_RESERVED; + break; + } + /* fall through */ + case EfiConventionalMemory: if ( !trampoline_phys && desc->PhysicalStart + len <= 0x100000 && len >= cfg.size && desc->PhysicalStart + len > cfg.addr ) cfg.addr = (desc->PhysicalStart + len - cfg.size) & PAGE_MASK; diff --git a/xen/common/efi/boot.c b/xen/common/efi/boot.c index d64a647..a8d8715 100644 --- a/xen/common/efi/boot.c +++ b/xen/common/efi/boot.c @@ -82,6 +82,7 @@ static SIMPLE_TEXT_OUTPUT_INTERFACE *__initdata StdOut; static SIMPLE_TEXT_OUTPUT_INTERFACE *__initdata StdErr; static UINT32 __initdata mdesc_ver; +static bool_t __initdata map_bs; static struct file __initdata cfg; static struct file __initdata kernel; @@ -754,6 +755,8 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) { if ( wstrcmp(ptr + 1, L"basevideo") == 0 ) base_video = 1; + else if ( wstrcmp(ptr + 1, L"mapbs") == 0 ) + map_bs = 1; else if ( wstrncmp(ptr + 1, L"cfg=", 4) == 0 ) cfg_file_name = ptr + 5; else if ( i + 1 < argc && wstrcmp(ptr + 1, L"cfg") == 0 ) @@ -763,6 +766,7 @@ efi_start(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable) { PrintStr(L"Xen EFI Loader options:\r\n"); PrintStr(L"-basevideo retain current video mode\r\n"); + PrintStr(L"-mapbs map EfiBootServices{Code,Data}\r\n"); PrintStr(L"-cfg=<file> specify configuration file\r\n"); PrintStr(L"-help, -? display this help\r\n"); blexit(NULL); @@ -1159,7 +1163,8 @@ void __init efi_init_memory(void) } *extra, *extra_head = NULL; #endif - printk(XENLOG_INFO "EFI memory map:\n"); + printk(XENLOG_INFO "EFI memory map:%s\n", + map_bs ? " (mapping BootServices)" : ""); for ( i = 0; i < efi_memmap_size; i += efi_mdesc_size ) { EFI_MEMORY_DESCRIPTOR *desc = efi_memmap + i; @@ -1172,7 +1177,11 @@ void __init efi_init_memory(void) desc->PhysicalStart, desc->PhysicalStart + len - 1, desc->Type, desc->Attribute); - if ( !efi_rs_enable || !(desc->Attribute & EFI_MEMORY_RUNTIME) ) + if ( !efi_rs_enable || + (!(desc->Attribute & EFI_MEMORY_RUNTIME) && + (!map_bs || + (desc->Type != EfiBootServicesCode && + desc->Type != EfiBootServicesData))) ) continue; desc->VirtualStart = INVALID_VIRTUAL_ADDRESS; @@ -1258,7 +1267,10 @@ void __init efi_init_memory(void) { const EFI_MEMORY_DESCRIPTOR *desc = efi_memmap + i; - if ( (desc->Attribute & EFI_MEMORY_RUNTIME) && + if ( ((desc->Attribute & EFI_MEMORY_RUNTIME) || + (map_bs && + (desc->Type == EfiBootServicesCode || + desc->Type == EfiBootServicesData))) && desc->VirtualStart != INVALID_VIRTUAL_ADDRESS && desc->VirtualStart != desc->PhysicalStart ) copy_mapping(PFN_DOWN(desc->PhysicalStart), -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.5 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |