This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


[Xen-changelog] [xen-unstable] [IA64] kexec: add __va_efi

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] kexec: add __va_efi
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Mon, 11 Aug 2008 05:50:32 -0700
Delivery-date: Mon, 11 Aug 2008 05:51:32 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
# Date 1216696502 -32400
# Node ID 54060aec0dc1cd06202293eceb1615dc7e041c3e
# Parent  fb5cfb8b122e118f9ceca2a9dd93467e8dad3f0e
[IA64] kexec: add __va_efi

sal_desc_entry_point() converts physical addresses into virtual
addresses using __va() and these virtual addresses are used
to register the SAL and PAL handlers - which exist in firmware

As the mapping of firmware memory is being moved from
a PAGE_OFFSET of (0xf << 60) to a PAGE_OFFSET of (0xe << 60),
__va() does not provide the correct virtual address.

By adding __va_efi(), which uses EFI_PAGE_OFFSET=(0xe << 60),
and using this in sal_desc_entry_point(), the correct address is

On an HP rx2600 this eliminates the problem where the SAL rendezvous address
can't be registered and subsequently the boot fails. I suspect it
solves similar problems that have been seen on other HP machines too.

Actually, its rather amazing that the HP rx2620 and Tiger2 that
I have been using work without this fix.

Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
 xen/arch/ia64/linux-xen/sal.c  |    4 ++--
 xen/include/asm-ia64/xenpage.h |    9 +++++++++
 2 files changed, 11 insertions(+), 2 deletions(-)

diff -r fb5cfb8b122e -r 54060aec0dc1 xen/arch/ia64/linux-xen/sal.c
--- a/xen/arch/ia64/linux-xen/sal.c     Tue Jul 22 12:15:02 2008 +0900
+++ b/xen/arch/ia64/linux-xen/sal.c     Tue Jul 22 12:15:02 2008 +0900
@@ -121,8 +121,8 @@ sal_desc_entry_point (void *p)
 sal_desc_entry_point (void *p)
        struct ia64_sal_desc_entry_point *ep = p;
-       ia64_pal_handler_init(__va(ep->pal_proc));
-       ia64_sal_handler_init(__va(ep->sal_proc), __va(ep->gp));
+       ia64_pal_handler_init(__va_efi(ep->pal_proc));
+       ia64_sal_handler_init(__va_efi(ep->sal_proc), __va_efi(ep->gp));
 #ifdef CONFIG_SMP
diff -r fb5cfb8b122e -r 54060aec0dc1 xen/include/asm-ia64/xenpage.h
--- a/xen/include/asm-ia64/xenpage.h    Tue Jul 22 12:15:02 2008 +0900
+++ b/xen/include/asm-ia64/xenpage.h    Tue Jul 22 12:15:02 2008 +0900
@@ -97,5 +97,14 @@ static inline u64 pa_clear_uc(u64 paddr)
 /* It is sometimes very useful to have unsigned long as result.  */
 #define __va_ul(x)     ({xen_va _v; _v.l = (long) (x); _v.f.reg = -1; _v.l;})
+/* __va_efi() should just call __va() until the use of
+ * __IA64_EFI_CACHED_OFFSET is activated in efi_enter_virtual_mode()
+ */
+#if 0
+#define __va_efi(x)    ((void*)((unsigned long)(x) | __IA64_EFI_CACHED_OFFSET))
+#define __va_efi(x)    __va(x)
 #endif /* _ASM_IA64_XENPAGE_H */

Xen-changelog mailing list

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] kexec: add __va_efi, Xen patchbot-unstable <=