[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen stable-4.4] EFI/early: add /mapbs to map EfiBootServices{Code, Data}



commit 1f29e20506ca0a385aa3ddb70a0fb2e8b423793d
Author:     Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
AuthorDate: Thu Jun 18 09:37:41 2015 +0200
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Thu Jun 18 09:37:41 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/boot.c |   30 +++++++++++++++++++++++-------
 1 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/xen/arch/x86/efi/boot.c b/xen/arch/x86/efi/boot.c
index 8026d95..7c50e80 100644
--- a/xen/arch/x86/efi/boot.c
+++ b/xen/arch/x86/efi/boot.c
@@ -65,6 +65,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;
@@ -840,6 +841,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 )
@@ -849,6 +852,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);
@@ -1417,12 +1421,16 @@ efi_start(EFI_HANDLE ImageHandle, 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 &&
@@ -1584,7 +1592,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;
@@ -1597,7 +1606,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;
@@ -1683,7 +1696,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.4

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.