[PATCH] i386: actively synchronize vmalloc area when registering certain callbacks
[powerpc.git] / arch / i386 / kernel / traps.c
index ee61988..d510de7 100644 (file)
@@ -99,6 +99,8 @@ int register_die_notifier(struct notifier_block *nb)
 {
        int err = 0;
        unsigned long flags;
+
+       vmalloc_sync_all();
        spin_lock_irqsave(&die_notifier_lock, flags);
        err = notifier_chain_register(&i386die_chain, nb);
        spin_unlock_irqrestore(&die_notifier_lock, flags);
@@ -188,8 +190,7 @@ static void show_trace_log_lvl(struct task_struct *task,
                stack = (unsigned long*)context->previous_esp;
                if (!stack)
                        break;
-               printk(log_lvl);
-               printk(" =======================\n");
+               printk("%s =======================\n", log_lvl);
        }
 }
 
@@ -218,14 +219,12 @@ static void show_stack_log_lvl(struct task_struct *task, unsigned long *esp,
                        break;
                if (i && ((i % 8) == 0)) {
                        printk("\n");
-                       printk(log_lvl);
-                       printk("       ");
+                       printk("%s       ", log_lvl);
                }
                printk("%08lx ", *stack++);
        }
        printk("\n");
-       printk(log_lvl);
-       printk("Call Trace:\n");
+       printk("%sCall Trace:\n", log_lvl);
        show_trace_log_lvl(task, esp, log_lvl);
 }
 
@@ -716,6 +715,7 @@ fastcall void do_nmi(struct pt_regs * regs, long error_code)
 
 void set_nmi_callback(nmi_callback_t callback)
 {
+       vmalloc_sync_all();
        rcu_assign_pointer(nmi_callback, callback);
 }
 EXPORT_SYMBOL_GPL(set_nmi_callback);