From 5802821430521bc507915d01b72e36f947dbed2e Mon Sep 17 00:00:00 2001 From: Gianluca Guida Date: Wed, 16 Nov 2011 15:19:33 +0000 Subject: [PATCH] [shadow] Disable higher level pagetables early unshadow only when the "process dying" hypercall is used. This patch fixes a performance problem in fully virtualized guests. Signed-off-by: Gianluca Guida Tested-by: Jan Beulich Committed-by: Keir Fraser --- xen/arch/x86/mm/shadow/multi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c index 7731553e53..7ccd38edd1 100644 --- a/xen/arch/x86/mm/shadow/multi.c +++ b/xen/arch/x86/mm/shadow/multi.c @@ -2728,8 +2728,9 @@ static inline void check_for_early_unshadow(struct vcpu *v, mfn_t gmfn) || ( !v->domain->arch.paging.shadow.pagetable_dying_op && v->arch.paging.shadow.last_emulated_mfn_for_unshadow == mfn_x(gmfn) ) ) && sh_mfn_is_a_page_table(gmfn) - && !(mfn_to_page(gmfn)->shadow_flags - & (SHF_L2_32|SHF_L2_PAE|SHF_L2H_PAE|SHF_L4_64)) ) + && (!v->domain->arch.paging.shadow.pagetable_dying_op || + !(mfn_to_page(gmfn)->shadow_flags + & (SHF_L2_32|SHF_L2_PAE|SHF_L2H_PAE|SHF_L4_64))) ) { perfc_incr(shadow_early_unshadow); sh_remove_shadows(v, gmfn, 1, 0 /* Fast, can fail to unshadow */ ); -- 2.30.2