aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86_64/kernel/nmi.c
diff options
context:
space:
mode:
authorDon Zickus <dzickus@redhat.com>2006-09-26 04:52:27 -0400
committerAndi Kleen <andi@basil.nowhere.org>2006-09-26 04:52:27 -0400
commite33e89ab1a8d295de0500b697f4f31c3ceee9aa2 (patch)
tree51a7955a1a67f65169278a97d3d54305cb18e8ae /arch/x86_64/kernel/nmi.c
parent407984f1af259b31957c7c05075a454a751bb801 (diff)
[PATCH] x86: Add abilty to enable/disable nmi watchdog from procfs (update)
Adds a new /proc/sys/kernel/nmi_watchdog call that will enable/disable the nmi watchdog. By entering a non-zero value here, a user can enable the nmi watchdog to monitor the online cpus in the system. By entering a zero value here, a user can disable the nmi watchdog and free up a performance counter which could then be utilized by the oprofile subsystem, otherwise oprofile may be short a counter when in use. Signed-off-by: Don Zickus <dzickus@redhat.com> Signed-off-by: Andi Kleen <ak@suse.de> Cc: Andi Kleen <ak@muc.de> Signed-off-by: Andrew Morton <akpm@osdl.org>
Diffstat (limited to 'arch/x86_64/kernel/nmi.c')
-rw-r--r--arch/x86_64/kernel/nmi.c21
1 files changed, 4 insertions, 17 deletions
diff --git a/arch/x86_64/kernel/nmi.c b/arch/x86_64/kernel/nmi.c
index 3a17411a9a19..dd57410dad51 100644
--- a/arch/x86_64/kernel/nmi.c
+++ b/arch/x86_64/kernel/nmi.c
@@ -167,7 +167,7 @@ static __cpuinit inline int nmi_known_cpu(void)
167} 167}
168 168
169/* Run after command line and cpu_init init, but before all other checks */ 169/* Run after command line and cpu_init init, but before all other checks */
170void __cpuinit nmi_watchdog_default(void) 170void nmi_watchdog_default(void)
171{ 171{
172 if (nmi_watchdog != NMI_DEFAULT) 172 if (nmi_watchdog != NMI_DEFAULT)
173 return; 173 return;
@@ -766,32 +766,19 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
766 766
767 if (atomic_read(&nmi_active) < 0) { 767 if (atomic_read(&nmi_active) < 0) {
768 printk( KERN_WARNING "NMI watchdog is permanently disabled\n"); 768 printk( KERN_WARNING "NMI watchdog is permanently disabled\n");
769 return -EINVAL; 769 return -EIO;
770 } 770 }
771 771
772 /* if nmi_watchdog is not set yet, then set it */ 772 /* if nmi_watchdog is not set yet, then set it */
773 nmi_watchdog_default(); 773 nmi_watchdog_default();
774 774
775 if (nmi_watchdog == NMI_LOCAL_APIC) 775 if (nmi_watchdog == NMI_LOCAL_APIC) {
776 {
777 if (nmi_watchdog_enabled) 776 if (nmi_watchdog_enabled)
778 enable_lapic_nmi_watchdog(); 777 enable_lapic_nmi_watchdog();
779 else 778 else
780 disable_lapic_nmi_watchdog(); 779 disable_lapic_nmi_watchdog();
781 } else if (nmi_watchdog == NMI_IO_APIC) {
782 /* FIXME
783 * for some reason these functions don't work
784 */
785 printk("Can not enable/disable NMI on IO APIC\n");
786 return -EIO;
787#if 0
788 if (nmi_watchdog_enabled)
789 enable_timer_nmi_watchdog();
790 else
791 disable_timer_nmi_watchdog();
792#endif
793 } else { 780 } else {
794 printk(KERN_WARNING 781 printk( KERN_WARNING
795 "NMI watchdog doesn't know what hardware to touch\n"); 782 "NMI watchdog doesn't know what hardware to touch\n");
796 return -EIO; 783 return -EIO;
797 } 784 }