All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Reichel <sebastian.reichel@collabora.com>
To: Myeonghun Pak <mhun512@gmail.com>
Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	 Ijae Kim <ae878000@gmail.com>
Subject: Re: [PATCH] power: supply: act8945a: Disable status work on removal
Date: Sat, 17 Oct 2026 23:54:08 +0200	[thread overview]
Message-ID: <atPtc_jKLo8RhAMU@venus> (raw)
In-Reply-To: <179211805459.3650807.8742309660995961596.G171@gmail.com>

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

Hi,

On Thu, Oct 15, 2026 at 10:34:33PM -0400, Myeonghun Pak wrote:
> Clearing init_done does not synchronize with either status interrupt. A
> handler can observe init_done set, be delayed, and schedule the status
> work after cancel_work_sync() has returned. The work can then access the
> power supply after its managed cleanup.
> 
> Use disable_work_sync() to reject subsequent queueing and drain any
> existing execution. The charger allocation remains valid until both
> managed IRQs have been released, so a late handler can safely attempt to
> queue the disabled work.
> 
> This issue was identified as part of our ongoing research while
> reviewing kernel code.
> 
> Fixes: a09209acd6a8 ("power: supply: act8945a_charger: Add status change update support")
> Assisted-by: LLM
> Co-developed-by: Ijae Kim <ae878000@gmail.com>
> Signed-off-by: Ijae Kim <ae878000@gmail.com>
> Signed-off-by: Myeonghun Pak <mhun512@gmail.com>
> ---

You should also drop the useless init_done.

Greetings,

-- Sebastian

> Compile-tested with GCC, W=1 (x86_64). No runtime testing.
> 
>  drivers/power/supply/act8945a_charger.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/power/supply/act8945a_charger.c b/drivers/power/supply/act8945a_charger.c
> index 7e4b087..61381d2 100644
> --- a/drivers/power/supply/act8945a_charger.c
> +++ b/drivers/power/supply/act8945a_charger.c
> @@ -14,6 +14,7 @@
>  #include <linux/power_supply.h>
>  #include <linux/regmap.h>
>  #include <linux/gpio/consumer.h>
> +#include <linux/workqueue.h>
>  
>  static const char *act8945a_charger_model = "ACT8945A";
>  static const char *act8945a_charger_manufacturer = "Active-semi";
> @@ -641,7 +642,7 @@ static void act8945a_charger_remove(struct platform_device *pdev)
>  	struct act8945a_charger *charger = platform_get_drvdata(pdev);
>  
>  	charger->init_done = false;
> -	cancel_work_sync(&charger->work);
> +	disable_work_sync(&charger->work);
>  }
>  
>  static struct platform_driver act8945a_charger_driver = {

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

      reply	other threads:[~2026-10-17 21:54 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-16  2:34 [PATCH] power: supply: act8945a: Disable status work on removal Myeonghun Pak
2026-10-17 21:54 ` Sebastian Reichel [this message]

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=atPtc_jKLo8RhAMU@venus \
    --to=sebastian.reichel@collabora.com \
    --cc=ae878000@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mhun512@gmail.com \
    /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.