From: Danilo Krummrich <dakr@kernel.org>
To: Christian Schrefl <chrisi.schrefl@gmail.com>
Cc: "Luis Chamberlain" <mcgrof@kernel.org>,
"Russ Weight" <russ.weight@linux.dev>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <benno.lossin@proton.me>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH] rust: fix building firmware abstraction on 32bit arm
Date: Fri, 11 Apr 2025 12:35:10 +0200 [thread overview]
Message-ID: <Z_jwXsQae9DjLWha@pollux> (raw)
In-Reply-To: <20250411-rust_arm_fix_fw_abstaction-v1-1-0a9e598451c6@gmail.com>
On Fri, Apr 11, 2025 at 09:14:48AM +0200, Christian Schrefl wrote:
> When trying to build the rust firmware abstractions on 32 bit arm the
> following build error occures:
>
> ```
> error[E0308]: mismatched types
> --> rust/kernel/firmware.rs:20:14
> |
> 20 | Self(bindings::request_firmware)
> | ---- ^^^^^^^^^^^^^^^^^^^^^^^^^^ expected fn pointer, found fn item
> | |
> | arguments to this function are incorrect
> |
> = note: expected fn pointer `unsafe extern "C" fn(_, *const i8, _) -> _`
> found fn item `unsafe extern "C" fn(_, *const u8, _) -> _ {request_firmware}`
This looks like you have local changes in your tree, running in this error. I
get the exact same errors when I apply the following diff:
diff --git a/rust/kernel/firmware.rs b/rust/kernel/firmware.rs
index f04b058b09b2..a67047e3aa6b 100644
--- a/rust/kernel/firmware.rs
+++ b/rust/kernel/firmware.rs
@@ -12,7 +12,7 @@
/// One of the following: `bindings::request_firmware`, `bindings::firmware_request_nowarn`,
/// `bindings::firmware_request_platform`, `bindings::request_firmware_direct`.
struct FwFunc(
- unsafe extern "C" fn(*mut *const bindings::firmware, *const u8, *mut bindings::device) -> i32,
+ unsafe extern "C" fn(*mut *const bindings::firmware, *const i8, *mut bindings::device) -> i32,
);
> note: tuple struct defined here
> --> rust/kernel/firmware.rs:14:8
> |
> 14 | struct FwFunc(
> | ^^^^^^
>
> error[E0308]: mismatched types
> --> rust/kernel/firmware.rs:24:14
> |
> 24 | Self(bindings::firmware_request_nowarn)
> | ---- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected fn pointer, found fn item
> | |
> | arguments to this function are incorrect
> |
> = note: expected fn pointer `unsafe extern "C" fn(_, *const i8, _) -> _`
> found fn item `unsafe extern "C" fn(_, *const u8, _) -> _ {firmware_request_nowarn}`
> note: tuple struct defined here
> --> rust/kernel/firmware.rs:14:8
> |
> 14 | struct FwFunc(
> | ^^^^^^
>
> error[E0308]: mismatched types
> --> rust/kernel/firmware.rs:64:45
> |
> 64 | let ret = unsafe { func.0(pfw as _, name.as_char_ptr(), dev.as_raw()) };
> | ------ ^^^^^^^^^^^^^^^^^^ expected `*const i8`, found `*const u8`
> | |
> | arguments to this function are incorrect
> |
> = note: expected raw pointer `*const i8`
> found raw pointer `*const u8`
>
> error: aborting due to 3 previous errors
> ```
I did a test build with multi_v7_defconfig and I can't reproduce this issue.
I think the kernel does always use -funsigned-char, as also documented in commit
1bae8729e50a ("rust: map `long` to `isize` and `char` to `u8`")?
>
> To fix this error the char pointer type in `FwFunc` is converted to
> `ffi::c_char`.
>
> Fixes: de6582833db0 ("rust: add firmware abstractions")
> Cc: stable@vger.kernel.org # Backport only to 6.15 needed
>
> Signed-off-by: Christian Schrefl <chrisi.schrefl@gmail.com>
> ---
> rust/kernel/firmware.rs | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/rust/kernel/firmware.rs b/rust/kernel/firmware.rs
> index f04b058b09b2d2397e26344d0e055b3aa5061432..1d6284316f2a4652ef3f76272670e5e29b0ff924 100644
> --- a/rust/kernel/firmware.rs
> +++ b/rust/kernel/firmware.rs
> @@ -5,14 +5,18 @@
> //! C header: [`include/linux/firmware.h`](srctree/include/linux/firmware.h)
>
> use crate::{bindings, device::Device, error::Error, error::Result, str::CStr};
> -use core::ptr::NonNull;
> +use core::{ffi, ptr::NonNull};
The change itself seems to be fine anyways, but I think we should use crate::ffi
instead.
next prev parent reply other threads:[~2025-04-11 10:35 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-11 7:14 [PATCH] rust: fix building firmware abstraction on 32bit arm Christian Schrefl
2025-04-11 8:37 ` Benno Lossin
2025-04-11 10:35 ` Danilo Krummrich [this message]
2025-04-11 13:47 ` Christian Schrefl
2025-04-11 14:17 ` Danilo Krummrich
2025-04-11 12:45 ` Benno Lossin
2025-04-11 14:15 ` Miguel Ojeda
2025-04-11 14:18 ` Miguel Ojeda
2025-04-12 10:01 ` Benno Lossin
2025-04-14 14:05 ` Alice Ryhl
2025-04-14 14:52 ` Benno Lossin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z_jwXsQae9DjLWha@pollux \
--to=dakr@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=benno.lossin@proton.me \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=chrisi.schrefl@gmail.com \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mcgrof@kernel.org \
--cc=ojeda@kernel.org \
--cc=russ.weight@linux.dev \
--cc=rust-for-linux@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=tmgross@umich.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.