[PATCH] x86_64: Reduce NMI watchdog stack usage
authorAndi Kleen <ak@suse.de>
Tue, 17 May 2005 04:53:19 +0000 (21:53 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Tue, 17 May 2005 14:59:12 +0000 (07:59 -0700)
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>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/x86_64/kernel/nmi.c

index 61de0b34a01e850fedb824115b2e0560ed98ff59..ec13eb97e8e63472a8f8d67fd645ad286b456914 100644 (file)
@@ -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 (void)
                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 (void)
                               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 (void)
        if (nmi_watchdog == NMI_LOCAL_APIC)
                nmi_hz = 1;
 
+       kfree(counts);
        return 0;
 }
 /* Have this called later during boot so counters are updating */