[PATCH v2 00/11] rust: driver: use pointers instead of indices for ID info
From: Gary Guo <gary@garyguo.net>
Date: 2026-06-29 12:39:46
Also in:
dri-devel, driver-core, linux-acpi, linux-devicetree, linux-pci, linux-pm, linux-pwm, linux-usb, lkml, nova-gpu, rust-for-linux
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@garyguo.net> --- 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@garyguo.net --- Gary Guo (11): 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 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/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 - 29 files changed, 178 insertions(+), 431 deletions(-) --- base-commit: dc59e4fea9d83f03bad6bddf3fa2e52491777482 change-id: 20260612-id_info-23eca472ccd8 Best regards, -- Gary Guo [off-list ref]