From mboxrd@z Thu Jan 1 00:00:00 1970 From: leoy@marvell.com (Leo Yan) Date: Wed, 16 Apr 2014 20:28:14 +0800 Subject: [PATCH] arm64: initialize spinlock for init_mm's context In-Reply-To: <20140416081506.GB29754@arm.com> References: <1397550050-5321-1-git-send-email-leoy@marvell.com> <20140416081506.GB29754@arm.com> Message-ID: <534E775E.8090105@marvell.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 04/16/2014 04:15 PM, Will Deacon wrote: > On Tue, Apr 15, 2014 at 09:20:50AM +0100, Leo Yan wrote: >> ARM64 has defined the spinlock for init_mm's context, so need initialize >> the spinlock structure; otherwise during the suspend flow it will dump >> the info for spinlock's bad magic warning as below: >> >> [ 39.084394] Disabling non-boot CPUs ... >> [ 39.092871] BUG: spinlock bad magic on CPU#1, swapper/1/0 >> [ 39.092896] lock: init_mm+0x338/0x3e0, .magic: 00000000, .owner: /-1, .owner_cpu: 0 >> [ 39.092907] CPU: 1 PID: 0 Comm: swapper/1 Tainted: G O 3.10.33 #125 >> [ 39.092912] Call trace: >> [ 39.092927] [] dump_backtrace+0x0/0x16c >> [ 39.092934] [] show_stack+0x10/0x1c >> [ 39.092947] [] dump_stack+0x1c/0x28 >> [ 39.092953] [] spin_dump+0x78/0x88 >> [ 39.092960] [] spin_bug+0x24/0x34 >> [ 39.092971] [] do_raw_spin_lock+0x98/0x17c >> [ 39.092979] [] _raw_spin_lock_irqsave+0x4c/0x60 >> [ 39.092990] [] set_mm_context+0x1c/0x6c >> [ 39.092996] [] __new_context+0x94/0x10c >> [ 39.093007] [] idle_task_exit+0x104/0x1b0 >> [ 39.093014] [] cpu_die+0x14/0x74 >> [ 39.093021] [] arch_cpu_idle_dead+0x8/0x14 >> [ 39.093030] [] cpu_startup_entry+0x1ec/0x258 >> [ 39.093036] [] secondary_start_kernel+0x114/0x124 >> >> Signed-off-by: Leo Yan >> --- >> arch/arm64/include/asm/mmu.h | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/arch/arm64/include/asm/mmu.h b/arch/arm64/include/asm/mmu.h >> index f600d40..06a19bd 100644 >> --- a/arch/arm64/include/asm/mmu.h >> +++ b/arch/arm64/include/asm/mmu.h >> @@ -22,6 +22,9 @@ typedef struct { >> void *vdso; >> } mm_context_t; >> >> +#define INIT_MM_CONTEXT(name) \ >> + .context.id_lock = __RAW_SPIN_LOCK_INITIALIZER(name.context.id_lock), > > This should probably be __RAW_SPIN_LOCK_UNLOCKED instead. > Thanks for reviewing, pls see v2's patch. Thx, Leo Yan