|
[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 |