From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752845AbbGNAe2 (ORCPT ); Mon, 13 Jul 2015 20:34:28 -0400 Received: from mailout1.w1.samsung.com ([210.118.77.11]:56126 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751556AbbGNAe0 (ORCPT ); Mon, 13 Jul 2015 20:34:26 -0400 MIME-version: 1.0 Content-type: text/plain; charset=UTF-8 X-AuditID: cbfec7f5-f794b6d000001495-a6-55a45910d11c Content-transfer-encoding: 8BIT From: Krzysztof Kozlowski To: =?UTF-8?q?Pali=20Roh=C3=A1r?= , Sebastian Reichel , Dmitry Eremin-Solenikov , David Woodhouse , linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Krzysztof Kozlowski Subject: [RFT/RFC] power_supply: bq2415x_charger: Initialize workqueue before scheduling it Date: Tue, 14 Jul 2015 09:34:13 +0900 Message-id: <1436834053-2084-1-git-send-email-k.kozlowski@samsung.com> X-Mailer: git-send-email 1.9.1 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrPLMWRmVeSWpSXmKPExsVy+t/xy7oCkUtCDaY+5LeY9OQ9s8XElZOZ LV6/MLS4vGsOm8Xn3iOMFhNP/2ayOL27xIHdY+esu+wem1doeWxa1cnm0bdlFaPH501yAaxR XDYpqTmZZalF+nYJXBlTTp5gLLjPU/F9wQTWBsZHXF2MnBwSAiYSy9fMY4KwxSQu3FvP1sXI xSEksJRR4unSN8wgCV4BQYkfk++xdDFycDALyEscuZQNEmYWUJeYNG8RM0T9f0aJbzuXsoIk 2ASMJTYvX8IGYosIfGaUWPnCDKLBUOLnuz/sILawQKzE05XbGUFsFgFViZnTPzNB7HKT2NC7 ngXiIDmJk8cms05g5JuF5IxZCGfMQnLGAkbmVYyiqaXJBcVJ6blGesWJucWleel6yfm5mxgh wfp1B+PSY1aHGAU4GJV4eCdYLgkVYk0sK67MPcQowcGsJMLL7gMU4k1JrKxKLcqPLyrNSS0+ xCjNwaIkzjtz1/sQIYH0xJLU7NTUgtQimCwTB6dUA6Nu/K0XZvNEEsUbA21fbM//tOi2X9Sp jMkPjrlX1d5LMr/XsSNF/6TYgRRBh4C2KVovvhZrTzDW/uN4X9v7wsufVycbcS/sSZJxXfNW Xd69XN+0XuPwDAmDuYevGTmqyX/z371Zrzay2C/D1MblNe+jrvT6OUI3mmUP/p7i+Sj4/hLD 1KvhXkosxRmJhlrMRcWJAKCf6sFSAgAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The driver during probe registers a power supply notifier (with bq2415x_notifier_call() callback) and calls it manually right after. The notifier callback function schedules driver's workqueue (bq->work). However the workqueue was initialized after these two events (after registering power supply notifier and calling manually the callback). When power supply core notified the driver (executing its bq2415x_notifier_call() callback) the scheduled workqueue could be still uninitialized. Signed-off-by: Krzysztof Kozlowski Reported-by: Pali Rohár --- I don't have the hardware, please test. Additionally I could not find the commit which introduced the issue so I did not cc-stable. --- drivers/power/bq2415x_charger.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/power/bq2415x_charger.c b/drivers/power/bq2415x_charger.c index e98dcb661cc9..527ed0f18796 100644 --- a/drivers/power/bq2415x_charger.c +++ b/drivers/power/bq2415x_charger.c @@ -1601,6 +1601,7 @@ static int bq2415x_probe(struct i2c_client *client, bq->reported_mode = BQ2415X_MODE_OFF; bq->autotimer = 0; bq->automode = 0; + INIT_DELAYED_WORK(&bq->work, bq2415x_timer_work); if (np || ACPI_HANDLE(bq->dev)) { ret = device_property_read_u32(bq->dev, @@ -1677,7 +1678,6 @@ static int bq2415x_probe(struct i2c_client *client, dev_info(bq->dev, "automode not supported\n"); } - INIT_DELAYED_WORK(&bq->work, bq2415x_timer_work); bq2415x_set_autotimer(bq, 1); dev_info(bq->dev, "driver registered\n"); -- 1.9.1