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] Added extra shadow_sync_mfn() in do_update_va_mapping to

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Added extra shadow_sync_mfn() in do_update_va_mapping to deal
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Wed, 16 Mar 2005 01:14:39 +0000
Delivery-date: Tue, 05 Apr 2005 16:09:47 +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 Development List <xen-devel@xxxxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1236.32.8, 2005/03/16 01:14:39+00:00, mafetter@xxxxxxxxxxxxxxxx

        Added extra shadow_sync_mfn() in do_update_va_mapping to deal
        with a shortcoming of the checking code in _check_pagetable.
        Better to have a few more flushes and checking code that can
        still be used.  It would be even better to have smarter checking
        code, but that will take more time.
        
        Signed-off-by: michael.fetterman@xxxxxxxxxxxx



 arch/x86/mm.c            |   25 +++++++++++++++++++++++++
 include/xen/perfc_defn.h |    1 +
 2 files changed, 26 insertions(+)


diff -Nru a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c 2005-04-05 12:09:52 -04:00
+++ b/xen/arch/x86/mm.c 2005-04-05 12:09:52 -04:00
@@ -2001,6 +2001,8 @@
     }
     else
     {
+        unsigned long l1mfn;
+
         if ( unlikely(percpu_info[cpu].foreign &&
                       (shadow_mode_translate(d) ||
                        shadow_mode_translate(percpu_info[cpu].foreign))) )
@@ -2020,6 +2022,29 @@
         // linear_pg_table[l1_linear_offset(va)] to be in sync)...
         //
         __shadow_sync_va(ed, va);
+
+#if 1 /* keep check_pagetables() happy */
+        /*
+         * However, the above doesn't guarantee that there's no snapshot of
+         * the L1 table in question; it just says that the relevant L2 and L1
+         * entries for VA are in-sync.  There might still be a snapshot.
+         *
+         * The checking code in _check_pagetables() assumes that no one will
+         * mutate the shadow of a page that has a snapshot.  It's actually
+         * OK to not sync this page, but it seems simpler to:
+         * 1) keep all code paths the same, and
+         * 2) maintain the invariant for _check_pagetables(), rather than try
+         *    to teach it about this boundary case.
+         * So we flush this L1 page, if it's out of sync.
+         */
+        l1mfn = (l2_pgentry_val(linear_l2_table(ed)[l2_table_offset(va)]) >>
+                 PAGE_SHIFT);
+        if ( mfn_out_of_sync(l1mfn) )
+        {
+            perfc_incrc(extra_va_update_sync);
+            __shadow_sync_mfn(d, l1mfn);
+        }
+#endif /* keep check_pagetables() happy */
 
         if ( unlikely(__put_user(val, &l1_pgentry_val(
                                      linear_pg_table[l1_linear_offset(va)]))) )
diff -Nru a/xen/include/xen/perfc_defn.h b/xen/include/xen/perfc_defn.h
--- a/xen/include/xen/perfc_defn.h      2005-04-05 12:09:52 -04:00
+++ b/xen/include/xen/perfc_defn.h      2005-04-05 12:09:52 -04:00
@@ -50,6 +50,7 @@
 PERFCOUNTER_CPU(shadow_make_snapshot,              "snapshots created")
 PERFCOUNTER_CPU(shadow_mark_mfn_out_of_sync_calls, "calls to 
shadow_mk_out_of_sync")
 PERFCOUNTER_CPU(shadow_out_of_sync_calls,          "calls to 
shadow_out_of_sync")
+PERFCOUNTER_CPU(extra_va_update_sync,              "extra syncs for bug in 
chk_pgtb")
 PERFCOUNTER_CPU(snapshot_entry_matches_calls,      "calls to ss_entry_matches")
 PERFCOUNTER_CPU(snapshot_entry_matches_true,       "ss_entry_matches returns 
true")
 

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Added extra shadow_sync_mfn() in do_update_va_mapping to deal, BitKeeper Bot <=