[PATCH v2] ARM: MM: bugfix: initialize spinlock for init_mm.context
Kukjin Kim
kgene.kim at samsung.com
Tue Sep 28 00:55:07 EDT 2010
MyungJoo Ham wrote:
>
> init_mm used at kernel/sched.c:idle_task_exit() has spin_lock
> (init_mm.context.id_lock) that is not initialized when spin_lock/unlock
> is called at an ARM machine. Note that mm_struct.context.id_lock is
usually
> initialized except for the instance of init_mm at
linux/arch/arm/mm/context.c
>
> Not initializing this spinlock incurs "BUG: pinlock bad magic" warning
when
spinlock?
> spinlock debug is enabled. We have observed such instances when testing PM
in
> S5PC210 machines.
>
>
> Signed-off-by: MyungJoo Ham <myungjoo.ham at samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park at samsung.com>
> --
> changes
> v2: fixed incorrect initializer parameter (list_lock -> id_lock)
> ---
> arch/arm/include/asm/mmu.h | 4 ++++
> 1 files changed, 4 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/include/asm/mmu.h b/arch/arm/include/asm/mmu.h
> index 68870c7..c18540b 100644
> --- a/arch/arm/include/asm/mmu.h
> +++ b/arch/arm/include/asm/mmu.h
> @@ -13,6 +13,10 @@ typedef struct {
>
> #ifdef CONFIG_CPU_HAS_ASID
> #define ASID(mm) ((mm)->context.id & 255)
> +
> +/* init_mm.context.id_lock should be initialized. */
> +#define INIT_MM_CONTEXT(name)
> \
> + .context.id_lock = __SPIN_LOCK_UNLOCKED(name.context.id_lock),
> #else
> #define ASID(mm) (0)
> #endif
> --
Also, happened following warning without this patch when hotplug.
[root at Samsung ~]# echo 0 > /sys/devices/system/cpu/cpu1/online
BUG: spinlock bad magic on CPU#1, swapper/0
lock: 802fee10, .magic: 00000000, .owner: swapper/0, .owner_cpu: 1
[<8002e250>] (unwind_backtrace+0x0/0xec) from [<80163038>]
(do_raw_spin_unlock+0x20/0xc0)
[<80163038>] (do_raw_spin_unlock+0x20/0xc0) from [<80219420>]
(_raw_spin_unlock_irqrestore+0xc/0x38)
[<80219420>] (_raw_spin_unlock_irqrestore+0xc/0x38) from [<800319a8>]
(set_mm_context+0x94/0xb4)
[<800319a8>] (set_mm_context+0x94/0xb4) from [<80031ac4>]
(__new_context+0x9c/0xb4)
[<80031ac4>] (__new_context+0x9c/0xb4) from [<800443dc>]
(idle_task_exit+0xe0/0x140)
[<800443dc>] (idle_task_exit+0xe0/0x140) from [<80211dd8>]
(cpu_die+0x14/0x44)
[<80211dd8>] (cpu_die+0x14/0x44) from [<80029878>] (cpu_idle+0x54/0xd0)
[<80029878>] (cpu_idle+0x54/0xd0) from [<40008080>] (0x40008080)
CPU1: shutdown
[root at Samsung ~]# OK
In my opinion, this stuff should be sent to Russell's tree with Catalin's
ack.
Catalin, is still valid your ack?
Thanks.
Best regards,
Kgene.
--
Kukjin Kim <kgene.kim at samsung.com>, Senior Engineer,
SW Solution Development Team, Samsung Electronics Co., Ltd.
More information about the linux-arm-kernel
mailing list