lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Wed, 9 Mar 2022 17:51:09 +0100 From: Paolo Bonzini <pbonzini@...hat.com> To: Sasha Levin <sashal@...nel.org>, linux-kernel@...r.kernel.org, stable@...r.kernel.org Cc: Li RongQing <lirongqing@...du.com>, tglx@...utronix.de, mingo@...hat.com, bp@...en8.de, dave.hansen@...ux.intel.com, x86@...nel.org, kvm@...r.kernel.org Subject: Re: [PATCH MANUALSEL 5.10] KVM: x86: Yield to IPI target vCPU only if it is busy On 3/9/22 17:46, Sasha Levin wrote: > From: Li RongQing <lirongqing@...du.com> > > [ Upstream commit 9ee83635d872812f3920209c606c6ea9e412ffcc ] > > When sending a call-function IPI-many to vCPUs, yield to the > IPI target vCPU which is marked as preempted. > > but when emulating HLT, an idling vCPU will be voluntarily > scheduled out and mark as preempted from the guest kernel > perspective. yielding to idle vCPU is pointless and increase > unnecessary vmexit, maybe miss the true preempted vCPU > > so yield to IPI target vCPU only if vCPU is busy and preempted > > Signed-off-by: Li RongQing <lirongqing@...du.com> > Message-Id: <1644380201-29423-1-git-send-email-lirongqing@...du.com> > Signed-off-by: Paolo Bonzini <pbonzini@...hat.com> > Signed-off-by: Sasha Levin <sashal@...nel.org> > --- > arch/x86/kernel/kvm.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c > index 7462b79c39de..8fe6eb5bed3f 100644 > --- a/arch/x86/kernel/kvm.c > +++ b/arch/x86/kernel/kvm.c > @@ -590,7 +590,7 @@ static void kvm_smp_send_call_func_ipi(const struct cpumask *mask) > > /* Make sure other vCPUs get a chance to run if they need to. */ > for_each_cpu(cpu, mask) { > - if (vcpu_is_preempted(cpu)) { > + if (!idle_cpu(cpu) && vcpu_is_preempted(cpu)) { > kvm_hypercall1(KVM_HC_SCHED_YIELD, per_cpu(x86_cpu_to_apicid, cpu)); > break; > } NACK
Powered by blists - more mailing lists