Re: [PATCH 0/3] driver core: generalize driver_override infrastructure
From: Gui-Dong Han
Date: Mon Mar 02 2026 - 04:41:25 EST
On Mon, Mar 2, 2026 at 8:27 AM Danilo Krummrich <dakr@xxxxxxxxxx> 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/DGRGTIRHA62X.3RY09D9SOK77P@xxxxxxxxxx/
> [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
>