From: Benjamin Herrenschmidt Date: Wed, 9 Apr 2008 07:21:26 +0000 (+1000) Subject: [POWERPC] Initialize paca->current earlier X-Git-Tag: v2.6.26-rc1~1125^2~41 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c6352a4699e9a3a2d91b2cddbf3f1048207e904;p=linux-2.6 [POWERPC] Initialize paca->current earlier Currently, we initialize the "current" pointer in the PACA (which is used by the "current" macro in the kernel) before calling setup_system(). That means that early_setup() is called with current still "NULL" which is -not- a good idea. It happens to work so far but breaks with lockdep when early code calls printk. This changes it so that all PACAs are statically initialized with __current pointing to the init task. For non-0 CPUs, this is fixed up before use. Signed-off-by: Benjamin Herrenschmidt Signed-off-by: Paul Mackerras --- diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S index 43a38d89ea..44229c3749 100644 --- a/arch/powerpc/kernel/head_64.S +++ b/arch/powerpc/kernel/head_64.S @@ -1521,10 +1521,6 @@ _INIT_GLOBAL(start_here_common) li r0,0 stdu r0,-STACK_FRAME_OVERHEAD(r1) - /* ptr to current */ - LOAD_REG_IMMEDIATE(r4, init_task) - std r4,PACACURRENT(r13) - /* Load the TOC */ ld r2,PACATOC(r13) std r1,PACAKSAVE(r13) diff --git a/arch/powerpc/kernel/paca.c b/arch/powerpc/kernel/paca.c index 867b22d173..ac163bd46c 100644 --- a/arch/powerpc/kernel/paca.c +++ b/arch/powerpc/kernel/paca.c @@ -73,6 +73,7 @@ struct slb_shadow slb_shadow[] __cacheline_aligned = { .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL, \ .hw_cpu_id = 0xffff, \ .slb_shadow_ptr = &slb_shadow[number], \ + .__current = &init_task, \ } struct paca_struct paca[] = {