[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH for 4.6] VT-d: Create IOMMU mappings for RMRR regions if shared EPT is not being used
On 27/08/15 03:59, Chen, Tiejun wrote: > This kind of issue is already gone. > > https://www.mail-archive.com/xen-devel@xxxxxxxxxxxxx/msg32464.html There is a bug in the code you refer to above which results in no IOMMU page table mappings being created if the guest domain is not sharing it's EPT page tables with the IOMMU. set_identity_p2m_entry only configures the EPT page tables and does not configure the IOMMU page tables. We had a real world regression (with xen 4.6-rc1) on a Intel Haswell system with integrated graphics. The patch below resolves the regression. Malcolm > > Thanks > Tiejun > > On 8/26/2015 11:49 PM, Malcolm Crossley wrote: >> Add RMRR 1:1 IOMMU mappings to IOMMU page tables if EPT page table are not >> being >> shared with the IOMMU. >> >> This is a regression in behaviour versus Xen 4.5. >> >> Signed-off-by: Malcolm Crossley <malcolm.crossley@xxxxxxxxxx> >> --- >> xen/drivers/passthrough/vtd/iommu.c | 23 ++++++++++++++++++++--- >> 1 file changed, 20 insertions(+), 3 deletions(-) >> >> diff --git a/xen/drivers/passthrough/vtd/iommu.c >> b/xen/drivers/passthrough/vtd/iommu.c >> index 836aed5..89de741 100644 >> --- a/xen/drivers/passthrough/vtd/iommu.c >> +++ b/xen/drivers/passthrough/vtd/iommu.c >> @@ -1839,8 +1839,16 @@ static int rmrr_identity_mapping(struct domain *d, >> bool_t map, >> >> while ( base_pfn < end_pfn ) >> { >> - if ( clear_identity_p2m_entry(d, base_pfn) ) >> - ret = -ENXIO; >> + if ( iommu_use_hap_pt(d) ) >> + { >> + if ( clear_identity_p2m_entry(d, base_pfn) ) >> + ret = -ENXIO; >> + } >> + else >> + { >> + if ( intel_iommu_unmap_page(d, base_pfn) ) >> + ret = -ENXIO; >> + } >> base_pfn++; >> } >> >> @@ -1855,7 +1863,16 @@ static int rmrr_identity_mapping(struct domain *d, >> bool_t map, >> >> while ( base_pfn < end_pfn ) >> { >> - int err = set_identity_p2m_entry(d, base_pfn, p2m_access_rw, flag); >> + int err; >> + if ( iommu_use_hap_pt(d) ) >> + { >> + err = set_identity_p2m_entry(d, base_pfn, p2m_access_rw, flag); >> + } >> + else >> + { >> + err = intel_iommu_map_page(d, base_pfn, base_pfn, >> + IOMMUF_readable|IOMMUF_writable); >> + } >> >> if ( err ) >> return err; >> _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |