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

Re: [Xen-ia64-devel] [patch 11/12] ia64: kexec: add __va_efi



Hi Simon-san.

efi_map_pal_code() efi_get_pal_addr() and __efi_get_pal_addr()
also seem to need some modification.
Especially __efi_get_pal_addr() should use __va_efi()

On Thu, Mar 20, 2008 at 05:52:59PM +1100, Simon Horman wrote:
> 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
> memory.
> 
> 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
> used.
> 
> 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>
> 
> --- 
> 
> I will post a fresh series of patches shortly - I have to run to a meeting
> soon, but I'm pretty excited about this and wanted to get it out there.
> 
> I have found that the following patches works on HP rx2620, HP 2600
> and Tiger 2.
> 
> * The "ia64: kexec: Map EFI memory in the same location as Linux" series
>   of 15 patches that I posed to xen-ia64-devel on the 4th March.
>   
> http://lists.xensource.com/archives/html/xen-ia64-devel/2008-03/msg00020.html
> 
> * Omit patch 13/15
>   "ia64: kexec: Set page size identity mapping of EFI in alt_itlb_miss"
> 
>   This patch causes problems on machines that it is supposed to
>   fix problems on - obviously I made a mistake when collating fixes.
> 
> * Optionally omit the following patches, as they don't seem to be used,
>   although they don't seem to cause much harm either.
> 
>   09/15 "ia64: kexec: Add identity mapping of EFI memory to dtlb_miss"
>   10/15 "ia64: kexec: identity mapping of EFI memory to itlb_miss"
>   11/15 "ia64: kexec: Set protection key of identity mapping of EFI in
>          alt_dtlb_miss"
>   12/15 "ia64: kexec: Set protection key of identity mapping of EFI in
>          alt_itlb_miss"
> 
> * Add this patch
> 
> Special thanks to Alex Williamson for giving me access to an
> HP rx2620 so that I could debug this problem.
> 
> Index: xen-unstable.hg/xen/arch/ia64/linux-xen/sal.c
> ===================================================================
> --- xen-unstable.hg.orig/xen/arch/ia64/linux-xen/sal.c        2008-03-19 
> 11:52:42.000000000 +0900
> +++ xen-unstable.hg/xen/arch/ia64/linux-xen/sal.c     2008-03-19 
> 11:53:03.000000000 +0900
> @@ -121,8 +121,8 @@ static void __init
>  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
> Index: xen-unstable.hg/xen/include/asm-ia64/xenpage.h
> ===================================================================
> --- xen-unstable.hg.orig/xen/include/asm-ia64/xenpage.h       2008-03-19 
> 11:52:42.000000000 +0900
> +++ xen-unstable.hg/xen/include/asm-ia64/xenpage.h    2008-03-19 
> 11:54:41.000000000 +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;})
>  
> +/* Do __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)  ((unsigned long)(x) | __IA64_EFI_CACHED_OFFSET)
> +#else
> +#define __va_efi(x)  __va(x)
> +#endif
> +
>  #endif
>  #endif /* _ASM_IA64_XENPAGE_H */
> 

-- 
yamahata

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