Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=0328ecef9041fe477efc2404fd3aaa29e7ee0430
Commit:     0328ecef9041fe477efc2404fd3aaa29e7ee0430
Parent:     8154549cb8ca795cbefda404cd6120398e5b145f
Author:     Daniel Gollub <[EMAIL PROTECTED]>
AuthorDate: Wed Aug 15 02:40:35 2007 +0200
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Sat Aug 18 10:25:25 2007 -0700

    x86_64: Fix to keep watchdog disabled by default for i386/x86_64
    
    Fixed wrong expression which enabled watchdogs even if nmi_watchdog kernel
    parameter wasn't set. This regression got slightly introduced with commit
    b7471c6da94d30d3deadc55986cc38d1ff57f9ca.
    
    Introduced NMI_DISABLED (-1) which allows to switch the value of NMI_DEFAULT
    without breaking the APIC NMI watchdog code (again).
    
    Fixes:
       https://bugzilla.novell.com/show_bug.cgi?id=298084
       http://bugzilla.kernel.org/show_bug.cgi?id=7839
    And likely some more nmi_watchdog=0 related issues.
    
    Signed-off-by: Daniel Gollub <[EMAIL PROTECTED]>
    Signed-off-by: Andi Kleen <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 arch/i386/kernel/apic.c  |    2 +-
 arch/i386/kernel/nmi.c   |    4 ++--
 arch/x86_64/kernel/nmi.c |    4 ++--
 include/asm-i386/nmi.h   |    3 ++-
 include/asm-x86_64/nmi.h |    3 ++-
 5 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/arch/i386/kernel/apic.c b/arch/i386/kernel/apic.c
index f9fff29..3d67ae1 100644
--- a/arch/i386/kernel/apic.c
+++ b/arch/i386/kernel/apic.c
@@ -1085,7 +1085,7 @@ static int __init detect_init_APIC (void)
        if (l & MSR_IA32_APICBASE_ENABLE)
                mp_lapic_addr = l & MSR_IA32_APICBASE_BASE;
 
-       if (nmi_watchdog != NMI_NONE)
+       if (nmi_watchdog != NMI_NONE && nmi_watchdog != NMI_DISABLED)
                nmi_watchdog = NMI_LOCAL_APIC;
 
        printk(KERN_INFO "Found and enabled local APIC!\n");
diff --git a/arch/i386/kernel/nmi.c b/arch/i386/kernel/nmi.c
index 99beac7..8c1c965 100644
--- a/arch/i386/kernel/nmi.c
+++ b/arch/i386/kernel/nmi.c
@@ -77,7 +77,7 @@ static int __init check_nmi_watchdog(void)
        unsigned int *prev_nmi_count;
        int cpu;
 
-       if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DEFAULT))
+       if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DISABLED))
                return 0;
 
        if (!atomic_read(&nmi_active))
@@ -424,7 +424,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) {
+       if (atomic_read(&nmi_active) < 0 || nmi_watchdog == NMI_DISABLED) {
                printk( KERN_WARNING "NMI watchdog is permanently disabled\n");
                return -EIO;
        }
diff --git a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c
index cb8ee9d..0ec6d2d 100644
--- a/arch/x86_64/kernel/nmi.c
+++ b/arch/x86_64/kernel/nmi.c
@@ -85,7 +85,7 @@ int __init check_nmi_watchdog (void)
        int *counts;
        int cpu;
 
-       if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DEFAULT))
+       if ((nmi_watchdog == NMI_NONE) || (nmi_watchdog == NMI_DISABLED)) 
                return 0;
 
        if (!atomic_read(&nmi_active))
@@ -442,7 +442,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) {
+       if (atomic_read(&nmi_active) < 0 || nmi_watchdog == NMI_DISABLED) {
                printk( KERN_WARNING "NMI watchdog is permanently disabled\n");
                return -EIO;
        }
diff --git a/include/asm-i386/nmi.h b/include/asm-i386/nmi.h
index ff30c98..70a958a 100644
--- a/include/asm-i386/nmi.h
+++ b/include/asm-i386/nmi.h
@@ -33,11 +33,12 @@ extern int nmi_watchdog_tick (struct pt_regs * regs, 
unsigned reason);
 
 extern atomic_t nmi_active;
 extern unsigned int nmi_watchdog;
-#define NMI_DEFAULT     -1
+#define NMI_DISABLED    -1
 #define NMI_NONE       0
 #define NMI_IO_APIC    1
 #define NMI_LOCAL_APIC 2
 #define NMI_INVALID    3
+#define NMI_DEFAULT    NMI_DISABLED
 
 struct ctl_table;
 struct file;
diff --git a/include/asm-x86_64/nmi.h b/include/asm-x86_64/nmi.h
index 5fb3c0d..65b6acf 100644
--- a/include/asm-x86_64/nmi.h
+++ b/include/asm-x86_64/nmi.h
@@ -64,11 +64,12 @@ extern int setup_nmi_watchdog(char *);
 
 extern atomic_t nmi_active;
 extern unsigned int nmi_watchdog;
-#define NMI_DEFAULT    -1
+#define NMI_DISABLED    -1
 #define NMI_NONE       0
 #define NMI_IO_APIC    1
 #define NMI_LOCAL_APIC 2
 #define NMI_INVALID    3
+#define NMI_DEFAULT    NMI_DISABLED
 
 struct ctl_table;
 struct file;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to