Robin Murphy 6d03bbff45 hwmon: (coretemp) Simplify platform device handling
Coretemp's platform driver is unconventional. All the real work is done
globally by the initcall and CPU hotplug notifiers, while the "driver"
effectively just wraps an allocation and the registration of the hwmon
interface in a long-winded round-trip through the driver core.  The whole
logic of dynamically creating and destroying platform devices to bring
the interfaces up and down is error prone, since it assumes
platform_device_add() will synchronously bind the driver and set drvdata
before it returns, thus results in a NULL dereference if drivers_autoprobe
is turned off for the platform bus. Furthermore, the unusual approach of
doing that from within a CPU hotplug notifier, already commented in the
code that it deadlocks suspend, also causes lockdep issues for other
drivers or subsystems which may want to legitimately register a CPU
hotplug notifier from a platform bus notifier.

All of these issues can be solved by ripping this unusual behaviour out
completely, simply tying the platform devices to the lifetime of the
module itself, and directly managing the hwmon interfaces from the
hotplug notifiers. There is a slight user-visible change in that
/sys/bus/platform/drivers/coretemp will no longer appear, and
/sys/devices/platform/coretemp.n will remain present if package n is
hotplugged off, but hwmon users should really only be looking for the
presence of the hwmon interfaces, whose behaviour remains unchanged.

Link: https://lore.kernel.org/lkml/20220922101036.87457-1-janusz.krzysztofik@linux.intel.com/
Link: https://gitlab.freedesktop.org/drm/intel/issues/6641
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Janusz Krzysztofik <janusz.krzysztofik@linux.intel.com>
Link: https://lore.kernel.org/r/20230103114620.15319-1-janusz.krzysztofik@linux.intel.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
2023-02-03 07:30:09 -08:00
..
2022-10-04 19:02:54 -07:00
2022-10-04 19:02:54 -07:00
2022-10-04 19:02:54 -07:00
2022-10-04 19:02:54 -07:00
2022-10-04 19:02:54 -07:00
2020-09-23 09:42:39 -07:00
2020-09-23 09:42:39 -07:00
2022-08-16 12:46:26 +02:00
2022-02-27 17:03:19 -08:00
2022-12-04 16:45:02 -08:00
2020-09-23 09:42:39 -07:00
2022-12-04 16:45:02 -08:00
2021-04-20 06:50:14 -07:00
2022-09-19 06:17:05 -07:00
2022-05-22 11:32:31 -07:00
2022-12-04 16:45:02 -08:00
2022-12-04 16:45:02 -08:00
2022-12-04 16:45:02 -08:00
2022-08-16 12:46:26 +02:00
2020-09-23 09:42:39 -07:00
2022-10-04 19:02:54 -07:00
2022-10-04 19:02:54 -07:00
2020-09-23 09:42:39 -07:00
2022-10-04 19:02:54 -07:00
2022-10-04 19:02:54 -07:00
2022-10-04 19:02:54 -07:00
2022-10-04 19:02:54 -07:00
2022-10-04 19:02:54 -07:00