aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/nmi_32.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/nmi_32.c')
-rw-r--r--arch/x86/kernel/nmi_32.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/arch/x86/kernel/nmi_32.c b/arch/x86/kernel/nmi_32.c
index 6a0aa703868..8421d0ac6f2 100644
--- a/arch/x86/kernel/nmi_32.c
+++ b/arch/x86/kernel/nmi_32.c
@@ -22,9 +22,11 @@
22#include <linux/cpumask.h> 22#include <linux/cpumask.h>
23#include <linux/kernel_stat.h> 23#include <linux/kernel_stat.h>
24#include <linux/kdebug.h> 24#include <linux/kdebug.h>
25#include <linux/slab.h>
25 26
26#include <asm/smp.h> 27#include <asm/smp.h>
27#include <asm/nmi.h> 28#include <asm/nmi.h>
29#include <asm/timer.h>
28 30
29#include "mach_traps.h" 31#include "mach_traps.h"
30 32
@@ -67,7 +69,7 @@ static __init void nmi_cpu_busy(void *data)
67} 69}
68#endif 70#endif
69 71
70static int __init check_nmi_watchdog(void) 72int __init check_nmi_watchdog(void)
71{ 73{
72 unsigned int *prev_nmi_count; 74 unsigned int *prev_nmi_count;
73 int cpu; 75 int cpu;
@@ -80,7 +82,7 @@ static int __init check_nmi_watchdog(void)
80 82
81 prev_nmi_count = kmalloc(NR_CPUS * sizeof(int), GFP_KERNEL); 83 prev_nmi_count = kmalloc(NR_CPUS * sizeof(int), GFP_KERNEL);
82 if (!prev_nmi_count) 84 if (!prev_nmi_count)
83 return -1; 85 goto error;
84 86
85 printk(KERN_INFO "Testing NMI watchdog ... "); 87 printk(KERN_INFO "Testing NMI watchdog ... ");
86 88
@@ -117,7 +119,7 @@ static int __init check_nmi_watchdog(void)
117 if (!atomic_read(&nmi_active)) { 119 if (!atomic_read(&nmi_active)) {
118 kfree(prev_nmi_count); 120 kfree(prev_nmi_count);
119 atomic_set(&nmi_active, -1); 121 atomic_set(&nmi_active, -1);
120 return -1; 122 goto error;
121 } 123 }
122 printk("OK.\n"); 124 printk("OK.\n");
123 125
@@ -128,9 +130,11 @@ static int __init check_nmi_watchdog(void)
128 130
129 kfree(prev_nmi_count); 131 kfree(prev_nmi_count);
130 return 0; 132 return 0;
133error:
134 timer_ack = !cpu_has_tsc;
135
136 return -1;
131} 137}
132/* This needs to happen later in boot so counters are working */
133late_initcall(check_nmi_watchdog);
134 138
135static int __init setup_nmi_watchdog(char *str) 139static int __init setup_nmi_watchdog(char *str)
136{ 140{