Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754098AbdDONlD (ORCPT ); Sat, 15 Apr 2017 09:41:03 -0400 Received: from foss.arm.com ([217.140.101.70]:40248 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751582AbdDONlA (ORCPT ); Sat, 15 Apr 2017 09:41:00 -0400 From: Marc Zyngier To: Tyler Baker Cc: linux-kernel@vger.kernel.org, jason@lakedaemon.net, tglx@linutronix.de, festevam@gmail.com, andrew.smirnov@gmail.com, linux-arm-kernel@lists.infradead.org, shawnguo@kernel.org Subject: Re: [PATCH] irqchip/irq-imx-gpcv2: fix spinlock initialization In-Reply-To: <20170413222731.5917-1-tyler.baker@linaro.org> (Tyler Baker's message of "Thu, 13 Apr 2017 15:27:31 -0700") Organization: ARM Ltd References: <20170413222731.5917-1-tyler.baker@linaro.org> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) Date: Sat, 15 Apr 2017 14:40:35 +0100 Message-ID: <87bmrxpz58.fsf@on-the-bus.cambridge.arm.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3740 Lines: 86 On Thu, Apr 13 2017 at 11:27:31 pm BST, Tyler Baker wrote: > Call raw_spin_lock_init() before the spinlocks are used to prevent a > lockdep splat. > > Fixes the following trace: > > INFO: trying to register non-static key. > the code is fine but needs lockdep annotation. > turning off the locking correctness validator. > Hardware name: Freescale i.MX7 Dual (Device Tree) > Backtrace: > [] (dump_backtrace) from [] (show_stack+0x18/0x1c) > r7:00000000 r6:600000d3 r5:00000000 r4:c0e273dc > [] (show_stack) from [] (dump_stack+0xb4/0xe8) > [] (dump_stack) from [] (register_lock_class+0x208/0x5ec) > r9:ef00d010 r8:ef00d010 r7:c1606448 r6:00000000 r5:00000000 r4:ffffe000 > [] (register_lock_class) from [] > (__lock_acquire+0x7c/0x18d0) > r10:c0e0af40 r9:ef00d010 r8:c0e274cc r7:00000001 r6:600000d3 r5:c1606448 > r4:ffffe000 > [] (__lock_acquire) from [] (lock_acquire+0x70/0x90) > r10:00000000 r9:ef007e38 r8:00000001 r7:00000001 r6:600000d3 r5:00000000 > r4:ffffe000 > [] (lock_acquire) from [] (_raw_spin_lock+0x30/0x40) > r8:600000d3 r7:ef007e10 r6:00000001 r5:ef007e10 r4:ef00d000 > [] (_raw_spin_lock) from [] (imx_gpcv2_irq_unmask+0x1c/0x5c) > r4:ef00d000 > [] (imx_gpcv2_irq_unmask) from [] (irq_enable+0x38/0x4c) > r5:00000000 r4:ef007e00 > [] (irq_enable) from [] (irq_startup+0x84/0x88) > r5:00000000 r4:ef007e00 > [] (irq_startup) from [] (__setup_irq+0x538/0x5f4) > r7:ef007e60 r6:00000015 r5:ef007e00 r4:ef007d00 > [] (__setup_irq) from [] (setup_irq+0x60/0xd0) > r10:c0d5fa48 r9:efffcbc0 r8:ef007d00 r7:00000015 r6:ef007e10 r5:00000000 > r4:ef007e00 > [] (setup_irq) from [] (_mxc_timer_init+0x1f8/0x248) > r9:efffcbc0 r8:00000003 r7:016e3600 r6:c0c69bbc r5:ef007c40 r4:ef007c00 > [] (_mxc_timer_init) from [] (mxc_timer_init_dt+0xb0/0xf8) > r7:00000000 r6:c1669e48 r5:ef7ebf7c r4:ef007c00 > [] (mxc_timer_init_dt) from [] > (imx6dl_timer_init_dt+0x14/0x18) > r9:efffcbc0 r8:c0e7b000 r7:c0c695c0 r6:c0d6fe18 r5:00000001 r4:ef7ebf7c > [] (imx6dl_timer_init_dt) from [] > (clocksource_probe+0x54/0xb0) > [] (clocksource_probe) from [] (time_init+0x30/0x38) > r7:c0e07900 r6:c0e7b000 r5:ffffffff r4:00000000 > [] (time_init) from [] (start_kernel+0x220/0x3a0) > [] (start_kernel) from [<8000807c>] (0x8000807c) > r10:00000000 r9:410fc075 r8:8000406a r7:c0e0c958 r6:c0d5fa44 r5:c0e07918 > r4:c0e7b294 > > Verified the fix on a imx7d-cl-som with CONFIG_IMX_GPCV2 set. > > Signed-off-by: Tyler Baker > Reported-by: Tyler Baker > Reviewed-by: Fabio Estevam > --- > Issue reported in this thread: https://lkml.org/lkml/2017/4/13/646 > > drivers/irqchip/irq-imx-gpcv2.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv2.c > index e13236f..9463f35 100644 > --- a/drivers/irqchip/irq-imx-gpcv2.c > +++ b/drivers/irqchip/irq-imx-gpcv2.c > @@ -230,6 +230,8 @@ static int __init imx_gpcv2_irqchip_init(struct device_node *node, > return -ENOMEM; > } > > + raw_spin_lock_init(&cd->rlock); > + > cd->gpc_base = of_iomap(node, 0); > if (!cd->gpc_base) { > pr_err("fsl-gpcv2: unable to map gpc registers\n"); Acked-by: Marc Zyngier Thomas, any chance you could take this as a fix through the tip tree? Thanks, M. -- Jazz is not dead, it just smell funny.