lkml.org 
[lkml]   [2011]   [Jan]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:perf/core] x86: Convert some devices to use DIE_NMIUNKNOWN
    Commit-ID:  673a6092ce5f5bec45619b7a7f89cfcf8bcf3c41
    Gitweb: http://git.kernel.org/tip/673a6092ce5f5bec45619b7a7f89cfcf8bcf3c41
    Author: Don Zickus <dzickus@redhat.com>
    AuthorDate: Thu, 6 Jan 2011 16:18:48 -0500
    Committer: Ingo Molnar <mingo@elte.hu>
    CommitDate: Fri, 7 Jan 2011 15:08:52 +0100

    x86: Convert some devices to use DIE_NMIUNKNOWN

    They are a handful of places in the code that register a die_notifier
    as a catch all in case no claims the NMI. Unfortunately, they trigger
    on events like DIE_NMI and DIE_NMI_IPI, which depending on when they
    registered may collide with other handlers that have the ability to
    determine if the NMI is theirs or not.

    The function unknown_nmi_error() makes one last effort to walk the
    die_chain when no one else has claimed the NMI before spitting out
    messages that the NMI is unknown.

    This is a better spot for these devices to execute any code without
    colliding with the other handlers.

    The two drivers modified are only compiled on x86 arches I believe, so
    they shouldn't be affected by other arches that may not have
    DIE_NMIUNKNOWN defined.

    Signed-off-by: Don Zickus <dzickus@redhat.com>
    Cc: Russ Anderson <rja@sgi.com>
    Cc: Corey Minyard <minyard@acm.org>
    Cc: openipmi-developer@lists.sourceforge.net
    Cc: dann frazier <dannf@hp.com>
    Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    LKML-Reference: <1294348732-15030-3-git-send-email-dzickus@redhat.com>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    ---
    arch/x86/kernel/apic/x2apic_uv_x.c | 2 +-
    drivers/char/ipmi/ipmi_watchdog.c | 2 +-
    drivers/watchdog/hpwdt.c | 2 +-
    3 files changed, 3 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/kernel/apic/x2apic_uv_x.c b/arch/x86/kernel/apic/x2apic_uv_x.c
    index c1c52c3..927902d 100644
    --- a/arch/x86/kernel/apic/x2apic_uv_x.c
    +++ b/arch/x86/kernel/apic/x2apic_uv_x.c
    @@ -639,7 +639,7 @@ void __cpuinit uv_cpu_init(void)
    */
    int uv_handle_nmi(struct notifier_block *self, unsigned long reason, void *data)
    {
    - if (reason != DIE_NMI_IPI)
    + if (reason != DIE_NMIUNKNOWN)
    return NOTIFY_OK;

    if (in_crash_kexec)
    diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c
    index f4d334f..320668f 100644
    --- a/drivers/char/ipmi/ipmi_watchdog.c
    +++ b/drivers/char/ipmi/ipmi_watchdog.c
    @@ -1081,7 +1081,7 @@ ipmi_nmi(struct notifier_block *self, unsigned long val, void *data)
    {
    struct die_args *args = data;

    - if (val != DIE_NMI)
    + if (val != DIE_NMIUNKNOWN)
    return NOTIFY_OK;

    /* Hack, if it's a memory or I/O error, ignore it. */
    diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c
    index dea7b5b..24b966d 100644
    --- a/drivers/watchdog/hpwdt.c
    +++ b/drivers/watchdog/hpwdt.c
    @@ -469,7 +469,7 @@ static int hpwdt_pretimeout(struct notifier_block *nb, unsigned long ulReason,
    unsigned long rom_pl;
    static int die_nmi_called;

    - if (ulReason != DIE_NMI && ulReason != DIE_NMI_IPI)
    + if (ulReason != DIE_NMIUNKNOWN)
    goto out;

    if (!hpwdt_nmi_decoding)

    \
     
     \ /
      Last update: 2011-01-07 16:37    [W:0.024 / U:95.532 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site