[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 8/27/2015 4:40 PM, Malcolm Crossley wrote: 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.htmlThere 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. Okay, I got what you mean.Instead, could you insert iommu_{map,unmap_page() into {set,clear}_identity_p2m_entry()? I think this can make {set,clear}_identity_p2m_entry approachable in all circumstances. Kevin and Jan, Is this fine? Thanks Tiejun 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. MalcolmThanks 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 ( (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 |