lkml.org 
[lkml]   [2010]   [Feb]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/nmi] x86: Move notify_die from nmi.c to traps.c
    Commit-ID:  e40b17208b6805be50ffe891878662b6076206b9
    Gitweb: http://git.kernel.org/tip/e40b17208b6805be50ffe891878662b6076206b9
    Author: Don Zickus <dzickus@redhat.com>
    AuthorDate: Fri, 5 Feb 2010 21:47:03 -0500
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Mon, 8 Feb 2010 08:29:02 +0100

    x86: Move notify_die from nmi.c to traps.c

    In order to handle a new nmi_watchdog approach, I need to move
    the notify_die() routine out of nmi_watchdog_tick() and into
    default_do_nmi(). This lets me easily swap out the old
    nmi_watchdog with the new one with just a config change.

    The change probably makes sense from a high level perspective
    because the nmi_watchdog shouldn't be handling notify_die
    routines anyway. However, this move does change the semantics a
    little bit. Instead of checking on every nmi interrupt if the
    cpus are stuck, only check them on the nmi_watchdog interrupts.

    v2: Move notify_die call into #idef block

    Signed-off-by: Don Zickus <dzickus@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: gorcunov@gmail.com
    Cc: aris@redhat.com
    Cc: peterz@infradead.org
    LKML-Reference: <1265424425-31562-2-git-send-email-dzickus@redhat.com>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    ---
    arch/x86/kernel/apic/nmi.c | 7 -------
    arch/x86/kernel/traps.c | 5 +++++
    2 files changed, 5 insertions(+), 7 deletions(-)

    diff --git a/arch/x86/kernel/apic/nmi.c b/arch/x86/kernel/apic/nmi.c
    index 0159a69..5d47682 100644
    --- a/arch/x86/kernel/apic/nmi.c
    +++ b/arch/x86/kernel/apic/nmi.c
    @@ -400,13 +400,6 @@ nmi_watchdog_tick(struct pt_regs *regs, unsigned reason)
    int cpu = smp_processor_id();
    int rc = 0;

    - /* check for other users first */
    - if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT)
    - == NOTIFY_STOP) {
    - rc = 1;
    - touched = 1;
    - }
    -
    sum = get_timer_irqs(cpu);

    if (__get_cpu_var(nmi_touch)) {
    diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c
    index 1168e44..51ef893 100644
    --- a/arch/x86/kernel/traps.c
    +++ b/arch/x86/kernel/traps.c
    @@ -400,7 +400,12 @@ static notrace __kprobes void default_do_nmi(struct pt_regs *regs)
    if (notify_die(DIE_NMI_IPI, "nmi_ipi", regs, reason, 2, SIGINT)
    == NOTIFY_STOP)
    return;
    +
    #ifdef CONFIG_X86_LOCAL_APIC
    + if (notify_die(DIE_NMI, "nmi", regs, reason, 2, SIGINT)
    + == NOTIFY_STOP)
    + return;
    +
    /*
    * Ok, so this is none of the documented NMI sources,
    * so it must be the NMI watchdog.

    \
     
     \ /
      Last update: 2010-02-08 09:55    [W:0.023 / U:0.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site