Re: [PATCH 0/2] rust: auxiliary: replace drvdata() with registration data

Danilo Krummrich
2026-04-27T22:14:59Z

On Tue Apr 28, 2026 at 12:09 AM CEST, Danilo Krummrich wrote:
> When drvdata() was introduced in commit 6f61a2637abe ("rust: device: introduce
> Device::drvdata()"), its commit message already noted that a direct accessor to
> the driver's bus device private data is not commonly required -- bus callbacks
> provide access through &self, and other entry points (IRQs, workqueues, IOCTLs,
> etc.) carry their own private data.
>
> The sole motivation for drvdata() was inter-driver interaction, e.g. a parent
> driver deriving its bus device private data from the child driver via the
> auxiliary bus.
>
> However, drvdata() exposes the driver's bus device private data beyond the
> driver's own scope. This creates ordering constraints -- drvdata may not be set
> yet when the first caller of drvdata() can appear -- and forces the driver's bus
> device private data to outlive all registrations that access it; a requirement
> that causes unnecessary complications.
>
> Private data should be private to the entity that issues it; bus device private
> data belongs to bus callbacks, class device private data to class callbacks, IRQ
> private data to the IRQ handler, etc.
>
> This series replaces drvdata() with a dedicated registration_data pointer on
> struct auxiliary_device. The parent stores its private data explicitly during
> registration; the data is private to the registration and lives as long as the
> Registration object.
>
> On teardown, Registration::drop() first triggers auxiliary_device_delete()
> (unbinding the child), then frees the registration data. Ordering constraints
> are structural -- the child's lifecycle is scoped to the registration by
> construction, not by convention.
>
> With no remaining use case for drvdata(), drvdata(), match_type_id(),
> set_type_id() and struct driver_type are removed.
>
> This is a prerequisite for [1], which builds on the removal of drvdata() to
> enable Higher-Ranked Lifetime Types (HRT) for Rust device drivers.
>
> [1] Posted as a reply to this series.

https://lore.kernel.org/driver-core/20260427221155.2144848-1-dakr@kernel.org/

>
> Danilo Krummrich (2):
> rust: auxiliary: add registration data to auxiliary devices
> rust: driver core: remove drvdata() and driver_type
>
> drivers/base/base.h | 16 --
> drivers/gpu/nova-core/driver.rs | 10 +-
> include/linux/auxiliary_bus.h | 4 +
> rust/kernel/auxiliary.rs | 208 ++++++++++++++++++--------
> rust/kernel/device.rs | 60 --------
> samples/rust/rust_driver_auxiliary.rs | 40 +++--
> 6 files changed, 180 insertions(+), 158 deletions(-)
>
>
> base-commit: a7cc262a11354ab104b8e55c21200d099d141bc7
> --
> 2.54.0