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-changelog

[Xen-changelog] Fix cleanup path if an HVM guest fails very early, befor

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Fix cleanup path if an HVM guest fails very early, before direct map is built.
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 21 Feb 2006 22:06:08 +0000
Delivery-date: Tue, 21 Feb 2006 22:20:37 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 1fd6e9c32b034126128ff4fcd2bb6d209446d146
# Parent  e8d04411931640322013a1f97726ce64137e94ce
Fix cleanup path if an HVM guest fails very early, before direct map is built.

Signed-off-by: Xin Li <xin.b.li@xxxxxxxxx>

diff -r e8d044119316 -r 1fd6e9c32b03 xen/arch/x86/shadow32.c
--- a/xen/arch/x86/shadow32.c   Tue Feb 21 17:19:16 2006
+++ b/xen/arch/x86/shadow32.c   Tue Feb 21 17:21:13 2006
@@ -1110,22 +1110,30 @@
 void shadow_direct_map_clean(struct vcpu *v)
 {
     int i;
+    unsigned long mfn;
+    struct domain *d = v->domain;
     l2_pgentry_t *l2e;
 
-    l2e = map_domain_page(
-      pagetable_get_pfn(v->domain->arch.phys_table));
+    mfn =  pagetable_get_pfn(d->arch.phys_table);
+
+    /*
+     * We may fail very early before direct map is built.
+     */
+    if ( !mfn )
+        return;
+
+    l2e = map_domain_page(mfn);
 
     for ( i = 0; i < L2_PAGETABLE_ENTRIES; i++ )
     {
         if ( l2e_get_flags(l2e[i]) & _PAGE_PRESENT )
             free_domheap_page(mfn_to_page(l2e_get_pfn(l2e[i])));
     }
-
-    free_domheap_page(
-            mfn_to_page(pagetable_get_pfn(v->domain->arch.phys_table)));
+    free_domheap_page(mfn_to_page(mfn));
 
     unmap_domain_page(l2e);
-    v->domain->arch.phys_table = mk_pagetable(0);
+
+    d->arch.phys_table = mk_pagetable(0);
 }
 
 int __shadow_mode_enable(struct domain *d, unsigned int mode)
diff -r e8d044119316 -r 1fd6e9c32b03 xen/arch/x86/shadow_public.c
--- a/xen/arch/x86/shadow_public.c      Tue Feb 21 17:19:16 2006
+++ b/xen/arch/x86/shadow_public.c      Tue Feb 21 17:21:13 2006
@@ -59,12 +59,21 @@
 
 void shadow_direct_map_clean(struct vcpu *v)
 {
+    unsigned long mfn;
+    struct domain *d = v->domain;
     l2_pgentry_t *l2e;
     l3_pgentry_t *l3e;
     int i, j;
 
-    l3e = (l3_pgentry_t *)map_domain_page(
-        pagetable_get_pfn(v->domain->arch.phys_table));
+    mfn = pagetable_get_pfn(d->arch.phys_table);
+
+    /*
+     * We may fail very early before direct map is built.
+     */
+    if ( !mfn )
+        return;
+
+    l3e = (l3_pgentry_t *)map_domain_page(mfn);
 
     for ( i = 0; i < PAE_L3_PAGETABLE_ENTRIES; i++ )
     {
@@ -81,12 +90,11 @@
             free_domheap_page(mfn_to_page(l3e_get_pfn(l3e[i])));
         }
     }
-
-    free_domheap_page(
-        mfn_to_page(pagetable_get_pfn(v->domain->arch.phys_table)));
+    free_domheap_page(mfn_to_page(mfn));
 
     unmap_domain_page(l3e);
-    v->domain->arch.phys_table = mk_pagetable(0);
+
+    d->arch.phys_table = mk_pagetable(0);
 }
 
 /****************************************************************************/

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Fix cleanup path if an HVM guest fails very early, before direct map is built., Xen patchbot -unstable <=