[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [BUG] After upgrade to Xen 4.12.0 iommu=no-igfx



On Tue, Jul 23, 2019 at 10:32:26AM -0700, Roman Shaposhnik wrote:
> Hi Roger!
> 
> I applied your patch, removed no-igfx and I still see the original
> problem. Please let me know what other logs/debugs would you need at
> this point.

I'm not sure why you don't get the rmrrs added to the iommu page
tables, AFAICT it works on my test box.

I have a patch with extra debug messages and checks, could you give it
a test, I'm attaching it below. Note that you don't need the previous
patch, since it's already contained in the debug patch below.

Please paste the Xen bootlog with the patch applied when your reply.

Thank, Roger.
---8<---
diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c
index fef97c82f6..3605614aaf 100644
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -1341,7 +1341,7 @@ int set_identity_p2m_entry(struct domain *d, unsigned 
long gfn_l,
 
     if ( !paging_mode_translate(p2m->domain) )
     {
-        if ( !need_iommu_pt_sync(d) )
+        if ( !has_iommu_pt(d) )
             return 0;
         return iommu_legacy_map(d, _dfn(gfn_l), _mfn(gfn_l), PAGE_ORDER_4K,
                                 IOMMUF_readable | IOMMUF_writable);
@@ -1432,7 +1432,7 @@ int clear_identity_p2m_entry(struct domain *d, unsigned 
long gfn_l)
 
     if ( !paging_mode_translate(d) )
     {
-        if ( !need_iommu_pt_sync(d) )
+        if ( !has_iommu_pt(d) )
             return 0;
         return iommu_legacy_unmap(d, _dfn(gfn_l), PAGE_ORDER_4K);
     }
diff --git a/xen/drivers/passthrough/vtd/iommu.c 
b/xen/drivers/passthrough/vtd/iommu.c
index 8b27d7e775..ea303b5d45 100644
--- a/xen/drivers/passthrough/vtd/iommu.c
+++ b/xen/drivers/passthrough/vtd/iommu.c
@@ -2009,12 +2009,19 @@ static int rmrr_identity_mapping(struct domain *d, 
bool_t map,
     if ( !map )
         return -ENOENT;
 
+printk("<RMRR> mapping %#lx - %#lx\n", base_pfn, end_pfn);
     while ( base_pfn < end_pfn )
     {
         int err = set_identity_p2m_entry(d, base_pfn, p2m_access_rw, flag);
+        mfn_t mfn;
+        unsigned int f;
 
         if ( err )
             return err;
+BUG_ON(intel_iommu_lookup_page(d, _dfn(base_pfn), &mfn, &f));
+BUG_ON(base_pfn != mfn_x(mfn));
+BUG_ON(f != (IOMMUF_readable | IOMMUF_writable));
+
         base_pfn++;
     }
 
@@ -2263,6 +2270,7 @@ static void __hwdom_init setup_hwdom_rmrr(struct domain 
*d)
     u16 bdf;
     int ret, i;
 
+printk("<RMRR> setting up regions\n");
     pcidevs_lock();
     for_each_rmrr_device ( rmrr, bdf, i )
     {


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.