[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [XEN][SHADOW] Fix early-unshadow logic.



# HG changeset patch
# User George Dunlap <gdunlap@xxxxxxxxxxxxx>
# Date 1172679082 18000
# Node ID 7b35a9682d81319553353f767b35d9c98c12ae19
# Parent  d39dcdb9cca36d27d0c509640a15c03800bf706e
[XEN][SHADOW] Fix early-unshadow logic.

Make sure to reset the early-unshadow logic when we
do a fast-path propagate or when we emulate a non-zero
write.

Signed-off-by: George Dunlap <gdunlap@xxxxxxxxxxxxx>
---
 xen/arch/x86/mm/shadow/multi.c |    7 +++++++
 1 files changed, 7 insertions(+)

diff -r d39dcdb9cca3 -r 7b35a9682d81 xen/arch/x86/mm/shadow/multi.c
--- a/xen/arch/x86/mm/shadow/multi.c    Wed Feb 28 14:44:52 2007 +0000
+++ b/xen/arch/x86/mm/shadow/multi.c    Wed Feb 28 11:11:22 2007 -0500
@@ -2667,6 +2667,7 @@ static int sh_page_fault(struct vcpu *v,
                      * a not-present fault (by flipping two bits). */
                     ASSERT(regs->error_code & PFEC_page_present);
                     regs->error_code ^= (PFEC_reserved_bit|PFEC_page_present);
+                    reset_early_unshadow(v);
                     perfc_incrc(shadow_fault_fast_gnp);
                     SHADOW_PRINTK("fast path not-present\n");
                     return 0;
@@ -3961,6 +3962,8 @@ sh_x86_emulate_write(struct vcpu *v, uns
     /* If we are writing zeros to this page, might want to unshadow */
     if ( likely(bytes >= 4) && (*(u32 *)addr == 0) && is_lo_pte(vaddr) )
         check_for_early_unshadow(v, mfn);
+    else
+        reset_early_unshadow(v);
     
     sh_mark_dirty(v->domain, mfn);
 
@@ -4015,6 +4018,8 @@ sh_x86_emulate_cmpxchg(struct vcpu *v, u
     /* If we are writing zeros to this page, might want to unshadow */
     if ( likely(bytes >= 4) && (*(u32 *)addr == 0) && is_lo_pte(vaddr) )
         check_for_early_unshadow(v, mfn);
+    else
+        reset_early_unshadow(v);
 
     sh_mark_dirty(v->domain, mfn);
 
@@ -4057,6 +4062,8 @@ sh_x86_emulate_cmpxchg8b(struct vcpu *v,
     /* If we are writing zeros to this page, might want to unshadow */
     if ( *(u32 *)addr == 0 )
         check_for_early_unshadow(v, mfn);
+    else
+        reset_early_unshadow(v);
 
     sh_mark_dirty(v->domain, mfn);
 

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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.