[PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`

Onur Özkan posted 3 patches 3 months, 1 week ago
There is a newer version of this series
[PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Onur Özkan 3 months, 1 week ago
Clippy no longer complains about this lint.

Signed-off-by: Onur Özkan <work@onurozkan.dev>
---
 rust/kernel/cpufreq.rs | 1 -
 1 file changed, 1 deletion(-)

diff --git a/rust/kernel/cpufreq.rs b/rust/kernel/cpufreq.rs
index 11b03e9d7e89..97de9b0573da 100644
--- a/rust/kernel/cpufreq.rs
+++ b/rust/kernel/cpufreq.rs
@@ -907,7 +907,6 @@ fn register_em(_policy: &mut Policy) {
 /// or CPUs, so it is safe to share it.
 unsafe impl<T: Driver> Sync for Registration<T> {}

-#[allow(clippy::non_send_fields_in_send_ty)]
 /// SAFETY: Registration with and unregistration from the cpufreq subsystem can happen from any
 /// thread.
 unsafe impl<T: Driver> Send for Registration<T> {}
--
2.50.0

Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Miguel Ojeda 3 months, 1 week ago
On Sat, Jun 28, 2025 at 6:10 AM Onur Özkan <work@onurozkan.dev> wrote:
>
> Clippy no longer complains about this lint.

Do you have more context? For instance, do you know since when it no
longer complains, or why was the reason for the change? i.e. why we
had the `allow` in the first place, so that we know we don't need it
anymore?

For instance, please how I reasoned about it in commit 5e7c9b84ad08
("rust: sync: remove unneeded
`#[allow(clippy::non_send_fields_in_send_ty)]`").

(It may happen to be the same reason, or not.)

Thanks!

Cheers,
Miguel
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Onur 3 months, 1 week ago
On Sat, 28 Jun 2025 09:13:50 +0200
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote:

> On Sat, Jun 28, 2025 at 6:10 AM Onur Özkan <work@onurozkan.dev> wrote:
> >
> > Clippy no longer complains about this lint.
> 
> Do you have more context? For instance, do you know since when it no
> longer complains, or why was the reason for the change? i.e. why we
> had the `allow` in the first place, so that we know we don't need it
> anymore?
> 
> For instance, please how I reasoned about it in commit 5e7c9b84ad08
> ("rust: sync: remove unneeded
> `#[allow(clippy::non_send_fields_in_send_ty)]`").
> 
> (It may happen to be the same reason, or not.)
> 
> Thanks!
> 
> Cheers,
> Miguel

It doesn't seem to be the same reason. I rebased over
c6af9a1191d042839e56abff69e8b0302d117988 (the exact commit where that
lint was added) but still Clippy did not complain about it on the
MSRV. So it was either a leftover, or there is a version between
1.78 and the current stable where Clippy did complain. I can dig into it
more during the week if you would like.

IMO, we should require people to add a comment explaining the reason
for adding these lint rules to the codebase. It would make both reading
and modifying the code much simpler and clearer.

Regards,
Onur
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Miguel Ojeda 3 months, 1 week ago
On Sat, Jun 28, 2025 at 12:30 PM Onur <work@onurozkan.dev> wrote:
>
> It doesn't seem to be the same reason. I rebased over
> c6af9a1191d042839e56abff69e8b0302d117988 (the exact commit where that
> lint was added) but still Clippy did not complain about it on the
> MSRV. So it was either a leftover, or there is a version between
> 1.78 and the current stable where Clippy did complain. I can dig into it
> more during the week if you would like.

Are you sure? The lint is actually disabled, as I mention in 5e7c9b84ad08.

From a quick test, I enabled it in that file, and I get the warning.

Thus it seems to me Clippy would still complain about it just fine.

It doesn't mean we shouldn't remove it, though.

> IMO, we should require people to add a comment explaining the reason
> for adding these lint rules to the codebase. It would make both reading
> and modifying the code much simpler and clearer.

Do you mean using the lint reasons feature? IIRC we discussed at some
point doing that when the feature was added (we enabled it for the
`expect` side of things).

For non-obvious cases or uncommon lints, it would be definitely nice
(a comment is also OK). I am not sure if it is worth enforcing it for
every single case, though.

It would be nice if `clippy::allow_attributes_without_reason` could be
enabled just for `allow`, or ignore it for certain lints.

Cheers,
Miguel
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Onur 3 months, 1 week ago
On Sat, 28 Jun 2025 14:18:53 +0200
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote:


> > IMO, we should require people to add a comment explaining the reason
> > for adding these lint rules to the codebase. It would make both
> > reading and modifying the code much simpler and clearer.
> 
> Do you mean using the lint reasons feature? IIRC we discussed at some
> point doing that when the feature was added (we enabled it for the
> `expect` side of things).

Yeah, I meant that it't taking more effort than it should, like digging
through historical changes in the relevant parts of the source code,
trying to figuring out whether it was just a false positive or if there
was a specific reason behind it, etc.
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Miguel Ojeda 3 months, 1 week ago
On Sat, Jun 28, 2025 at 3:04 PM Onur <work@onurozkan.dev> wrote:
>
> Yeah, I meant that it't taking more effort than it should, like digging
> through historical changes in the relevant parts of the source code,
> trying to figuring out whether it was just a false positive or if there
> was a specific reason behind it, etc.

Yeah, that is a big part of kernel development, especially on the
maintenance side :)

I definitely agree that a good comment in the source code is better
than going through Git history, and the kernel sometimes has had some
things documented in the Git log that should have been in the source
code instead. It happens.

However, in some cases like this one it is not clear it would help.
For instance, here the lint reason message could have been something
that made sense back then when the lint was enabled, and yet we would
still have had to notice the lint got disabled later on, so we would
end up still going into the Git log.

`expect` is great to mitigate some of that -- sadly we cannot use it
as much as we would like due to sometimes being conditional to an arch
or the kernel config or the Rust version. (And your first patch may
have some cases that perhaps we cannot convert due to that -- I didn't
check)

Cheers,
Miguel
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Onur 3 months, 1 week ago
On Sat, 28 Jun 2025 14:18:53 +0200
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote:

> On Sat, Jun 28, 2025 at 12:30 PM Onur <work@onurozkan.dev> wrote:
> >
> > It doesn't seem to be the same reason. I rebased over
> > c6af9a1191d042839e56abff69e8b0302d117988 (the exact commit where
> > that lint was added) but still Clippy did not complain about it on
> > the MSRV. So it was either a leftover, or there is a version between
> > 1.78 and the current stable where Clippy did complain. I can dig
> > into it more during the week if you would like.
> 
> Are you sure? The lint is actually disabled, as I mention in
> 5e7c9b84ad08.
> 
> From a quick test, I enabled it in that file, and I get the warning.
> 
> Thus it seems to me Clippy would still complain about it just fine.

Yes, I am sure. Just to clarify, I am not testing 5e7c9b84ad08. I am
testing c6af9a1191d042839e56abff69e8b0302d117988 where
`#[allow(clippy::non_send_fields_in_send_ty)]` was added on
`unsafe impl<T: Driver> Send for Registration<T> {}`.

Switching from `allow` to `expect` produced the following result on my
end:

```
$ make LLVM=1 -j $(nproc)
CLIPPY=1 DESCEND objtool
  CALL    scripts/checksyscalls.sh
  INSTALL libsubcmd_headers
  CLIPPY L rust/kernel.o
error: this lint expectation is unfulfilled
   --> rust/kernel/cpufreq.rs:908:10
    |
908 | #[expect(clippy::non_send_fields_in_send_ty)]
    |          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    |
    = note: `-D unfulfilled-lint-expectations` implied by `-D warnings`
    = help: to override `-D warnings` add
`#[allow(unfulfilled_lint_expectations)]`

error: aborting due to 1 previous error

make[2]: *** [rust/Makefile:534: rust/kernel.o] Error 1
make[1]: *** [/home/nimda/devspace/onur-ozkan/linux/Makefile:1283:
prepare] Error 2 make: *** [Makefile:248: __sub-make] Error 2

$ git log -1
commit c6af9a1191d042839e56abff69e8b0302d117988 (HEAD -> master)
Author: Viresh Kumar <viresh.kumar@linaro.org>
Date:   Wed Jan 24 12:36:33 2024 +0530

    rust: cpufreq: Extend abstractions for driver registration

    Extend the cpufreq abstractions to support driver registration from
    Rust.

    Reviewed-by: Danilo Krummrich <dakr@kernel.org>
    Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

$ rustc --version --verbose
rustc 1.78.0 (9b00956e5 2024-04-29)
binary: rustc
commit-hash: 9b00956e56009bab2aa15d7bff10916599e3d6d6
commit-date: 2024-04-29
host: x86_64-unknown-linux-gnu
release: 1.78.0
LLVM version: 18.1.2
```

Regards,
Onur
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Miguel Ojeda 3 months, 1 week ago
On Sat, Jun 28, 2025 at 2:42 PM Onur <work@onurozkan.dev> wrote:
>
> Yes, I am sure. Just to clarify, I am not testing 5e7c9b84ad08. I am
> testing c6af9a1191d042839e56abff69e8b0302d117988 where
> `#[allow(clippy::non_send_fields_in_send_ty)]` was added on
> `unsafe impl<T: Driver> Send for Registration<T> {}`.
>
> Switching from `allow` to `expect` produced the following result on my
> end:

Yes, of course it does -- what I am telling you (and what 5e7c9b84ad08
says) is that the lint is disabled.

And since it is disabled, if you change the line to `expect`, then it
will obviously complain.

If you actually enabled the lint with e.g.

    #![warn(clippy::non_send_fields_in_send_ty)]

at the top of the file, and then used `expect`, it will build fine.

Cheers,
Miguel
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Onur 3 months, 1 week ago
On Sat, 28 Jun 2025 14:51:15 +0200
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote:

> On Sat, Jun 28, 2025 at 2:42 PM Onur <work@onurozkan.dev> wrote:
> >
> > Yes, I am sure. Just to clarify, I am not testing 5e7c9b84ad08. I am
> > testing c6af9a1191d042839e56abff69e8b0302d117988 where
> > `#[allow(clippy::non_send_fields_in_send_ty)]` was added on
> > `unsafe impl<T: Driver> Send for Registration<T> {}`.
> >
> > Switching from `allow` to `expect` produced the following result on
> > my end:
> 
> Yes, of course it does -- what I am telling you (and what 5e7c9b84ad08
> says) is that the lint is disabled.
> 
> And since it is disabled, if you change the line to `expect`, then it
> will obviously complain.
> 
> If you actually enabled the lint with e.g.
> 
>     #![warn(clippy::non_send_fields_in_send_ty)]
> 
> at the top of the file, and then used `expect`, it will build fine.


Aha, I see. I missed that. I guess `allow` was added when the author
had this lint enabled on their checkout, but their work was merged when
lint removal was merged before that.

Do you want me to update the patch description by including
5e7c9b84ad08 ref and send v4?

Sorry for misunderstanding by the way!

Many thanks,
Onur
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Miguel Ojeda 3 months, 1 week ago
On Sat, Jun 28, 2025 at 3:11 PM Onur <work@onurozkan.dev> wrote:
>
> Aha, I see. I missed that. I guess `allow` was added when the author
> had this lint enabled on their checkout, but their work was merged when
> lint removal was merged before that.

Yeah, some of the code going around was written years ago, so
sometimes this sort of thing happens. :)

