[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] shadow: fix the fix for promotion/resync race.
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1227873763 0 # Node ID 9be2fe3de5678320ff4718daaee11be6ddb67cf2 # Parent 90ed7af655701666b3ca7c9854f7263f8a5bba77 shadow: fix the fix for promotion/resync race. Signed-off-by: Gianluca Guida <gianluca.guida@xxxxxxxxxxxxx> --- xen/arch/x86/mm/shadow/multi.c | 21 ++++++++++++--------- 1 files changed, 12 insertions(+), 9 deletions(-) diff -r 90ed7af65570 -r 9be2fe3de567 xen/arch/x86/mm/shadow/multi.c --- a/xen/arch/x86/mm/shadow/multi.c Thu Nov 27 16:22:14 2008 +0000 +++ b/xen/arch/x86/mm/shadow/multi.c Fri Nov 28 12:02:43 2008 +0000 @@ -1886,13 +1886,6 @@ static shadow_l1e_t * shadow_get_and_cre if ( r & SHADOW_SET_ERROR ) return NULL; -#if (SHADOW_OPTIMIZATIONS && SHOPT_OUT_OF_SYNC ) - /* All pages walked are now pagetables. Safe to resync pages - in case level 4 or 3 shadows were set. */ - if ( resync ) - shadow_resync_all(v, 0); -#endif - /* This next line is important: in 32-on-PAE and 32-on-64 modes, * the guest l1 table has an 8k shadow, and we need to return * the right mfn of the pair. This call will set it for us as a @@ -1900,6 +1893,14 @@ static shadow_l1e_t * shadow_get_and_cre * compiled out.) */ (void) shadow_l1_index(sl1mfn, guest_l1_table_offset(gw->va)); } + +#if (SHADOW_OPTIMIZATIONS && SHOPT_OUT_OF_SYNC ) + /* All pages walked are now pagetables. Safe to resync pages + in case level 4 or 3 shadows were set. */ + if ( resync ) + shadow_resync_all(v, 0); +#endif + /* Now follow it down a level. Guaranteed to succeed. */ return sh_linear_l1_table(v) + shadow_l1_linear_offset(gw->va); } @@ -2176,7 +2177,8 @@ static int validate_gl4e(struct vcpu *v, result |= SHADOW_SET_ERROR; #if (SHADOW_OPTIMIZATIONS && SHOPT_OUT_OF_SYNC ) - shadow_resync_all(v, 0); + if ( mfn_valid(sl3mfn) ) + shadow_resync_all(v, 0); #endif } l4e_propagate_from_guest(v, new_gl4e, sl3mfn, &new_sl4e, ft_prefetch); @@ -2232,7 +2234,8 @@ static int validate_gl3e(struct vcpu *v, result |= SHADOW_SET_ERROR; #if (SHADOW_OPTIMIZATIONS && SHOPT_OUT_OF_SYNC ) - shadow_resync_all(v, 0); + if ( mfn_valid(sl2mfn) ) + shadow_resync_all(v, 0); #endif } l3e_propagate_from_guest(v, new_gl3e, sl2mfn, &new_sl3e, ft_prefetch); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |