lkml.org 
[lkml]   [2022]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 24/78] x86/kvm/vmx: Make noinstr clean
    Date
    From: Peter Zijlstra <peterz@infradead.org>

    commit 742ab6df974ae8384a2dd213db1a3a06cf6d8936 upstream.

    The recent mmio_stale_data fixes broke the noinstr constraints:

    vmlinux.o: warning: objtool: vmx_vcpu_enter_exit+0x15b: call to wrmsrl.constprop.0() leaves .noinstr.text section
    vmlinux.o: warning: objtool: vmx_vcpu_enter_exit+0x1bf: call to kvm_arch_has_assigned_device() leaves .noinstr.text section

    make it all happy again.

    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/x86/kvm/vmx/vmx.c | 6 +++---
    arch/x86/kvm/x86.c | 4 ++--
    include/linux/kvm_host.h | 2 +-
    3 files changed, 6 insertions(+), 6 deletions(-)

    --- a/arch/x86/kvm/vmx/vmx.c
    +++ b/arch/x86/kvm/vmx/vmx.c
    @@ -380,9 +380,9 @@ static __always_inline void vmx_disable_
    if (!vmx->disable_fb_clear)
    return;

    - rdmsrl(MSR_IA32_MCU_OPT_CTRL, msr);
    + msr = __rdmsr(MSR_IA32_MCU_OPT_CTRL);
    msr |= FB_CLEAR_DIS;
    - wrmsrl(MSR_IA32_MCU_OPT_CTRL, msr);
    + native_wrmsrl(MSR_IA32_MCU_OPT_CTRL, msr);
    /* Cache the MSR value to avoid reading it later */
    vmx->msr_ia32_mcu_opt_ctrl = msr;
    }
    @@ -393,7 +393,7 @@ static __always_inline void vmx_enable_f
    return;

    vmx->msr_ia32_mcu_opt_ctrl &= ~FB_CLEAR_DIS;
    - wrmsrl(MSR_IA32_MCU_OPT_CTRL, vmx->msr_ia32_mcu_opt_ctrl);
    + native_wrmsrl(MSR_IA32_MCU_OPT_CTRL, vmx->msr_ia32_mcu_opt_ctrl);
    }

    static void vmx_update_fb_clear_dis(struct kvm_vcpu *vcpu, struct vcpu_vmx *vmx)
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -12177,9 +12177,9 @@ void kvm_arch_end_assignment(struct kvm
    }
    EXPORT_SYMBOL_GPL(kvm_arch_end_assignment);

    -bool kvm_arch_has_assigned_device(struct kvm *kvm)
    +bool noinstr kvm_arch_has_assigned_device(struct kvm *kvm)
    {
    - return atomic_read(&kvm->arch.assigned_device_count);
    + return arch_atomic_read(&kvm->arch.assigned_device_count);
    }
    EXPORT_SYMBOL_GPL(kvm_arch_has_assigned_device);

    --- a/include/linux/kvm_host.h
    +++ b/include/linux/kvm_host.h
    @@ -1233,7 +1233,7 @@ static inline void kvm_arch_end_assignme
    {
    }

    -static inline bool kvm_arch_has_assigned_device(struct kvm *kvm)
    +static __always_inline bool kvm_arch_has_assigned_device(struct kvm *kvm)
    {
    return false;
    }

    \
     
     \ /
      Last update: 2022-07-12 21:01    [W:3.882 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site