lkml.org 
[lkml]   [2019]   [Jul]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 1/5] objtool: KVM: x86: Check kvm_rebooting in kvm_spurious_fault()
    Date
    Explicitly check kvm_reboot in kvm_spurious_fault() prior to invoking
    BUG(), as opposed to assuming the caller has already done so. Letting
    kvm_spurious_fault() be called "directly" will allow VMX to better
    optimize its low level assembly flows.

    As a happy side effect, kvm_spurious_fault() no longer needs to be
    marked as a dead end since it doesn't unconditionally BUG().

    Acked-by: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    ---
    arch/x86/include/asm/kvm_host.h | 2 +-
    arch/x86/kvm/x86.c | 3 ++-
    tools/objtool/check.c | 1 -
    3 files changed, 3 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
    index 8282b8d41209..9739ed615faf 100644
    --- a/arch/x86/include/asm/kvm_host.h
    +++ b/arch/x86/include/asm/kvm_host.h
    @@ -1496,7 +1496,7 @@ enum {
    #define kvm_arch_vcpu_memslots_id(vcpu) ((vcpu)->arch.hflags & HF_SMM_MASK ? 1 : 0)
    #define kvm_memslots_for_spte_role(kvm, role) __kvm_memslots(kvm, (role).smm)

    -asmlinkage void __noreturn kvm_spurious_fault(void);
    +asmlinkage void kvm_spurious_fault(void);

    /*
    * Hardware virtualization extension instructions may fault if a
    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index 4a0b74ecd1de..6bc012afb86a 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -356,7 +356,8 @@ EXPORT_SYMBOL_GPL(kvm_set_apic_base);
    asmlinkage __visible void kvm_spurious_fault(void)
    {
    /* Fault while not rebooting. We want the trace. */
    - BUG();
    + if (!kvm_rebooting)
    + BUG();
    }
    EXPORT_SYMBOL_GPL(kvm_spurious_fault);

    diff --git a/tools/objtool/check.c b/tools/objtool/check.c
    index 5f26620f13f5..688a9af8124d 100644
    --- a/tools/objtool/check.c
    +++ b/tools/objtool/check.c
    @@ -138,7 +138,6 @@ static bool __dead_end_function(struct objtool_file *file, struct symbol *func,
    "do_task_dead",
    "__module_put_and_exit",
    "complete_and_exit",
    - "kvm_spurious_fault",
    "__reiserfs_panic",
    "lbug_with_loc",
    "fortify_panic",
    --
    2.22.0
    \
     
     \ /
      Last update: 2019-07-19 22:42    [W:4.060 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site