From 38792720c7f6d7dc04d33992c21b9d66442619d7 Mon Sep 17 00:00:00 2001 From: Cyrill Gorcunov Date: Tue, 24 Jun 2008 22:52:06 +0200 Subject: [PATCH] --- yaml --- r: 99899 b: refs/heads/master c: 4de0043617f949fdac538fd59335e2150cd1b863 h: refs/heads/master i: 99897: 4d817c75b6bbf4696c2b217e6b42860c9d978545 99895: 95325c55b7c11f149c44a2fda5cca552802774a8 v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/nmi.c | 13 ++++--------- trunk/include/asm-x86/nmi.h | 13 +++++++++++++ 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 2d824d3d4dab..772e7870e7f8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c376d45432d935e6f1e0ff2d6be3734bcd3ba455 +refs/heads/master: 4de0043617f949fdac538fd59335e2150cd1b863 diff --git a/trunk/arch/x86/kernel/nmi.c b/trunk/arch/x86/kernel/nmi.c index 32acda25e3cb..8dfe9db87a9e 100644 --- a/trunk/arch/x86/kernel/nmi.c +++ b/trunk/arch/x86/kernel/nmi.c @@ -119,10 +119,7 @@ int __init check_nmi_watchdog(void) unsigned int *prev_nmi_count; int cpu; - if (nmi_watchdog == NMI_NONE) - return 0; - - if (!atomic_read(&nmi_active)) + if (!nmi_watchdog_active() || !atomic_read(&nmi_active)) return 0; prev_nmi_count = kmalloc(nr_cpu_ids * sizeof(int), GFP_KERNEL); @@ -317,8 +314,7 @@ void setup_apic_nmi_watchdog(void *unused) void stop_apic_nmi_watchdog(void *unused) { /* only support LOCAL and IO APICs for now */ - if (nmi_watchdog != NMI_LOCAL_APIC && - nmi_watchdog != NMI_IO_APIC) + if (!nmi_watchdog_active()) return; if (__get_cpu_var(wd_enabled) == 0) return; @@ -348,8 +344,7 @@ static DEFINE_PER_CPU(int, nmi_touch); void touch_nmi_watchdog(void) { - if (nmi_watchdog == NMI_LOCAL_APIC || - nmi_watchdog == NMI_IO_APIC) { + if (nmi_watchdog_active()) { unsigned cpu; /* @@ -474,7 +469,7 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file, if (!!old_state == !!nmi_watchdog_enabled) return 0; - if (atomic_read(&nmi_active) < 0 || nmi_watchdog == NMI_NONE) { + if (atomic_read(&nmi_active) < 0 || !nmi_watchdog_active()) { printk(KERN_WARNING "NMI watchdog is permanently disabled\n"); return -EIO; diff --git a/trunk/include/asm-x86/nmi.h b/trunk/include/asm-x86/nmi.h index 1348e542360f..21f8d0202a82 100644 --- a/trunk/include/asm-x86/nmi.h +++ b/trunk/include/asm-x86/nmi.h @@ -56,6 +56,19 @@ static inline void localise_nmi_watchdog(void) if (nmi_watchdog == NMI_IO_APIC) nmi_watchdog = NMI_LOCAL_APIC; } + +/* check if nmi_watchdog is active (ie was specified at boot) */ +static inline int nmi_watchdog_active(void) +{ + /* + * actually it should be: + * return (nmi_watchdog == NMI_LOCAL_APIC || + * nmi_watchdog == NMI_IO_APIC) + * but since they are power of two we could use a + * cheaper way --cvg + */ + return nmi_watchdog & 0x3; +} #endif void lapic_watchdog_stop(void);