From patchwork Mon Mar 3 18:57:55 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Javi Merino X-Patchwork-Id: 3756581 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 0F7569F1EE for ; Mon, 3 Mar 2014 19:01:02 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 04667203B6 for ; Mon, 3 Mar 2014 19:01:01 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id CF97A203A9 for ; Mon, 3 Mar 2014 19:00:59 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1WKY6c-0002mH-M1; Mon, 03 Mar 2014 19:00:50 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1WKY6a-0001k4-9o; Mon, 03 Mar 2014 19:00:48 +0000 Received: from service87.mimecast.com ([91.220.42.44]) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1WKY6X-0001iJ-0N for linux-arm-kernel@lists.infradead.org; Mon, 03 Mar 2014 19:00:45 +0000 Received: from cam-owa2.Emea.Arm.com (fw-tnat.cambridge.arm.com [217.140.96.21]) by service87.mimecast.com; Mon, 03 Mar 2014 18:57:59 +0000 Received: from e102654-lin.cambridge.arm.com ([10.1.255.212]) by cam-owa2.Emea.Arm.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 3 Mar 2014 18:58:03 +0000 Received: by e102654-lin.cambridge.arm.com (sSMTP sendmail emulation); Mon, 03 Mar 2014 18:57:55 +0000 Date: Mon, 3 Mar 2014 18:57:55 +0000 From: Javi Merino To: linux-arm-kernel@lists.infradead.org Subject: [REGRESSION] Arndale Octa panics when booting 3.14-rc1 Message-ID: <20140303185755.GA11460@e102654-lin.cambridge.arm.com> MIME-Version: 1.0 User-Agent: Mutt/1.5.21 (2010-09-15) X-OriginalArrivalTime: 03 Mar 2014 18:58:03.0586 (UTC) FILETIME=[8155DA20:01CF3712] X-MC-Unique: 114030318575901601 Content-Disposition: inline X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140303_140045_257950_5F3F145B X-CRM114-Status: GOOD ( 18.21 ) X-Spam-Score: -2.6 (--) Cc: linux-samsung-soc@vger.kernel.org, Mike Turquette , Jiada Wang , Kyungmin Park , Kukjin Kim , Sylwester Nawrocki X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Hi, Commit fcb0ee6a3d (clk: Implement clk_unregister) added calls to kref_get() and kref_put() to __clk_get() and __clk_put() without checking if clk is not NULL: > @@ -1987,6 +2097,7 @@ int __clk_get(struct clk *clk) > if (clk && !try_module_get(clk->owner)) > return 0; > > + kref_get(&clk->ref); > return 1; > } > > @@ -1995,6 +2106,10 @@ void __clk_put(struct clk *clk) > if (WARN_ON_ONCE(IS_ERR(clk))) > return; > > + clk_prepare_lock(); > + kref_put(&clk->ref, __clk_release); > + clk_prepare_unlock(); > + > if (clk) > module_put(clk->owner); > } Before this commit, these functions allowed clk to be NULL. In particular, the "if (clk)" in __clk_put() is now useless, as clk has been dereferenced by the time you reach it. This causes Arndale Octa to panic on boot: 8<--- [ 7.430000] Creating amba device /amba/pdma@121B0000 [ 7.435000] create child: /amba/mdma@10800000 [ 7.440000] Creating amba device /amba/mdma@10800000 [ 7.445000] Unable to handle kernel NULL pointer dereference at virtual address 00000050 [ 7.450000] pgd = c0004000 [ 7.450000] [00000050] *pgd=00000000 [ 7.455000] Internal error: Oops: 5 [#1] PREEMPT SMP ARM [ 7.455000] Modules linked in: [ 7.455000] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.14.0-rc3-00003-gb6026fe-dirty #23 [ 7.455000] task: ee0a8000 ti: ee0a6000 task.ti: ee0a6000 [ 7.455000] PC is at __clk_get+0x24/0x84 [ 7.455000] LR is at of_clk_get+0x5c/0x74 [ 7.455000] pc : [] lr : [] psr: 60000113 [ 7.455000] sp : ee0a7d78 ip : ee0a7d88 fp : 00000001 [ 7.455000] r10: f001c000 r9 : ee193a10 r8 : 00000000 [ 7.455000] r7 : 00000000 r6 : ee7dedb4 r5 : c045e930 r4 : 00000000 [ 7.455000] r3 : 00000050 r2 : 000001d9 r1 : c0575df8 r0 : 00000000 [ 7.455000] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel [ 7.455000] Control: 10c5387d Table: 2000406a DAC: 00000015 [ 7.455000] Process swapper/0 (pid: 1, stack limit = 0xee0a6240) [ 7.455000] Stack: (0xee0a7d78 to 0xee0a8000) [ 7.455000] 7d60: 00000000 c02e34b8 [ 7.455000] 7d80: ee0a7d88 c02df2e4 ee7dd984 00000001 000001d9 ee7dedb4 00000000 c02df300 [ 7.455000] 7da0: ee1779c0 c045e930 ee7dedb4 00000000 ee1779c0 c02e350c 00000000 ee1779c0 [ 7.455000] 7dc0: c045e930 00001000 00000000 c02e35a4 00000000 ee194000 ee194128 c01ee6fc [ 7.455000] 7de0: ee194000 ee194128 00001000 c01ee7ec 00000000 ee7dedb4 ee194000 00000009 [ 7.455000] 7e00: ee19416c 00000000 00000001 c02e0f94 c053f0f2 00000000 ee193a10 c03b6880 [ 7.455000] 7e20: 00000000 ee7dedb4 ee193a10 00000000 00000000 00000001 00000000 c0385924 [ 7.455000] 7e40: c047832c ee7dea18 00000000 ee7dedb4 ee193a10 00000000 00000000 00000001 [ 7.455000] 7e60: 00000000 c02e103c 00000001 c04c9500 00000079 c03b6880 00000000 00000000 [ 7.455000] 7e80: 60000113 c05352d8 00000000 00000000 c03b6880 00000001 00000000 ee7dea18 [ 7.455000] 7ea0: ee7d6e28 00000000 00000000 c03b6880 00000000 00000001 00000000 c02e116c [ 7.455000] 7ec0: 00000001 00000000 c04cc264 ee0a6000 c04ec240 00000000 c04c9500 c04fec18 [ 7.455000] 7ee0: 00000079 c04cc280 00000000 c00088e8 00000000 c038cb70 0000006d 00000000 [ 7.455000] 7f00: 00000001 c0101a2c ee15ce00 ee15d080 60000100 c050fb40 60000113 c050fb40 [ 7.455000] 7f20: c04ec230 c050fb3c c050fb3c c04a79f0 c04a79f0 ef7fc9ff ef7fc9fb c0034f40 [ 7.455000] 7f40: c043e434 c04a7260 00000003 00000003 00000000 c04ec260 00000003 c04ec240 [ 7.455000] 7f60: c053b2c0 c04c9500 c04fec18 00000079 00000000 c04c9c50 00000003 00000003 [ 7.455000] 7f80: c04c9500 c003e450 00000000 c0384474 00000000 00000000 00000000 00000000 [ 7.455000] 7fa0: 00000000 c038447c 00000000 c000e4b8 00000000 00000000 00000000 00000000 [ 7.455000] 7fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 [ 7.455000] 7fe0: 00000000 00000000 00000000 00000000 00000013 00000000 ffffffff ffffffff [ 7.455000] [] (__clk_get) from [] (of_clk_get+0x5c/0x74) [ 7.455000] [] (of_clk_get) from [] (of_clk_get_by_name+0x3c/0xb0) [ 7.455000] [] (of_clk_get_by_name) from [] (clk_get+0x24/0x44) [ 7.455000] [] (clk_get) from [] (amba_get_enable_pclk+0x10/0x60) [ 7.455000] [] (amba_get_enable_pclk) from [] (amba_device_add+0xa0/0x1e0) [ 7.455000] [] (amba_device_add) from [] (of_platform_bus_create+0x190/0x308) [ 7.455000] [] (of_platform_bus_create) from [] (of_platform_bus_create+0x238 [ 7.455000] [] (of_platform_bus_create) from [] (of_platform_populate+0x60/0x [ 7.455000] [] (of_platform_populate) from [] (customize_machine+0x1c/0x40) [ 7.455000] [] (customize_machine) from [] (do_one_initcall+0xe4/0x140) [ 7.455000] [] (do_one_initcall) from [] (kernel_init_freeable+0xfc/0x1c8) [ 7.455000] [] (kernel_init_freeable) from [] (kernel_init+0x8/0xe4) [ 7.455000] [] (kernel_init) from [] (ret_from_fork+0x14/0x3c) [ 7.455000] Code: e3500000 08bd8010 e2843050 f57ff05b (e1932f9f) [ 7.460000] ---[ end trace fe5cfa405506a77d ]--- [ 7.460000] Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b 8<--- I've tried putting "if (clk)" around the calls to kref_get() and kref_put(), but that makes the Octa fail to boot like 3.13 did: when tries to mount root. What works for me so far is to remove the offending nodes from the DT: 8<--- 8<--- With this the Arndale Octa boots. This issue is present from 3.14-rc1 to 3.14-rc5. Any idea how this should be properly fixed in mainline? Cheers, Javi diff --git a/arch/arm/boot/dts/exynos5420.dtsi b/arch/arm/boot/dts/exynos5420.dtsi index 8db792b..c4ab992 100644 --- a/arch/arm/boot/dts/exynos5420.dtsi +++ b/arch/arm/boot/dts/exynos5420.dtsi @@ -303,27 +303,6 @@ #dma-requests = <32>; }; - mdma0: mdma@10800000 { - compatible = "arm,pl330", "arm,primecell"; - reg = <0x10800000 0x1000>; - interrupts = <0 33 0>; - clocks = <&clock 473>; - clock-names = "apb_pclk"; - #dma-cells = <1>; - #dma-channels = <8>; - #dma-requests = <1>; - }; - - mdma1: mdma@11C10000 { - compatible = "arm,pl330", "arm,primecell"; - reg = <0x11C10000 0x1000>; - interrupts = <0 124 0>; - clocks = <&clock 442>; - clock-names = "apb_pclk"; - #dma-cells = <1>; - #dma-channels = <8>; - #dma-requests = <1>; - }; }; spi_0: spi@12d20000 {