--- linux-2.6.11.11/include/asm-ppc64/pgalloc.h 2004-10-23 05:06:21 +0200 +++ linux-2.6.11.11-vs2.0-rc3/include/asm-ppc64/pgalloc.h 2005-06-01 14:34:17 +0200 @@ -6,7 +6,6 @@ #include #include #include -#include #include extern kmem_cache_t *zero_cache; --- linux-2.6.11.11/kernel/printk.c 2005-03-02 12:39:08 +0100 +++ linux-2.6.11.11-vs2.0-rc3/kernel/printk.c 2005-06-01 14:34:17 +0200 @@ -524,6 +521,8 @@ asmlinkage int printk(const char *fmt, . return r; } +static volatile int printk_cpu = -1; + asmlinkage int vprintk(const char *fmt, va_list args) { unsigned long flags; --- linux-2.6.11.11/kernel/printk.c 2005-03-02 12:39:08 +0100 +++ linux-2.6.11.11-vs2.0-rc3/kernel/printk.c 2005-06-01 14:34:17 +0200 @@ -532,11 +531,12 @@ asmlinkage int vprintk(const char *fmt, static char printk_buf[1024]; static int log_level_unknown = 1; - if (unlikely(oops_in_progress)) + if (unlikely(oops_in_progress && printk_cpu == smp_processor_id())) zap_locks(); /* This stops the holder of console_sem just where we want him */ spin_lock_irqsave(&logbuf_lock, flags); + printk_cpu = smp_processor_id(); /* Emit the output into the temporary buffer */ printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args);