ia64/xen-unstable
changeset 18089:59d4d71420d1
[IA64] kexec: Add identity mapping of EFI memory to alt_dtlb_miss
Cc: Isaku Yamahata <yamahata@valinux.co.jp>
Cc: Tristan Gingold <tgingold@free.fr>
Cc: Alex Williamson <alex.williamson@hp.com>
Cc: Aron Griffis <aron@hp.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
Cc: Isaku Yamahata <yamahata@valinux.co.jp>
Cc: Tristan Gingold <tgingold@free.fr>
Cc: Alex Williamson <alex.williamson@hp.com>
Cc: Aron Griffis <aron@hp.com>
Signed-off-by: Simon Horman <horms@verge.net.au>
author | Isaku Yamahata <yamahata@valinux.co.jp> |
---|---|
date | Tue Jul 22 12:15:02 2008 +0900 (2008-07-22) |
parents | 91332bc4abd4 |
children | 1e5d42cf61ec |
files | xen/arch/ia64/xen/ivt.S |
line diff
1.1 --- a/xen/arch/ia64/xen/ivt.S Tue Jul 22 12:15:02 2008 +0900 1.2 +++ b/xen/arch/ia64/xen/ivt.S Tue Jul 22 12:15:02 2008 +0900 1.3 @@ -207,17 +207,37 @@ late_alt_dtlb_miss: 1.4 (p8) br.cond.sptk frametable_miss ;; 1.5 #endif 1.6 // If it is not a Xen address, handle it via page_fault. 1.7 + // !( ((r22 == 0x18 || r22 == 0x1c) && rr7 == XEN_EFI_RR) || 1.8 + // r22 == 0x1e ) 1.9 + // Note that rr7 == XEN_EFI_RR implies rr6 == XEN_EFI_RR 1.10 extr.u r22=r16,59,5 1.11 ;; 1.12 dep r20=0,r20,IA64_ITIR_KEY,IA64_ITIR_KEY_LEN // clear the key 1.13 - cmp.ne p8,p0=0x1e,r22 1.14 -(p8) br.cond.sptk page_fault 1.15 + movl r23=7 << 61 1.16 + ;; 1.17 + mov r23=rr[r23] 1.18 + ;; 1.19 + mov r25=XEN_EFI_RR 1.20 + cmp.eq p8,p0=0x18,r22 // 0xc... 1.21 ;; 1.22 + cmp.eq.or p8,p0=0x1c,r22 // 0xe... 1.23 + ;; 1.24 + cmp.eq.and p8,p0=r25,r23 // rr7 == XEN_EFI_RR 1.25 + ;; 1.26 + cmp.eq.or p8,p0=0x1e,r22 // 0xf... 1.27 +(p8) br.cond.spnt alt_dtlb_miss_identity_map 1.28 + br.cond.spnt page_fault 1.29 + ;; 1.30 +alt_dtlb_miss_identity_map: 1.31 dep r21=-1,r21,IA64_PSR_ED_BIT,1 1.32 or r19=r19,r17 // insert PTE control bits into r19 1.33 mov cr.itir=r20 // set itir with cleared key 1.34 ;; 1.35 - dep r19=r18,r19,4,1 // set bit 4 (uncached) if access to UC area 1.36 + cmp.ne p8,p0=r0,r18 // Xen UC bit set 1.37 + ;; 1.38 + cmp.eq.or p8,p0=0x18,r22 // Region 6 is UC for EFI 1.39 + ;; 1.40 +(p8) dep r19=-1,r19,4,1 // set bit 4 (uncached) if access to UC area 1.41 (p6) mov cr.ipsr=r21 1.42 ;; 1.43 (p7) itc.d r19 // insert the TLB entry