Hans de Goede c00bc80462 power: supply: bq27xxx: Fix poll_interval handling and races on remove
Before this patch bq27xxx_battery_teardown() was setting poll_interval = 0
to avoid bq27xxx_battery_update() requeuing the delayed_work item.

There are 2 problems with this:

1. If the driver is unbound through sysfs, rather then the module being
   rmmod-ed, this changes poll_interval unexpectedly

2. This is racy, after it being set poll_interval could be changed
   before bq27xxx_battery_update() checks it through
   /sys/module/bq27xxx_battery/parameters/poll_interval

Fix this by added a removed attribute to struct bq27xxx_device_info and
using that instead of setting poll_interval to 0.

There also is another poll_interval related race on remove(), writing
/sys/module/bq27xxx_battery/parameters/poll_interval will requeue
the delayed_work item for all devices on the bq27xxx_battery_devices
list and the device being removed was only removed from that list
after cancelling the delayed_work item.

Fix this by moving the removal from the bq27xxx_battery_devices list
to before cancelling the delayed_work item.

Fixes: 8cfaaa811894 ("bq27x00_battery: Fix OOPS caused by unregistring bq27x00 driver")
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