[PATCH v2 00/12] rust: driver: use pointers instead of indices for ID info

From: Gary Guo

Date: Mon Jun 29 2026 - 08:51:00 EST


Most C drivers use a pointer (and cast to kernel_ulong_t) for driver_data
fields in device_id. Rust code currently does not do this, but rather use
indices. These indices then needs to be translated to `&IdInfo` separately
and this is by a side table.

This leads to open-coded ACPI/OF handling in driver.rs, which is not
desirable. Convert the code to use pointers (or rather, static references)
instead.

Signed-off-by: Gary Guo <gary@xxxxxxxxxxx>
---
Changes in v2:
- Change USB to take `Option<&IdInfo>` in addition to PCI due to ability to
dynamically add IDs.
- Mention dyn IDs and driver_override in safety comments and justify why
they're correct.
- Link to v1: https://patch.msgid.link/20260618-id_info-v1-0-96af1e559ef9@xxxxxxxxxxx

---
Gary Guo (12):
rust: driver: remove `IdTable::id`
rust: driver: simplify `IdArray::new_without_index`
rust: pci: use `Option<&IdInfo>` for device ID info
rust: usb: use `Option<&IdInfo>` for device ID info
rust: net/phy: remove expansion from doc
rust: driver: centralize device ID handling
rust: driver: remove `$module_table_name` from `module_device_table`
rust: driver: store pointers in `DeviceId`
rust: driver: remove open-coded matching logic
rust: driver: remove duplicate ID table
RFC: rust: driver: support map-like syntax for ID table
pci: fix UAF when probe runs concurrent to dyn ID removal

MAINTAINERS | 1 -
drivers/acpi/bus.c | 6 +-
drivers/cpufreq/rcpufreq_dt.rs | 1 -
drivers/gpu/drm/nova/driver.rs | 1 -
drivers/gpu/drm/tyr/driver.rs | 1 -
drivers/gpu/nova-core/driver.rs | 3 +-
drivers/pci/pci-driver.c | 64 +++++------
drivers/pwm/pwm_th1520.rs | 1 -
include/acpi/acpi_bus.h | 11 --
rust/helpers/acpi.c | 16 ---
rust/helpers/helpers.c | 1 -
rust/kernel/acpi.rs | 14 +--
rust/kernel/auxiliary.rs | 18 +--
rust/kernel/device_id.rs | 207 +++++++++++++++++++---------------
rust/kernel/driver.rs | 137 ++--------------------
rust/kernel/i2c.rs | 26 ++---
rust/kernel/net/phy.rs | 66 +----------
rust/kernel/of.rs | 14 +--
rust/kernel/pci.rs | 25 ++--
rust/kernel/platform.rs | 5 +-
rust/kernel/usb.rs | 24 ++--
samples/rust/rust_debugfs.rs | 1 -
samples/rust/rust_dma.rs | 3 +-
samples/rust/rust_driver_auxiliary.rs | 4 +-
samples/rust/rust_driver_i2c.rs | 3 -
samples/rust/rust_driver_pci.rs | 11 +-
samples/rust/rust_driver_platform.rs | 2 -
samples/rust/rust_driver_usb.rs | 3 +-
samples/rust/rust_i2c_client.rs | 2 -
samples/rust/rust_soc.rs | 2 -
30 files changed, 209 insertions(+), 464 deletions(-)
---
base-commit: dc59e4fea9d83f03bad6bddf3fa2e52491777482
change-id: 20260612-id_info-23eca472ccd8

Best regards,
--
Gary Guo <gary@xxxxxxxxxxx>