Set page size identity mapping of EFI in alt_itlb_miss
This will also set the page size for identity mapped EFI memory
handled by itlb_miss, as it branches to alt_itlb_miss.
Without this HP rx3600 machines will hang after freeing
init memory.
It is also possible to implement this change in itlb_miss,
but the more comprehensive approach seems beeter to me.
Cc: Isaku Yamahata <yamahata@xxxxxxxxxxxxx>
Cc: Tristan Gingold <tgingold@xxxxxxx>
Signed-off-by: Simon Horman <horms@xxxxxxxxxxxx>
Index: xen-unstable.hg/xen/arch/ia64/xen/ivt.S
===================================================================
--- xen-unstable.hg.orig/xen/arch/ia64/xen/ivt.S 2008-02-05
16:18:56.000000000 +0900
+++ xen-unstable.hg/xen/arch/ia64/xen/ivt.S 2008-02-05 16:18:57.000000000
+0900
@@ -194,14 +194,16 @@ late_alt_itlb_miss:
(p7) movl r17=(__DIRTY_BITS | _PAGE_AR_RWX)
movl r19=(((1 << IA64_MAX_PHYS_BITS) - 1) & ~0xfff)
;;
- mov r20=cr.itir
+ movl r20=(PAGE_SHIFT << 2)
extr.u r23=r21,IA64_PSR_CPL0_BIT,2 // extract psr.cpl
and r19=r19,r16 // clear ed, reserved bits, and PTE ctrl bits
extr.u r18=r16,XEN_VIRT_UC_BIT,1 // extract UC bit
;;
cmp.ne p8,p0=r0,r23 // psr.cpl != 0?
or r19=r17,r19 // insert PTE control bits into r19
- dep r20=0,r20,IA64_ITIR_KEY,IA64_ITIR_KEY_LEN // clear the key
+ ;;
+(p6) movl r20=(IA64_GRANULE_SHIFT << 2)
+(p7) movl r20=(IA64_GRANULE_SHIFT << 2)
;;
dep r19=r18,r19,4,1 // set bit 4 (uncached) if access to UC area.
mov cr.itir=r20 // set itir with cleared key
--
--
Horms
_______________________________________________
Xen-ia64-devel mailing list
Xen-ia64-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-ia64-devel
|