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

[Xen-ia64-devel] [patch 1/3] Dont use dummy set_virtual_address_map



Instead of relying on purgatory to set up a dummy
set_virtual_address_map(), which requires purgatory
to know how to do __va() opperations, just test to see
if efi has already been mapped at boot time.

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

Index: kexec-tools-unstable/purgatory/arch/ia64/entry.S
===================================================================
--- kexec-tools-unstable.orig/purgatory/arch/ia64/entry.S       2007-05-09 
19:25:45.000000000 +0900
+++ kexec-tools-unstable/purgatory/arch/ia64/entry.S    2007-05-15 
17:55:32.000000000 +0900
@@ -21,16 +21,6 @@
 .size  name, 8;        \
 name:  data8 0x0
 
-.global __dummy_efi_function
-.align  32
-.proc  __dummy_efi_function
-__dummy_efi_function:
-       mov r8=r0;;
-       br.ret.sptk.many rp;;
-.global __dummy_efi_function_end
-__dummy_efi_function_end:
-.endp  __dummy_efi_function
-
 .global purgatory_start
 .align  32
 .proc   purgatory_start
Index: kexec-tools-unstable/purgatory/arch/ia64/purgatory-ia64.c
===================================================================
--- kexec-tools-unstable.orig/purgatory/arch/ia64/purgatory-ia64.c      
2007-05-09 19:25:45.000000000 +0900
+++ kexec-tools-unstable/purgatory/arch/ia64/purgatory-ia64.c   2007-05-15 
17:58:24.000000000 +0900
@@ -21,8 +21,6 @@
 #include <string.h>
 #include "purgatory-ia64.h"
 
-#define PAGE_OFFSET             0xe000000000000000UL
-
 #define EFI_PAGE_SHIFT          12
 #define EFI_PAGE_SIZE          (1UL<<EFI_PAGE_SHIFT)
 #define EFI_PAGE_ALIGN(x)      ((x + EFI_PAGE_SIZE - 1)&~(EFI_PAGE_SIZE-1))
@@ -145,11 +143,6 @@ setup_arch(void)
        reset_vga();
 }
 
-inline unsigned long PA(unsigned long addr)
-{
-       return addr - PAGE_OFFSET;
-}
-
 void
 patch_efi_memmap(struct kexec_boot_params *params,
                struct ia64_boot_param *boot_param)
@@ -229,9 +222,6 @@ flush_icache_range(char *start, unsigned
        asm volatile ("srlz.i":::"memory");
 }
 
-extern char __dummy_efi_function[], __dummy_efi_function_end[];
-
-
 void
 ia64_env_setup(struct ia64_boot_param *boot_param,
        struct kexec_boot_params *params)
@@ -245,32 +235,7 @@ ia64_env_setup(struct ia64_boot_param *b
        struct ia64_boot_param *new_boot_param =
        (struct ia64_boot_param *) params->boot_param_base;
        memcpy(new_boot_param, boot_param, 4096);
-
-       /*
-        * patch efi_runtime->set_virtual_address_map to a dummy function
-        *
-        * The EFI specification mandates that set_virtual_address_map only
-        * takes effect the first time that it is called, and that
-        * subsequent calls will return error.  By replacing it with a
-        * dummy function the new OS can think it is calling it again
-        * without either the OS or any buggy EFI implementations getting
-        * upset.
-        *
-        * Note: as the EFI specification says that set_virtual_address_map
-        * will only take affect the first time it is called, the mapping
-        * can't be updated, and thus mapping of the old and new OS really
-        * needs to be the same.
-        */
-       len = __dummy_efi_function_end - __dummy_efi_function;
-       memcpy(command_line + command_line_len,
-               __dummy_efi_function, len);
-       systab = (efi_system_table_t *)new_boot_param->efi_systab;
-       runtime = (efi_runtime_services_t *)PA(systab->runtime);
-       set_virtual_address_map =
-               (unsigned long *)PA(runtime->set_virtual_address_map);
-       *(set_virtual_address_map) =
-               (unsigned long)(command_line + command_line_len);
-       flush_icache_range(command_line + command_line_len, len);
+       //XXX: 4096 -> params->efi_memmap_size ?
 
        patch_efi_memmap(params, new_boot_param);
 

-- 

-- 
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®.