x86/EPT: consider page order when checking for APIC MFN This was overlooked in 3d90d6e6 ("x86/EPT: split super pages upon mismatching memory types"). Signed-off-by: Jan Beulich --- a/xen/arch/x86/hvm/mtrr.c +++ b/xen/arch/x86/hvm/mtrr.c @@ -816,15 +816,18 @@ int epte_get_entry_emt(struct domain *d, !has_arch_pdevs(d)) ) { ASSERT(!direct_mmio || - mfn_x(mfn) == d->arch.hvm_domain.vmx.apic_access_mfn); + !((mfn_x(mfn) ^ d->arch.hvm_domain.vmx.apic_access_mfn) >> + order)); *ipat = 1; return MTRR_TYPE_WRBACK; } if ( direct_mmio ) { - if ( mfn_x(mfn) != d->arch.hvm_domain.vmx.apic_access_mfn ) + if ( (mfn_x(mfn) ^ d->arch.hvm_domain.vmx.apic_access_mfn) >> order ) return MTRR_TYPE_UNCACHABLE; + if ( order ) + return -1; *ipat = 1; return MTRR_TYPE_WRBACK; }