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: 20071119-ia64/xen/arch/ia64/xen/ivt.S
===================================================================
--- 20071119-ia64.orig/xen/arch/ia64/xen/ivt.S 2007-11-25 22:56:35.000000000
-0700
+++ 20071119-ia64/xen/arch/ia64/xen/ivt.S 2007-11-25 22:56:59.000000000
-0700
@@ -194,14 +194,16 @@
(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
|