From: Andrea Arcangeli <aarcange@redhat.com>
To: Christophe de Dinechin <christophe.de.dinechin@gmail.com>
Cc: Vitaly Kuznetsov <vkuznets@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
"Dr. David Alan Gilbert" <dgilbert@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Peter Xu <peterx@redhat.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 15/17] KVM: retpolines: x86: eliminate retpoline from vmx.c exit handlers
Date: Wed, 25 Sep 2019 16:51:28 -0400 [thread overview]
Message-ID: <20190925205128.GB13637@redhat.com> (raw)
In-Reply-To: <E8FE7592-69C3-455E-8D80-A2D73BB2E14C@dinechin.org>
On Wed, Sep 25, 2019 at 01:03:32PM +0200, Christophe de Dinechin wrote:
>
>
> > On 23 Sep 2019, at 11:31, Vitaly Kuznetsov <vkuznets@redhat.com> wrote:
> >
> > Andrea Arcangeli <aarcange@redhat.com <mailto:aarcange@redhat.com>> writes:
> >
> >> It's enough to check the exit value and issue a direct call to avoid
> >> the retpoline for all the common vmexit reasons.
> >>
> >> Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
> >> ---
> >> arch/x86/kvm/vmx/vmx.c | 24 ++++++++++++++++++++++--
> >> 1 file changed, 22 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
> >> index a6e597025011..9aa73e216df2 100644
> >> --- a/arch/x86/kvm/vmx/vmx.c
> >> +++ b/arch/x86/kvm/vmx/vmx.c
> >> @@ -5866,9 +5866,29 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu)
> >> }
> >>
> >> if (exit_reason < kvm_vmx_max_exit_handlers
> >> - && kvm_vmx_exit_handlers[exit_reason])
> >> + && kvm_vmx_exit_handlers[exit_reason]) {
> >> +#ifdef CONFIG_RETPOLINE
> >> + if (exit_reason == EXIT_REASON_MSR_WRITE)
> >> + return handle_wrmsr(vcpu);
> >> + else if (exit_reason == EXIT_REASON_PREEMPTION_TIMER)
> >> + return handle_preemption_timer(vcpu);
> >> + else if (exit_reason == EXIT_REASON_PENDING_INTERRUPT)
> >> + return handle_interrupt_window(vcpu);
> >> + else if (exit_reason == EXIT_REASON_EXTERNAL_INTERRUPT)
> >> + return handle_external_interrupt(vcpu);
> >> + else if (exit_reason == EXIT_REASON_HLT)
> >> + return handle_halt(vcpu);
> >> + else if (exit_reason == EXIT_REASON_PAUSE_INSTRUCTION)
> >> + return handle_pause(vcpu);
> >> + else if (exit_reason == EXIT_REASON_MSR_READ)
> >> + return handle_rdmsr(vcpu);
> >> + else if (exit_reason == EXIT_REASON_CPUID)
> >> + return handle_cpuid(vcpu);
> >> + else if (exit_reason == EXIT_REASON_EPT_MISCONFIG)
> >> + return handle_ept_misconfig(vcpu);
> >> +#endif
> >> return kvm_vmx_exit_handlers[exit_reason](vcpu);
> >
> > I agree with the identified set of most common vmexits, however, this
> > still looks a bit random. Would it be too much if we get rid of
> > kvm_vmx_exit_handlers completely replacing this code with one switch()?
>
> Not sure, but if you do that, won’t the compiler generate a table and
> bring you back to square one? Or is there a reason why the mitigation
> is not needed for tables and indirect branches generated from switch
> statements?
When the kernel is built with retpolines the compiler is forbidden to
use a table for any switch. I pointed out the relevant commit earlier
in this thread. Instead the compiler will still try to bisect the
exit_reason trying to make the cost more equal for all exit_reason and
to reduce the number of checks, but we know the most likely exits so
it should be better to prioritize the most frequent exit reasons.
Thanks,
Andrea
next prev parent reply other threads:[~2019-09-25 20:51 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-20 21:24 [PATCH 00/17] KVM monolithic v1 Andrea Arcangeli
2019-09-20 21:24 ` [PATCH 01/17] x86: spec_ctrl: fix SPEC_CTRL initialization after kexec Andrea Arcangeli
2019-09-23 10:22 ` Paolo Bonzini
2019-09-23 15:30 ` Sean Christopherson
2019-09-23 17:34 ` Andrea Arcangeli
2019-09-23 22:27 ` Sean Christopherson
2019-09-20 21:24 ` [PATCH 02/17] KVM: monolithic: x86: convert the kvm_x86_ops methods to external functions Andrea Arcangeli
2019-09-23 10:19 ` Paolo Bonzini
2019-09-23 16:13 ` Sean Christopherson
2019-09-23 16:51 ` Paolo Bonzini
2019-09-23 19:21 ` Andrea Arcangeli
2019-09-20 21:24 ` [PATCH 03/17] KVM: monolithic: x86: handle the request_immediate_exit variation Andrea Arcangeli
2019-09-23 22:35 ` Sean Christopherson
2019-09-23 23:06 ` Andrea Arcangeli
2019-09-23 23:45 ` Sean Christopherson
2019-09-24 0:24 ` Andrea Arcangeli
2019-09-20 21:24 ` [PATCH 04/17] KVM: monolithic: x86: convert the kvm_pmu_ops methods to external functions Andrea Arcangeli
2019-09-20 21:24 ` [PATCH 05/17] KVM: monolithic: x86: enable the kvm_x86_ops " Andrea Arcangeli
2019-09-20 21:24 ` [PATCH 06/17] KVM: monolithic: x86: enable the kvm_pmu_ops " Andrea Arcangeli
2019-09-20 21:24 ` [PATCH 07/17] KVM: monolithic: x86: adjust the section prefixes Andrea Arcangeli
2019-09-23 10:15 ` Paolo Bonzini
2019-09-25 12:13 ` Andrea Arcangeli
2019-09-25 12:32 ` Paolo Bonzini
2019-09-20 21:25 ` [PATCH 08/17] KVM: monolithic: adjust the section prefixes in the KVM common code Andrea Arcangeli
2019-09-20 21:25 ` [PATCH 09/17] KVM: monolithic: x86: remove kvm.ko Andrea Arcangeli
2019-09-20 21:25 ` [PATCH 10/17] KVM: monolithic: x86: use the external functions instead of kvm_x86_ops Andrea Arcangeli
2019-09-23 10:02 ` Paolo Bonzini
2019-09-20 21:25 ` [PATCH 11/17] KVM: monolithic: x86: remove exports Andrea Arcangeli
2019-09-20 21:25 ` [PATCH 12/17] KVM: monolithic: remove exports from KVM common code Andrea Arcangeli
2019-09-20 21:25 ` [PATCH 13/17] KVM: monolithic: x86: drop the kvm_pmu_ops structure Andrea Arcangeli
2019-09-23 10:21 ` Paolo Bonzini
2019-09-24 0:51 ` Andrea Arcangeli
2019-09-24 1:24 ` Paolo Bonzini
2019-09-20 21:25 ` [PATCH 14/17] KVM: monolithic: x86: inline more exit handlers in vmx.c Andrea Arcangeli
2019-09-23 10:19 ` Paolo Bonzini
2019-09-24 1:00 ` Andrea Arcangeli
2019-09-24 1:25 ` Paolo Bonzini
2019-09-24 1:55 ` Andrea Arcangeli
2019-09-24 2:56 ` Andrea Arcangeli
2019-09-25 7:52 ` Paolo Bonzini
2019-09-20 21:25 ` [PATCH 15/17] KVM: retpolines: x86: eliminate retpoline from vmx.c exit handlers Andrea Arcangeli
2019-09-23 9:31 ` Vitaly Kuznetsov
2019-09-23 9:57 ` Paolo Bonzini
2019-09-23 19:05 ` Andrea Arcangeli
2019-09-23 20:23 ` Sean Christopherson
2019-09-23 21:08 ` Andrea Arcangeli
2019-09-23 21:24 ` Sean Christopherson
2019-09-23 23:43 ` Andrea Arcangeli
2019-09-23 23:52 ` Sean Christopherson
2019-09-24 0:16 ` Paolo Bonzini
2019-09-24 0:35 ` Sean Christopherson
2019-09-24 0:37 ` Paolo Bonzini
2019-09-24 0:15 ` Paolo Bonzini
2019-09-24 0:38 ` Andrea Arcangeli
2019-09-24 0:46 ` Sean Christopherson
2019-09-24 21:46 ` Andrea Arcangeli
2019-09-25 7:50 ` Paolo Bonzini
2019-09-23 16:37 ` Sean Christopherson
2019-09-23 16:53 ` Paolo Bonzini
2019-09-23 17:42 ` Andrea Arcangeli
2019-09-23 18:15 ` Sean Christopherson
2019-09-23 19:12 ` Andrea Arcangeli
[not found] ` <E8FE7592-69C3-455E-8D80-A2D73BB2E14C@dinechin.org>
2019-09-25 20:51 ` Andrea Arcangeli [this message]
2019-09-23 16:28 ` Sean Christopherson
2019-09-20 21:25 ` [PATCH 16/17] KVM: retpolines: x86: eliminate retpoline from svm.c " Andrea Arcangeli
2019-09-23 10:01 ` Paolo Bonzini
2019-09-20 21:25 ` [PATCH 17/17] x86: retpolines: eliminate retpoline from msr event handlers Andrea Arcangeli
2019-09-23 15:39 ` [PATCH 00/17] KVM monolithic v1 Sean Christopherson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190925205128.GB13637@redhat.com \
--to=aarcange@redhat.com \
--cc=christophe.de.dinechin@gmail.com \
--cc=dgilbert@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=vkuznets@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).