]> git.hungrycats.org Git - linux/commitdiff
[PATCH] fix MCE startup ordering problems
authorAndrew Morton <akpm@digeo.com>
Mon, 14 Apr 2003 13:11:02 +0000 (06:11 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Mon, 14 Apr 2003 13:11:02 +0000 (06:11 -0700)
The MCE code is setting up a timer whose handler uses the workqueue code
before workqueue is initialised.  If you boot slowly it oopses.

Convert the MCE code to use an initcall.

arch/i386/kernel/cpu/mcheck/k7.c
arch/i386/kernel/cpu/mcheck/mce.h
arch/i386/kernel/cpu/mcheck/non-fatal.c
arch/i386/kernel/cpu/mcheck/p4.c

index 1df54f5a7087750b4b3318e38125e0764d588513..37ae4a9d3d1c0040b695c101000e16c7b0674dd9 100644 (file)
@@ -92,8 +92,4 @@ void __init amd_mcheck_init(struct cpuinfo_x86 *c)
        set_in_cr4 (X86_CR4_MCE);
        printk (KERN_INFO "Intel machine check reporting enabled on CPU#%d.\n",
                smp_processor_id());
-
-#ifdef CONFIG_X86_MCE_NONFATAL
-       init_nonfatal_mce_checker();
-#endif
 }
index 614719e3fe0ae1f114e9f1cdb786b2b668700c1e..550c38a350687b207a21d618be9249f8dde5df40 100644 (file)
@@ -6,8 +6,6 @@ void intel_p5_mcheck_init(struct cpuinfo_x86 *c);
 void intel_p6_mcheck_init(struct cpuinfo_x86 *c);
 void winchip_mcheck_init(struct cpuinfo_x86 *c);
 
-void init_nonfatal_mce_checker(void);
-
 /* Call the installed machine check handler for this CPU setup. */
 extern void (*machine_check_vector)(struct pt_regs *, long error_code);
 
index 9bbb02ba6abcae3b17ee3851f92e9e14a121462f..f657dc87ccbceed95f1dbb56a4d5a857da5dc08d 100644 (file)
@@ -11,6 +11,7 @@
 #include <linux/workqueue.h>
 #include <linux/interrupt.h>
 #include <linux/smp.h>
+#include <linux/module.h>
 
 #include <asm/processor.h> 
 #include <asm/system.h>
@@ -65,7 +66,7 @@ static void mce_timerfunc (unsigned long data)
        add_timer (&mce_timer);
 }      
 
-void init_nonfatal_mce_checker()
+static int __init init_nonfatal_mce_checker(void)
 {
        if (timerset == 0) {
                /* Set the timer to check for non-fatal
@@ -78,4 +79,6 @@ void init_nonfatal_mce_checker()
                timerset = 1;
                printk(KERN_INFO "Machine check exception polling timer started.\n");
        }
+       return 0;
 }
+module_init(init_nonfatal_mce_checker);
index 044aab612f666c870c39ace904a21ca8a8beba0f..3533664fc4a7413039a4a885d9b4991375a3459a 100644 (file)
@@ -255,7 +255,4 @@ void __init intel_p4_mcheck_init(struct cpuinfo_x86 *c)
                intel_init_thermal(c);
 #endif
        }
-#ifdef CONFIG_X86_MCE_NONFATAL
-       init_nonfatal_mce_checker();
-#endif
 }