x86: retpolines: eliminate retpoline from msr event handlers
authorAndrea Arcangeli <aarcange@redhat.com>
Mon, 4 Nov 2019 23:00:01 +0000 (18:00 -0500)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 15 Nov 2019 10:43:58 +0000 (11:43 +0100)
commit74c504a6d70ab29b2c28bee62f5f39e3dd847ea2
treee182fad414ff5a6ea7d8d3e13996886c517f9bdf
parent3dcb2a3fa5a0c903fd754bfba2b8defb9f191974
x86: retpolines: eliminate retpoline from msr event handlers

It's enough to check the value and issue the direct call.

After this commit is applied, here the most common retpolines executed
under a high resolution timer workload in the guest on a VMX host:

[..]
@[
    trace_retpoline+1
    __trace_retpoline+30
    __x86_indirect_thunk_rax+33
    do_syscall_64+89
    entry_SYSCALL_64_after_hwframe+68
]: 267
@[]: 2256
@[
    trace_retpoline+1
    __trace_retpoline+30
    __x86_indirect_thunk_rax+33
    __kvm_wait_lapic_expire+284
    vmx_vcpu_run.part.97+1091
    vcpu_enter_guest+377
    kvm_arch_vcpu_ioctl_run+261
    kvm_vcpu_ioctl+559
    do_vfs_ioctl+164
    ksys_ioctl+96
    __x64_sys_ioctl+22
    do_syscall_64+89
    entry_SYSCALL_64_after_hwframe+68
]: 2390
@[]: 33410

@total: 315707

Note the highest hit above is __delay so probably not worth optimizing
even if it would be more frequent than 2k hits per sec.

Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/events/intel/core.c