x86: nmi - consolidate nmi_watchdog_default for 32bit mode
PATCH 1/2 x86: nmi - consolidate nmi_watchdog_default for 32bit mode
In reply to a message not in the archive64bit mode bootstrap code does set nmi_watchdog to NMI_NONE by default and doing the same on 32bit mode is safe too. Such an action saves us from several #ifdef.
Btw, my previous commit
commit 19ec673ced067316b9732bc6d1c4ff4052e5f795
Author: Cyrill Gorcunov <[email protected]> Date: Wed May 28 23:00:47 2008 +0400
x86: nmi - fix incorrect NMI watchdog used by default
did not fix the problem completely, moreover it introduced additional bug - nmi_watchdog would be set to either NMI_LOCAL_APIC or NMI_IO_APIC _regardless_ to boot option if being enabled thru /proc/sys/kernel/nmi_watchdog. Sorry for that.
Fix it too.
---
arch/x86/kernel/nmi.c +8 -6
@@ -487,14 +487,16 @@ int proc_nmi_enabled(struct ctl_table *treturn -EIO ; } -#ifdef CONFIG_X86_64 /* if nmi_watchdog is not set yet, then set it */ nmi_watchdog_default (); -#else -if (lapic_watchdog_ok ()) - nmi_watchdog =NMI_LOCAL_APIC ; -else - nmi_watchdog =NMI_IO_APIC ; + +#ifdef CONFIG_X86_32 +if (nmi_watchdog ==NMI_NONE ) { +if (lapic_watchdog_ok ()) + nmi_watchdog =NMI_LOCAL_APIC ; +else + nmi_watchdog =NMI_IO_APIC ; + }#endif if (nmi_watchdog ==NMI_LOCAL_APIC ) {
include/asm-x86/nmi.h +1 -3
@@ -38,12 +38,10 @@ static inline void unset_nmi_pm_callback#ifdef CONFIG_X86_64 extern void default_do_nmi (struct pt_regs *); -extern void nmi_watchdog_default (void ); -#else -#define nmi_watchdog_default () do { } while (0)#endif extern void die_nmi (char *str,struct pt_regs *regs,int do_panic); +extern void nmi_watchdog_default (void );extern int check_nmi_watchdog (void );extern int nmi_watchdog_enabled;extern int avail_to_resrv_perfctr_nmi_bit (unsigned int );
PATCH 2/2 x86: watchdog - check for CPU is being supported
In reply to a message not in the archiveThis patch does check if CPU is being recongnized before call the unreserve(). Since enable_lapic_nmi_watchdog() does have such a check the same is make sense here too in a sake of code consistency (but nothing more).
---
arch/x86/kernel/cpu/perfctr-watchdog.c +3 -1
@@ -181,7 +181,9 @@ void disable_lapic_nmi_watchdog(void)return ;on_each_cpu (stop_apic_nmi_watchdog,NULL ,0 ,1 ); - wd_ops->unreserve (); + +if (wd_ops) + wd_ops->unreserve ();BUG_ON (atomic_read (&nmi_active) !=0 ); }