diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-08-14 16:26:06 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-08-14 16:26:06 +0100 |
commit | 202b0e0dc09615fc3dcc619a89a3ca3fc2279812 (patch) | |
tree | 528741dc647cb19b9377736895d9a3e4debe4fd0 | |
parent | 006e7188d48680d651cdf27a477b1af3b507de5d (diff) | |
download | xen-202b0e0dc09615fc3dcc619a89a3ca3fc2279812.tar.gz xen-202b0e0dc09615fc3dcc619a89a3ca3fc2279812.tar.bz2 xen-202b0e0dc09615fc3dcc619a89a3ca3fc2279812.zip |
x86 shadow: Fix OOS typecounting.
From: Gianluca Guida <gianluca.guida@eu.citrix.com>
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
-rw-r--r-- | xen/arch/x86/mm/shadow/multi.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 26e2a3cb84..a223dda8c8 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -1415,6 +1415,13 @@ static int shadow_set_l1e(struct vcpu *v, mfn_t new_gmfn = shadow_l1e_get_mfn(new_sl1e); #endif ASSERT(sl1e != NULL); + +#if SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC + if ( mfn_valid(new_gmfn) && mfn_oos_may_write(new_gmfn) + && ((shadow_l1e_get_flags(new_sl1e) & (_PAGE_RW|_PAGE_PRESENT)) + == (_PAGE_RW|_PAGE_PRESENT)) ) + oos_fixup_add(v, new_gmfn, sl1mfn, pgentry_ptr_to_slot(sl1e)); +#endif old_sl1e = *sl1e; @@ -1434,14 +1441,6 @@ static int shadow_set_l1e(struct vcpu *v, else { shadow_vram_get_l1e(new_sl1e, sl1e, sl1mfn, d); -#if SHADOW_OPTIMIZATIONS & SHOPT_OUT_OF_SYNC - if ( mfn_valid(new_gmfn) && mfn_oos_may_write(new_gmfn) - && (shadow_l1e_get_flags(new_sl1e) & _PAGE_RW) ) - { - oos_fixup_add(v, new_gmfn, sl1mfn, pgentry_ptr_to_slot(sl1e)); - } -#endif - } } } |