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

[Xen-ia64-devel] [rfc 12/15] Kexec: map EFI after paging is initilaised



If the EFI region is mapped into a region within the address space usually
used by guests, then the mapping can't be made until paging is fully
initialised.  A description of why this mapping is made is included in the
patch that makes the mapping.

This is in preparation for a patch that will move the
run-time EFI regions into such a space.

It assumes that patches to allow SAL calls to run in physical
mode have been applied.

Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>

Index: xen-unstable.hg/xen/arch/ia64/linux-xen/efi.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/linux-xen/efi.c  2007-08-07 
10:03:55.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/linux-xen/efi.c       2007-08-07 
11:11:16.000000000 +0900
@@ -484,9 +484,6 @@ efi_init (void)
        efi_char16_t *c16;
        u64 efi_desc_size;
        char *cp, vendor[100] = "unknown";
-#ifdef XEN
-       int phys_efi = 0;
-#endif
        int i;
 
        /* it's too early to be able to use the standard kernel command line 
support... */
@@ -502,11 +499,6 @@ efi_init (void)
                        max_addr = GRANULEROUNDDOWN(memparse(cp + 9, &cp));
                } else if (memcmp(cp, "min_addr=", 9) == 0) {
                        min_addr = GRANULEROUNDDOWN(memparse(cp + 9, &cp));
-#ifdef XEN
-               } else if (memcmp(cp, "phys_efi", 8) == 0) {
-                       phys_efi = 1;
-                       cp+=8;
-#endif
                } else {
                        while (*cp != ' ' && *cp)
                                ++cp;
@@ -640,10 +632,20 @@ efi_init (void)
 #ifndef XEN
        efi_enter_virtual_mode();
 #else
+}
+
+static unsigned int __initdata phys_efi = 0;
+integer_param("phys_efi", phys_efi); 
+
+void __init
+late_efi_init (void)
+{
        if (phys_efi)
                printk("Forcing EFI to stay in physical mode\n");
-       else
+       else {
+               printk("Puting EFI into virtual mode\n");
                efi_enter_virtual_mode();
+       }
 #endif
 }
 
Index: xen-unstable.hg/xen/arch/ia64/linux-xen/setup.c
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/linux-xen/setup.c        2007-08-07 
10:03:54.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/linux-xen/setup.c     2007-08-07 
10:03:55.000000000 +0900
@@ -594,6 +594,9 @@ late_setup_arch (char **cmdline_p)
 #endif
 
        cpu_init();     /* initialize the bootstrap CPU */
+#ifdef XEN
+       late_efi_init();
+#endif
 
 #ifdef CONFIG_ACPI_BOOT
        acpi_boot_init();
Index: xen-unstable.hg/xen/include/asm-ia64/linux-xen/linux/efi.h
===================================================================
--- xen-unstable.hg.orig/xen/include/asm-ia64/linux-xen/linux/efi.h     
2007-08-07 10:03:54.000000000 +0900
+++ xen-unstable.hg/xen/include/asm-ia64/linux-xen/linux/efi.h  2007-08-07 
10:03:55.000000000 +0900
@@ -310,6 +310,7 @@ efi_guid_unparse(efi_guid_t *guid, char 
 }
 
 extern void efi_init (void);
+extern void late_efi_init (void);
 extern void *efi_get_pal_addr (void);
 extern void efi_map_pal_code (void);
 extern void efi_map_memmap(void);

-- 

-- 
Horms
  H: http://www.vergenet.net/~horms/
  W: http://www.valinux.co.jp/en/


_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel


 


Rackspace

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