|
|
|
|
|
|
|
|
|
|
xen-ia64-devel
[Xen-ia64-devel] [patch 15/15] ia64: kexec: Map EFI regions into the sam
Map EFI regions into the same place they are maped into in Linux
This is because of an unfortunate problem with the way that EFI interacts
with Kexec. The call to map the EFI regions may only be made once. This
means that after Kexec the EFI regions must be mapped into the same region
that they were mapped into prior to Kexec.
This is not usually a problem when kexecing from xen to xen or from linux
to linux, as the mapping will be the same. However when kexecing from xen
to linux or linux to xen, the mapping is different, and the problem
manifests.
So far Magnus Damm and I have come up with three different ideas for
resolving this problem.
1. Leave the EFI in physical mode
- This is nice and simple
- There is a potential performance hit, but PAL calls are not
made very often, so it shouldn't be a problem
- I have patches to do this, some of which are in the
series that accompany this patch.
- The SGI people tell me that it won't work on SN because
it allows the OS to provide EFI (or SAL?) code.
2. Always map EFI into the space that Linux uses
- Not so simple
- Requires Xen to jump through some hoops
- But leaves Linux unmodified
- But it will break if Linux ever changes its mapping
- This patch series implements this change
3. Always map EFI to some agreed space
- Similar to 2. but less likely to break in the future
- But it requires Xen and Linux to agree on a space to be used
- Reqires both Xen and Linux to be modified
Cc: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
Cc: Tristan Gingold <tgingold@xxxxxxx>
Cc: Alex Williamson <alex.williamson@xxxxxx>
Cc: Aron Griffis <aron@xxxxxx>
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 2008-02-07
11:23:29.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/linux-xen/efi.c 2008-02-08
17:40:50.000000000 +0900
@@ -638,6 +638,17 @@ efi_enter_virtual_mode (void)
for (p = efi_map_start; p < efi_map_end; p += efi_desc_size) {
md = p;
+#ifdef XEN
+ if (md->attribute & EFI_MEMORY_RUNTIME) {
+ if (md->attribute & EFI_MEMORY_WB)
+ md->virt_addr = __IA64_EFI_CACHED_OFFSET|
+ md->phys_addr;
+ else if (md->attribute & (EFI_MEMORY_UC|EFI_MEMORY_WC|
+ EFI_MEMORY_WT))
+ md->virt_addr = __IA64_EFI_UNCACHED_OFFSET|
+ md->phys_addr;
+ }
+#else
if (md->attribute & EFI_MEMORY_RUNTIME) {
/*
* Some descriptors have multiple bits set, so the
order of
@@ -670,6 +681,7 @@ efi_enter_virtual_mode (void)
#endif
}
}
+#endif
}
status = efi_call_phys(__va(runtime->set_virtual_address_map),
--
--
Horms
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-ia64-devel] [patch 02/15] ia64: kexec: Unpin shared_info and mapped_regs TR in ia64_do_tlb_purge, (continued)
- [Xen-ia64-devel] [patch 02/15] ia64: kexec: Unpin shared_info and mapped_regs TR in ia64_do_tlb_purge, Simon Horman
- [Xen-ia64-devel] [patch 01/15] ia64: kexec: Unpin the correct VHPT TR in ia64_do_tlb_purge, Simon Horman
- [Xen-ia64-devel] [patch 05/15] ia64: kexec: Define macros for EFI RID, Simon Horman
- [Xen-ia64-devel] [patch 06/15] ia64: kexec: Use a separate RID for EFI, Simon Horman
- [Xen-ia64-devel] [patch 03/15] ia64: kexec: Header changes in preparation for EFI RID, Simon Horman
- [Xen-ia64-devel] [patch 09/15] ia64: kexec: Add identity mapping of EFI memory to dtlb_miss, Simon Horman
- [Xen-ia64-devel] [patch 10/15] ia64: kexec: identity mapping of EFI memory to itlb_miss, Simon Horman
- [Xen-ia64-devel] [patch 08/15] ia64: kexec: Add identity mapping of EFI memory to alt_dtlb_miss, Simon Horman
- [Xen-ia64-devel] [patch 12/15] ia64: kexec: Set protection key of identity mapping of EFI in alt_itlb_miss, Simon Horman
- [Xen-ia64-devel] [patch 07/15] ia64: kexec: Allow EFI_RID to be used in ivt.S, Simon Horman
- [Xen-ia64-devel] [patch 15/15] ia64: kexec: Map EFI regions into the same place they are maped into in Linux,
Simon Horman <=
- [Xen-ia64-devel] [patch 14/15] ia64: kexec: define EFI offsets for identity mapping, Simon Horman
- [Xen-ia64-devel] [patch 13/15] ia64: kexec: Set page size identity mapping of EFI in alt_itlb_miss, Simon Horman
- [Xen-ia64-devel] [patch 04/15] ia64: kexec: Repining for EFI RID, Simon Horman
- [Xen-ia64-devel] [patch 11/15] ia64: kexec: Set protection key of identity mapping of EFI in alt_dtlb_miss, Simon Horman
- [Xen-ia64-devel] Re: [patch 00/15] ia64: kexec: Map EFI memory in the same location as Linux, Alex Williamson
|
|
|
|
|