]> xenbits.xensource.com Git - people/vhanquez/xen.git/commitdiff
x86, 32-on-64: Improve checking in vcpu_destroy_pagetables(). It *is*
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 6 Dec 2007 16:50:13 +0000 (16:50 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 6 Dec 2007 16:50:13 +0000 (16:50 +0000)
possible for 64-bit guest to have matching guest_table and
guest_table_user.
Original patch by John Levon <levon@movementarian.org>
Signed-off-by: Keir Fraser <keir.fraser@eu.citrix.com>
xen-unstable changeset:   16401:f62e6c697eeb68a7a62f4beb87e85a68b91b3c6a
xen-unstable date:        Tue Nov 20 15:34:25 2007 +0000

xen/arch/x86/domain.c

index dbaf67bb3153d150e75056496a8a7290d91adf7f..c5ae4f8ae9dfacf6e2b8fb72d37b581223e12b62 100644 (file)
@@ -1624,10 +1624,6 @@ static void vcpu_destroy_pagetables(struct vcpu *v)
             put_page(mfn_to_page(pfn));
         else
             put_page_and_type(mfn_to_page(pfn));
-#ifdef __x86_64__
-        if ( pfn == pagetable_get_pfn(v->arch.guest_table_user) )
-            v->arch.guest_table_user = pagetable_null();
-#endif
         v->arch.guest_table = pagetable_null();
     }
 
@@ -1636,10 +1632,13 @@ static void vcpu_destroy_pagetables(struct vcpu *v)
     pfn = pagetable_get_pfn(v->arch.guest_table_user);
     if ( pfn != 0 )
     {
-        if ( paging_mode_refcounts(d) )
-            put_page(mfn_to_page(pfn));
-        else
-            put_page_and_type(mfn_to_page(pfn));
+        if ( !is_pv_32bit_vcpu(v) )
+        {
+            if ( paging_mode_refcounts(d) )
+                put_page(mfn_to_page(pfn));
+            else
+                put_page_and_type(mfn_to_page(pfn));
+        }
         v->arch.guest_table_user = pagetable_null();
     }
 #endif