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] xenpaging: check p2mt in p2m_mem_paging functions

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] xenpaging: check p2mt in p2m_mem_paging functions
From: Olaf Hering <olaf@xxxxxxxxx>
Date: Tue, 11 Oct 2011 14:42:31 +0200
Delivery-date: Tue, 11 Oct 2011 05:43:24 -0700
Dkim-signature: v=1; a=rsa-sha1; c=relaxed/relaxed; t=1318336967; l=2033; 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=kf4V/FAdkxXhkOjvOh6LqaNxHm8=; b=VH8uXg3hi+c1M2U3GCizopDhIpDI5KEasy1g3A/Lc7rRsJ4UCIaEUWo/AmZLwjMtKuc C7Ci2j4ZTgh7hn52qLDxzzIr6zlZwZU+eBvMWpDFGyM4AHfASA6S/91poS0s3yTqNTir3 To7QzuoqZ0NQnF4CUrkFaj4g4BOki386Lhg=
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 1318336928 -7200
# Node ID bc64a435d572680efb221445c28583d03d4eb175
# Parent  bdd49540f1e1c803d01c88adb67c6ce01e2d00d8
xenpaging: check p2mt in p2m_mem_paging functions

Add checks to forward the p2m_ram_paging* state properly during page-in.

Resume can be called several times if several vcpus called populate for
the gfn. Finish resume only once and print some debug for other cases.

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

diff -r bdd49540f1e1 -r bc64a435d572 xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c
+++ b/xen/arch/x86/mm/p2m.c
@@ -852,16 +852,22 @@ int p2m_mem_paging_prep(struct domain *d
     p2m_access_t a;
     mfn_t mfn;
     struct p2m_domain *p2m = p2m_get_hostp2m(d);
-    int ret = -ENOMEM;
+    int ret;
 
     p2m_lock(p2m);
 
     mfn = p2m->get_entry(p2m, gfn, &p2mt, &a, p2m_query, NULL);
 
+    ret = -ENOENT;
+    /* Allow only missing pages */
+    if ( p2mt != p2m_ram_paging_in_start )
+        goto out;
+
     /* Allocate a page if the gfn does not have one yet */
     if ( !mfn_valid(mfn) )
     {
         /* Get a free page */
+        ret = -ENOMEM;
         page = alloc_domheap_page(p2m->domain, 0);
         if ( unlikely(page == NULL) )
             goto out;
@@ -897,9 +903,16 @@ void p2m_mem_paging_resume(struct domain
     {
         p2m_lock(p2m);
         mfn = p2m->get_entry(p2m, rsp.gfn, &p2mt, &a, p2m_query, NULL);
-        set_p2m_entry(p2m, rsp.gfn, mfn, 0, p2m_ram_rw, a);
-        set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn);
-        audit_p2m(p2m, 1);
+        /* Allow only pages which were prepared properly or pages which were 
nominated but not evicted */
+        if ( mfn_valid(mfn) && ( p2mt == p2m_ram_paging_in  || p2mt == 
p2m_ram_paging_in_start ) )
+        {
+            set_p2m_entry(p2m, rsp.gfn, mfn, 0, p2m_ram_rw, a);
+            set_gpfn_from_mfn(mfn_x(mfn), rsp.gfn);
+            audit_p2m(p2m, 1);
+        /* May be called more than once if the gfn was populate from different 
vcpus */
+        } else if ( p2mt != p2m_ram_rw ) {
+            printk("resume: %d %lx %x %lx\n", d->domain_id, rsp.gfn, p2mt, 
mfn_x(mfn));
+        }
         p2m_unlock(p2m);
     }
 

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

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