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

[Xen-devel] x86: Fix ept and vt-d co-existence issue.


  • To: "Xen-Devel (E-mail)" <xen-devel@xxxxxxxxxxxxxxxxxxx>, Keir Fraser <Keir.Fraser@xxxxxxxxxxxxx>
  • From: "Zhang, Xiantao" <xiantao.zhang@xxxxxxxxx>
  • Date: Thu, 15 Oct 2009 19:49:47 +0800
  • Accept-language: en-US
  • Acceptlanguage: en-US
  • Cc:
  • Delivery-date: Thu, 15 Oct 2009 04:50:23 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: AcpNjZgKettAKmv+QAyzZzigp4iO5A==
  • Thread-topic: x86: Fix ept and vt-d co-existence issue.

x86: Fix ept and vt-d co-existence issue. 
 
For vt-d's mmio address ranges, once ept enables, they should
be added to ept page tables with p2m lock held, and then guest can 
access these ranges like conventional ram, but to change the ept entries
, it should take the p2m lock first.
 
Signed-off-by: Xiantao Zhang <xiantao.zhang@xxxxxxxxx>
 
diff -r 18758847bf31 xen/arch/x86/mm/hap/p2m-ept.c
--- a/xen/arch/x86/mm/hap/p2m-ept.c Wed Oct 14 09:09:23 2009 +0100
+++ b/xen/arch/x86/mm/hap/p2m-ept.c Thu Oct 15 19:25:42 2009 +0800
@@ -524,6 +524,7 @@ void ept_change_entry_emt_with_range(str
     mfn_t mfn;
     int order = 0;
 
+    p2m_lock(d->arch.p2m);
     for ( gfn = start_gfn; gfn <= end_gfn; gfn++ )
     {
         e = ept_get_entry_content(d, gfn);
@@ -561,6 +562,7 @@ void ept_change_entry_emt_with_range(str
                 ept_set_entry(d, gfn, mfn, order, e.avail1);
         }
     }
+    p2m_unlock(d->arch.p2m);
 }
 
 /* 
diff -r 18758847bf31 xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c Wed Oct 14 09:09:23 2009 +0100
+++ b/xen/arch/x86/mm/p2m.c Thu Oct 15 17:42:40 2009 +0800
@@ -2237,7 +2237,9 @@ set_mmio_p2m_entry(struct domain *d, uns
     }
 
     P2M_DEBUG("set mmio %lx %lx\n", gfn, mfn_x(mfn));
+    p2m_lock(d->arch.p2m);
     rc = set_p2m_entry(d, gfn, mfn, 0, p2m_mmio_direct);
+    p2m_unlock(d->arch.p2m);
     if ( 0 == rc )
         gdprintk(XENLOG_ERR,
             "set_mmio_p2m_entry: set_p2m_entry failed! mfn=%08lx\n",
@@ -2261,7 +2263,9 @@ clear_mmio_p2m_entry(struct domain *d, u
             "clear_mmio_p2m_entry: gfn_to_mfn failed! gfn=%08lx\n", gfn);
         return 0;
     }
+    p2m_lock(d->arch.p2m);
     rc = set_p2m_entry(d, gfn, _mfn(INVALID_MFN), 0, 0);
+    p2m_unlock(d->arch.p2m);
 
     return rc;
 }

Attachment: change-ept-with-p2m-lock-held-for-vtd-mmio.patch
Description: change-ept-with-p2m-lock-held-for-vtd-mmio.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

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