Re: [PATCH v14 0/3] rust: add basic serial device bus abstractions
"Danilo Krummrich" <[email protected]>
| Newsgroups | org.kernel.vger.linux-serial,dev.linux.lists.driver-core,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-pm,org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
On Fri Jul 17, 2026 at 2:07 PM CEST, Gary Guo wrote: > FWIW this series will also conflict quite significantly with > https://lore.kernel.org/driver-core/[email protected]/ > which is routed via driver-core tree. Yeah, but I think it should be trivial (see below)? However, routing serdev through driver-core does indeed avoid this. Thanks, Danilo diff --git a/rust/kernel/serdev.rs b/rust/kernel/serdev.rs index 0ffcef1849d2..a1161dd9f37f 100644 --- a/rust/kernel/serdev.rs +++ b/rust/kernel/serdev.rs @@ -174,7 +174,8 @@ extern "C" fn probe_callback(sdev: *mut bindings::serdev_device) -> kernel::ffi: // // INVARIANT: `sdev` is valid for the duration of `probe_callback()`. let sdev = unsafe { &*sdev.cast::<Device<device::CoreInternal<'_>>>() }; - let info = <Self as driver::Adapter>::id_info(sdev.as_ref()); + // SAFETY: `sdev` has been matched by the serial device bus via its device ID table. + let info = unsafe { <Self as driver::Adapter>::id_info(sdev.as_ref()) }; from_result(|| { sdev.as_ref().set_drvdata(try_pin_init!(PrivateData::<T> { @@ -334,7 +335,6 @@ macro_rules! module_serdev_device_driver { /// /// kernel::of_device_table!( /// OF_TABLE, -/// MODULE_OF_TABLE, /// <MyDriver as serdev::Driver>::IdInfo, /// [ /// (of::DeviceId::new(c"test,device"), ()) @@ -343,7 +343,6 @@ macro_rules! module_serdev_device_driver { /// /// kernel::acpi_device_table!( /// ACPI_TABLE, -/// MODULE_ACPI_TABLE, /// <MyDriver as serdev::Driver>::IdInfo, /// [ /// (acpi::DeviceId::new(c"LNUXBEEF"), ()) diff --git a/samples/rust/rust_driver_serdev.rs b/samples/rust/rust_driver_serdev.rs index a12b1412db30..51b4898cd855 100644 --- a/samples/rust/rust_driver_serdev.rs +++ b/samples/rust/rust_driver_serdev.rs @@ -20,14 +20,12 @@ struct SampleDriver { kernel::of_device_table!( OF_TABLE, - MODULE_OF_TABLE, <SampleDriver as serdev::Driver>::IdInfo, [(of::DeviceId::new(c"test,rust_driver_serdev"), ())] ); kernel::acpi_device_table!( ACPI_TABLE, - MODULE_ACPI_TABLE, <SampleDriver as serdev::Driver>::IdInfo, [(acpi::DeviceId::new(c"LNUXBEEF"), ())] );