diff mbox series

[v5,01/17] rust: enable `raw_ref_op` feature

Message ID 20250320020740.1631171-2-contact@antoniohickey.com (mailing list archive)
State New
Headers show
Series [v5,01/17] rust: enable `raw_ref_op` feature | expand

Commit Message

Antonio Hickey March 20, 2025, 2:07 a.m. UTC
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(-)

Comments

Andreas Hindborg March 20, 2025, 7:32 a.m. UTC | #1
"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
Benno Lossin March 22, 2025, 10:16 a.m. UTC | #2
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
Antonio Hickey March 22, 2025, 3:02 p.m. UTC | #3
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
> 
>
Tamir Duberstein March 22, 2025, 6:24 p.m. UTC | #4
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>
Antonio Hickey March 22, 2025, 7:12 p.m. UTC | #5
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>
Benno Lossin March 22, 2025, 7:39 p.m. UTC | #6
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
Miguel Ojeda March 22, 2025, 7:41 p.m. UTC | #7
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
Antonio Hickey March 22, 2025, 8:12 p.m. UTC | #8
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
diff mbox series

Patch

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