KVM: x86: Avoid issuing wbinvd twice
PATCH 2/2 KVM: x86: Avoid issuing wbinvd twice
From: Jan Kiszka <[email protected]>
Micro optimization to avoid calling wbinvd twice on the CPU that has to emulate it. As we might be preempted between smp_call_function_many and the local wbinvd, the cache might be filled again so that real work could be done uselessly.
Signed-off-by Jan Kiszka <[email protected]>
---
I can fold the first patch into this one if it's preferred.
arch/x86/kvm/x86.c | 10 ++++++---- 1 files changed, 6 insertions(+), 4 deletions(-)
arch/x86/kvm/x86.c +6 -4
@@ -4012,13 +4012,15 @@ int kvm_emulate_wbinvd(struct kvm_vcpu *vcpu)return X86EMUL_CONTINUE ;if (kvm_x86_ops->has_wbinvd_exit ()) { -preempt_disable (); +int cpu =get_cpu (); + +cpumask_set_cpu (cpu, vcpu->arch.wbinvd_dirty_mask);smp_call_function_many (vcpu->arch.wbinvd_dirty_mask, wbinvd_ipi,NULL ,1 ); -preempt_enable (); +put_cpu ();cpumask_clear (vcpu->arch.wbinvd_dirty_mask); - } -wbinvd (); + }else +wbinvd ();return X86EMUL_CONTINUE ; }EXPORT_SYMBOL_GPL (kvm_emulate_wbinvd);
Marcelo Tosatti
AppliedQuoted 8 lines · Jan Kiszka
From: Jan Kiszka <[email protected]>
Micro optimization to avoid calling wbinvd twice on the CPU that has to emulate it. As we might be preempted between
smp_call_function_manyand the local wbinvd, the cache might be filled again so that real work could be done uselessly.Signed-off-by Jan Kiszka <[email protected]>
Applied both, thanks.