[PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access

Danilo Krummrich posted 1 patch 1 month, 2 weeks ago
rust/kernel/serdev.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
Posted by Danilo Krummrich 1 month, 2 weeks ago
The THIS_MODULE series [1] applied to rust-next moved ThisModule from
lib.rs into a module.rs submodule, making the tuple struct field private
outside the module. This breaks the module.0 field access in serdev in
driver-core-next.

Update the call to __serdev_device_driver_register() to use the public
module.as_ptr() accessor to fix the build.

Link: https://lore.kernel.org/all/20260811-fix-fops-owner-v10-0-7e71776f9dbe@linux.dev/ [1]
Closes: https://lore.kernel.org/all/DKNAS52KYWLD.M15VEC6U0F6R@kernel.org/
Signed-off-by: Danilo Krummrich <dakr@kernel.org>
---
 rust/kernel/serdev.rs | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/rust/kernel/serdev.rs b/rust/kernel/serdev.rs
index c0cd24481ee3..eecb1117095c 100644
--- a/rust/kernel/serdev.rs
+++ b/rust/kernel/serdev.rs
@@ -87,7 +87,7 @@ unsafe fn register(
         }
 
         // SAFETY: `sdrv` is guaranteed to be a valid `DriverType`.
-        to_result(unsafe { bindings::__serdev_device_driver_register(sdrv.get(), module.0) })
+        to_result(unsafe { bindings::__serdev_device_driver_register(sdrv.get(), module.as_ptr()) })
     }
 
     unsafe fn unregister(sdrv: &Opaque<Self::DriverType>) {

base-commit: 8364d0e36cbbdfe9adb65a170a70cbe3cdb02ff9
-- 
2.55.0
Re: [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
Posted by Danilo Krummrich 1 month, 2 weeks ago
On Thu, 13 Aug 2026 17:24:41 +0200, Danilo Krummrich wrote:
> [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access

Applied, thanks!

  Branch: driver-core-next
  Tree:   git://git.kernel.org/pub/scm/linux/kernel/git/driver-core/driver-core.git

[1/1] rust: serdev: use ThisModule::as_ptr() instead of field access
      commit: ddca0cd80096

The patch will appear in the next linux-next integration (typically within 24
hours on weekdays).

The patch is queued up for the upcoming merge window for the next major kernel
release.
Re: [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
Posted by Gary Guo 1 month, 2 weeks ago
On Thu Aug 13, 2026 at 4:24 PM BST, Danilo Krummrich wrote:
> The THIS_MODULE series [1] applied to rust-next moved ThisModule from
> lib.rs into a module.rs submodule, making the tuple struct field private
> outside the module. This breaks the module.0 field access in serdev in
> driver-core-next.
> 
> Update the call to __serdev_device_driver_register() to use the public
> module.as_ptr() accessor to fix the build.
> 
> Link: https://lore.kernel.org/all/20260811-fix-fops-owner-v10-0-7e71776f9dbe@linux.dev/ [1]
> Closes: https://lore.kernel.org/all/DKNAS52KYWLD.M15VEC6U0F6R@kernel.org/
> Signed-off-by: Danilo Krummrich <dakr@kernel.org>

Reviewed-by: Gary Guo <gary@garyguo.net>

> ---
>  rust/kernel/serdev.rs | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
Re: [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
Posted by Markus Probst 1 month, 2 weeks ago
On Thu, 2026-08-13 at 17:24 +0200, Danilo Krummrich wrote:
> The THIS_MODULE series [1] applied to rust-next moved ThisModule from
> lib.rs into a module.rs submodule, making the tuple struct field private
> outside the module. This breaks the module.0 field access in serdev in
> driver-core-next.
> 
> Update the call to __serdev_device_driver_register() to use the public
> module.as_ptr() accessor to fix the build.
I encounter 2 errors when building with both driver-core-next and rust-
next

error[E0616]: field `0` of struct `module::ThisModule` is private
  --> rust/kernel/serdev.rs:90:89
   |
90 |         to_result(unsafe {
bindings::__serdev_device_driver_register(sdrv.get(), module.0) })
   |                                                                  
^ private field

error[E0599]: no method named `__pinned_init` found for associated type
`impl pin_init::PinInit<<T as serdev::Driver>::Data<'_>, error::Error>
+ '_` in the current scope
   --> rust/kernel/serdev.rs:200:40
    |
200 |             let result = unsafe {
data.__pinned_init(driver.as_mut_ptr()) };
    |                                        ^^^^^^^^^^^^^ method not
found in `impl pin_init::PinInit<<T as serdev::Driver>::Data<'_>,
error::Error> + '_`

error: aborting due to 2 previous errors


> 
> Link: https://lore.kernel.org/all/20260811-fix-fops-owner-v10-0-7e71776f9dbe@linux.dev/ [1]
> Closes: https://lore.kernel.org/all/DKNAS52KYWLD.M15VEC6U0F6R@kernel.org/
> Signed-off-by: Danilo Krummrich <dakr@kernel.org>
> ---
>  rust/kernel/serdev.rs | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/rust/kernel/serdev.rs b/rust/kernel/serdev.rs
> index c0cd24481ee3..eecb1117095c 100644
> --- a/rust/kernel/serdev.rs
> +++ b/rust/kernel/serdev.rs
> @@ -87,7 +87,7 @@ unsafe fn register(
>          }
>  
>          // SAFETY: `sdrv` is guaranteed to be a valid `DriverType`.
> -        to_result(unsafe { bindings::__serdev_device_driver_register(sdrv.get(), module.0) })
> +        to_result(unsafe { bindings::__serdev_device_driver_register(sdrv.get(), module.as_ptr()) })
>      }
>  
>      unsafe fn unregister(sdrv: &Opaque<Self::DriverType>) {
> 
> base-commit: 8364d0e36cbbdfe9adb65a170a70cbe3cdb02ff9

The first error disappears with this patch.

Reviewed-by: Markus Probst <markus.probst@posteo.de>


Should I send a patch regarding the 2. error?

It seems the `PinInit::__pinned_init` function is not only deprecated,
but also behind the `#[cfg(not(kernel))]` flag, which causes the error.

Thanks
- Markus Probst
Re: [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
Posted by Danilo Krummrich 1 month, 2 weeks ago
On Thu Aug 13, 2026 at 5:53 PM CEST, Markus Probst wrote:
> Should I send a patch regarding the 2. error?

The second one can't be fixed with a patch in either of the trees, as it is a
real merge conflict.

This one is only fixable in the driver-core tree, since as_ptr() is a
preexisting method.
Re: [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
Posted by Gary Guo 1 month, 2 weeks ago
On Thu Aug 13, 2026 at 4:53 PM BST, Markus Probst wrote:
> On Thu, 2026-08-13 at 17:24 +0200, Danilo Krummrich wrote:
>> The THIS_MODULE series [1] applied to rust-next moved ThisModule from
>> lib.rs into a module.rs submodule, making the tuple struct field private
>> outside the module. This breaks the module.0 field access in serdev in
>> driver-core-next.
>> 
>> Update the call to __serdev_device_driver_register() to use the public
>> module.as_ptr() accessor to fix the build.
> I encounter 2 errors when building with both driver-core-next and rust-
> next
>
> error[E0616]: field `0` of struct `module::ThisModule` is private
>   --> rust/kernel/serdev.rs:90:89
>    |
> 90 |         to_result(unsafe {
> bindings::__serdev_device_driver_register(sdrv.get(), module.0) })
>    |                                                                  
> ^ private field
>
> error[E0599]: no method named `__pinned_init` found for associated type
> `impl pin_init::PinInit<<T as serdev::Driver>::Data<'_>, error::Error>
> + '_` in the current scope
>    --> rust/kernel/serdev.rs:200:40
>     |
> 200 |             let result = unsafe {
> data.__pinned_init(driver.as_mut_ptr()) };
>     |                                        ^^^^^^^^^^^^^ method not
> found in `impl pin_init::PinInit<<T as serdev::Driver>::Data<'_>,
> error::Error> + '_`
>
> error: aborting due to 2 previous errors
>
> [snip]
>
> Should I send a patch regarding the 2. error?
>
> It seems the `PinInit::__pinned_init` function is not only deprecated,
> but also behind the `#[cfg(not(kernel))]` flag, which causes the error.
>
> Thanks
> - Markus Probst

This is a semantic conflict that cannot be solved on a single tree and has to be
done on the merge commit.

A resolution is already on linux-next, see
https://lore.kernel.org/rust-for-linux/20260807074729.108159-1-ojeda@kernel.org/

Best,
Gary