NMI switch that most IA32 servers have fires unknown NMI up, for example.
 If a system hangs up, try pressing the NMI switch.
 
-[NOTE]
-   This function and oprofile share a NMI callback. Therefore this function
-   cannot be enabled when oprofile is activated.
-   And NMI watchdog will be disabled when the value in this file is set to
-   non-zero.
+nmi_watchdog
+------------
+
+Enables/Disables the NMI watchdog on x86 systems.  When the value is non-zero
+the NMI watchdog is enabled and will continuously test all online cpus to
+determine whether or not they are still functioning properly.
+
+Because the NMI watchdog shares registers with oprofile, by disabling the NMI
+watchdog, oprofile may have more registers to utilize.
 
 
 2.4 /proc/sys/vm - The virtual memory subsystem
 
 }
 
 /*
- * 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)
                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) {
                        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");
 
 }
 
 /* Run after command line and cpu_init init, but before all other checks */
-void __cpuinit nmi_watchdog_default(void)
+void nmi_watchdog_default(void)
 {
        if (nmi_watchdog != NMI_DEFAULT)
                return;
 
        if (atomic_read(&nmi_active) < 0) {
                printk( KERN_WARNING "NMI watchdog is permanently disabled\n");
-               return -EINVAL;
+               return -EIO;
        }
 
        /* if nmi_watchdog is not set yet, then set it */
        nmi_watchdog_default();
 
-       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 -EIO;
-#if 0
-               if (nmi_watchdog_enabled)
-                       enable_timer_nmi_watchdog();
-               else
-                       disable_timer_nmi_watchdog();
-#endif
        } else {
-               printk(KERN_WARNING
+               printk( KERN_WARNING
                        "NMI watchdog doesn't know what hardware to touch\n");
                return -EIO;
        }