ia64/xen-unstable

changeset 18090:1e5d42cf61ec

[IA64] kexec: Handle EFI UC area correctly in vmx_alt_dtlb

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Acked-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 59d4d71420d1
children 18a933a52874
files xen/arch/ia64/vmx/vmx_ivt.S
line diff
     1.1 --- a/xen/arch/ia64/vmx/vmx_ivt.S	Tue Jul 22 12:15:02 2008 +0900
     1.2 +++ b/xen/arch/ia64/vmx/vmx_ivt.S	Tue Jul 22 12:15:02 2008 +0900
     1.3 @@ -365,16 +365,22 @@ vmx_alt_dtlb_miss_vmm:
     1.4      ;;
     1.5      and r22=IA64_ISR_CODE_MASK,r20		// get the isr.code field
     1.6      tbit.nz p6,p7=r20,IA64_ISR_SP_BIT		// is speculation bit on?
     1.7 -    extr.u r18=r16,XEN_VIRT_UC_BIT, 1		// extract UC bit
     1.8 +    tbit.nz p8,p0=r16,XEN_VIRT_UC_BIT		// is Xen UC region?
     1.9 +    extr.u r23=r16,59,5				// iva fault address
    1.10 +						// 0xc0000000_00000000 >> 59 = 0x18 EFI UC address
    1.11 +						// 0xe0000000_00000000 >> 59 = 0x1c EFI address
    1.12 +
    1.13      and r19=r19,r16				// clear ed, reserved bits, and PTE control bits
    1.14      tbit.nz p9,p0=r20,IA64_ISR_NA_BIT		// is non-access bit on?
    1.15      ;;
    1.16 +    cmp.eq.or p8,p0=0x18,r23			// Region 6 is UC for EFI
    1.17  (p9)cmp.eq.or.andcm p6,p7=IA64_ISR_CODE_LFETCH,r22	// check isr.code field
    1.18      dep r24=-1,r24,IA64_PSR_ED_BIT,1
    1.19      or r19=r19,r17				// insert PTE control bits into r19
    1.20      mov r20=IA64_GRANULE_SHIFT<<2
    1.21      ;;
    1.22 -    dep r19=r18,r19,4,1	// set bit 4 (uncached) if the access was to UC region
    1.23 +(p8)dep r19=-1,r19,4,1				// set bit 4 (uncached) if access to UC area
    1.24 +
    1.25  (p6)mov cr.ipsr=r24
    1.26      mov cr.itir=r20
    1.27      ;;