[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>
This commit is contained in:
Don Zickus
2006-09-26 10:52:27 +02:00
committed by Andi Kleen
parent 407984f1af
commit e33e89ab1a
3 changed files with 17 additions and 39 deletions

View File

@ -847,7 +847,7 @@ static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu)
}
/*
* proc handler for /proc/sys/kernel/nmi_watchdog
* proc handler for /proc/sys/kernel/nmi
*/
int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
void __user *buffer, size_t *length, loff_t *ppos)
@ -861,8 +861,8 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
return 0;
if (atomic_read(&nmi_active) < 0) {
printk(KERN_WARNING "NMI watchdog is permanently disabled\n");
return -EINVAL;
printk( KERN_WARNING "NMI watchdog is permanently disabled\n");
return -EIO;
}
if (nmi_watchdog == NMI_DEFAULT) {
@ -872,24 +872,11 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
nmi_watchdog = NMI_IO_APIC;
}
if (nmi_watchdog == NMI_LOCAL_APIC)
{
if (nmi_watchdog == NMI_LOCAL_APIC) {
if (nmi_watchdog_enabled)
enable_lapic_nmi_watchdog();
else
disable_lapic_nmi_watchdog();
} else if (nmi_watchdog == NMI_IO_APIC) {
/* FIXME
* for some reason these functions don't work
*/
printk("Can not enable/disable NMI on IO APIC\n");
return -EINVAL;
#if 0
if (nmi_watchdog_enabled)
enable_timer_nmi_watchdog();
else
disable_timer_nmi_watchdog();
#endif
} else {
printk( KERN_WARNING
"NMI watchdog doesn't know what hardware to touch\n");