lkml.org 
[lkml]   [2018]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:x86/pti] Revert "x86/speculation: Simplify indirect_branch_prediction_barrier()"
    Commit-ID:  930ce1a7a55bc0eb8917f453ee22f1b6d67df5cd
    Gitweb: https://git.kernel.org/tip/930ce1a7a55bc0eb8917f453ee22f1b6d67df5cd
    Author: David Woodhouse <dwmw@amazon.co.uk>
    AuthorDate: Sat, 10 Feb 2018 23:39:23 +0000
    Committer: Ingo Molnar <mingo@kernel.org>
    CommitDate: Sun, 11 Feb 2018 11:24:15 +0100

    Revert "x86/speculation: Simplify indirect_branch_prediction_barrier()"

    This reverts commit 64e16720ea0879f8ab4547e3b9758936d483909b.

    We cannot call C functions like that, without marking all the
    call-clobbered registers as, well, clobbered. We might have got away
    with it for now because the __ibp_barrier() function was *fairly*
    unlikely to actually use any other registers. But no. Just no.

    Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: David Woodhouse <dwmw2@infradead.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: arjan.van.de.ven@intel.com
    Cc: dave.hansen@intel.com
    Cc: jmattson@google.com
    Cc: karahmed@amazon.de
    Cc: kvm@vger.kernel.org
    Cc: pbonzini@redhat.com
    Cc: rkrcmar@redhat.com
    Cc: sironi@amazon.de
    Link: http://lkml.kernel.org/r/1518305967-31356-3-git-send-email-dwmw@amazon.co.uk
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    ---
    arch/x86/include/asm/nospec-branch.h | 13 +++++++++----
    arch/x86/include/asm/processor.h | 3 ---
    arch/x86/kernel/cpu/bugs.c | 6 ------
    3 files changed, 9 insertions(+), 13 deletions(-)

    diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
    index 4d57894..300cc15 100644
    --- a/arch/x86/include/asm/nospec-branch.h
    +++ b/arch/x86/include/asm/nospec-branch.h
    @@ -164,10 +164,15 @@ static inline void vmexit_fill_RSB(void)

    static inline void indirect_branch_prediction_barrier(void)
    {
    - alternative_input("",
    - "call __ibp_barrier",
    - X86_FEATURE_USE_IBPB,
    - ASM_NO_INPUT_CLOBBER("eax", "ecx", "edx", "memory"));
    + asm volatile(ALTERNATIVE("",
    + "movl %[msr], %%ecx\n\t"
    + "movl %[val], %%eax\n\t"
    + "movl $0, %%edx\n\t"
    + "wrmsr",
    + X86_FEATURE_USE_IBPB)
    + : : [msr] "i" (MSR_IA32_PRED_CMD),
    + [val] "i" (PRED_CMD_IBPB)
    + : "eax", "ecx", "edx", "memory");
    }

    #endif /* __ASSEMBLY__ */
    diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
    index 513f960..99799fb 100644
    --- a/arch/x86/include/asm/processor.h
    +++ b/arch/x86/include/asm/processor.h
    @@ -969,7 +969,4 @@ bool xen_set_default_idle(void);

    void stop_this_cpu(void *dummy);
    void df_debug(struct pt_regs *regs, long error_code);
    -
    -void __ibp_barrier(void);
    -
    #endif /* _ASM_X86_PROCESSOR_H */
    diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
    index 71949bf..61152aa 100644
    --- a/arch/x86/kernel/cpu/bugs.c
    +++ b/arch/x86/kernel/cpu/bugs.c
    @@ -337,9 +337,3 @@ ssize_t cpu_show_spectre_v2(struct device *dev,
    spectre_v2_module_string());
    }
    #endif
    -
    -void __ibp_barrier(void)
    -{
    - __wrmsr(MSR_IA32_PRED_CMD, PRED_CMD_IBPB, 0);
    -}
    -EXPORT_SYMBOL_GPL(__ibp_barrier);
    \
     
     \ /
      Last update: 2018-02-12 03:49    [W:34.958 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site