aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGianluca Guida <gianluca.guida@citrix.com>2011-11-16 16:40:05 +0000
committerGianluca Guida <gianluca.guida@citrix.com>2011-11-16 16:40:05 +0000
commitf76622c342e232efda587280658f1e9663f773b9 (patch)
tree3e1ab38546c1de2469eaafd098eee7d64fefbf67
parentfbd80674b0ed69a3aca34b244dab1aa4e5897cf6 (diff)
downloadxen-f76622c342e232efda587280658f1e9663f773b9.tar.gz
xen-f76622c342e232efda587280658f1e9663f773b9.tar.bz2
xen-f76622c342e232efda587280658f1e9663f773b9.zip
[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 <gianluca.guida@citrix.com> Tested-by: Jan Beulich <jbeulich@suse.com> Committed-by: Keir Fraser <keir@xen.org> xen-unstable changeset: 24148:3ecc8fef4281 xen-unstable date: Wed Nov 16 15:19:33 2011 +0000
-rw-r--r--xen/arch/x86/mm/shadow/multi.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c
index a2a33c331b..ca7635b416 100644
--- a/xen/arch/x86/mm/shadow/multi.c
+++ b/xen/arch/x86/mm/shadow/multi.c
@@ -2710,8 +2710,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 */ );