30 lines
1.3 KiB
Diff
30 lines
1.3 KiB
Diff
|
References: bnc#726332
|
||
|
|
||
|
# HG changeset patch
|
||
|
# User Gianluca Guida <gianluca.guida@citrix.com>
|
||
|
# Date 1321456773 0
|
||
|
# Node ID 3ecc8fef428138e4304ef11b47498981e63626b3
|
||
|
# Parent a5f1d3b1612bb48e1cb09dc66b0909e3613dc855
|
||
|
[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>
|
||
|
|
||
|
--- a/xen/arch/x86/mm/shadow/multi.c
|
||
|
+++ b/xen/arch/x86/mm/shadow/multi.c
|
||
|
@@ -2743,8 +2743,9 @@ static inline void check_for_early_unsha
|
||
|
|| ( !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 */ );
|