All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
@ 2026-08-13 15:24 Danilo Krummrich
  2026-08-13 15:53 ` Markus Probst
  2026-08-13 16:08 ` Gary Guo
  0 siblings, 2 replies; 5+ messages in thread
From: Danilo Krummrich @ 2026-08-13 15:24 UTC (permalink / raw)
  To: markus.probst, gregkh, rafael, dakr, ojeda, boqun, gary,
	bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross, daniel.almeida,
	tamird, acourbot, work
  Cc: driver-core, linux-serial, rust-for-linux, linux-kernel

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


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
  2026-08-13 15:24 [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access Danilo Krummrich
@ 2026-08-13 15:53 ` Markus Probst
  2026-08-13 16:08   ` Gary Guo
  2026-08-13 16:10   ` Danilo Krummrich
  2026-08-13 16:08 ` Gary Guo
  1 sibling, 2 replies; 5+ messages in thread
From: Markus Probst @ 2026-08-13 15:53 UTC (permalink / raw)
  To: Danilo Krummrich, gregkh, rafael, ojeda, boqun, gary, bjorn3_gh,
	lossin, a.hindborg, aliceryhl, tmgross, daniel.almeida, tamird,
	acourbot, work
  Cc: driver-core, linux-serial, rust-for-linux, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 2611 bytes --]

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

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 870 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
  2026-08-13 15:53 ` Markus Probst
@ 2026-08-13 16:08   ` Gary Guo
  2026-08-13 16:10   ` Danilo Krummrich
  1 sibling, 0 replies; 5+ messages in thread
From: Gary Guo @ 2026-08-13 16:08 UTC (permalink / raw)
  To: Markus Probst, Danilo Krummrich, gregkh, rafael, ojeda, boqun,
	gary, bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross,
	daniel.almeida, tamird, acourbot, work
  Cc: driver-core, linux-serial, rust-for-linux, linux-kernel

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
  2026-08-13 15:24 [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access Danilo Krummrich
  2026-08-13 15:53 ` Markus Probst
@ 2026-08-13 16:08 ` Gary Guo
  1 sibling, 0 replies; 5+ messages in thread
From: Gary Guo @ 2026-08-13 16:08 UTC (permalink / raw)
  To: Danilo Krummrich, markus.probst, gregkh, rafael, ojeda, boqun,
	gary, bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross,
	daniel.almeida, tamird, acourbot, work
  Cc: driver-core, linux-serial, rust-for-linux, linux-kernel

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(-)


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access
  2026-08-13 15:53 ` Markus Probst
  2026-08-13 16:08   ` Gary Guo
@ 2026-08-13 16:10   ` Danilo Krummrich
  1 sibling, 0 replies; 5+ messages in thread
From: Danilo Krummrich @ 2026-08-13 16:10 UTC (permalink / raw)
  To: Markus Probst
  Cc: gregkh, rafael, ojeda, boqun, gary, bjorn3_gh, lossin, a.hindborg,
	aliceryhl, tmgross, daniel.almeida, tamird, acourbot, work,
	driver-core, linux-serial, rust-for-linux, linux-kernel

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.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2026-08-13 16:10 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-13 15:24 [PATCH] rust: serdev: use ThisModule::as_ptr() instead of field access Danilo Krummrich
2026-08-13 15:53 ` Markus Probst
2026-08-13 16:08   ` Gary Guo
2026-08-13 16:10   ` Danilo Krummrich
2026-08-13 16:08 ` Gary Guo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.