
From: "Andi Kleen" <ak@suse.de>

NR_CPUs can be quite big these days.  kmalloc the per CPU array instead of
putting it onto the stack

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 arch/x86_64/kernel/nmi.c |   10 +++++++++-
 1 files changed, 9 insertions(+), 1 deletion(-)

diff -puN arch/x86_64/kernel/nmi.c~x86_64-reduce-nmi-watchdog-stack-usage arch/x86_64/kernel/nmi.c
--- 25/arch/x86_64/kernel/nmi.c~x86_64-reduce-nmi-watchdog-stack-usage	2005-05-13 22:54:32.000000000 -0700
+++ 25-akpm/arch/x86_64/kernel/nmi.c	2005-05-13 22:54:32.000000000 -0700
@@ -114,7 +114,7 @@ static __init int cpu_has_lapic(void)
 
 static int __init check_nmi_watchdog (void)
 {
-	int counts[NR_CPUS];
+	int *counts;
 	int cpu;
 
 	if (nmi_watchdog == NMI_NONE)
@@ -125,6 +125,12 @@ static int __init check_nmi_watchdog (vo
 		return -1; 
 	}	
 
+	counts = kmalloc(NR_CPUS * sizeof(int),GFP_KERNEL);
+	if (!counts) {
+		nmi_watchdog = NMI_NONE;
+		return 0;
+	}
+
 	printk(KERN_INFO "Testing NMI watchdog ... ");
 
 	for (cpu = 0; cpu < NR_CPUS; cpu++)
@@ -139,6 +145,7 @@ static int __init check_nmi_watchdog (vo
 			       cpu_pda[cpu].__nmi_count);
 			nmi_active = 0;
 			lapic_nmi_owner &= ~LAPIC_NMI_WATCHDOG;
+			kfree(counts);
 			return -1;
 		}
 	}
@@ -149,6 +156,7 @@ static int __init check_nmi_watchdog (vo
 	if (nmi_watchdog == NMI_LOCAL_APIC)
 		nmi_hz = 1;
 
+	kfree(counts);
 	return 0;
 }
 /* Have this called later during boot so counters are updating */
_
