[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH] Revert "x86/hvm: simplify 'mmio_direct' check in epte_get_entry_emt()"
> -----Original Message----- > From: Roger Pau Monne <roger.pau@xxxxxxxxxx> > Sent: 07 September 2020 18:09 > To: xen-devel@xxxxxxxxxxxxxxxxxxxx > Cc: Roger Pau Monne <roger.pau@xxxxxxxxxx>; Jan Beulich <jbeulich@xxxxxxxx>; > Andrew Cooper > <andrew.cooper3@xxxxxxxxxx>; Wei Liu <wl@xxxxxxx>; Paul Durrant <paul@xxxxxxx> > Subject: [PATCH] Revert "x86/hvm: simplify 'mmio_direct' check in > epte_get_entry_emt()" > > This reverts commit 81fd0d3ca4b2cd309403c6e8da662c325dd35750. > > Original commit only takes into account the APIC access page being a > 'special' page, but when running a PVH dom0 there are other pages that > also fulfill the 'special' page check but shouldn't have it's cache > type set to WB. > > For example the ACPI regions are identity mapped into the guest but > are also Xen heap pages, and forcing those to WB cache type is wrong. I don't understand why reversion of this patch alone is sufficient then... > > I've discovered this while trying to boot a PVH dom0, which fail to > boot with this commit applied. > > Revert the commit while this is sorted out: either we settle that the > current code is correct, or we modify the way ACPI regions are mapped > into a PVH dom0. > > Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> > --- > Cc: Paul Durrant <paul@xxxxxxx> > --- > xen/arch/x86/hvm/mtrr.c | 15 +++++++++++---- > 1 file changed, 11 insertions(+), 4 deletions(-) > > diff --git a/xen/arch/x86/hvm/mtrr.c b/xen/arch/x86/hvm/mtrr.c > index fb051d59c3..2bd64e8025 100644 > --- a/xen/arch/x86/hvm/mtrr.c > +++ b/xen/arch/x86/hvm/mtrr.c > @@ -815,13 +815,23 @@ int epte_get_entry_emt(struct domain *d, unsigned long > gfn, mfn_t mfn, > return -1; > } > > + if ( direct_mmio ) > + { > + if ( (mfn_x(mfn) ^ mfn_x(d->arch.hvm.vmx.apic_access_mfn)) >> order ) > + return MTRR_TYPE_UNCACHABLE; > + if ( order ) > + return -1; > + *ipat = 1; > + return MTRR_TYPE_WRBACK; > + } > + > if ( !mfn_valid(mfn) ) > { > *ipat = 1; > return MTRR_TYPE_UNCACHABLE; > } > > - if ( !direct_mmio && !is_iommu_enabled(d) && !cache_flush_permitted(d) ) > + if ( !is_iommu_enabled(d) && !cache_flush_permitted(d) ) > { > *ipat = 1; > return MTRR_TYPE_WRBACK; ... since just below this hunk, commit ca24b2ffdbd9 "x86/hvm: set 'ipat' in EPT for special pages" introduced the check: + for ( i = 0; i < (1ul << order); i++ ) + { + if ( is_special_page(mfn_to_page(mfn_add(mfn, i))) ) + { + if ( order ) + return -1; + *ipat = 1; + return MTRR_TYPE_WRBACK; + } + } + So, would that not be catching the ACPI regions? Also, why is it ok for ACPI regions to be WB if the IOMMU is not enabled? I know that this will never be the case for PVH dom0 but why do domUs also have to suffer? I think we need a more targeted patch. Paul > @@ -838,9 +848,6 @@ int epte_get_entry_emt(struct domain *d, unsigned long > gfn, mfn_t mfn, > } > } > > - if ( direct_mmio ) > - return MTRR_TYPE_UNCACHABLE; > - > gmtrr_mtype = hvm_get_mem_pinned_cacheattr(d, _gfn(gfn), order); > if ( gmtrr_mtype >= 0 ) > { > -- > 2.28.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |