From patchwork Mon Feb 16 14:20:12 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chanwoo Choi X-Patchwork-Id: 5833301 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.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 385859F373 for ; Mon, 16 Feb 2015 14:23:16 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 51716201B9 for ; Mon, 16 Feb 2015 14:23:15 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (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 6DD1E20155 for ; Mon, 16 Feb 2015 14:23:14 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1YNMY6-0004i7-QO; Mon, 16 Feb 2015 14:21:22 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1YNMXS-0004MZ-DG for linux-arm-kernel@lists.infradead.org; Mon, 16 Feb 2015 14:20:45 +0000 Received: from epcpsbgr1.samsung.com (u141.gpu120.samsung.co.kr [203.254.230.141]) by mailout2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NJV00CC0BTUYC50@mailout2.samsung.com> for linux-arm-kernel@lists.infradead.org; Mon, 16 Feb 2015 23:20:18 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.112]) by epcpsbgr1.samsung.com (EPCPMTA) with SMTP id 32.4B.17016.2ACF1E45; Mon, 16 Feb 2015 23:20:18 +0900 (KST) X-AuditID: cbfee68d-f79296d000004278-d2-54e1fca2825a Received: from epmmp2 ( [203.254.227.17]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 63.16.09430.2ACF1E45; Mon, 16 Feb 2015 23:20:18 +0900 (KST) Received: from chan.10.32.193.11 ([10.252.81.195]) by mmp2.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NJV00GH2BTU1D20@mmp2.samsung.com>; Mon, 16 Feb 2015 23:20:18 +0900 (KST) From: Chanwoo Choi To: rui.zhang@intel.com, edubezval@gmail.com Subject: [PATCH 1/3] thermal: exynos: Fix NULL pointer exception during kernel booting Date: Mon, 16 Feb 2015 23:20:12 +0900 Message-id: <1424096414-4327-2-git-send-email-cw00.choi@samsung.com> X-Mailer: git-send-email 1.8.5.5 In-reply-to: <1424096414-4327-1-git-send-email-cw00.choi@samsung.com> References: <1424096414-4327-1-git-send-email-cw00.choi@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrPLMWRmVeSWpSXmKPExsWyRsSkQHfRn4chBlNPa1o8XrOYyaLhaojF xhnrWS2uf3nOajH/yjVWi0n3J7BY9D9+zWxxtukNu8Wbh5sZLTY9Bkpc3jWHzeJz7xFGixnn 9zFZPHnYx+bA57Fz1l12j8V7XjJ5bFrVyeaxeUm9R9+WVYwenzfJBbBFcdmkpOZklqUW6dsl cGWcm3GIreClRMWJiTOZGhgPiHYxcnBICJhIHO+V62LkBDLFJC7cW88GYgsJLGWUeHs8Gqbk 3uqILkYuoPB0Rom52/+zQjhNTBLHL19lB2lgE9CS2P/iBliziICOxOEnT5lBipgFrjFJ3D9y AiwhLBAhcaL7MSuIzSKgKrH0wUdWkA28Ai4Sx18VQRyhILFs+UywEk4BV4m3O38yQRzkIrHv yyOwmRIC19glFi//ywYxR0Di2+RDLBCXykpsOsAMMUdS4uCKGywTGIUXMDKsYhRNLUguKE5K LzLUK07MLS7NS9dLzs/dxAiMl9P/nvXuYLx9wPoQowAHoxIP7weVhyFCrIllxZW5hxhNgTZM ZJYSTc4HRmVeSbyhsZmRhamJqbGRuaWZkjivotTPYCGB9MSS1OzU1ILUovii0pzU4kOMTByc Ug2MNvOe889fp3NstsIV/w2PIkPWm1wq6dS+97Byg1Cr0x7FkweF5t9nrr8aPavpTb/68n8J nY83Vce4LVvWtF9pYaPN5r6DR3wzbl//cHQLr+GZ5W2NlQI9c6wKxFZOnVnywTp8V0LTikdf Fr+6se6k5FxTnpl/67JObnpw6GtYDYu3zuHmxSWr0pVYijMSDbWYi4oTAV89TPqSAgAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrNIsWRmVeSWpSXmKPExsVy+t9jQd1Ffx6GGBw4pWDxeM1iJouGqyEW G2esZ7W4/uU5q8X8K9dYLSbdn8Bi0f/4NbPF2aY37BZvHm5mtNj0GChxedccNovPvUcYLWac 38dk8eRhH5sDn8fOWXfZPRbvecnksWlVJ5vH5iX1Hn1bVjF6fN4kF8AW1cBok5GamJJapJCa l5yfkpmXbqvkHRzvHG9qZmCoa2hpYa6kkJeYm2qr5OIToOuWmQN0rZJCWWJOKVAoILG4WEnf DtOE0BA3XQuYxghd35AguB4jAzSQsIYx49yMQ2wFLyUqTkycydTAeEC0i5GDQ0LAROLe6ogu Rk4gU0ziwr31bF2MXBxCAtMZJeZu/88K4TQxSRy/fJUdpIpNQEti/4sbbCC2iICOxOEnT5lB ipgFrjFJ3D9yAiwhLBAhcaL7MSuIzSKgKrH0wUdWkG28Ai4Sx18VQWxTkFi2fCZYCaeAq8Tb nT+ZQGwhoJJ9Xx4xT2DkXcDIsIpRNLUguaA4KT3XSK84Mbe4NC9dLzk/dxMjOCKfSe9gXNVg cYhRgINRiYf3g8rDECHWxLLiytxDjBIczEoivMveA4V4UxIrq1KL8uOLSnNSiw8xmgIdNZFZ SjQ5H5gs8kriDY1NzIwsjcwNLYyMzZXEeZXs20KEBNITS1KzU1MLUotg+pg4OKUaGDk/WPvI KXPlfRBsduqY7PW+0Y9B79DhqJNLbKWFxNff8+I88TPM7iTLpijrvydfWIstPxmt+XVKa8mp OA3/hdMKGFZU1hm9198vV/x55sWI91F8h3ZtOLzp7CoB/3lvv8y9zsm4jnnWHZUH7Tek3vbP i756QG9WeGa0ZPfifrFtGi1SVw8+ZlRiKc5INNRiLipOBAC58QPb3gIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150216_062042_691143_B6A88050 X-CRM114-Status: GOOD ( 10.78 ) X-Spam-Score: -5.0 (-----) Cc: l.majewski@samsung.com, linux-samsung-soc@vger.kernel.org, b.zolnierkie@samsung.com, linux-pm@vger.kernel.org, amit.daniel@samsung.com, linux-kernel@vger.kernel.org, inki.dae@samsung.com, Chanwoo Choi , kyungmin.park@samsung.com, kgene@kernel.org, a.kesavan@samsung.com, linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 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, T_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 This patch fixes the NULL pointer exception during kernel booting. The thermal_zone _of_sensor_register() registers a sensor to DT thermal zone and then read the current temperature by '.get_temp' callback. The callback function of exynos thermal driver is exynos_get_temp() which must need the 'pdata' instance of exynos_tmu _platform_data structure. - exynos_get_temp() -> code_to_temp() -> Must need the 'pdata' instance But, exynos thermal driver is executed before getting the 'pdata' instance. To avoid the kernel panic, have to get the platform data by executing the exynos_map_dt_data() before calling thermal_zone_of_sensor_register() . - kernel panic log [ 4211.324346] PC is at 0x0 [ 4211.326867] LR is at exynos_get_temp+0x3c/0xe4 [ 4211.331289] pc : [<0000000000000000>] lr : [] [snip] [ 4211.940625] [< (null)>] (null) [ 4211.945315] [] of_thermal_get_temp+0x1c/0x30 [ 4211.951132] [] thermal_zone_get_temp+0x48/0x7c [ 4211.957118] [] thermal_zone_device_update+0x20/0x110 [ 4211.963627] [] of_thermal_set_mode+0x44/0x68 [ 4211.969443] [] thermal_zone_of_sensor_register+0x15c/0x1d8 [ 4211.976475] [] exynos_tmu_probe+0x6c/0x814 [ 4211.982120] [] platform_drv_probe+0x48/0xb8 [ 4211.987846] [] driver_probe_device+0x8c/0x244 [ 4211.993747] [] __driver_attach+0x98/0xa0 [ 4211.999216] [] bus_for_each_dev+0x54/0x98 [ 4212.004771] [] driver_attach+0x1c/0x28 [ 4212.010066] [] bus_add_driver+0x150/0x208 [ 4212.015622] [] driver_register+0x5c/0x11c [ 4212.021178] [] __platform_driver_register+0x5c/0x68 [ 4212.027600] [] exynos_tmu_driver_init+0x14/0x20 [ 4212.033678] [] do_one_initcall+0x88/0x1a0 [ 4212.039235] [] kernel_init_freeable+0x1bc/0x260 [ 4212.045311] [] kernel_init+0xc/0xd8 Cc: Zhang Rui Cc: Eduardo Valentin Signed-off-by: Chanwoo Choi --- drivers/thermal/samsung/exynos_tmu.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index fbeedc0..b8846f1 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c @@ -1147,17 +1147,17 @@ static int exynos_tmu_probe(struct platform_device *pdev) platform_set_drvdata(pdev, data); mutex_init(&data->lock); + ret = exynos_map_dt_data(pdev); + if (ret) + return ret; + pdata = data->pdata; + data->tzd = thermal_zone_of_sensor_register(&pdev->dev, 0, data, &exynos_sensor_ops); if (IS_ERR(data->tzd)) { pr_err("thermal: tz: %p ERROR\n", data->tzd); return PTR_ERR(data->tzd); } - ret = exynos_map_dt_data(pdev); - if (ret) - goto err_sensor; - - pdata = data->pdata; INIT_WORK(&data->irq_work, exynos_tmu_work);