> Do you want me to update the patch description by including
> 5e7c9b84ad08 ref and send v4?

Sure -- maybe wait a few days, to see if anyone says anything else.
Then we will need to wait for Acked-bys from other maintainers.

Or, actually, if you are sending a new version and you are willing to
do it, then it would be easier to land if you split the first patch
also by subsystem -- that way each maintainer can take their patches
on their own time instead. Since each patch is independent, you can
send them in independent patch series, that makes it even easier for
maintainers to track.

For instance, you could do this grouping:

     rust/kernel/error.rs                | 2 +-
     rust/kernel/types.rs                | 2 +-
     rust/macros/helpers.rs              | 2 +-
     (+ this patch #2)

     rust/kernel/init.rs                 | 6 +++---

     rust/kernel/kunit.rs                | 2 +-

     drivers/gpu/nova-core/regs.rs       | 2 +-
     rust/kernel/drm/ioctl.rs            | 8 ++++----

     rust/kernel/devres.rs               | 2 +-
     rust/kernel/driver.rs               | 2 +-

     rust/kernel/alloc/allocator_test.rs | 2 +-

     rust/kernel/opp.rs                  | 4 ++--
     (+ this patch #3)

So e.g. the top one (Rust) would be a series of 2 patches, then the
next one (pin-init) a single independent patch, and so on.

> Sorry for misunderstanding by the way!

No worries at all! It happens :)

And thanks for doing these cleanups! They are appreciated.

Cheers,
Miguel
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Onur 3 months, 1 week ago
On Sat, 28 Jun 2025 15:28:29 +0200
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> wrote:

> On Sat, Jun 28, 2025 at 3:11 PM Onur <work@onurozkan.dev> wrote:
> >
> > Aha, I see. I missed that. I guess `allow` was added when the author
> > had this lint enabled on their checkout, but their work was merged
> > when lint removal was merged before that.
> 
> Yeah, some of the code going around was written years ago, so
> sometimes this sort of thing happens. :)
> 
> > Do you want me to update the patch description by including
> > 5e7c9b84ad08 ref and send v4?
> 
> Sure -- maybe wait a few days, to see if anyone says anything else.
> Then we will need to wait for Acked-bys from other maintainers.
> 
> Or, actually, if you are sending a new version and you are willing to
> do it, then it would be easier to land if you split the first patch
> also by subsystem -- that way each maintainer can take their patches
> on their own time instead. Since each patch is independent, you can
> send them in independent patch series, that makes it even easier for
> maintainers to track.

I don't have enough time to do it right now, but I would be happy
to do it in ~3 days during the week (assuming it's still not being
reviewed by the maintainers by then).

Regards,
Onur
Re: [PATCH v3 3/3] rust: remove `#[allow(clippy::non_send_fields_in_send_ty)]`
Posted by Miguel Ojeda 3 months, 1 week ago
On Sat, Jun 28, 2025 at 3:42 PM Onur <work@onurozkan.dev> wrote:
>
> I don't have enough time to do it right now, but I would be happy
> to do it in ~3 days during the week (assuming it's still not being
> reviewed by the maintainers by then).

No worries, there is no rush on these cleanups. Even if it gets
reviewed, you can still split, keeping their tag. Thanks!

Cheers,
Miguel