* [PATCH v5 00/17] refactor to utilize `&raw [const|mut]`
@ 2025-03-20 2:07 Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 01/17] rust: enable `raw_ref_op` feature Antonio Hickey
` (18 more replies)
0 siblings, 19 replies; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux
This patch set enables the `raw_ref_op` feature, which became stable
in Rust 1.82.
It then replaces all occurences of `addr_of!(place)` and
`addr_of_mut!(place)` with `&raw const place` and `&raw mut place`.
Finally it adds the previous macros `addr_of!` and `addr_of_mut!` to
the disallowed macros in `.clippy.toml`.
Changes in v5:
- Fix doctest errors when compiling on the minimum Rust version (1.78)
due to not having the `raw_ref_op` feature enabled for doctests.
- Reword commit messages to more accurately describe the changes.
- Replace unsafe call to `Opaque::raw_get` with pointer casting
in workqueue.
- Fix clippy disallowed macros message for `core::ptr::addr_of`
- Link to v4: https://lore.kernel.org/all/20250316061429.817126-1-contact@antoniohickey.com/
Changes in v4:
- Fix comment typo.
- Fix clippy issues.
- Add more context and link for disallowed macros with clippy.
- Separate the patch replacing of `addr_of[_mut]!` macros with
`&raw [const|mut]` into smaller patches for each section.
(PATCH v3 2/3 -> PATCH v4 2/16 through 15/16)
- Fix email typo.
- Link to v3: https://lore.kernel.org/all/0100019597091f92-cb55b6cd-4d06-4d14-8d9c-1a1314949a00-000000@email.amazonses.com/
Changes in v3:
- Re ordered the patches, so that the patch adding the `addr_of[_mut]!`
macros to the disallowed macros in clippy is applied after replacing
all the instances of `addr_of_[_mut]` with `&raw [const|mut]`.
(moved PATCH v2 2/3 -> PATCH v3 3/3 and PATCH v2 3/3 -> PATCH v3 2/3)
- Link to v2: https://lore.kernel.org/all/0100019592c224ba-0cf38e16-2aa2-459d-99cd-09a463d616d4-000000@email.amazonses.com/
Changes in v2:
- Fix `&raw place` should be `&raw const place`
- Fix email typo
- Link to v1: https://lore.kernel.org/all/010001958dfeacb5-9039aaab-6114-494a-9f1d-f13982091169-000000@email.amazonses.com/
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Antonio Hickey (17):
rust: enable `raw_ref_op` feature
rust: init: refactor to use `&raw [const|mut]`
rust: list: refactor to use `&raw [const|mut]`
rust: task: remove use of `addr_of!` macro
rust: faux: refactor to use `&raw [const|mut]`
rust: platform: refactor to use `&raw [const|mut]`
rust: pci: refactor to use `&raw [const|mut]`
rust: kunit: refactor to use `&raw [const|mut]`
rust: workqueue: refactor to use `&raw [const|mut]`
rust: workqueue: replace `raw_get` with pointer cast
rust: rbtree: refactor to use `&raw [const|mut]`
rust: net: phy: refactor to use `&raw [const|mut]`
rust: sync: arc: refactor to use `&raw [const|mut]`
rust: jump_label: refactor to use `&raw [const|mut]`
rust: fs: file: refactor to use `&raw [const|mut]`
rust: block: refactor to use `&raw [const|mut]`
rust: clippy: disallow `addr_of[_mut]!` macros
.clippy.toml | 4 ++++
rust/kernel/block/mq/request.rs | 4 ++--
rust/kernel/faux.rs | 4 ++--
rust/kernel/fs/file.rs | 2 +-
rust/kernel/init.rs | 8 ++++----
rust/kernel/init/macros.rs | 28 +++++++++++++-------------
rust/kernel/jump_label.rs | 4 ++--
rust/kernel/kunit.rs | 4 ++--
rust/kernel/lib.rs | 2 ++
rust/kernel/list.rs | 2 +-
rust/kernel/list/impl_list_item_mod.rs | 6 +++---
rust/kernel/net/phy.rs | 4 ++--
rust/kernel/pci.rs | 4 ++--
rust/kernel/platform.rs | 4 +---
rust/kernel/rbtree.rs | 22 ++++++++++----------
rust/kernel/sync/arc.rs | 2 +-
rust/kernel/task.rs | 4 ++--
rust/kernel/workqueue.rs | 9 +++------
scripts/Makefile.build | 4 ++--
19 files changed, 61 insertions(+), 60 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* [PATCH v5 01/17] rust: enable `raw_ref_op` feature
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-20 7:32 ` Andreas Hindborg
2025-03-22 10:16 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 02/17] rust: init: refactor to use `&raw [const|mut]` Antonio Hickey
` (17 subsequent siblings)
18 siblings, 2 replies; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, Masahiro Yamada,
Nathan Chancellor, Nicolas Schier
Cc: Antonio Hickey, rust-for-linux, linux-kernel, linux-kbuild
Since Rust 1.82.0 the `raw_ref_op` feature is stable.
By enabling this feature we can use `&raw const place` and
`&raw mut place` instead of using `addr_of!(place)` and
`addr_of_mut!(place)` macros.
Allowing us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw const`, `&raw mut` are
similar to `&`, `&mut` making it fit more naturally with other
existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/lib.rs | 2 ++
scripts/Makefile.build | 4 ++--
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
index 398242f92a96..1d078f69bb19 100644
--- a/rust/kernel/lib.rs
+++ b/rust/kernel/lib.rs
@@ -19,6 +19,8 @@
#![cfg_attr(not(CONFIG_RUSTC_HAS_COERCE_POINTEE), feature(unsize))]
#![feature(inline_const)]
#![feature(lint_reasons)]
+// Stable in Rust 1.82
+#![feature(raw_ref_op)]
// Stable in Rust 1.83
#![feature(const_maybe_uninit_as_mut_ptr)]
#![feature(const_mut_refs)]
diff --git a/scripts/Makefile.build b/scripts/Makefile.build
index 993708d11874..a73aaa028e34 100644
--- a/scripts/Makefile.build
+++ b/scripts/Makefile.build
@@ -224,9 +224,9 @@ $(obj)/%.lst: $(obj)/%.c FORCE
$(call if_changed_dep,cc_lst_c)
# Compile Rust sources (.rs)
-# ---------------------------------------------------------------------------
+# --------------------------------------------------------------------------------------
-rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons
+rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons,raw_ref_op
# `--out-dir` is required to avoid temporaries being created by `rustc` in the
# current working directory, which may be not accessible in the out-of-tree
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 02/17] rust: init: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 01/17] rust: enable `raw_ref_op` feature Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:29 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 03/17] rust: list: " Antonio Hickey
` (16 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of_mut!(place)`
with `&raw mut place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw mut` is similar to `&mut`
making it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/init.rs | 8 ++++----
rust/kernel/init/macros.rs | 28 ++++++++++++++--------------
2 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/rust/kernel/init.rs b/rust/kernel/init.rs
index 7fd1ea8265a5..53dd39f9a550 100644
--- a/rust/kernel/init.rs
+++ b/rust/kernel/init.rs
@@ -122,7 +122,7 @@
//! ```rust
//! # #![expect(unreachable_pub, clippy::disallowed_names)]
//! use kernel::{init, types::Opaque};
-//! use core::{ptr::addr_of_mut, marker::PhantomPinned, pin::Pin};
+//! use core::{marker::PhantomPinned, pin::Pin};
//! # mod bindings {
//! # #![expect(non_camel_case_types)]
//! # #![expect(clippy::missing_safety_doc)]
@@ -159,7 +159,7 @@
//! unsafe {
//! init::pin_init_from_closure(move |slot: *mut Self| {
//! // `slot` contains uninit memory, avoid creating a reference.
-//! let foo = addr_of_mut!((*slot).foo);
+//! let foo = &raw mut (*slot).foo;
//!
//! // Initialize the `foo`
//! bindings::init_foo(Opaque::raw_get(foo));
@@ -541,7 +541,7 @@ macro_rules! stack_try_pin_init {
///
/// ```rust
/// # use kernel::{macros::{Zeroable, pin_data}, pin_init};
-/// # use core::{ptr::addr_of_mut, marker::PhantomPinned};
+/// # use core::marker::PhantomPinned;
/// #[pin_data]
/// #[derive(Zeroable)]
/// struct Buf {
@@ -554,7 +554,7 @@ macro_rules! stack_try_pin_init {
/// pin_init!(&this in Buf {
/// buf: [0; 64],
/// // SAFETY: TODO.
-/// ptr: unsafe { addr_of_mut!((*this.as_ptr()).buf).cast() },
+/// ptr: unsafe { (&raw mut ((*this.as_ptr()).buf)).cast() },
/// pin: PhantomPinned,
/// });
/// pin_init!(Buf {
diff --git a/rust/kernel/init/macros.rs b/rust/kernel/init/macros.rs
index 1fd146a83241..af525fbb2f01 100644
--- a/rust/kernel/init/macros.rs
+++ b/rust/kernel/init/macros.rs
@@ -244,25 +244,25 @@
//! struct __InitOk;
//! // This is the expansion of `t,`, which is syntactic sugar for `t: t,`.
//! {
-//! unsafe { ::core::ptr::write(::core::addr_of_mut!((*slot).t), t) };
+//! unsafe { ::core::ptr::write(&raw mut (*slot).t, t) };
//! }
//! // Since initialization could fail later (not in this case, since the
//! // error type is `Infallible`) we will need to drop this field if there
//! // is an error later. This `DropGuard` will drop the field when it gets
//! // dropped and has not yet been forgotten.
//! let __t_guard = unsafe {
-//! ::pinned_init::__internal::DropGuard::new(::core::addr_of_mut!((*slot).t))
+//! ::pinned_init::__internal::DropGuard::new(&raw mut (*slot).t)
//! };
//! // Expansion of `x: 0,`:
//! // Since this can be an arbitrary expression we cannot place it inside
//! // of the `unsafe` block, so we bind it here.
//! {
//! let x = 0;
-//! unsafe { ::core::ptr::write(::core::addr_of_mut!((*slot).x), x) };
+//! unsafe { ::core::ptr::write(&raw mut (*slot).x, x) };
//! }
//! // We again create a `DropGuard`.
//! let __x_guard = unsafe {
-//! ::kernel::init::__internal::DropGuard::new(::core::addr_of_mut!((*slot).x))
+//! ::kernel::init::__internal::DropGuard::new(&raw mut (*slot).x)
//! };
//! // Since initialization has successfully completed, we can now forget
//! // the guards. This is not `mem::forget`, since we only have
@@ -459,15 +459,15 @@
//! {
//! struct __InitOk;
//! {
-//! unsafe { ::core::ptr::write(::core::addr_of_mut!((*slot).a), a) };
+//! unsafe { ::core::ptr::write(&raw mut (*slot).a, a) };
//! }
//! let __a_guard = unsafe {
-//! ::kernel::init::__internal::DropGuard::new(::core::addr_of_mut!((*slot).a))
+//! ::kernel::init::__internal::DropGuard::new(&raw mut (*slot).a)
//! };
//! let init = Bar::new(36);
-//! unsafe { data.b(::core::addr_of_mut!((*slot).b), b)? };
+//! unsafe { data.b(&raw mut (*slot).b, b)? };
//! let __b_guard = unsafe {
-//! ::kernel::init::__internal::DropGuard::new(::core::addr_of_mut!((*slot).b))
+//! ::kernel::init::__internal::DropGuard::new(&raw mut (*slot).b)
//! };
//! ::core::mem::forget(__b_guard);
//! ::core::mem::forget(__a_guard);
@@ -1210,7 +1210,7 @@ fn assert_zeroable<T: $crate::init::Zeroable>(_: *mut T) {}
// SAFETY: `slot` is valid, because we are inside of an initializer closure, we
// return when an error/panic occurs.
// We also use the `data` to require the correct trait (`Init` or `PinInit`) for `$field`.
- unsafe { $data.$field(::core::ptr::addr_of_mut!((*$slot).$field), init)? };
+ unsafe { $data.$field(&raw mut (*$slot).$field, init)? };
// Create the drop guard:
//
// We rely on macro hygiene to make it impossible for users to access this local variable.
@@ -1218,7 +1218,7 @@ fn assert_zeroable<T: $crate::init::Zeroable>(_: *mut T) {}
::kernel::macros::paste! {
// SAFETY: We forget the guard later when initialization has succeeded.
let [< __ $field _guard >] = unsafe {
- $crate::init::__internal::DropGuard::new(::core::ptr::addr_of_mut!((*$slot).$field))
+ $crate::init::__internal::DropGuard::new(&raw mut (*$slot).$field)
};
$crate::__init_internal!(init_slot($use_data):
@@ -1241,7 +1241,7 @@ fn assert_zeroable<T: $crate::init::Zeroable>(_: *mut T) {}
//
// SAFETY: `slot` is valid, because we are inside of an initializer closure, we
// return when an error/panic occurs.
- unsafe { $crate::init::Init::__init(init, ::core::ptr::addr_of_mut!((*$slot).$field))? };
+ unsafe { $crate::init::Init::__init(init, &raw mut (*$slot).$field)? };
// Create the drop guard:
//
// We rely on macro hygiene to make it impossible for users to access this local variable.
@@ -1249,7 +1249,7 @@ fn assert_zeroable<T: $crate::init::Zeroable>(_: *mut T) {}
::kernel::macros::paste! {
// SAFETY: We forget the guard later when initialization has succeeded.
let [< __ $field _guard >] = unsafe {
- $crate::init::__internal::DropGuard::new(::core::ptr::addr_of_mut!((*$slot).$field))
+ $crate::init::__internal::DropGuard::new(&raw mut (*$slot).$field)
};
$crate::__init_internal!(init_slot():
@@ -1272,7 +1272,7 @@ fn assert_zeroable<T: $crate::init::Zeroable>(_: *mut T) {}
// Initialize the field.
//
// SAFETY: The memory at `slot` is uninitialized.
- unsafe { ::core::ptr::write(::core::ptr::addr_of_mut!((*$slot).$field), $field) };
+ unsafe { ::core::ptr::write(&raw mut (*$slot).$field, $field) };
}
// Create the drop guard:
//
@@ -1281,7 +1281,7 @@ fn assert_zeroable<T: $crate::init::Zeroable>(_: *mut T) {}
::kernel::macros::paste! {
// SAFETY: We forget the guard later when initialization has succeeded.
let [< __ $field _guard >] = unsafe {
- $crate::init::__internal::DropGuard::new(::core::ptr::addr_of_mut!((*$slot).$field))
+ $crate::init::__internal::DropGuard::new(&raw mut (*$slot).$field)
};
$crate::__init_internal!(init_slot($($use_data)?):
--
2.48.1
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 03/17] rust: list: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 01/17] rust: enable `raw_ref_op` feature Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 02/17] rust: init: refactor to use `&raw [const|mut]` Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:31 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 04/17] rust: task: remove use of `addr_of!` macro Antonio Hickey
` (15 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of!(place)` and `addr_of_mut!(place)`
with `&raw const place` and `&raw mut place` respectively.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw const`, `&raw mut` are similar
to `&`, `&mut` making it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/list.rs | 2 +-
rust/kernel/list/impl_list_item_mod.rs | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/rust/kernel/list.rs b/rust/kernel/list.rs
index c0ed227b8a4f..e98f0820f002 100644
--- a/rust/kernel/list.rs
+++ b/rust/kernel/list.rs
@@ -176,7 +176,7 @@ pub fn new() -> impl PinInit<Self> {
#[inline]
unsafe fn fields(me: *mut Self) -> *mut ListLinksFields {
// SAFETY: The caller promises that the pointer is valid.
- unsafe { Opaque::raw_get(ptr::addr_of!((*me).inner)) }
+ unsafe { Opaque::raw_get(&raw const (*me).inner) }
}
/// # Safety
diff --git a/rust/kernel/list/impl_list_item_mod.rs b/rust/kernel/list/impl_list_item_mod.rs
index a0438537cee1..014b6713d59d 100644
--- a/rust/kernel/list/impl_list_item_mod.rs
+++ b/rust/kernel/list/impl_list_item_mod.rs
@@ -49,7 +49,7 @@ macro_rules! impl_has_list_links {
// SAFETY: The implementation of `raw_get_list_links` only compiles if the field has the
// right type.
//
- // The behavior of `raw_get_list_links` is not changed since the `addr_of_mut!` macro is
+ // The behavior of `raw_get_list_links` is not changed since the `&raw mut` op is
// equivalent to the pointer offset operation in the trait definition.
unsafe impl$(<$($implarg),*>)? $crate::list::HasListLinks$(<$id>)? for
$self $(<$($selfarg),*>)?
@@ -61,7 +61,7 @@ unsafe fn raw_get_list_links(ptr: *mut Self) -> *mut $crate::list::ListLinks$(<$
// SAFETY: The caller promises that the pointer is not dangling. We know that this
// expression doesn't follow any pointers, as the `offset_of!` invocation above
// would otherwise not compile.
- unsafe { ::core::ptr::addr_of_mut!((*ptr)$(.$field)*) }
+ unsafe { &raw mut (*ptr)$(.$field)* }
}
}
)*};
@@ -103,7 +103,7 @@ macro_rules! impl_has_list_links_self_ptr {
unsafe fn raw_get_list_links(ptr: *mut Self) -> *mut $crate::list::ListLinks$(<$id>)? {
// SAFETY: The caller promises that the pointer is not dangling.
let ptr: *mut $crate::list::ListLinksSelfPtr<$item_type $(, $id)?> =
- unsafe { ::core::ptr::addr_of_mut!((*ptr).$field) };
+ unsafe { &raw mut (*ptr).$field };
ptr.cast()
}
}
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 04/17] rust: task: remove use of `addr_of!` macro
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (2 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 03/17] rust: list: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 19:23 ` Miguel Ojeda
2025-03-20 2:07 ` [PATCH v5 05/17] rust: faux: refactor to use `&raw [const|mut]` Antonio Hickey
` (14 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
The use of `addr_of!` here is unnecessary since its immediately
dereferenced. The main benefit of `addr_of!` is to avoid intermediate
field loads without immediate dereferencing, so there's no benefit in
using it here.
We can achieve the same behavior by directly accessing the
`group_leader` and `pid` fields, which is more idiomatic.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/task.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/task.rs b/rust/kernel/task.rs
index 49012e711942..568b528e2cc4 100644
--- a/rust/kernel/task.rs
+++ b/rust/kernel/task.rs
@@ -257,7 +257,7 @@ pub fn as_ptr(&self) -> *mut bindings::task_struct {
pub fn group_leader(&self) -> &Task {
// SAFETY: The group leader of a task never changes after initialization, so reading this
// field is not a data race.
- let ptr = unsafe { *ptr::addr_of!((*self.as_ptr()).group_leader) };
+ let ptr = unsafe { (*self.as_ptr()).group_leader };
// SAFETY: The lifetime of the returned task reference is tied to the lifetime of `self`,
// and given that a task has a reference to its group leader, we know it must be valid for
@@ -269,7 +269,7 @@ pub fn group_leader(&self) -> &Task {
pub fn pid(&self) -> Pid {
// SAFETY: The pid of a task never changes after initialization, so reading this field is
// not a data race.
- unsafe { *ptr::addr_of!((*self.as_ptr()).pid) }
+ unsafe { (*self.as_ptr()).pid }
}
/// Returns the UID of the given task.
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 05/17] rust: faux: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (3 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 04/17] rust: task: remove use of `addr_of!` macro Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:33 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 06/17] rust: platform: " Antonio Hickey
` (13 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rafael J. Wysocki, Danilo Krummrich,
Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of_mut!(place)`
with `&raw mut place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw mut` is similar to `&mut`
making it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/faux.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/faux.rs b/rust/kernel/faux.rs
index 5acc0c02d451..11e56fcbb6ed 100644
--- a/rust/kernel/faux.rs
+++ b/rust/kernel/faux.rs
@@ -7,7 +7,7 @@
//! C header: [`include/linux/device/faux.h`]
use crate::{bindings, device, error::code::*, prelude::*};
-use core::ptr::{addr_of_mut, null, null_mut, NonNull};
+use core::ptr::{null, null_mut, NonNull};
/// The registration of a faux device.
///
@@ -45,7 +45,7 @@ impl AsRef<device::Device> for Registration {
fn as_ref(&self) -> &device::Device {
// SAFETY: The underlying `device` in `faux_device` is guaranteed by the C API to be
// a valid initialized `device`.
- unsafe { device::Device::as_ref(addr_of_mut!((*self.as_raw()).dev)) }
+ unsafe { device::Device::as_ref(&raw mut (*self.as_raw()).dev) }
}
}
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 06/17] rust: platform: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (4 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 05/17] rust: faux: refactor to use `&raw [const|mut]` Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:33 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 07/17] rust: pci: " Antonio Hickey
` (12 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rafael J. Wysocki, Danilo Krummrich,
Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of_mut!(place)`
with `&raw mut place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw mut` is similar to `&mut`
making it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/platform.rs | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/rust/kernel/platform.rs b/rust/kernel/platform.rs
index 1297f5292ba9..344875ad7b82 100644
--- a/rust/kernel/platform.rs
+++ b/rust/kernel/platform.rs
@@ -14,8 +14,6 @@
ThisModule,
};
-use core::ptr::addr_of_mut;
-
/// An adapter for the registration of platform drivers.
pub struct Adapter<T: Driver>(T);
@@ -55,7 +53,7 @@ unsafe fn unregister(pdrv: &Opaque<Self::RegType>) {
impl<T: Driver + 'static> Adapter<T> {
extern "C" fn probe_callback(pdev: *mut bindings::platform_device) -> kernel::ffi::c_int {
// SAFETY: The platform bus only ever calls the probe callback with a valid `pdev`.
- let dev = unsafe { device::Device::get_device(addr_of_mut!((*pdev).dev)) };
+ let dev = unsafe { device::Device::get_device(&raw mut (*pdev).dev) };
// SAFETY: `dev` is guaranteed to be embedded in a valid `struct platform_device` by the
// call above.
let mut pdev = unsafe { Device::from_dev(dev) };
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 07/17] rust: pci: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (5 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 06/17] rust: platform: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:34 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 08/17] rust: kunit: " Antonio Hickey
` (11 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Bjorn Helgaas, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, linux-pci, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of_mut!(place)`
with `&raw mut place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw mut` is similar to `&mut`
making it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/pci.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/pci.rs b/rust/kernel/pci.rs
index f7b2743828ae..6cb9ed1e7cbf 100644
--- a/rust/kernel/pci.rs
+++ b/rust/kernel/pci.rs
@@ -17,7 +17,7 @@
types::{ARef, ForeignOwnable, Opaque},
ThisModule,
};
-use core::{ops::Deref, ptr::addr_of_mut};
+use core::ops::Deref;
use kernel::prelude::*;
/// An adapter for the registration of PCI drivers.
@@ -60,7 +60,7 @@ extern "C" fn probe_callback(
) -> kernel::ffi::c_int {
// SAFETY: The PCI bus only ever calls the probe callback with a valid pointer to a
// `struct pci_dev`.
- let dev = unsafe { device::Device::get_device(addr_of_mut!((*pdev).dev)) };
+ let dev = unsafe { device::Device::get_device(&raw mut (*pdev).dev) };
// SAFETY: `dev` is guaranteed to be embedded in a valid `struct pci_dev` by the call
// above.
let mut pdev = unsafe { Device::from_dev(dev) };
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 08/17] rust: kunit: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (6 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 07/17] rust: pci: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:35 ` Benno Lossin
2025-03-23 19:28 ` Miguel Ojeda
2025-03-20 2:07 ` [PATCH v5 09/17] rust: workqueue: " Antonio Hickey
` (10 subsequent siblings)
18 siblings, 2 replies; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, linux-kselftest, kunit-dev, rust-for-linux,
linux-kernel
Replacing all occurrences of `addr_of!(place)` with
`&raw const place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw const` is similar to `&` making
it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/kunit.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/kunit.rs b/rust/kernel/kunit.rs
index 824da0e9738a..a17ef3b2e860 100644
--- a/rust/kernel/kunit.rs
+++ b/rust/kernel/kunit.rs
@@ -128,9 +128,9 @@ unsafe impl Sync for UnaryAssert {}
unsafe {
$crate::bindings::__kunit_do_failed_assertion(
kunit_test,
- core::ptr::addr_of!(LOCATION.0),
+ &raw const LOCATION.0,
$crate::bindings::kunit_assert_type_KUNIT_ASSERTION,
- core::ptr::addr_of!(ASSERTION.0.assert),
+ &raw const ASSERTION.0.assert,
Some($crate::bindings::kunit_unary_assert_format),
core::ptr::null(),
);
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 09/17] rust: workqueue: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (7 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 08/17] rust: kunit: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:36 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 10/17] rust: workqueue: replace `raw_get` with pointer cast Antonio Hickey
` (9 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of!(place)` and `addr_of_mut!(place)`
with `&raw const place` and `&raw mut place` respectively.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw const`, `&raw mut` are similar
to `&`, `&mut` making it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/workqueue.rs | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/rust/kernel/workqueue.rs b/rust/kernel/workqueue.rs
index 0cd100d2aefb..4e27df324d26 100644
--- a/rust/kernel/workqueue.rs
+++ b/rust/kernel/workqueue.rs
@@ -401,9 +401,10 @@ pub fn new(name: &'static CStr, key: &'static LockClassKey) -> impl PinInit<Self
pub unsafe fn raw_get(ptr: *const Self) -> *mut bindings::work_struct {
// SAFETY: The caller promises that the pointer is aligned and not dangling.
//
- // A pointer cast would also be ok due to `#[repr(transparent)]`. We use `addr_of!` so that
- // the compiler does not complain that the `work` field is unused.
- unsafe { Opaque::raw_get(core::ptr::addr_of!((*ptr).work)) }
+ // A pointer cast would also be ok due to `#[repr(transparent)]`. We use
+ // `&raw const (*ptr).work` so that the compiler does not complain that the
+ // `work` field is unused.
+ unsafe { Opaque::raw_get(&raw const (*ptr).work) }
}
}
@@ -510,7 +511,7 @@ macro_rules! impl_has_work {
unsafe fn raw_get_work(ptr: *mut Self) -> *mut $crate::workqueue::Work<$work_type $(, $id)?> {
// SAFETY: The caller promises that the pointer is not dangling.
unsafe {
- ::core::ptr::addr_of_mut!((*ptr).$field)
+ &raw mut (*ptr).$field
}
}
}
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 10/17] rust: workqueue: replace `raw_get` with pointer cast
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (8 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 09/17] rust: workqueue: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 11/17] rust: rbtree: refactor to use `&raw [const|mut]` Antonio Hickey
` (8 subsequent siblings)
18 siblings, 0 replies; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Now that `Work` is initialized via `pin-init`, the `work` field
is always used. This allows us to replace the use of unsafe
`Opaque::raw_get` with direct pointer casting.
Suggested-by: Boqun Feng <boqun.feng@gmail.com>
Link: https://lore.kernel.org/all/20250316061429.817126-1-contact@antoniohickey.com/T/#mc7a4757e8c132f84228b728c7d123d73841501d6
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/workqueue.rs | 8 ++------
1 file changed, 2 insertions(+), 6 deletions(-)
diff --git a/rust/kernel/workqueue.rs b/rust/kernel/workqueue.rs
index 4e27df324d26..5cc259c1e502 100644
--- a/rust/kernel/workqueue.rs
+++ b/rust/kernel/workqueue.rs
@@ -399,12 +399,8 @@ pub fn new(name: &'static CStr, key: &'static LockClassKey) -> impl PinInit<Self
/// need not be initialized.)
#[inline]
pub unsafe fn raw_get(ptr: *const Self) -> *mut bindings::work_struct {
- // SAFETY: The caller promises that the pointer is aligned and not dangling.
- //
- // A pointer cast would also be ok due to `#[repr(transparent)]`. We use
- // `&raw const (*ptr).work` so that the compiler does not complain that the
- // `work` field is unused.
- unsafe { Opaque::raw_get(&raw const (*ptr).work) }
+ // CAST: `Work` is transparent to `bindings::work_struct`.
+ ptr.cast_mut().cast()
}
}
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 11/17] rust: rbtree: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (9 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 10/17] rust: workqueue: replace `raw_get` with pointer cast Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:38 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 12/17] rust: net: phy: " Antonio Hickey
` (7 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of_mut!(place)`
with `&raw mut place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw mut` is similar to `&mut`
making it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/rbtree.rs | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/rust/kernel/rbtree.rs b/rust/kernel/rbtree.rs
index 1ea25c7092fb..b0ad35663cb0 100644
--- a/rust/kernel/rbtree.rs
+++ b/rust/kernel/rbtree.rs
@@ -11,7 +11,7 @@
cmp::{Ord, Ordering},
marker::PhantomData,
mem::MaybeUninit,
- ptr::{addr_of_mut, from_mut, NonNull},
+ ptr::{from_mut, NonNull},
};
/// A red-black tree with owned nodes.
@@ -238,7 +238,7 @@ pub fn values_mut(&mut self) -> impl Iterator<Item = &'_ mut V> {
/// Returns a cursor over the tree nodes, starting with the smallest key.
pub fn cursor_front(&mut self) -> Option<Cursor<'_, K, V>> {
- let root = addr_of_mut!(self.root);
+ let root = &raw mut self.root;
// SAFETY: `self.root` is always a valid root node
let current = unsafe { bindings::rb_first(root) };
NonNull::new(current).map(|current| {
@@ -253,7 +253,7 @@ pub fn cursor_front(&mut self) -> Option<Cursor<'_, K, V>> {
/// Returns a cursor over the tree nodes, starting with the largest key.
pub fn cursor_back(&mut self) -> Option<Cursor<'_, K, V>> {
- let root = addr_of_mut!(self.root);
+ let root = &raw mut self.root;
// SAFETY: `self.root` is always a valid root node
let current = unsafe { bindings::rb_last(root) };
NonNull::new(current).map(|current| {
@@ -459,7 +459,7 @@ pub fn cursor_lower_bound(&mut self, key: &K) -> Option<Cursor<'_, K, V>>
let best = best_match?;
// SAFETY: `best` is a non-null node so it is valid by the type invariants.
- let links = unsafe { addr_of_mut!((*best.as_ptr()).links) };
+ let links = unsafe { &raw mut (*best.as_ptr()).links };
NonNull::new(links).map(|current| {
// INVARIANT:
@@ -767,7 +767,7 @@ pub fn remove_current(self) -> (Option<Self>, RBTreeNode<K, V>) {
let node = RBTreeNode { node };
// SAFETY: The reference to the tree used to create the cursor outlives the cursor, so
// the tree cannot change. By the tree invariant, all nodes are valid.
- unsafe { bindings::rb_erase(&mut (*this).links, addr_of_mut!(self.tree.root)) };
+ unsafe { bindings::rb_erase(&mut (*this).links, &raw mut self.tree.root) };
let current = match (prev, next) {
(_, Some(next)) => next,
@@ -803,7 +803,7 @@ fn remove_neighbor(&mut self, direction: Direction) -> Option<RBTreeNode<K, V>>
let neighbor = neighbor.as_ptr();
// SAFETY: The reference to the tree used to create the cursor outlives the cursor, so
// the tree cannot change. By the tree invariant, all nodes are valid.
- unsafe { bindings::rb_erase(neighbor, addr_of_mut!(self.tree.root)) };
+ unsafe { bindings::rb_erase(neighbor, &raw mut self.tree.root) };
// SAFETY: By the type invariant of `Self`, all non-null `rb_node` pointers stored in `self`
// point to the links field of `Node<K, V>` objects.
let this = unsafe { container_of!(neighbor, Node<K, V>, links) }.cast_mut();
@@ -918,7 +918,7 @@ unsafe fn to_key_value_raw<'b>(node: NonNull<bindings::rb_node>) -> (&'b K, *mut
let k = unsafe { &(*this).key };
// SAFETY: The passed `node` is the current node or a non-null neighbor,
// thus `this` is valid by the type invariants.
- let v = unsafe { addr_of_mut!((*this).value) };
+ let v = unsafe { &raw mut (*this).value };
(k, v)
}
}
@@ -1027,7 +1027,7 @@ fn next(&mut self) -> Option<Self::Item> {
self.next = unsafe { bindings::rb_next(self.next) };
// SAFETY: By the same reasoning above, it is safe to dereference the node.
- Some(unsafe { (addr_of_mut!((*cur).key), addr_of_mut!((*cur).value)) })
+ Some(unsafe { (&raw mut (*cur).key, &raw mut (*cur).value) })
}
}
@@ -1170,7 +1170,7 @@ fn insert(self, node: RBTreeNode<K, V>) -> &'a mut V {
// SAFETY: `node` is valid at least until we call `Box::from_raw`, which only happens when
// the node is removed or replaced.
- let node_links = unsafe { addr_of_mut!((*node).links) };
+ let node_links = unsafe { &raw mut (*node).links };
// INVARIANT: We are linking in a new node, which is valid. It remains valid because we
// "forgot" it with `Box::into_raw`.
@@ -1178,7 +1178,7 @@ fn insert(self, node: RBTreeNode<K, V>) -> &'a mut V {
unsafe { bindings::rb_link_node(node_links, self.parent, self.child_field_of_parent) };
// SAFETY: All pointers are valid. `node` has just been inserted into the tree.
- unsafe { bindings::rb_insert_color(node_links, addr_of_mut!((*self.rbtree).root)) };
+ unsafe { bindings::rb_insert_color(node_links, &raw mut (*self.rbtree).root) };
// SAFETY: The node is valid until we remove it from the tree.
unsafe { &mut (*node).value }
@@ -1261,7 +1261,7 @@ fn replace(self, node: RBTreeNode<K, V>) -> RBTreeNode<K, V> {
// SAFETY: `node` is valid at least until we call `Box::from_raw`, which only happens when
// the node is removed or replaced.
- let new_node_links = unsafe { addr_of_mut!((*node).links) };
+ let new_node_links = unsafe { &raw mut (*node).links };
// SAFETY: This updates the pointers so that `new_node_links` is in the tree where
// `self.node_links` used to be.
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 12/17] rust: net: phy: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (10 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 11/17] rust: rbtree: refactor to use `&raw [const|mut]` Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 13/17] rust: sync: arc: " Antonio Hickey
` (6 subsequent siblings)
18 siblings, 0 replies; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: FUJITA Tomonori, Trevor Gross, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Danilo Krummrich
Cc: Antonio Hickey, netdev, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of_mut!(place)` with
`&raw mut place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw mut` is similar to `&mut`
making it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/net/phy.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/net/phy.rs b/rust/kernel/net/phy.rs
index a59469c785e3..757db052cc09 100644
--- a/rust/kernel/net/phy.rs
+++ b/rust/kernel/net/phy.rs
@@ -7,7 +7,7 @@
//! C headers: [`include/linux/phy.h`](srctree/include/linux/phy.h).
use crate::{error::*, prelude::*, types::Opaque};
-use core::{marker::PhantomData, ptr::addr_of_mut};
+use core::marker::PhantomData;
pub mod reg;
@@ -285,7 +285,7 @@ impl AsRef<kernel::device::Device> for Device {
fn as_ref(&self) -> &kernel::device::Device {
let phydev = self.0.get();
// SAFETY: The struct invariant ensures that `mdio.dev` is valid.
- unsafe { kernel::device::Device::as_ref(addr_of_mut!((*phydev).mdio.dev)) }
+ unsafe { kernel::device::Device::as_ref(&raw mut (*phydev).mdio.dev) }
}
}
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 13/17] rust: sync: arc: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (11 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 12/17] rust: net: phy: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:39 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 14/17] rust: jump_label: " Antonio Hickey
` (5 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of!(place)` with
`&raw const place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw const` is similar to `&` making
it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/sync/arc.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rust/kernel/sync/arc.rs b/rust/kernel/sync/arc.rs
index 3cefda7a4372..81d8b0f84957 100644
--- a/rust/kernel/sync/arc.rs
+++ b/rust/kernel/sync/arc.rs
@@ -243,7 +243,7 @@ pub fn into_raw(self) -> *const T {
let ptr = self.ptr.as_ptr();
core::mem::forget(self);
// SAFETY: The pointer is valid.
- unsafe { core::ptr::addr_of!((*ptr).data) }
+ unsafe { &raw const (*ptr).data }
}
/// Recreates an [`Arc`] instance previously deconstructed via [`Arc::into_raw`].
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 14/17] rust: jump_label: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (12 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 13/17] rust: sync: arc: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:40 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 15/17] rust: fs: file: " Antonio Hickey
` (4 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of!(place)` with
`&raw const place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw const` is similar to `&` making
it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/jump_label.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/jump_label.rs b/rust/kernel/jump_label.rs
index 4e974c768dbd..ca10abae0eee 100644
--- a/rust/kernel/jump_label.rs
+++ b/rust/kernel/jump_label.rs
@@ -20,8 +20,8 @@
#[macro_export]
macro_rules! static_branch_unlikely {
($key:path, $keytyp:ty, $field:ident) => {{
- let _key: *const $keytyp = ::core::ptr::addr_of!($key);
- let _key: *const $crate::bindings::static_key_false = ::core::ptr::addr_of!((*_key).$field);
+ let _key: *const $keytyp = &raw const $key;
+ let _key: *const $crate::bindings::static_key_false = &raw const (*_key).$field;
let _key: *const $crate::bindings::static_key = _key.cast();
#[cfg(not(CONFIG_JUMP_LABEL))]
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 15/17] rust: fs: file: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (13 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 14/17] rust: jump_label: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-23 10:40 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 16/17] rust: block: " Antonio Hickey
` (3 subsequent siblings)
18 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of!(place)` with
`&raw const place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw const` is similar to `&` making
it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/fs/file.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rust/kernel/fs/file.rs b/rust/kernel/fs/file.rs
index ed57e0137cdb..7ee4830b67f3 100644
--- a/rust/kernel/fs/file.rs
+++ b/rust/kernel/fs/file.rs
@@ -331,7 +331,7 @@ pub fn flags(&self) -> u32 {
// SAFETY: The file is valid because the shared reference guarantees a nonzero refcount.
//
// FIXME(read_once): Replace with `read_once` when available on the Rust side.
- unsafe { core::ptr::addr_of!((*self.as_ptr()).f_flags).read_volatile() }
+ unsafe { (&raw const (*self.as_ptr()).f_flags).read_volatile() }
}
}
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 16/17] rust: block: refactor to use `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (14 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 15/17] rust: fs: file: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-20 7:33 ` Andreas Hindborg
2025-03-23 10:41 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 17/17] rust: clippy: disallow `addr_of[_mut]!` macros Antonio Hickey
` (2 subsequent siblings)
18 siblings, 2 replies; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Andreas Hindborg, Boqun Feng, Miguel Ojeda, Alex Gaynor, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: Antonio Hickey, linux-block, rust-for-linux, linux-kernel
Replacing all occurrences of `addr_of_mut!(place)` with
`&raw mut place`.
This will allow us to reduce macro complexity, and improve consistency
with existing reference syntax as `&raw mut` is similar to `&mut`
making it fit more naturally with other existing code.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
rust/kernel/block/mq/request.rs | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/rust/kernel/block/mq/request.rs b/rust/kernel/block/mq/request.rs
index 7943f43b9575..4a5b7ec914ef 100644
--- a/rust/kernel/block/mq/request.rs
+++ b/rust/kernel/block/mq/request.rs
@@ -12,7 +12,7 @@
};
use core::{
marker::PhantomData,
- ptr::{addr_of_mut, NonNull},
+ ptr::NonNull,
sync::atomic::{AtomicU64, Ordering},
};
@@ -187,7 +187,7 @@ pub(crate) fn refcount(&self) -> &AtomicU64 {
pub(crate) unsafe fn refcount_ptr(this: *mut Self) -> *mut AtomicU64 {
// SAFETY: Because of the safety requirements of this function, the
// field projection is safe.
- unsafe { addr_of_mut!((*this).refcount) }
+ unsafe { &raw mut (*this).refcount }
}
}
^ permalink raw reply related [flat|nested] 45+ messages in thread
* [PATCH v5 17/17] rust: clippy: disallow `addr_of[_mut]!` macros
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (15 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 16/17] rust: block: " Antonio Hickey
@ 2025-03-20 2:07 ` Antonio Hickey
2025-03-20 7:33 ` Andreas Hindborg
2025-03-23 10:41 ` Benno Lossin
2025-03-23 10:45 ` [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Benno Lossin
2025-03-23 22:32 ` Miguel Ojeda
18 siblings, 2 replies; 45+ messages in thread
From: Antonio Hickey @ 2025-03-20 2:07 UTC (permalink / raw)
To: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: Antonio Hickey, rust-for-linux, linux-kernel
With the `raw_ref_op` feature enabled we no longer want to
allow use of the `addr_of!` and `addr_of_mut!` macros.
We instead want to use `&raw const` and `&raw mut` to get raw
pointers to a place.
Note that this lint isn't currently reliable, but we enable
it nevertheless because:
1. Document that one shouldn't use the `addr_of[_mut]!` macros.
2. When the lint becomes useful we will already have it enabled.
Suggested-by: Benno Lossin <benno.lossin@proton.me>
Link: https://github.com/Rust-for-Linux/linux/issues/1148
Link: https://github.com/rust-lang/rust-clippy/issues/11431
Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
---
.clippy.toml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/.clippy.toml b/.clippy.toml
index 815c94732ed7..b7d87377a468 100644
--- a/.clippy.toml
+++ b/.clippy.toml
@@ -8,4 +8,8 @@ disallowed-macros = [
# The `clippy::dbg_macro` lint only works with `std::dbg!`, thus we simulate
# it here, see: https://github.com/rust-lang/rust-clippy/issues/11303.
{ path = "kernel::dbg", reason = "the `dbg!` macro is intended as a debugging tool" },
+ # With `raw_ref_op` feature enabled we no longer want to allow use of `addr_of!`
+ # and `addr_of_mut!` macros, but instead suggest use of `&raw const` or `&raw mut`.
+ { path = "core::ptr::addr_of_mut", reason = "use `&raw mut` instead `addr_of_mut!`" },
+ { path = "core::ptr::addr_of", reason = "use `&raw const` instead `addr_of!`" },
]
^ permalink raw reply related [flat|nested] 45+ messages in thread
* Re: [PATCH v5 01/17] rust: enable `raw_ref_op` feature
2025-03-20 2:07 ` [PATCH v5 01/17] rust: enable `raw_ref_op` feature Antonio Hickey
@ 2025-03-20 7:32 ` Andreas Hindborg
2025-03-22 10:16 ` Benno Lossin
1 sibling, 0 replies; 45+ messages in thread
From: Andreas Hindborg @ 2025-03-20 7:32 UTC (permalink / raw)
To: Antonio Hickey
Cc: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross,
Danilo Krummrich, Masahiro Yamada, Nathan Chancellor,
Nicolas Schier, rust-for-linux, linux-kernel, linux-kbuild
"Antonio Hickey" <contact@antoniohickey.com> writes:
> Since Rust 1.82.0 the `raw_ref_op` feature is stable.
>
> By enabling this feature we can use `&raw const place` and
> `&raw mut place` instead of using `addr_of!(place)` and
> `addr_of_mut!(place)` macros.
>
> Allowing us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw const`, `&raw mut` are
> similar to `&`, `&mut` making it fit more naturally with other
> existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Andreas Hindborg <a.hindborg@kernel.org>
Best regards,
Andreas Hindborg
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 16/17] rust: block: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 16/17] rust: block: " Antonio Hickey
@ 2025-03-20 7:33 ` Andreas Hindborg
2025-03-23 10:41 ` Benno Lossin
1 sibling, 0 replies; 45+ messages in thread
From: Andreas Hindborg @ 2025-03-20 7:33 UTC (permalink / raw)
To: Antonio Hickey
Cc: Boqun Feng, Miguel Ojeda, Alex Gaynor, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross,
Danilo Krummrich, linux-block, rust-for-linux, linux-kernel
"Antonio Hickey" <contact@antoniohickey.com> writes:
> Replacing all occurrences of `addr_of_mut!(place)` with
> `&raw mut place`.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw mut` is similar to `&mut`
> making it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Acked-by: Andreas Hindborg <a.hindborg@kernel.org>
Best regards,
Andreas Hindborg
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 17/17] rust: clippy: disallow `addr_of[_mut]!` macros
2025-03-20 2:07 ` [PATCH v5 17/17] rust: clippy: disallow `addr_of[_mut]!` macros Antonio Hickey
@ 2025-03-20 7:33 ` Andreas Hindborg
2025-03-23 10:41 ` Benno Lossin
1 sibling, 0 replies; 45+ messages in thread
From: Andreas Hindborg @ 2025-03-20 7:33 UTC (permalink / raw)
To: Antonio Hickey
Cc: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Alice Ryhl, Trevor Gross,
Danilo Krummrich, rust-for-linux, linux-kernel
"Antonio Hickey" <contact@antoniohickey.com> writes:
> With the `raw_ref_op` feature enabled we no longer want to
> allow use of the `addr_of!` and `addr_of_mut!` macros.
>
> We instead want to use `&raw const` and `&raw mut` to get raw
> pointers to a place.
>
> Note that this lint isn't currently reliable, but we enable
> it nevertheless because:
> 1. Document that one shouldn't use the `addr_of[_mut]!` macros.
> 2. When the lint becomes useful we will already have it enabled.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Link: https://github.com/rust-lang/rust-clippy/issues/11431
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Andreas Hindborg <a.hindborg@kernel.org>
Best regards,
Andreas Hindborg
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 01/17] rust: enable `raw_ref_op` feature
2025-03-20 2:07 ` [PATCH v5 01/17] rust: enable `raw_ref_op` feature Antonio Hickey
2025-03-20 7:32 ` Andreas Hindborg
@ 2025-03-22 10:16 ` Benno Lossin
2025-03-22 15:02 ` Antonio Hickey
1 sibling, 1 reply; 45+ messages in thread
From: Benno Lossin @ 2025-03-22 10:16 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich, Masahiro Yamada, Nathan Chancellor,
Nicolas Schier
Cc: rust-for-linux, linux-kernel, linux-kbuild
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Since Rust 1.82.0 the `raw_ref_op` feature is stable.
>
> By enabling this feature we can use `&raw const place` and
> `&raw mut place` instead of using `addr_of!(place)` and
> `addr_of_mut!(place)` macros.
>
> Allowing us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw const`, `&raw mut` are
> similar to `&`, `&mut` making it fit more naturally with other
> existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
> diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> index 993708d11874..a73aaa028e34 100644
> --- a/scripts/Makefile.build
> +++ b/scripts/Makefile.build
> @@ -224,9 +224,9 @@ $(obj)/%.lst: $(obj)/%.c FORCE
> $(call if_changed_dep,cc_lst_c)
>
> # Compile Rust sources (.rs)
> -# ---------------------------------------------------------------------------
> +# --------------------------------------------------------------------------------------
Not sure about this change.
---
Cheers,
Benno
>
> -rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons
> +rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons,raw_ref_op
>
> # `--out-dir` is required to avoid temporaries being created by `rustc` in the
> # current working directory, which may be not accessible in the out-of-tree
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 01/17] rust: enable `raw_ref_op` feature
2025-03-22 10:16 ` Benno Lossin
@ 2025-03-22 15:02 ` Antonio Hickey
2025-03-22 18:24 ` Tamir Duberstein
0 siblings, 1 reply; 45+ messages in thread
From: Antonio Hickey @ 2025-03-22 15:02 UTC (permalink / raw)
To: benno.lossin
Cc: a.hindborg, alex.gaynor, aliceryhl, bjorn3_gh, boqun.feng,
contact, dakr, gary, linux-kbuild, linux-kernel, masahiroy,
nathan, nicolas, ojeda, rust-for-linux, tmgross
On Sat, Mar 22, 2025 at 10:16:01AM +0000, Benno Lossin wrote:
> On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> > Since Rust 1.82.0 the `raw_ref_op` feature is stable.
> >
> > By enabling this feature we can use `&raw const place` and
> > `&raw mut place` instead of using `addr_of!(place)` and
> > `addr_of_mut!(place)` macros.
> >
> > Allowing us to reduce macro complexity, and improve consistency
> > with existing reference syntax as `&raw const`, `&raw mut` are
> > similar to `&`, `&mut` making it fit more naturally with other
> > existing code.
> >
> > Suggested-by: Benno Lossin <benno.lossin@proton.me>
> > Link: https://github.com/Rust-for-Linux/linux/issues/1148
> > Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
>
> Reviewed-by: Benno Lossin <benno.lossin@proton.me>
>
> > diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> > index 993708d11874..a73aaa028e34 100644
> > --- a/scripts/Makefile.build
> > +++ b/scripts/Makefile.build
> > @@ -224,9 +224,9 @@ $(obj)/%.lst: $(obj)/%.c FORCE
> > $(call if_changed_dep,cc_lst_c)
> >
> > # Compile Rust sources (.rs)
> > -# ---------------------------------------------------------------------------
> > +# --------------------------------------------------------------------------------------
>
> Not sure about this change.
This change is so I could enable the `raw_ref_op` feature for doctests
since the minimum Rust version 1.78 still has `raw_ref_op` as an
expiramental feature, and will throw errors at compile if a doctest uses
it. Is there a better way to do this?
Thanks,
Antonio
>
> ---
> Cheers,
> Benno
>
> >
> > -rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons
> > +rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons,raw_ref_op
> >
> > # `--out-dir` is required to avoid temporaries being created by `rustc` in the
> > # current working directory, which may be not accessible in the out-of-tree
>
>
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 01/17] rust: enable `raw_ref_op` feature
2025-03-22 15:02 ` Antonio Hickey
@ 2025-03-22 18:24 ` Tamir Duberstein
2025-03-22 19:12 ` Antonio Hickey
0 siblings, 1 reply; 45+ messages in thread
From: Tamir Duberstein @ 2025-03-22 18:24 UTC (permalink / raw)
To: Antonio Hickey
Cc: benno.lossin, a.hindborg, alex.gaynor, aliceryhl, bjorn3_gh,
boqun.feng, dakr, gary, linux-kbuild, linux-kernel, masahiroy,
nathan, nicolas, ojeda, rust-for-linux, tmgross
On Sat, Mar 22, 2025 at 11:08 AM Antonio Hickey
<contact@antoniohickey.com> wrote:
>
> On Sat, Mar 22, 2025 at 10:16:01AM +0000, Benno Lossin wrote:
> > On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> > > Since Rust 1.82.0 the `raw_ref_op` feature is stable.
> > >
> > > By enabling this feature we can use `&raw const place` and
> > > `&raw mut place` instead of using `addr_of!(place)` and
> > > `addr_of_mut!(place)` macros.
> > >
> > > Allowing us to reduce macro complexity, and improve consistency
> > > with existing reference syntax as `&raw const`, `&raw mut` are
> > > similar to `&`, `&mut` making it fit more naturally with other
> > > existing code.
> > >
> > > Suggested-by: Benno Lossin <benno.lossin@proton.me>
> > > Link: https://github.com/Rust-for-Linux/linux/issues/1148
> > > Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
> >
> > Reviewed-by: Benno Lossin <benno.lossin@proton.me>
> >
> > > diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> > > index 993708d11874..a73aaa028e34 100644
> > > --- a/scripts/Makefile.build
> > > +++ b/scripts/Makefile.build
> > > @@ -224,9 +224,9 @@ $(obj)/%.lst: $(obj)/%.c FORCE
> > > $(call if_changed_dep,cc_lst_c)
> > >
> > > # Compile Rust sources (.rs)
> > > -# ---------------------------------------------------------------------------
> > > +# --------------------------------------------------------------------------------------
> >
> > Not sure about this change.
>
> This change is so I could enable the `raw_ref_op` feature for doctests
> since the minimum Rust version 1.78 still has `raw_ref_op` as an
> expiramental feature, and will throw errors at compile if a doctest uses
> it. Is there a better way to do this?
I think Benno is just asking about the extension of the dashed line.
> > >
> > > -rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons
> > > +rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons,raw_ref_op
This looks correct to me.
> > >
> > > # `--out-dir` is required to avoid temporaries being created by `rustc` in the
> > > # current working directory, which may be not accessible in the out-of-tree
> >
> >
Reviewed-by: Tamir Duberstein <tamird@gmail.com>
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 01/17] rust: enable `raw_ref_op` feature
2025-03-22 18:24 ` Tamir Duberstein
@ 2025-03-22 19:12 ` Antonio Hickey
2025-03-22 19:39 ` Benno Lossin
2025-03-22 19:41 ` Miguel Ojeda
0 siblings, 2 replies; 45+ messages in thread
From: Antonio Hickey @ 2025-03-22 19:12 UTC (permalink / raw)
To: tamird
Cc: a.hindborg, alex.gaynor, aliceryhl, benno.lossin, bjorn3_gh,
boqun.feng, contact, dakr, gary, linux-kbuild, linux-kernel,
masahiroy, nathan, nicolas, ojeda, rust-for-linux, tmgross
On Sat, Mar 22, 2025 at 02:24:30PM -0400, Tamir Duberstein wrote:
> On Sat, Mar 22, 2025 at 11:08 AM Antonio Hickey
> <contact@antoniohickey.com> wrote:
> >
> > On Sat, Mar 22, 2025 at 10:16:01AM +0000, Benno Lossin wrote:
> > > On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> > > > Since Rust 1.82.0 the `raw_ref_op` feature is stable.
> > > >
> > > > By enabling this feature we can use `&raw const place` and
> > > > `&raw mut place` instead of using `addr_of!(place)` and
> > > > `addr_of_mut!(place)` macros.
> > > >
> > > > Allowing us to reduce macro complexity, and improve consistency
> > > > with existing reference syntax as `&raw const`, `&raw mut` are
> > > > similar to `&`, `&mut` making it fit more naturally with other
> > > > existing code.
> > > >
> > > > Suggested-by: Benno Lossin <benno.lossin@proton.me>
> > > > Link: https://github.com/Rust-for-Linux/linux/issues/1148
> > > > Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
> > >
> > > Reviewed-by: Benno Lossin <benno.lossin@proton.me>
> > >
> > > > diff --git a/scripts/Makefile.build b/scripts/Makefile.build
> > > > index 993708d11874..a73aaa028e34 100644
> > > > --- a/scripts/Makefile.build
> > > > +++ b/scripts/Makefile.build
> > > > @@ -224,9 +224,9 @@ $(obj)/%.lst: $(obj)/%.c FORCE
> > > > $(call if_changed_dep,cc_lst_c)
> > > >
> > > > # Compile Rust sources (.rs)
> > > > -# ---------------------------------------------------------------------------
> > > > +# --------------------------------------------------------------------------------------
> > >
> > > Not sure about this change.
> >
> > This change is so I could enable the `raw_ref_op` feature for doctests
> > since the minimum Rust version 1.78 still has `raw_ref_op` as an
> > expiramental feature, and will throw errors at compile if a doctest uses
> > it. Is there a better way to do this?
>
> I think Benno is just asking about the extension of the dashed line.
Ahh ok yea that makes sense, thanks Tamir, sorry Benno I misunderstood.
So the reason I extended the dashed line was because before my change
the dashed line perfectly aligned with number of characters in the line
I changed. I figured it was supposed to match the amount of characters
of the line.
Giving this a deeper look it looks like the all the other dashed lines
are maxed at 77 characters.
I will update this.
Thanks,
Antonio
>
> > > >
> > > > -rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons
> > > > +rust_allowed_features := asm_const,asm_goto,arbitrary_self_types,lint_reasons,raw_ref_op
>
> This looks correct to me.
>
> > > >
> > > > # `--out-dir` is required to avoid temporaries being created by `rustc` in the
> > > > # current working directory, which may be not accessible in the out-of-tree
> > >
> > >
>
> Reviewed-by: Tamir Duberstein <tamird@gmail.com>
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 01/17] rust: enable `raw_ref_op` feature
2025-03-22 19:12 ` Antonio Hickey
@ 2025-03-22 19:39 ` Benno Lossin
2025-03-22 19:41 ` Miguel Ojeda
1 sibling, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-22 19:39 UTC (permalink / raw)
To: Antonio Hickey, tamird
Cc: a.hindborg, alex.gaynor, aliceryhl, bjorn3_gh, boqun.feng, dakr,
gary, linux-kbuild, linux-kernel, masahiroy, nathan, nicolas,
ojeda, rust-for-linux, tmgross
On Sat Mar 22, 2025 at 8:12 PM CET, Antonio Hickey wrote:
> On Sat, Mar 22, 2025 at 02:24:30PM -0400, Tamir Duberstein wrote:
>> On Sat, Mar 22, 2025 at 11:08 AM Antonio Hickey
>> <contact@antoniohickey.com> wrote:
>> > On Sat, Mar 22, 2025 at 10:16:01AM +0000, Benno Lossin wrote:
>> > > On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
>> > > > Since Rust 1.82.0 the `raw_ref_op` feature is stable.
>> > > >
>> > > > By enabling this feature we can use `&raw const place` and
>> > > > `&raw mut place` instead of using `addr_of!(place)` and
>> > > > `addr_of_mut!(place)` macros.
>> > > >
>> > > > Allowing us to reduce macro complexity, and improve consistency
>> > > > with existing reference syntax as `&raw const`, `&raw mut` are
>> > > > similar to `&`, `&mut` making it fit more naturally with other
>> > > > existing code.
>> > > >
>> > > > Suggested-by: Benno Lossin <benno.lossin@proton.me>
>> > > > Link: https://github.com/Rust-for-Linux/linux/issues/1148
>> > > > Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
>> > >
>> > > Reviewed-by: Benno Lossin <benno.lossin@proton.me>
>> > >
>> > > > diff --git a/scripts/Makefile.build b/scripts/Makefile.build
>> > > > index 993708d11874..a73aaa028e34 100644
>> > > > --- a/scripts/Makefile.build
>> > > > +++ b/scripts/Makefile.build
>> > > > @@ -224,9 +224,9 @@ $(obj)/%.lst: $(obj)/%.c FORCE
>> > > > $(call if_changed_dep,cc_lst_c)
>> > > >
>> > > > # Compile Rust sources (.rs)
>> > > > -# ---------------------------------------------------------------------------
>> > > > +# --------------------------------------------------------------------------------------
>> > >
>> > > Not sure about this change.
>> >
>> > This change is so I could enable the `raw_ref_op` feature for doctests
>> > since the minimum Rust version 1.78 still has `raw_ref_op` as an
>> > expiramental feature, and will throw errors at compile if a doctest uses
>> > it. Is there a better way to do this?
>>
>> I think Benno is just asking about the extension of the dashed line.
>
> Ahh ok yea that makes sense, thanks Tamir, sorry Benno I misunderstood.
No worries, it is exactly as Tamir said.
> So the reason I extended the dashed line was because before my change
> the dashed line perfectly aligned with number of characters in the line
> I changed. I figured it was supposed to match the amount of characters
> of the line.
>
> Giving this a deeper look it looks like the all the other dashed lines
> are maxed at 77 characters.
Yeah that's also what I thought, so I wouldn't change it.
> I will update this.
If you send another version, you can update this, but Miguel might pick
the patch early, he can then remove the change above when taking the
patch (so I wouldn't send a new version just to change this single
line).
---
Cheers,
Benno
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 01/17] rust: enable `raw_ref_op` feature
2025-03-22 19:12 ` Antonio Hickey
2025-03-22 19:39 ` Benno Lossin
@ 2025-03-22 19:41 ` Miguel Ojeda
2025-03-22 20:12 ` Antonio Hickey
1 sibling, 1 reply; 45+ messages in thread
From: Miguel Ojeda @ 2025-03-22 19:41 UTC (permalink / raw)
To: Antonio Hickey
Cc: tamird, a.hindborg, alex.gaynor, aliceryhl, benno.lossin,
bjorn3_gh, boqun.feng, dakr, gary, linux-kbuild, linux-kernel,
masahiroy, nathan, nicolas, ojeda, rust-for-linux, tmgross
On Sat, Mar 22, 2025 at 8:12 PM Antonio Hickey
<contact@antoniohickey.com> wrote:
>
> Ahh ok yea that makes sense, thanks Tamir, sorry Benno I misunderstood.
>
> So the reason I extended the dashed line was because before my change
> the dashed line perfectly aligned with number of characters in the line
> I changed. I figured it was supposed to match the amount of characters
> of the line.
>
> Giving this a deeper look it looks like the all the other dashed lines
> are maxed at 77 characters.
Yeah, it is just following other section "lines".
> I will update this.
Benno is right -- no need to send another version for that, I can
remove the change on apply. :)
Thanks!
Cheers,
Miguel
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 01/17] rust: enable `raw_ref_op` feature
2025-03-22 19:41 ` Miguel Ojeda
@ 2025-03-22 20:12 ` Antonio Hickey
0 siblings, 0 replies; 45+ messages in thread
From: Antonio Hickey @ 2025-03-22 20:12 UTC (permalink / raw)
To: miguel.ojeda.sandonis
Cc: a.hindborg, alex.gaynor, aliceryhl, benno.lossin, bjorn3_gh,
boqun.feng, contact, dakr, gary, linux-kbuild, linux-kernel,
masahiroy, nathan, nicolas, ojeda, rust-for-linux, tamird,
tmgross
On Sat, Mar 22, 2025 at 08:41:11PM +0100, Miguel Ojeda wrote:
> On Sat, Mar 22, 2025 at 8:12 PM Antonio Hickey
> <contact@antoniohickey.com> wrote:
> >
> > Ahh ok yea that makes sense, thanks Tamir, sorry Benno I misunderstood.
> >
> > So the reason I extended the dashed line was because before my change
> > the dashed line perfectly aligned with number of characters in the line
> > I changed. I figured it was supposed to match the amount of characters
> > of the line.
> >
> > Giving this a deeper look it looks like the all the other dashed lines
> > are maxed at 77 characters.
>
> Yeah, it is just following other section "lines".
>
> > I will update this.
>
> Benno is right -- no need to send another version for that, I can
> remove the change on apply. :)
Yay my first patch to be applied :)
Hopefully many more to come, thanks a lot everyone I
have learned so much just through this simple patch
series. Appreciate all the help and patience +1
Thanks,
Antonio
>
> Thanks!
>
> Cheers,
> Miguel
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 02/17] rust: init: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 02/17] rust: init: refactor to use `&raw [const|mut]` Antonio Hickey
@ 2025-03-23 10:29 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:29 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of_mut!(place)`
> with `&raw mut place`.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw mut` is similar to `&mut`
> making it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
> ---
> rust/kernel/init.rs | 8 ++++----
> rust/kernel/init/macros.rs | 28 ++++++++++++++--------------
> 2 files changed, 18 insertions(+), 18 deletions(-)
These files have been moved in rust-next, so if you send a new
version, it would be great if you could also rebase onto rust-next.
---
Cheers,
Benno
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 03/17] rust: list: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 03/17] rust: list: " Antonio Hickey
@ 2025-03-23 10:31 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:31 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of!(place)` and `addr_of_mut!(place)`
> with `&raw const place` and `&raw mut place` respectively.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw const`, `&raw mut` are similar
> to `&`, `&mut` making it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/list.rs | 2 +-
> rust/kernel/list/impl_list_item_mod.rs | 6 +++---
> 2 files changed, 4 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 05/17] rust: faux: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 05/17] rust: faux: refactor to use `&raw [const|mut]` Antonio Hickey
@ 2025-03-23 10:33 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:33 UTC (permalink / raw)
To: Antonio Hickey, Greg Kroah-Hartman, Rafael J. Wysocki,
Danilo Krummrich, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of_mut!(place)`
> with `&raw mut place`.
This text wrapping looks strange, if you send a new version, please fix
it, otherwise Miguel will do it.
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw mut` is similar to `&mut`
> making it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/faux.rs | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 06/17] rust: platform: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 06/17] rust: platform: " Antonio Hickey
@ 2025-03-23 10:33 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:33 UTC (permalink / raw)
To: Antonio Hickey, Greg Kroah-Hartman, Rafael J. Wysocki,
Danilo Krummrich, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of_mut!(place)`
> with `&raw mut place`.
Similar wrapping issue here.
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw mut` is similar to `&mut`
> making it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/platform.rs | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 07/17] rust: pci: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 07/17] rust: pci: " Antonio Hickey
@ 2025-03-23 10:34 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:34 UTC (permalink / raw)
To: Antonio Hickey, Bjorn Helgaas, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Andreas Hindborg,
Alice Ryhl, Trevor Gross, Danilo Krummrich
Cc: linux-pci, rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of_mut!(place)`
> with `&raw mut place`.
Again.
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw mut` is similar to `&mut`
> making it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/pci.rs | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 08/17] rust: kunit: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 08/17] rust: kunit: " Antonio Hickey
@ 2025-03-23 10:35 ` Benno Lossin
2025-03-23 19:28 ` Miguel Ojeda
1 sibling, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:35 UTC (permalink / raw)
To: Antonio Hickey, Brendan Higgins, David Gow, Rae Moar,
Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: linux-kselftest, kunit-dev, rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of!(place)` with
> `&raw const place`.
Again.
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw const` is similar to `&` making
> it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/kunit.rs | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 09/17] rust: workqueue: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 09/17] rust: workqueue: " Antonio Hickey
@ 2025-03-23 10:36 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:36 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of!(place)` and `addr_of_mut!(place)`
> with `&raw const place` and `&raw mut place` respectively.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw const`, `&raw mut` are similar
> to `&`, `&mut` making it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/workqueue.rs | 9 +++++----
> 1 file changed, 5 insertions(+), 4 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 11/17] rust: rbtree: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 11/17] rust: rbtree: refactor to use `&raw [const|mut]` Antonio Hickey
@ 2025-03-23 10:38 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:38 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of_mut!(place)`
> with `&raw mut place`.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw mut` is similar to `&mut`
> making it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/rbtree.rs | 22 +++++++++++-----------
> 1 file changed, 11 insertions(+), 11 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 13/17] rust: sync: arc: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 13/17] rust: sync: arc: " Antonio Hickey
@ 2025-03-23 10:39 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:39 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of!(place)` with
> `&raw const place`.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw const` is similar to `&` making
> it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/sync/arc.rs | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 14/17] rust: jump_label: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 14/17] rust: jump_label: " Antonio Hickey
@ 2025-03-23 10:40 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:40 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of!(place)` with
> `&raw const place`.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw const` is similar to `&` making
> it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/jump_label.rs | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 15/17] rust: fs: file: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 15/17] rust: fs: file: " Antonio Hickey
@ 2025-03-23 10:40 ` Benno Lossin
0 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:40 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of!(place)` with
> `&raw const place`.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw const` is similar to `&` making
> it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/fs/file.rs | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 16/17] rust: block: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 16/17] rust: block: " Antonio Hickey
2025-03-20 7:33 ` Andreas Hindborg
@ 2025-03-23 10:41 ` Benno Lossin
1 sibling, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:41 UTC (permalink / raw)
To: Antonio Hickey, Andreas Hindborg, Boqun Feng, Miguel Ojeda,
Alex Gaynor, Gary Guo, Björn Roy Baron, Alice Ryhl,
Trevor Gross, Danilo Krummrich
Cc: linux-block, rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> Replacing all occurrences of `addr_of_mut!(place)` with
> `&raw mut place`.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw mut` is similar to `&mut`
> making it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> rust/kernel/block/mq/request.rs | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 17/17] rust: clippy: disallow `addr_of[_mut]!` macros
2025-03-20 2:07 ` [PATCH v5 17/17] rust: clippy: disallow `addr_of[_mut]!` macros Antonio Hickey
2025-03-20 7:33 ` Andreas Hindborg
@ 2025-03-23 10:41 ` Benno Lossin
1 sibling, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:41 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: rust-for-linux, linux-kernel
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> With the `raw_ref_op` feature enabled we no longer want to
> allow use of the `addr_of!` and `addr_of_mut!` macros.
>
> We instead want to use `&raw const` and `&raw mut` to get raw
> pointers to a place.
>
> Note that this lint isn't currently reliable, but we enable
> it nevertheless because:
> 1. Document that one shouldn't use the `addr_of[_mut]!` macros.
> 2. When the lint becomes useful we will already have it enabled.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Link: https://github.com/rust-lang/rust-clippy/issues/11431
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
Reviewed-by: Benno Lossin <benno.lossin@proton.me>
---
Cheers,
Benno
> ---
> .clippy.toml | 4 ++++
> 1 file changed, 4 insertions(+)
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 00/17] refactor to utilize `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (16 preceding siblings ...)
2025-03-20 2:07 ` [PATCH v5 17/17] rust: clippy: disallow `addr_of[_mut]!` macros Antonio Hickey
@ 2025-03-23 10:45 ` Benno Lossin
2025-03-23 22:32 ` Miguel Ojeda
18 siblings, 0 replies; 45+ messages in thread
From: Benno Lossin @ 2025-03-23 10:45 UTC (permalink / raw)
To: Antonio Hickey, Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Andreas Hindborg, Alice Ryhl, Trevor Gross,
Danilo Krummrich
Cc: rust-for-linux
On Thu Mar 20, 2025 at 3:07 AM CET, Antonio Hickey wrote:
> This patch set enables the `raw_ref_op` feature, which became stable
> in Rust 1.82.
>
> It then replaces all occurences of `addr_of!(place)` and
> `addr_of_mut!(place)` with `&raw const place` and `&raw mut place`.
>
> Finally it adds the previous macros `addr_of!` and `addr_of_mut!` to
> the disallowed macros in `.clippy.toml`.
Thanks for this series! I think you probably should send a new version,
since I did find several (very small) things and we shouldn't make
Miguel fix them all when picking the patches. I would wait at least
until one week has passed, since other people might still want to give
you some other feedback. Please also pick up my RBs (Reviewed-by: tags),
but only if you don't make big changes/only do the changes that I
requested. Also don't forget the rebase :)
---
Cheers,
Benno
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 04/17] rust: task: remove use of `addr_of!` macro
2025-03-20 2:07 ` [PATCH v5 04/17] rust: task: remove use of `addr_of!` macro Antonio Hickey
@ 2025-03-23 19:23 ` Miguel Ojeda
0 siblings, 0 replies; 45+ messages in thread
From: Miguel Ojeda @ 2025-03-23 19:23 UTC (permalink / raw)
To: Antonio Hickey
Cc: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, rust-for-linux, linux-kernel
On Thu, Mar 20, 2025 at 3:08 AM Antonio Hickey
<contact@antoniohickey.com> wrote:
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
I think I would drop these two lines -- Benno definitely suggested
what triggered this series, but I think the Link does not apply to
this particular patch, and Boqun suggested this particular change in a
review anyway.
Cheers,
Miguel
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 08/17] rust: kunit: refactor to use `&raw [const|mut]`
2025-03-20 2:07 ` [PATCH v5 08/17] rust: kunit: " Antonio Hickey
2025-03-23 10:35 ` Benno Lossin
@ 2025-03-23 19:28 ` Miguel Ojeda
1 sibling, 0 replies; 45+ messages in thread
From: Miguel Ojeda @ 2025-03-23 19:28 UTC (permalink / raw)
To: Antonio Hickey
Cc: Brendan Higgins, David Gow, Rae Moar, Miguel Ojeda, Alex Gaynor,
Boqun Feng, Gary Guo, Björn Roy Baron, Benno Lossin,
Andreas Hindborg, Alice Ryhl, Trevor Gross, Danilo Krummrich,
linux-kselftest, kunit-dev, rust-for-linux, linux-kernel
On Thu, Mar 20, 2025 at 3:08 AM Antonio Hickey
<contact@antoniohickey.com> wrote:
>
> Replacing all occurrences of `addr_of!(place)` with
> `&raw const place`.
>
> This will allow us to reduce macro complexity, and improve consistency
> with existing reference syntax as `&raw const` is similar to `&` making
> it fit more naturally with other existing code.
>
> Suggested-by: Benno Lossin <benno.lossin@proton.me>
> Link: https://github.com/Rust-for-Linux/linux/issues/1148
> Signed-off-by: Antonio Hickey <contact@antoniohickey.com>
In general, you should pick the previous tags (e.g. Reviewed-by) that
you were given for each patch (unless you think there are enough
changes that it should not be done anymore etc.).
For instance, in v4, this one was Reviewed-by: David, and a couple
others were Reviewed-by Boqun; and from what I can tell, they didn't
change.
Thanks!
Cheers,
Miguel
^ permalink raw reply [flat|nested] 45+ messages in thread
* Re: [PATCH v5 00/17] refactor to utilize `&raw [const|mut]`
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
` (17 preceding siblings ...)
2025-03-23 10:45 ` [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Benno Lossin
@ 2025-03-23 22:32 ` Miguel Ojeda
18 siblings, 0 replies; 45+ messages in thread
From: Miguel Ojeda @ 2025-03-23 22:32 UTC (permalink / raw)
To: Antonio Hickey
Cc: Miguel Ojeda, Alex Gaynor, Boqun Feng, Gary Guo,
Björn Roy Baron, Benno Lossin, Andreas Hindborg, Alice Ryhl,
Trevor Gross, Danilo Krummrich, rust-for-linux
On Thu, Mar 20, 2025 at 3:08 AM Antonio Hickey
<contact@antoniohickey.com> wrote:
>
> This patch set enables the `raw_ref_op` feature, which became stable
> in Rust 1.82.
>
> It then replaces all occurences of `addr_of!(place)` and
> `addr_of_mut!(place)` with `&raw const place` and `&raw mut place`.
>
> Finally it adds the previous macros `addr_of!` and `addr_of_mut!` to
> the disallowed macros in `.clippy.toml`.
Applied (#1 and #16) to `rust-next` -- thanks everyone!
[ Removed dashed line change as discussed. Added Link to the explanation
of the feature in the Rust 1.82.0 release blog post. - Miguel ]
[ Reworded slightly. - Miguel ]
I applied #1 as Boqun suggested, and #16 so that we have a user -- I
picked that one since Andreas Acked it, there were a couple reviews
and there were no other changes (the KUnit one will need to be updated
anyway).
Cheers,
Miguel
^ permalink raw reply [flat|nested] 45+ messages in thread
end of thread, other threads:[~2025-03-23 22:32 UTC | newest]
Thread overview: 45+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-20 2:07 [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 01/17] rust: enable `raw_ref_op` feature Antonio Hickey
2025-03-20 7:32 ` Andreas Hindborg
2025-03-22 10:16 ` Benno Lossin
2025-03-22 15:02 ` Antonio Hickey
2025-03-22 18:24 ` Tamir Duberstein
2025-03-22 19:12 ` Antonio Hickey
2025-03-22 19:39 ` Benno Lossin
2025-03-22 19:41 ` Miguel Ojeda
2025-03-22 20:12 ` Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 02/17] rust: init: refactor to use `&raw [const|mut]` Antonio Hickey
2025-03-23 10:29 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 03/17] rust: list: " Antonio Hickey
2025-03-23 10:31 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 04/17] rust: task: remove use of `addr_of!` macro Antonio Hickey
2025-03-23 19:23 ` Miguel Ojeda
2025-03-20 2:07 ` [PATCH v5 05/17] rust: faux: refactor to use `&raw [const|mut]` Antonio Hickey
2025-03-23 10:33 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 06/17] rust: platform: " Antonio Hickey
2025-03-23 10:33 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 07/17] rust: pci: " Antonio Hickey
2025-03-23 10:34 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 08/17] rust: kunit: " Antonio Hickey
2025-03-23 10:35 ` Benno Lossin
2025-03-23 19:28 ` Miguel Ojeda
2025-03-20 2:07 ` [PATCH v5 09/17] rust: workqueue: " Antonio Hickey
2025-03-23 10:36 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 10/17] rust: workqueue: replace `raw_get` with pointer cast Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 11/17] rust: rbtree: refactor to use `&raw [const|mut]` Antonio Hickey
2025-03-23 10:38 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 12/17] rust: net: phy: " Antonio Hickey
2025-03-20 2:07 ` [PATCH v5 13/17] rust: sync: arc: " Antonio Hickey
2025-03-23 10:39 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 14/17] rust: jump_label: " Antonio Hickey
2025-03-23 10:40 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 15/17] rust: fs: file: " Antonio Hickey
2025-03-23 10:40 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 16/17] rust: block: " Antonio Hickey
2025-03-20 7:33 ` Andreas Hindborg
2025-03-23 10:41 ` Benno Lossin
2025-03-20 2:07 ` [PATCH v5 17/17] rust: clippy: disallow `addr_of[_mut]!` macros Antonio Hickey
2025-03-20 7:33 ` Andreas Hindborg
2025-03-23 10:41 ` Benno Lossin
2025-03-23 10:45 ` [PATCH v5 00/17] refactor to utilize `&raw [const|mut]` Benno Lossin
2025-03-23 22:32 ` Miguel Ojeda
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).