* [PATCH v2 1/3] replace `#[allow(...)]` with `#[expect(...)]`
2025-06-27 6:53 [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)` Onur Özkan
@ 2025-06-27 6:53 ` Onur Özkan
2025-06-27 6:53 ` [PATCH v2 2/3] rust: remove `#[allow(clippy::unnecessary_cast)]` Onur Özkan
` (2 subsequent siblings)
3 siblings, 0 replies; 7+ messages in thread
From: Onur Özkan @ 2025-06-27 6:53 UTC (permalink / raw)
To: rust-for-linux, linux-kernel, linux-pm, linux-kselftest,
kunit-dev
Cc: airlied, simona, ojeda, alex.gaynor, boqun.feng, gary, bjorn3_gh,
lossin, a.hindborg, aliceryhl, tmgross, rafael, viresh.kumar,
gregkh, maarten.lankhorst, mripard, tzimmermann, davidgow, nm,
Onur Özkan
This makes it clear that the warning is expected not just
ignored, so we don't end up having various unnecessary
linting rules in the codebase.
Some parts of the codebase already use this approach, this
patch just applies it more broadly.
Signed-off-by: Onur Özkan <work@onurozkan.dev>
---
drivers/gpu/nova-core/regs.rs | 2 +-
rust/compiler_builtins.rs | 2 +-
rust/kernel/alloc/allocator_test.rs | 2 +-
rust/kernel/devres.rs | 2 +-
rust/kernel/driver.rs | 2 +-
rust/kernel/drm/ioctl.rs | 8 ++++----
rust/kernel/error.rs | 2 +-
rust/kernel/init.rs | 6 +++---
rust/kernel/kunit.rs | 2 +-
rust/kernel/opp.rs | 4 ++--
rust/kernel/types.rs | 2 +-
rust/macros/helpers.rs | 2 +-
12 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/drivers/gpu/nova-core/regs.rs b/drivers/gpu/nova-core/regs.rs
index 5a1273230306..87e5963f1ebb 100644
--- a/drivers/gpu/nova-core/regs.rs
+++ b/drivers/gpu/nova-core/regs.rs
@@ -2,7 +2,7 @@
// Required to retain the original register names used by OpenRM, which are all capital snake case
// but are mapped to types.
-#![allow(non_camel_case_types)]
+#![expect(non_camel_case_types)]
#[macro_use]
mod macros;
diff --git a/rust/compiler_builtins.rs b/rust/compiler_builtins.rs
index dd16c1dc899c..477b41da56d7 100644
--- a/rust/compiler_builtins.rs
+++ b/rust/compiler_builtins.rs
@@ -19,7 +19,7 @@
//! [`compiler_builtins`]: https://github.com/rust-lang/compiler-builtins
//! [`compiler-rt`]: https://compiler-rt.llvm.org/
-#![allow(internal_features)]
+#![expect(internal_features)]
#![feature(compiler_builtins)]
#![compiler_builtins]
#![no_builtins]
diff --git a/rust/kernel/alloc/allocator_test.rs b/rust/kernel/alloc/allocator_test.rs
index d19c06ef0498..844197d7194e 100644
--- a/rust/kernel/alloc/allocator_test.rs
+++ b/rust/kernel/alloc/allocator_test.rs
@@ -7,7 +7,7 @@
//! `Cmalloc` allocator within the `allocator_test` module and type alias all kernel allocators to
//! `Cmalloc`. The `Cmalloc` allocator uses libc's `realloc()` function as allocator backend.
-#![allow(missing_docs)]
+#![expect(missing_docs)]
use super::{flags::*, AllocError, Allocator, Flags};
use core::alloc::Layout;
diff --git a/rust/kernel/devres.rs b/rust/kernel/devres.rs
index 57502534d985..0e9510cf4625 100644
--- a/rust/kernel/devres.rs
+++ b/rust/kernel/devres.rs
@@ -157,7 +157,7 @@ fn remove_action(this: &Arc<Self>) -> bool {
success
}
- #[allow(clippy::missing_safety_doc)]
+ #[expect(clippy::missing_safety_doc)]
unsafe extern "C" fn devres_callback(ptr: *mut kernel::ffi::c_void) {
let ptr = ptr as *mut DevresInner<T>;
// Devres owned this memory; now that we received the callback, drop the `Arc` and hence the
diff --git a/rust/kernel/driver.rs b/rust/kernel/driver.rs
index ec9166cedfa7..fc7bd65b01f1 100644
--- a/rust/kernel/driver.rs
+++ b/rust/kernel/driver.rs
@@ -168,7 +168,7 @@ fn of_id_info(dev: &device::Device) -> Option<&'static Self::IdInfo> {
}
#[cfg(not(CONFIG_OF))]
- #[allow(missing_docs)]
+ #[expect(missing_docs)]
fn of_id_info(_dev: &device::Device) -> Option<&'static Self::IdInfo> {
None
}
diff --git a/rust/kernel/drm/ioctl.rs b/rust/kernel/drm/ioctl.rs
index 445639404fb7..3ae8d2d8263f 100644
--- a/rust/kernel/drm/ioctl.rs
+++ b/rust/kernel/drm/ioctl.rs
@@ -9,28 +9,28 @@
const BASE: u32 = uapi::DRM_IOCTL_BASE as u32;
/// Construct a DRM ioctl number with no argument.
-#[allow(non_snake_case)]
+#[expect(non_snake_case)]
#[inline(always)]
pub const fn IO(nr: u32) -> u32 {
ioctl::_IO(BASE, nr)
}
/// Construct a DRM ioctl number with a read-only argument.
-#[allow(non_snake_case)]
+#[expect(non_snake_case)]
#[inline(always)]
pub const fn IOR<T>(nr: u32) -> u32 {
ioctl::_IOR::<T>(BASE, nr)
}
/// Construct a DRM ioctl number with a write-only argument.
-#[allow(non_snake_case)]
+#[expect(non_snake_case)]
#[inline(always)]
pub const fn IOW<T>(nr: u32) -> u32 {
ioctl::_IOW::<T>(BASE, nr)
}
/// Construct a DRM ioctl number with a read-write argument.
-#[allow(non_snake_case)]
+#[expect(non_snake_case)]
#[inline(always)]
pub const fn IOWR<T>(nr: u32) -> u32 {
ioctl::_IOWR::<T>(BASE, nr)
diff --git a/rust/kernel/error.rs b/rust/kernel/error.rs
index 3dee3139fcd4..a59613918d4c 100644
--- a/rust/kernel/error.rs
+++ b/rust/kernel/error.rs
@@ -263,7 +263,7 @@ fn from(e: core::convert::Infallible) -> Error {
/// [`samples/rust/rust_minimal.rs`]):
///
/// ```
-/// # #[allow(clippy::single_match)]
+/// # #[expect(clippy::single_match)]
/// fn example() -> Result {
/// let mut numbers = KVec::new();
///
diff --git a/rust/kernel/init.rs b/rust/kernel/init.rs
index 8d228c237954..288b1c2a290d 100644
--- a/rust/kernel/init.rs
+++ b/rust/kernel/init.rs
@@ -30,7 +30,7 @@
//! ## General Examples
//!
//! ```rust,ignore
-//! # #![allow(clippy::disallowed_names)]
+//! # #![expect(clippy::disallowed_names)]
//! use kernel::types::Opaque;
//! use pin_init::pin_init_from_closure;
//!
@@ -67,11 +67,11 @@
//! ```
//!
//! ```rust,ignore
-//! # #![allow(unreachable_pub, clippy::disallowed_names)]
+//! # #![expect(unreachable_pub, clippy::disallowed_names)]
//! use kernel::{prelude::*, types::Opaque};
//! use core::{ptr::addr_of_mut, marker::PhantomPinned, pin::Pin};
//! # mod bindings {
-//! # #![allow(non_camel_case_types)]
+//! # #![expect(non_camel_case_types)]
//! # pub struct foo;
//! # pub unsafe fn init_foo(_ptr: *mut foo) {}
//! # pub unsafe fn destroy_foo(_ptr: *mut foo) {}
diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs
index 4b8cdcb21e77..91710a1d7b87 100644
--- a/rust/kernel/kunit.rs
+++ b/rust/kernel/kunit.rs
@@ -280,7 +280,7 @@ macro_rules! kunit_unsafe_test_suite {
static mut KUNIT_TEST_SUITE: ::kernel::bindings::kunit_suite =
::kernel::bindings::kunit_suite {
name: KUNIT_TEST_SUITE_NAME,
- #[allow(unused_unsafe)]
+ #[expect(unused_unsafe)]
// SAFETY: `$test_cases` is passed in by the user, and
// (as documented) must be valid for the lifetime of
// the suite (i.e., static).
diff --git a/rust/kernel/opp.rs b/rust/kernel/opp.rs
index a566fc3e7dcb..aaeefe84861a 100644
--- a/rust/kernel/opp.rs
+++ b/rust/kernel/opp.rs
@@ -600,9 +600,9 @@ extern "C" fn config_regulators(
pub struct Table {
ptr: *mut bindings::opp_table,
dev: ARef<Device>,
- #[allow(dead_code)]
+ #[expect(dead_code)]
em: bool,
- #[allow(dead_code)]
+ #[expect(dead_code)]
of: bool,
cpus: Option<CpumaskVar>,
}
diff --git a/rust/kernel/types.rs b/rust/kernel/types.rs
index 22985b6f6982..a5d5a4737a41 100644
--- a/rust/kernel/types.rs
+++ b/rust/kernel/types.rs
@@ -600,5 +600,5 @@ pub enum Either<L, R> {
/// constructed.
///
/// [`NotThreadSafe`]: type@NotThreadSafe
-#[allow(non_upper_case_globals)]
+#[expect(non_upper_case_globals)]
pub const NotThreadSafe: NotThreadSafe = PhantomData;
diff --git a/rust/macros/helpers.rs b/rust/macros/helpers.rs
index e2602be402c1..6fd1462ff01a 100644
--- a/rust/macros/helpers.rs
+++ b/rust/macros/helpers.rs
@@ -98,7 +98,7 @@ pub(crate) fn file() -> String {
}
#[cfg(CONFIG_RUSTC_HAS_SPAN_FILE)]
- #[allow(clippy::incompatible_msrv)]
+ #[expect(clippy::incompatible_msrv)]
{
proc_macro::Span::call_site().file()
}
--
2.50.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/3] rust: remove `#[allow(clippy::unnecessary_cast)]`
2025-06-27 6:53 [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)` Onur Özkan
2025-06-27 6:53 ` [PATCH v2 1/3] replace `#[allow(...)]` with `#[expect(...)]` Onur Özkan
@ 2025-06-27 6:53 ` Onur Özkan
2025-06-27 6:53 ` [PATCH v2 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]` Onur Özkan
2025-06-27 15:55 ` [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)` Miguel Ojeda
3 siblings, 0 replies; 7+ messages in thread
From: Onur Özkan @ 2025-06-27 6:53 UTC (permalink / raw)
To: rust-for-linux, linux-kernel, linux-pm, linux-kselftest,
kunit-dev
Cc: airlied, simona, ojeda, alex.gaynor, boqun.feng, gary, bjorn3_gh,
lossin, a.hindborg, aliceryhl, tmgross, rafael, viresh.kumar,
gregkh, maarten.lankhorst, mripard, tzimmermann, davidgow, nm,
Onur Özkan
This isn't needed anymore since `kernel::ffi::c_int` type
is always `i32` which differs from `err` (isize).
Signed-off-by: Onur Özkan <work@onurozkan.dev>
---
rust/kernel/error.rs | 1 -
1 file changed, 1 deletion(-)
diff --git a/rust/kernel/error.rs b/rust/kernel/error.rs
index a59613918d4c..05c6e71c0afb 100644
--- a/rust/kernel/error.rs
+++ b/rust/kernel/error.rs
@@ -413,7 +413,6 @@ pub fn from_err_ptr<T>(ptr: *mut T) -> Result<*mut T> {
// SAFETY: The FFI function does not deref the pointer.
let err = unsafe { bindings::PTR_ERR(const_ptr) };
- #[allow(clippy::unnecessary_cast)]
// CAST: If `IS_ERR()` returns `true`,
// then `PTR_ERR()` is guaranteed to return a
// negative value greater-or-equal to `-bindings::MAX_ERRNO`,
--
2.50.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
2025-06-27 6:53 [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)` Onur Özkan
2025-06-27 6:53 ` [PATCH v2 1/3] replace `#[allow(...)]` with `#[expect(...)]` Onur Özkan
2025-06-27 6:53 ` [PATCH v2 2/3] rust: remove `#[allow(clippy::unnecessary_cast)]` Onur Özkan
@ 2025-06-27 6:53 ` Onur Özkan
2025-06-27 15:55 ` [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)` Miguel Ojeda
3 siblings, 0 replies; 7+ messages in thread
From: Onur Özkan @ 2025-06-27 6:53 UTC (permalink / raw)
To: rust-for-linux, linux-kernel, linux-pm, linux-kselftest,
kunit-dev
Cc: airlied, simona, ojeda, alex.gaynor, boqun.feng, gary, bjorn3_gh,
lossin, a.hindborg, aliceryhl, tmgross, rafael, viresh.kumar,
gregkh, maarten.lankhorst, mripard, tzimmermann, davidgow, nm,
Onur Özkan
Clippy no longer complains about this lint.
Signed-off-by: Onur Özkan <work@onurozkan.dev>
---
rust/kernel/cpufreq.rs | 1 -
1 file changed, 1 deletion(-)
diff --git a/rust/kernel/cpufreq.rs b/rust/kernel/cpufreq.rs
index 11b03e9d7e89..97de9b0573da 100644
--- a/rust/kernel/cpufreq.rs
+++ b/rust/kernel/cpufreq.rs
@@ -907,7 +907,6 @@ fn register_em(_policy: &mut Policy) {
/// or CPUs, so it is safe to share it.
unsafe impl<T: Driver> Sync for Registration<T> {}
-#[allow(clippy::non_send_fields_in_send_ty)]
/// SAFETY: Registration with and unregistration from the cpufreq subsystem can happen from any
/// thread.
unsafe impl<T: Driver> Send for Registration<T> {}
--
2.50.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)`
2025-06-27 6:53 [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)` Onur Özkan
` (2 preceding siblings ...)
2025-06-27 6:53 ` [PATCH v2 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]` Onur Özkan
@ 2025-06-27 15:55 ` Miguel Ojeda
2025-06-28 4:03 ` Onur
3 siblings, 1 reply; 7+ messages in thread
From: Miguel Ojeda @ 2025-06-27 15:55 UTC (permalink / raw)
To: Onur Özkan
Cc: rust-for-linux, linux-kernel, linux-pm, linux-kselftest,
kunit-dev, airlied, simona, ojeda, alex.gaynor, boqun.feng, gary,
bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross, rafael,
viresh.kumar, gregkh, maarten.lankhorst, mripard, tzimmermann,
davidgow, nm
On Fri, Jun 27, 2025 at 8:54 AM Onur Özkan <work@onurozkan.dev> wrote:
>
> The `#[allow(clippy::non_send_fields_in_send_ty)]` removal was tested
> on 1.81 and clippy was still happy with it. I couldn't test it on 1.78
> because when I go below 1.81 `menuconfig` no longer shows the Rust option.
> And any manual changes I make to `.config` are immediately reverted on
> `make` invocations.
For that, I recommend using the `/` command inside `menuconfig` -- it
allows you to see the dependencies of a given symbol, and whether they
are met or not. That way, it allows one to understand what else may be
missing to enable a symbol.
I hope that helps.
Cheers,
Miguel
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)`
2025-06-27 15:55 ` [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)` Miguel Ojeda
@ 2025-06-28 4:03 ` Onur
2025-06-28 7:18 ` Miguel Ojeda
0 siblings, 1 reply; 7+ messages in thread
From: Onur @ 2025-06-28 4:03 UTC (permalink / raw)
To: Miguel Ojeda
Cc: rust-for-linux, linux-kernel, linux-pm, linux-kselftest,
kunit-dev, airlied, simona, ojeda, alex.gaynor, boqun.feng, gary,
bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross, rafael,
viresh.kumar, gregkh, maarten.lankhorst, mripard, tzimmermann,
davidgow, nm
On Fri, 27 Jun 2025 17:55:41 +0200
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote:
> On Fri, Jun 27, 2025 at 8:54 AM Onur Özkan <work@onurozkan.dev> wrote:
> >
> > The `#[allow(clippy::non_send_fields_in_send_ty)]` removal was
> > tested on 1.81 and clippy was still happy with it. I couldn't test
> > it on 1.78 because when I go below 1.81 `menuconfig` no longer
> > shows the Rust option. And any manual changes I make to `.config`
> > are immediately reverted on `make` invocations.
>
> For that, I recommend using the `/` command inside `menuconfig` -- it
> allows you to see the dependencies of a given symbol, and whether they
> are met or not. That way, it allows one to understand what else may be
> missing to enable a symbol.
>
> I hope that helps.
>
> Cheers,
> Miguel
I already tried that but it didn't helped. I was able to make it work
with manually hacking the `init/Kconfig` file.
Removal of `#[allow(clippy::non_send_fields_in_send_ty)]` still works
as expected, but using `#![expect(internal_features)]` (which was done
in the first diff) doesn't work on 1.78. I will revert that and send v3
patch in a short.
Regards,
Onur
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v2 0/3] replace `allow(...)` lints with `expect(...)`
2025-06-28 4:03 ` Onur
@ 2025-06-28 7:18 ` Miguel Ojeda
0 siblings, 0 replies; 7+ messages in thread
From: Miguel Ojeda @ 2025-06-28 7:18 UTC (permalink / raw)
To: Onur
Cc: rust-for-linux, linux-kernel, linux-pm, linux-kselftest,
kunit-dev, airlied, simona, ojeda, alex.gaynor, boqun.feng, gary,
bjorn3_gh, lossin, a.hindborg, aliceryhl, tmgross, rafael,
viresh.kumar, gregkh, maarten.lankhorst, mripard, tzimmermann,
davidgow, nm
On Sat, Jun 28, 2025 at 6:03 AM Onur <work@onurozkan.dev> wrote:
>
> I already tried that but it didn't helped. I was able to make it work
> with manually hacking the `init/Kconfig` file.
That should not be needed -- the `/` command should tell you what you
are missing.
Cheers,
Miguel
^ permalink raw reply [flat|nested] 7+ messages in thread