Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752155AbbBLTzO (ORCPT ); Thu, 12 Feb 2015 14:55:14 -0500 Received: from smtp.codeaurora.org ([198.145.29.96]:45976 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751703AbbBLTzM (ORCPT ); Thu, 12 Feb 2015 14:55:12 -0500 Message-ID: <54DD051D.8020701@codeaurora.org> Date: Thu, 12 Feb 2015 11:55:09 -0800 From: Stephen Boyd User-Agent: Mozilla/5.0 (X11; Linux i686 on x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0 MIME-Version: 1.0 To: Javier Martinez Canillas , Mike Turquette CC: Tomeu Vizoso , =?windows-1252?Q?Emilio_?= =?windows-1252?Q?L=F3pez?= , Peter De Schrijver , Robert Jarzmik , Giuseppe Cavallaro , linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 3/3] clk: Replace explicit clk assignment with __clk_hw_set_clk References: <1423749510-14525-1-git-send-email-javier.martinez@collabora.co.uk> <1423749510-14525-4-git-send-email-javier.martinez@collabora.co.uk> In-Reply-To: <1423749510-14525-4-git-send-email-javier.martinez@collabora.co.uk> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6435 Lines: 114 On 02/12/15 05:58, Javier Martinez Canillas wrote: > The change in the clk API to return a per-user clock instance, moved > the clock state to struct clk_core so now the struct clk_hw .core field > is used instead of .clk for most operations. > > So for hardware clocks that needs to share the same clock state, both > the .core and .clk pointers have to be assigned but currently only the > .clk is set. This leads to NULL pointer dereference when the operations > try to access the hw clock .core. For example, the composite clock rate > and mux components didn't have a .core set which leads to this error: > > Unable to handle kernel NULL pointer dereference at virtual address 00000034 > pgd = c0004000 > [00000034] *pgd=00000000 > Internal error: Oops: 5 [#1] PREEMPT SMP ARM > Modules linked in: > CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.19.0-next-20150211-00002-g1fb7f0e1150d #423 > Hardware name: SAMSUNG EXYNOS (Flattened Device Tree) > task: ee480000 ti: ee488000 task.ti: ee488000 > PC is at clk_mux_determine_rate_flags+0x14/0x19c > LR is at __clk_mux_determine_rate+0x24/0x2c > pc : [] lr : [] psr: a0000113 > sp : ee489ce8 ip : ee489d84 fp : ee489d84 > r10: 0000005c r9 : 00000001 r8 : 016e3600 > r7 : 00000000 r6 : 00000000 r5 : ee442200 r4 : ee440c98 > r3 : ffffffff r2 : 00000000 r1 : 016e3600 r0 : ee440c98 > Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel > Control: 10c5387d Table: 4000406a DAC: 00000015 > Process swapper/0 (pid: 1, stack limit = 0xee488210) > Stack: (0xee489ce8 to 0xee48a000) > 9ce0: 00000000 ffffffff 60000113 ee440c98 ee442200 00000000 > 9d00: 016e3600 ffffffff 00000001 0000005c ee489d84 c03a3734 ee489d80 ee489d84 > 9d20: 00000000 c048b130 00000400 c03a5798 ee489d80 ee489d84 c0607f60 ffffffea > 9d40: 00000001 00000001 ee489d5c c003f844 c06e3340 ee402680 ee440d0c ed935000 > 9d60: 016e3600 00000003 00000001 0000005c eded3700 c03a11a0 ee489d80 ee489d84 > 9d80: 016e3600 ee402680 c05b413a eddc9900 016e3600 c03a1228 00000000 ffffffff > 9da0: ffffffff eddc9900 016e3600 c03a1c1c ffffffff 016e3600 ed8c6710 c03d6ce4 > 9dc0: eded3400 00000000 00000000 c03c797c 00000001 0000005c eded3700 eded3700 > 9de0: 000005e0 00000001 0000005c c03db8ac c06e7e54 c03c8f08 00000000 c06e7e64 > 9e00: c06b6e74 c06e7f64 000005e0 c06e7df8 c06e5100 00000000 c06e7e6c c06e7f54 > 9e20: 00000000 00000000 eebd9550 00000000 c06e7da0 c06e7e54 ee7b5010 c06e7da0 > 9e40: eddc9690 c06e7db4 c06b6e74 00000097 00000000 c03d4398 00000000 ee7b5010 > 9e60: eebd9550 c06e7da0 00000000 c03db824 ee7b5010 fffffffe c06e7db4 c0299c7c > 9e80: ee7b5010 c072a05c 00000000 c0298858 ee7b5010 c06e7db4 ee7b5044 00000000 > 9ea0: eddc9580 c0298a04 c06e7db4 00000000 c0298978 c02971d4 ee405c78 ee732b40 > 9ec0: c06e7db4 eded3800 c06d6738 c0298044 c0608300 c06e7db4 00000000 c06e7db4 > 9ee0: 00000000 c06beb58 c06beb58 c0299024 00000000 c068dd00 00000000 c0008944 > 9f00: 00000038 c049013c ee462200 c0711920 ee480000 60000113 c06c2cb0 00000000 > 9f20: 00000000 c06c2cb0 60000113 00000000 ef7fcafc 00000000 c0640194 c00389ec > 9f40: c05ec3a8 c063f824 00000006 00000006 c06c2c50 c0696444 00000006 c0696424 > 9f60: c06ee1c0 c066b588 c06b6e74 00000097 00000000 c066bd44 00000006 00000006 > 9f80: c066b588 c003d684 00000000 c0481938 00000000 00000000 00000000 00000000 > 9fa0: 00000000 c0481940 00000000 c000e680 00000000 00000000 00000000 00000000 > 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000 00000000 00000000 > [] (clk_mux_determine_rate_flags) from [] (__clk_mux_determine_rate+0x24/0x2c) > [] (__clk_mux_determine_rate) from [] (clk_composite_determine_rate+0xbc/0x238) > [] (clk_composite_determine_rate) from [] (clk_core_round_rate_nolock+0x5c/0x9c) > [] (clk_core_round_rate_nolock) from [] (__clk_round_rate+0x38/0x40) > [] (__clk_round_rate) from [] (clk_round_rate+0x20/0x38) > [] (clk_round_rate) from [] (max98090_dai_set_sysclk+0x34/0x118) > [] (max98090_dai_set_sysclk) from [] (snd_soc_dai_set_sysclk+0x38/0x80) > [] (snd_soc_dai_set_sysclk) from [] (snow_late_probe+0x24/0x48) > [] (snow_late_probe) from [] (snd_soc_register_card+0xf04/0x1070) > [] (snd_soc_register_card) from [] (devm_snd_soc_register_card+0x30/0x64) > [] (devm_snd_soc_register_card) from [] (snow_probe+0x68/0xcc) > [] (snow_probe) from [] (platform_drv_probe+0x48/0x98) > [] (platform_drv_probe) from [] (driver_probe_device+0x114/0x234) > [] (driver_probe_device) from [] (__driver_attach+0x8c/0x90) > [] (__driver_attach) from [] (bus_for_each_dev+0x54/0x88) > [] (bus_for_each_dev) from [] (bus_add_driver+0xd8/0x1cc) > [] (bus_add_driver) from [] (driver_register+0x78/0xf4) > [] (driver_register) from [] (do_one_initcall+0x80/0x1d0) > [] (do_one_initcall) from [] (kernel_init_freeable+0x10c/0x1d8) > [] (kernel_init_freeable) from [] (kernel_init+0x8/0xe4) > [] (kernel_init) from [] (ret_from_fork+0x14/0x34) > Code: e24dd00c e5907000 e1a08001 e88d000c (e5970034) > > The changes were made using the following cocinelle semantic patch: > > @i@ > @@ > > @depends on i@ > identifier dst; > @@ > > - dst->clk = hw->clk; > + __clk_hw_set_clk(dst, hw); > > @depends on i@ > identifier dst; > @@ > > - dst->hw.clk = hw->clk; > + __clk_hw_set_clk(&dst->hw, hw); > > Fixes: 035a61c314eb3 ("clk: Make clk API return per-user struct clk instances") > Signed-off-by: Javier Martinez Canillas Reviewed-by: Stephen Boyd Did you run this on all files that include clk-provider.h? I hope there aren't similar situations in arch/arm/ for example. -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/