Hans de Goede 5c34c0aef1 power: supply: bq27xxx: Fix bq27xxx_battery_update() race condition
bq27xxx_battery_update() assumes / requires that it is only run once,
not multiple times at the same time. But there are 3 possible callers:

1. bq27xxx_battery_poll() delayed_work item handler
2. bq27xxx_battery_irq_handler_thread() I2C IRQ handler
3. bq27xxx_battery_setup()

And there is no protection against these racing with each other,
fix this race condition by making all callers take di->lock:

- Rename bq27xxx_battery_update() to bq27xxx_battery_update_unlocked()

- Add new bq27xxx_battery_update() which takes di->lock and then calls
  bq27xxx_battery_update_unlocked()

- Make stale cache check code in bq27xxx_battery_get_property(), which
  already takes di->lock directly to check the jiffies, call
  bq27xxx_battery_update_unlocked() instead of messing with
  the delayed_work item

- Make bq27xxx_battery_update_unlocked() mod the delayed-work item
  so that the next poll is delayed to poll_interval milliseconds after
  the last update independent of the source of the update

Fixes: 740b755a3b34 ("bq27x00: Poll battery state")
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
2023-05-08 15:29:11 +02:00
..
2023-04-27 11:53:57 -07:00
2023-04-27 11:53:57 -07:00
2023-05-07 10:00:09 -07:00
2023-04-27 16:36:55 -07:00
2023-05-02 10:41:31 -07:00
2023-04-27 11:53:57 -07:00
2023-04-30 11:51:51 -07:00
2023-04-27 11:53:57 -07:00
2023-05-03 11:11:56 -07:00
2023-04-27 11:53:57 -07:00
2023-04-27 11:27:48 -07:00
2023-04-29 17:42:33 -07:00
2023-04-27 12:07:50 -07:00
2023-05-03 11:00:27 -07:00
2023-05-05 11:49:22 -07:00
2023-04-27 11:53:57 -07:00
2023-04-27 10:09:05 -07:00
2023-04-27 17:17:12 -07:00
2023-04-27 11:53:57 -07:00
2023-04-19 15:08:11 +02:00
2023-04-27 12:07:50 -07:00
2023-05-01 17:18:56 -07:00
2023-04-27 16:36:55 -07:00
2023-04-30 13:00:38 -07:00
2023-05-05 19:12:01 -07:00
2023-05-02 10:36:02 -07:00
2023-04-28 16:24:32 -07:00
2023-05-06 08:28:58 -07:00
2023-04-30 13:00:38 -07:00
2023-04-25 12:02:16 -07:00
2023-04-28 14:02:54 -07:00
2023-05-02 10:41:31 -07:00
2023-04-28 14:02:54 -07:00
2023-04-27 11:46:26 -07:00
2023-05-05 19:12:01 -07:00
2023-05-07 10:00:09 -07:00
2023-04-27 16:36:55 -07:00
2023-05-05 13:27:59 -07:00
2023-04-27 10:09:05 -07:00
2023-04-30 11:51:51 -07:00
2023-05-05 11:57:29 -07:00
2023-04-27 16:36:55 -07:00
2023-04-27 11:53:57 -07:00
2023-05-03 11:25:01 -07:00
2023-04-27 16:36:55 -07:00
2023-04-27 11:53:57 -07:00
2023-05-02 10:41:31 -07:00
2023-04-27 11:53:57 -07:00
2023-05-06 08:37:28 -07:00
2023-04-27 16:36:55 -07:00
2023-04-27 12:07:50 -07:00
2023-04-27 16:36:55 -07:00
2023-04-27 11:53:57 -07:00
2023-04-27 12:07:50 -07:00
2023-05-06 08:37:28 -07:00
2023-04-27 12:07:50 -07:00
2023-05-02 11:56:43 -07:00
2023-04-28 14:53:30 -07:00
2023-05-02 10:46:11 -07:00
2023-04-27 10:09:05 -07:00
2023-04-27 12:07:50 -07:00
2023-05-04 18:33:56 -07:00
2023-04-27 17:27:06 -07:00