All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Reichel <sebastian.reichel@collabora.com>
To: Hans de Goede <hdegoede@redhat.com>
Cc: Mark Gross <markgross@kernel.org>,
	Andy Shevchenko <andy@infradead.org>,
	Wolfram Sang <wsa@the-dreams.de>,
	MyungJoo Ham <myungjoo.ham@samsung.com>,
	Chanwoo Choi <cw00.choi@samsung.com>,
	Ard Biesheuvel <ardb@kernel.org>,
	Yauhen Kharuzhy <jekhor@gmail.com>,
	Tsuchiya Yuto <kitakar@gmail.com>,
	platform-driver-x86@vger.kernel.org, linux-i2c@vger.kernel.org,
	linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-efi@vger.kernel.org
Subject: Re: [PATCH 03/13] power: supply: bq25890: Fix race causing oops at boot
Date: Tue, 2 Nov 2021 17:28:24 +0100	[thread overview]
Message-ID: <20211102162824.f77b2udrzdae6ese@earth.universe> (raw)
In-Reply-To: <20211030182813.116672-4-hdegoede@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 3836 bytes --]

Hi,

On Sat, Oct 30, 2021 at 08:28:03PM +0200, Hans de Goede wrote:
> Before this commit the driver was registering its interrupt handler before
> it registered the power_supply, causing bq->charger to potentially be NULL
> when the interrupt handler runs, triggering a NULL pointer exception in
> the interrupt handler:
> 
> [   21.213531] BUG: kernel NULL pointer dereference, address: 0000000000000680
> ...
> [   21.213573] Hardware name: Xiaomi Inc Mipad2/Mipad, BIOS MIPad-P4.X64.0043.R03.1603071414 03/07/2016
> [   21.213576] RIP: 0010:__lock_acquire+0x5c5/0x1de0
> ...
> [   21.213629] Call Trace:
> [   21.213636]  ? disable_irq_nosync+0x10/0x10
> [   21.213644]  ? __mutex_unlock_slowpath+0x35/0x260
> [   21.213655]  lock_acquire+0xb5/0x2b0
> [   21.213661]  ? power_supply_changed+0x23/0x90
> [   21.213670]  ? disable_irq_nosync+0x10/0x10
> [   21.213676]  _raw_spin_lock_irqsave+0x48/0x60
> [   21.213682]  ? power_supply_changed+0x23/0x90
> [   21.213687]  power_supply_changed+0x23/0x90
> [   21.213697]  __bq25890_handle_irq+0x5e/0xe0 [bq25890_charger]
> [   21.213709]  bq25890_irq_handler_thread+0x26/0x40 [bq25890_charger]
> [   21.213718]  irq_thread_fn+0x20/0x60
> ...
> 
> Fix this by moving the power_supply_register() call to above the
> request_threaded_irq() call.
> 
> Note this fix includes making the following 2 (necessary) changes:
> 
> 1. Switch to the devm version of power_supply_register() to avoid the
> need to make the error-handling in probe() more complicated.
> 
> 2. Rename the "irq_fail" label to "err_unregister_usb_notifier" since
> the old name no longer makes sense after this fix.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---

Thanks, queued.

-- Sebastian

