mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
power: supply: max17040: synchronize work cancellation on suspend
max17040_work() requeues itself after every poll. cancel_delayed_work()
only cancels a pending instance and does not wait for a callback that is
already running.
If system suspend races with the polling callback, the callback can
continue accessing the fuel gauge and requeue itself after the suspend
callback returns.
Use cancel_delayed_work_sync() to ensure polling is quiesced before
suspend completes.
Fixes: c6f4a42de6 ("Add MAX17040 Fuel Gauge driver")
Cc: stable@vger.kernel.org
Signed-off-by: Jianing Li <m13940358460@163.com>
Link: https://patch.msgid.link/20260810004701.1683-1-m13940358460@163.com
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
ceb6ac43b0
commit
86a3a8a926
|
|
@ -576,7 +576,7 @@ static int max17040_suspend(struct device *dev)
|
|||
// disable soc alert to prevent wakeup
|
||||
max17040_set_soc_alert(chip, 0);
|
||||
else
|
||||
cancel_delayed_work(&chip->work);
|
||||
cancel_delayed_work_sync(&chip->work);
|
||||
|
||||
if (client->irq && device_may_wakeup(dev))
|
||||
enable_irq_wake(client->irq);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user