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

[Xen-changelog] [xen-unstable] x86/mm: Add p2m_lock in set_shared_p2m_entry



# HG changeset patch
# User Tim Deegan <Tim.Deegan@xxxxxxxxxx>
# Date 1294140740 0
# Node ID a8d69de8eb315b3b18c8a86c4d1505f53b84a443
# Parent  4e108cf56d074ccee9d493a111d8dc6bd37c33fd
x86/mm: Add p2m_lock in set_shared_p2m_entry

This avoids the immediate problem (calling set_p2m_entry() without the
lock held) but leaves the underlying problem (no consistent locking
order between page-sharing and p2m code) for later.

Signed-off-by: Jui-Hao Chiang <juihaochiang@xxxxxxxxx>
Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
---
 xen/arch/x86/mm/p2m.c |    5 +++++
 1 files changed, 5 insertions(+)

diff -r 4e108cf56d07 -r a8d69de8eb31 xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c     Mon Dec 27 08:00:09 2010 +0000
+++ b/xen/arch/x86/mm/p2m.c     Tue Jan 04 11:32:20 2011 +0000
@@ -2650,6 +2650,7 @@ set_shared_p2m_entry(struct p2m_domain *
 set_shared_p2m_entry(struct p2m_domain *p2m, unsigned long gfn, mfn_t mfn)
 {
     int rc = 0;
+    int need_lock = !p2m_locked_by_me(p2m);
     p2m_type_t ot;
     mfn_t omfn;
 
@@ -2665,7 +2666,11 @@ set_shared_p2m_entry(struct p2m_domain *
     set_gpfn_from_mfn(mfn_x(omfn), INVALID_M2P_ENTRY);
 
     P2M_DEBUG("set shared %lx %lx\n", gfn, mfn_x(mfn));
+    if ( need_lock ) 
+        p2m_lock(p2m);
     rc = set_p2m_entry(p2m, gfn, mfn, 0, p2m_ram_shared);
+    if ( need_lock ) 
+        p2m_unlock(p2m);
     if ( 0 == rc )
         gdprintk(XENLOG_ERR,
             "set_mmio_p2m_entry: set_p2m_entry failed! mfn=%08lx\n",

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


 


Rackspace

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