>  drivers/power/supply/bq25890_charger.c | 23 +++++++++++------------
>  1 file changed, 11 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/power/supply/bq25890_charger.c b/drivers/power/supply/bq25890_charger.c
> index 945c3257ca93..491d36a3811a 100644
> --- a/drivers/power/supply/bq25890_charger.c
> +++ b/drivers/power/supply/bq25890_charger.c
> @@ -734,8 +734,9 @@ static int bq25890_power_supply_init(struct bq25890_device *bq)
>  	psy_cfg.supplied_to = bq25890_charger_supplied_to;
>  	psy_cfg.num_supplicants = ARRAY_SIZE(bq25890_charger_supplied_to);
>  
> -	bq->charger = power_supply_register(bq->dev, &bq25890_power_supply_desc,
> -					    &psy_cfg);
> +	bq->charger = devm_power_supply_register(bq->dev,
> +						 &bq25890_power_supply_desc,
> +						 &psy_cfg);
>  
>  	return PTR_ERR_OR_ZERO(bq->charger);
>  }
> @@ -985,22 +986,22 @@ static int bq25890_probe(struct i2c_client *client,
>  		usb_register_notifier(bq->usb_phy, &bq->usb_nb);
>  	}
>  
> +	ret = bq25890_power_supply_init(bq);
> +	if (ret < 0) {
> +		dev_err(dev, "Failed to register power supply\n");
> +		goto err_unregister_usb_notifier;
> +	}
> +
>  	ret = devm_request_threaded_irq(dev, client->irq, NULL,
>  					bq25890_irq_handler_thread,
>  					IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
>  					BQ25890_IRQ_PIN, bq);
>  	if (ret)
> -		goto irq_fail;
> -
> -	ret = bq25890_power_supply_init(bq);
> -	if (ret < 0) {
> -		dev_err(dev, "Failed to register power supply\n");
> -		goto irq_fail;
> -	}
> +		goto err_unregister_usb_notifier;
>  
>  	return 0;
>  
> -irq_fail:
> +err_unregister_usb_notifier:
>  	if (!IS_ERR_OR_NULL(bq->usb_phy))
>  		usb_unregister_notifier(bq->usb_phy, &bq->usb_nb);
>  
> @@ -1011,8 +1012,6 @@ static int bq25890_remove(struct i2c_client *client)
>  {
>  	struct bq25890_device *bq = i2c_get_clientdata(client);
>  
> -	power_supply_unregister(bq->charger);
> -
>  	if (!IS_ERR_OR_NULL(bq->usb_phy))
>  		usb_unregister_notifier(bq->usb_phy, &bq->usb_nb);
>  
> -- 
> 2.31.1
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2021-11-02 16:36 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-30 18:28 [PATCH 00/13] power-suppy/i2c/extcon: Add support for cht-wc PMIC without USB-PD support Hans de Goede
2021-10-30 18:28 ` [PATCH 01/13] platform/x86: Rename touchscreen_dmi to dmi_device_properties Hans de Goede
2021-10-30 19:07   ` Randy Dunlap
2021-10-30 18:28 ` [PATCH 02/13] platform/x86: dmi_device_properties: Add setup info for boards with a CHT Whiskey Cove PMIC Hans de Goede
2021-10-30 21:56   ` Andy Shevchenko
2021-11-08 15:48     ` Hans de Goede
2021-10-30 18:28 ` [PATCH 03/13] power: supply: bq25890: Fix race causing oops at boot Hans de Goede
2021-11-02 16:28   ` Sebastian Reichel [this message]
2021-10-30 18:28 ` [PATCH 04/13] power: supply: bq25890: Fix initial setting of the F_CONV_RATE field Hans de Goede
2021-11-02 16:29   ` Sebastian Reichel
2021-10-30 18:28 ` [PATCH 05/13] power: supply: bq25890: Add a bq25890_rw_init_data() helper Hans de Goede
2021-10-30 18:28 ` [PATCH 06/13] power: supply: bq25890: Add support for skipping initialization Hans de Goede
2021-10-30 22:07   ` Andy Shevchenko
2021-11-08 15:57     ` Hans de Goede
2021-10-30 18:28 ` [PATCH 07/13] power: supply: bq25890: Enable charging on boards where we skip reset Hans de Goede
2021-11-07 18:32   ` Yauhen Kharuzhy
2021-10-30 18:28 ` [PATCH 08/13] power: supply: bq25890: Drop dev->platform_data == NULL check Hans de Goede
2021-10-30 18:28 ` [PATCH 09/13] power: supply: bq25890: Add bq25890_set_otg_cfg() helper Hans de Goede
2021-10-30 22:10   ` Andy Shevchenko
2021-11-08 15:59     ` Hans de Goede
2021-11-07 18:49   ` Yauhen Kharuzhy
2021-11-07 19:47     ` Hans de Goede
2021-10-30 18:28 ` [PATCH 10/13] power: supply: bq25890: Add support for registering the Vbus boost converter as a regulator Hans de Goede
2021-10-30 22:13   ` Andy Shevchenko
2021-11-08 16:06     ` Hans de Goede
2021-10-30 18:28 ` [PATCH 11/13] i2c: cht-wc: Add support for devices using a bq25890 charger Hans de Goede
2021-10-31 17:58   ` Wolfram Sang
2021-11-08 16:03     ` Hans de Goede
2021-11-07 19:07   ` Yauhen Kharuzhy
2021-11-07 19:35     ` Yauhen Kharuzhy
2021-11-07 19:51     ` Hans de Goede
2021-10-30 18:28 ` [PATCH 12/13] extcon: intel-cht-wc: Check new "intel,cht-wc-setup" device-property Hans de Goede
2021-10-30 18:28 ` [PATCH 13/13] extcon: intel-cht-wc: Add support for devices with an USB-micro-B connector Hans de Goede
2021-10-31  6:35   ` kernel test robot
2021-10-31 11:08   ` kernel test robot
2021-10-31 12:52   ` Andy Shevchenko
2021-11-08 15:44     ` Hans de Goede

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211102162824.f77b2udrzdae6ese@earth.universe \
    --to=sebastian.reichel@collabora.com \
    --cc=andy@infradead.org \
    --cc=ardb@kernel.org \
    --cc=cw00.choi@samsung.com \
    --cc=hdegoede@redhat.com \
    --cc=jekhor@gmail.com \
    --cc=kitakar@gmail.com \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-i2c@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=markgross@kernel.org \
    --cc=myungjoo.ham@samsung.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=wsa@the-dreams.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.