WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH] p2m: query/modify p2mt with p2m_lock held

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] p2m: query/modify p2mt with p2m_lock held
From: Olaf Hering <olaf@xxxxxxxxx>
Date: Tue, 04 Oct 2011 14:28:20 +0200
Delivery-date: Tue, 04 Oct 2011 05:29:29 -0700
Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; t=1317731322; l=2253; s=domk; d=aepfle.de; h=To:From:Date:Subject:Content-Transfer-Encoding:MIME-Version: Content-Type:X-RZG-CLASS-ID:X-RZG-AUTH; bh=ZdILLQ1GZzQkStNd0Sx8Z/QBQBE=; b=R79VYgk1FhvA2ZiCYVozWnQ8wl9ek+vkEfyZR0yDpeufW8k9hwWLWkkeQ7jwgeCrkCQ S3+K+8tH1ZB9I7WP0+rKS4tJZ6/YgrYM5cy+kWzNVXKeWkXC23K04HBdp8VMXiAhiaqi2 BvmOmmhq7rL8dhX4zs+4NNuScX+brxojxTs=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.7.5
# HG changeset patch
# User Olaf Hering <olaf@xxxxxxxxx>
# Date 1317731245 -7200
# Node ID 9c0bf50bfbb645ec80b7a5e1da2dbd94e326f720
# Parent  e77dd1bf489436d9f115be5d77327d1bbde1f1d2
p2m: query/modify p2mt with p2m_lock held

Query and update the p2mt in set_mmio_p2m_entry, clear_mmio_p2m_entry
and set_shared_p2m_entry with the p2m_lock held.

Signed-off-by: Olaf Hering <olaf@xxxxxxxxx>

diff -r e77dd1bf4894 -r 9c0bf50bfbb6 xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -583,9 +583,11 @@ set_mmio_p2m_entry(struct domain *d, uns
     if ( !paging_mode_translate(d) )
         return 0;
 
+    p2m_lock(p2m);
     omfn = gfn_to_mfn_query(d, gfn, &ot);
     if ( p2m_is_grant(ot) )
     {
+        p2m_unlock(p2m);
         domain_crash(d);
         return 0;
     }
@@ -596,7 +598,6 @@ set_mmio_p2m_entry(struct domain *d, uns
     }
 
     P2M_DEBUG("set mmio %lx %lx\n", gfn, mfn_x(mfn));
-    p2m_lock(p2m);
     rc = set_p2m_entry(p2m, gfn, mfn, 0, p2m_mmio_direct, p2m->default_access);
     audit_p2m(p2m, 1);
     p2m_unlock(p2m);
@@ -618,18 +619,20 @@ clear_mmio_p2m_entry(struct domain *d, u
     if ( !paging_mode_translate(d) )
         return 0;
 
-    mfn = gfn_to_mfn(d, gfn, &t);
+    p2m_lock(p2m);
+    mfn = gfn_to_mfn_query(d, gfn, &t);
 
     /* Do not use mfn_valid() here as it will usually fail for MMIO pages. */
     if ( (INVALID_MFN == mfn_x(mfn)) || (t != p2m_mmio_direct) )
     {
         gdprintk(XENLOG_ERR,
             "clear_mmio_p2m_entry: gfn_to_mfn failed! gfn=%08lx\n", gfn);
-        return 0;
+        goto out;
     }
-    p2m_lock(p2m);
     rc = set_p2m_entry(p2m, gfn, _mfn(INVALID_MFN), 0, p2m_invalid, 
p2m->default_access);
     audit_p2m(p2m, 1);
+
+out:
     p2m_unlock(p2m);
 
     return rc;
@@ -646,6 +649,7 @@ set_shared_p2m_entry(struct domain *d, u
     if ( !paging_mode_translate(p2m->domain) )
         return 0;
 
+    p2m_lock(p2m);
     omfn = gfn_to_mfn_query(p2m->domain, gfn, &ot);
     /* At the moment we only allow p2m change if gfn has already been made
      * sharable first */
@@ -655,7 +659,6 @@ set_shared_p2m_entry(struct domain *d, u
     set_gpfn_from_mfn(mfn_x(omfn), INVALID_M2P_ENTRY);
 
     P2M_DEBUG("set shared %lx %lx\n", gfn, mfn_x(mfn));
-    p2m_lock(p2m);
     rc = set_p2m_entry(p2m, gfn, mfn, 0, p2m_ram_shared, p2m->default_access);
     p2m_unlock(p2m);
     if ( 0 == rc )

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

<Prev in Thread] Current Thread [Next in Thread>