lkml.org 
[lkml]   [2020]   [Sep]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] Revert "powerpc/64s: machine check interrupt update NMI accounting"
    Date
    This reverts commit 116ac378bb3ff844df333e7609e7604651a0db9d.

    This commit causes the kernel to oops and reboot when injecting a SLB
    multihit which causes a MCE.

    Before this commit a SLB multihit was corrected by the kernel and the
    system continued to operate normally.

    cc: stable@vger.kernel.org
    Fixes: 116ac378bb3f ("powerpc/64s: machine check interrupt update NMI accounting")
    Signed-off-by: Michal Suchanek <msuchanek@suse.de>
    ---
    arch/powerpc/kernel/mce.c | 7 -------
    arch/powerpc/kernel/traps.c | 18 +++---------------
    2 files changed, 3 insertions(+), 22 deletions(-)

    diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c
    index ada59f6c4298..2e13528dcc92 100644
    --- a/arch/powerpc/kernel/mce.c
    +++ b/arch/powerpc/kernel/mce.c
    @@ -591,14 +591,10 @@ EXPORT_SYMBOL_GPL(machine_check_print_event_info);
    long notrace machine_check_early(struct pt_regs *regs)
    {
    long handled = 0;
    - bool nested = in_nmi();
    u8 ftrace_enabled = this_cpu_get_ftrace_enabled();

    this_cpu_set_ftrace_enabled(0);

    - if (!nested)
    - nmi_enter();
    -
    hv_nmi_check_nonrecoverable(regs);

    /*
    @@ -607,9 +603,6 @@ long notrace machine_check_early(struct pt_regs *regs)
    if (ppc_md.machine_check_early)
    handled = ppc_md.machine_check_early(regs);

    - if (!nested)
    - nmi_exit();
    -
    this_cpu_set_ftrace_enabled(ftrace_enabled);

    return handled;
    diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
    index d1ebe152f210..7853b770918d 100644
    --- a/arch/powerpc/kernel/traps.c
    +++ b/arch/powerpc/kernel/traps.c
    @@ -827,19 +827,7 @@ void machine_check_exception(struct pt_regs *regs)
    {
    int recover = 0;

    - /*
    - * BOOK3S_64 does not call this handler as a non-maskable interrupt
    - * (it uses its own early real-mode handler to handle the MCE proper
    - * and then raises irq_work to call this handler when interrupts are
    - * enabled).
    - *
    - * This is silly. The BOOK3S_64 should just call a different function
    - * rather than expecting semantics to magically change. Something
    - * like 'non_nmi_machine_check_exception()', perhaps?
    - */
    - const bool nmi = !IS_ENABLED(CONFIG_PPC_BOOK3S_64);
    -
    - if (nmi) nmi_enter();
    + nmi_enter();

    __this_cpu_inc(irq_stat.mce_exceptions);

    @@ -865,7 +853,7 @@ void machine_check_exception(struct pt_regs *regs)
    if (check_io_access(regs))
    goto bail;

    - if (nmi) nmi_exit();
    + nmi_exit();

    die("Machine check", regs, SIGBUS);

    @@ -876,7 +864,7 @@ void machine_check_exception(struct pt_regs *regs)
    return;

    bail:
    - if (nmi) nmi_exit();
    + nmi_exit();
    }

    void SMIException(struct pt_regs *regs)
    --
    2.28.0
    \
     
     \ /
      Last update: 2020-09-15 20:11    [W:3.531 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site