Re: [PATCH 0/3] driver core: generalize driver_override infrastructure
Gui-Dong Han <[email protected]>
| Newsgroups | gmane.linux.ports.arm.msm,gmane.linux.kernel,gmane.linux.kernel.hwmon,gmane.linux.sound,gmane.linux.ports.sh.devel |
|---|---|
| Message-ID | <CALbr=LYYUH_yQL1PO7mXzK6Oubt0LvKb0714iZCx_eEXScVdyQ@mail.gmail.com> |
On Mon, Mar 2, 2026 at 8:27 AM Danilo Krummrich <[email protected]> wrote: > > Currently, there are 12 busses (including platform and PCI) that duplicate the > driver_override logic for their individual devices. > > All of them seem to be prone to the bug described in [1]. > > While this could be solved for every bus individually using a separate lock, > solving this in the driver-core generically results in less (and cleaner) > changes overall. > > Thus, move driver_override to struct device, provide corresponding accessors for > busses and handle locking with a separate lock internally. > > In particular, add device_set_driver_override(), device_has_driver_override(), > device_match_driver_override() and a helper, DEVICE_ATTR_DRIVER_OVERRIDE(), to > declare the corresponding sysfs store() and show() callbacks. > > Until all busses have migrated, keep driver_set_override() in place. > > Note that we can't use the device lock for the reasons described in [2]. > > This patch series includes the migration of the platform bus; patches for all > other affected busses still need to be extracted as a follow-up of the WIP > treewide patch in [3]. > > [1] https://bugzilla.kernel.org/show_bug.cgi?id=220789 > [2] https://lore.kernel.org/driver-core/[email protected]/ > [3] https://git.kernel.org/pub/scm/linux/kernel/git/dakr/linux.git/log/?h=driver_override > > Danilo Krummrich (3): > driver core: generalize driver_override in struct device > hwmon: axi-fan: don't use driver_override as IRQ name > driver core: platform: use generic driver_override infrastructure Hi Danilo, It looks like some usages of platform_device->driver_override were missed. I found them here: - drivers/bus/simple-pm-bus.c - drivers/clk/imx/clk-scu.c - drivers/slimbus/qcom-ngd-ctrl.c - sound/soc/samsung/i2s.c The good news is these can be easily updated to use the new APIs. This is required to avoid breaking the build, since the field is removed from struct platform_device. The previous build likely passed because these weren't enabled. I will use allyesconfig for testing going forward. I scanned for similar cases and most fit the new APIs perfectly. One exception is drivers/xen/xen-pciback/pci_stub.c. It does strcmp(dev->driver_override, PCISTUB_DRIVER_NAME) instead of using drv->name. We might want to change device_match_driver_override() to take a const char * instead to handle this. Besides axi-fan, I didn't find any other drivers that need to read driver_override. This is great, as it means we hopefully won't need to expose a read API at all. Thanks. > > arch/sh/drivers/platform_early.c | 6 ++- > drivers/base/core.c | 2 + > drivers/base/dd.c | 60 +++++++++++++++++++++++ > drivers/base/platform.c | 35 ++------------ > drivers/bus/simple-pm-bus.c | 4 +- > drivers/clk/imx/clk-scu.c | 3 +- > drivers/hwmon/axi-fan-control.c | 2 +- > drivers/slimbus/qcom-ngd-ctrl.c | 6 +-- > include/linux/device.h | 81 ++++++++++++++++++++++++++++++++ > include/linux/platform_device.h | 5 -- > sound/soc/samsung/i2s.c | 6 +-- > 11 files changed, 161 insertions(+), 49 deletions(-) > > > base-commit: 78437ab3b769f80526416570f60173c89858dd84 > -- > 2.53.0 >