All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boqun Feng <boqun.feng@gmail.com>
To: Tamir Duberstein <tamird@gmail.com>
Cc: "Masahiro Yamada" <masahiroy@kernel.org>,
	"Nathan Chancellor" <nathan@kernel.org>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Benno Lossin" <benno.lossin@proton.me>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Danilo Krummrich" <dakr@kernel.org>,
	"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	"Brendan Higgins" <brendan.higgins@linux.dev>,
	"David Gow" <davidgow@google.com>, "Rae Moar" <rmoar@google.com>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	"Luis Chamberlain" <mcgrof@kernel.org>,
	"Russ Weight" <russ.weight@linux.dev>,
	"Rob Herring" <robh@kernel.org>,
	"Saravana Kannan" <saravanak@google.com>,
	"Abdiel Janulgue" <abdiel.janulgue@gmail.com>,
	"Daniel Almeida" <daniel.almeida@collabora.com>,
	"Robin Murphy" <robin.murphy@arm.com>,
	"Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
	"Maxime Ripard" <mripard@kernel.org>,
	"Thomas Zimmermann" <tzimmermann@suse.de>,
	"David Airlie" <airlied@gmail.com>,
	"Simona Vetter" <simona@ffwll.ch>,
	"FUJITA Tomonori" <fujita.tomonori@gmail.com>,
	"Nicolas Schier" <nicolas.schier@linux.dev>,
	"Frederic Weisbecker" <frederic@kernel.org>,
	"Lyude Paul" <lyude@redhat.com>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Anna-Maria Behnsen" <anna-maria@linutronix.de>,
	linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org,
	rust-for-linux@vger.kernel.org, linux-kselftest@vger.kernel.org,
	kunit-dev@googlegroups.com, linux-pci@vger.kernel.org,
	linux-block@vger.kernel.org, devicetree@vger.kernel.org,
	dri-devel@lists.freedesktop.org, netdev@vger.kernel.org
Subject: Re: [PATCH v9 4/6] rust: enable `clippy::as_underscore` lint
Date: Fri, 18 Apr 2025 08:09:45 -0700	[thread overview]
Message-ID: <aAJrOV88S-4Qb5o0@Mac.home> (raw)
In-Reply-To: <CAJ-ks9=TXjk8W18ZMG4mx0JpYvXr4nwnUJqjCnqvW9zu2Y1xjA@mail.gmail.com>

On Fri, Apr 18, 2025 at 08:08:02AM -0400, Tamir Duberstein wrote:
> On Thu, Apr 17, 2025 at 4:12 PM Boqun Feng <boqun.feng@gmail.com> wrote:
> >
> > On Thu, Apr 17, 2025 at 03:26:14PM -0400, Tamir Duberstein wrote:
> > [...]
> > > >
> > > > >          Ok(())
> > > > >      }
> > > > > diff --git a/rust/kernel/device_id.rs b/rust/kernel/device_id.rs
> > > > > index e5859217a579..4063f09d76d9 100644
> > > > > --- a/rust/kernel/device_id.rs
> > > > > +++ b/rust/kernel/device_id.rs
> > > > > @@ -82,7 +82,7 @@ impl<T: RawDeviceId, U, const N: usize> IdArray<T, U, N> {
> > > > >              unsafe {
> > > > >                  raw_ids[i]
> > > > >                      .as_mut_ptr()
> > > > > -                    .byte_offset(T::DRIVER_DATA_OFFSET as _)
> > > > > +                    .byte_add(T::DRIVER_DATA_OFFSET)
> > > > >                      .cast::<usize>()
> > > > >                      .write(i);
> > > > >              }
> > > > > diff --git a/rust/kernel/devres.rs b/rust/kernel/devres.rs
> > > > > index f7e8f5f53622..70d12014e476 100644
> > > > > --- a/rust/kernel/devres.rs
> > > > > +++ b/rust/kernel/devres.rs
> > > > > @@ -45,7 +45,7 @@ struct DevresInner<T> {
> > > > >  /// # Example
> > > > >  ///
> > > > >  /// ```no_run
> > > > > -/// # use kernel::{bindings, c_str, device::Device, devres::Devres, io::{Io, IoRaw}};
> > > > > +/// # use kernel::{bindings, c_str, device::Device, devres::Devres, ffi::c_void, io::{Io, IoRaw}};
> > > > >  /// # use core::ops::Deref;
> > > > >  ///
> > > > >  /// // See also [`pci::Bar`] for a real example.
> > > > > @@ -59,19 +59,19 @@ struct DevresInner<T> {
> > > > >  ///     unsafe fn new(paddr: usize) -> Result<Self>{
> > > > >  ///         // SAFETY: By the safety requirements of this function [`paddr`, `paddr` + `SIZE`) is
> > > > >  ///         // valid for `ioremap`.
> > > > > -///         let addr = unsafe { bindings::ioremap(paddr as _, SIZE as _) };
> > > > > +///         let addr = unsafe { bindings::ioremap(paddr as bindings::phys_addr_t, SIZE) };
> > > >
> > > >
> > > > ///         let addr = unsafe { bindings::ioremap(bindings::phys_addr_t::from(paddr), SIZE) };
> > > >
> > > > better? Or even with .into()
> > > >
> > > > ///         let addr = unsafe { bindings::ioremap(paddr.into(), SIZE) };
> > >
> > > This doesn't compile because `paddr` is usize, and
> > > `bindings::phys_addr_t` is u64 (on my machine, which is aarch64).
> > >
> >
> > Ok, looks like Rust yet doesn't provide From/Into between usize and u64
> > even if the pointer size is fixed. Latest discussion can be found at:
> >
> >         https://github.com/rust-lang/rust/issues/41619#issuecomment-2056902943
> >
> > Lemme see if we can get an issue tracking this. Thanks for taking a
> > look.
> >
> > > > >  ///         if addr.is_null() {
> > > > >  ///             return Err(ENOMEM);
> > > > >  ///         }
> > > > >  ///
> > > > > -///         Ok(IoMem(IoRaw::new(addr as _, SIZE)?))
> > > > > +///         Ok(IoMem(IoRaw::new(addr as usize, SIZE)?))
> > > > >  ///     }
> > > > >  /// }
> > > > >  ///
> > > > >  /// impl<const SIZE: usize> Drop for IoMem<SIZE> {
> > > > >  ///     fn drop(&mut self) {
> > > > >  ///         // SAFETY: `self.0.addr()` is guaranteed to be properly mapped by `Self::new`.
> > > > > -///         unsafe { bindings::iounmap(self.0.addr() as _); };
> > > > > +///         unsafe { bindings::iounmap(self.0.addr() as *mut c_void); };
> > > > >  ///     }
> > > > >  /// }
> > > > >  ///
> > > > [...]
> > > > > diff --git a/rust/kernel/dma.rs b/rust/kernel/dma.rs
> > > > > index 43ecf3c2e860..851a6339aa90 100644
> > > > > --- a/rust/kernel/dma.rs
> > > > > +++ b/rust/kernel/dma.rs
> > > > > @@ -38,7 +38,7 @@
> > > > >  impl Attrs {
> > > > >      /// Get the raw representation of this attribute.
> > > > >      pub(crate) fn as_raw(self) -> crate::ffi::c_ulong {
> > > > > -        self.0 as _
> > > > > +        self.0 as crate::ffi::c_ulong
> > > >
> > > >         crate::ffi::c_ulong::from(self.0)
> > > >
> > > > maybe, a C unsigned long should always be able to hold the whole `Attr`
> > > > and a lossly casting is what this function does.
> > >
> > > This also doesn't compile: "the trait `core::convert::From<u32>` is
> > > not implemented for `usize`". Upstream has ambitions of running on
> > > 16-bit, I guess :)
> > >
> >
> > They do but they also have the target_pointer_width cfg, so they can
> > totally provide these functions. It's just they want to find a better
> > way (like the link I post above).
> 
> Did you want me to hold off on the respin on this point, or shall I go ahead?

No need to wait. This doesn't affect your current patch. But we do need
to start making some decisions about how we handle the conversions *32
=> *size, *size => *64 and c*long <=> *size, they should all be lossless
in the context of kernel. We have 3 options:

1.	Using `as`.
2.	Having our own to_*size(*32), to_*64(*size), to_*size(*64),
	to_c*long(*size) and to_*size(c*long) helper functions.
3.	Waiting and using what Rust upstream comes up.

I'm leaning towards to 2 and then 3, because using `as` can sometimes
surprise you when you change the type. Thoughts?

Regards,
Boqun

  reply	other threads:[~2025-04-18 15:09 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-04-16 17:36 [PATCH v9 0/6] rust: reduce `as` casts, enable related lints Tamir Duberstein
2025-04-16 17:36 ` [PATCH v9 1/6] rust: enable `clippy::ptr_as_ptr` lint Tamir Duberstein
2025-04-17 16:48   ` Boqun Feng
2025-04-17 17:00     ` Tamir Duberstein
2025-04-16 17:36 ` [PATCH v9 2/6] rust: enable `clippy::ptr_cast_constness` lint Tamir Duberstein
2025-04-17 17:12   ` Boqun Feng
2025-04-17 17:16     ` Tamir Duberstein
2025-04-16 17:36 ` [PATCH v9 3/6] rust: enable `clippy::as_ptr_cast_mut` lint Tamir Duberstein
2025-04-17 17:13   ` Boqun Feng
2025-04-16 17:36 ` [PATCH v9 4/6] rust: enable `clippy::as_underscore` lint Tamir Duberstein
2025-04-17 17:55   ` Boqun Feng
2025-04-17 19:26     ` Tamir Duberstein
2025-04-17 20:12       ` Boqun Feng
2025-04-18 12:08         ` Tamir Duberstein
2025-04-18 15:09           ` Boqun Feng [this message]
2025-04-18 15:15             ` Tamir Duberstein
2025-04-22 15:15             ` Miguel Ojeda
2025-04-16 17:36 ` [PATCH v9 5/6] rust: enable `clippy::cast_lossless` lint Tamir Duberstein
2025-04-17 17:29   ` Boqun Feng
2025-04-17 19:28     ` Tamir Duberstein
2025-04-16 17:36 ` [PATCH v9 6/6] rust: enable `clippy::ref_as_ptr` lint Tamir Duberstein
2025-04-16 17:51   ` Boqun Feng
2025-04-16 17:53     ` Tamir Duberstein
2025-04-16 17:58       ` Boqun Feng

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aAJrOV88S-4Qb5o0@Mac.home \
    --to=boqun.feng@gmail.com \
    --cc=a.hindborg@kernel.org \
    --cc=abdiel.janulgue@gmail.com \
    --cc=airlied@gmail.com \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=anna-maria@linutronix.de \
    --cc=benno.lossin@proton.me \
    --cc=bhelgaas@google.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=brendan.higgins@linux.dev \
    --cc=dakr@kernel.org \
    --cc=daniel.almeida@collabora.com \
    --cc=davidgow@google.com \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=frederic@kernel.org \
    --cc=fujita.tomonori@gmail.com \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=kunit-dev@googlegroups.com \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-kbuild@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lyude@redhat.com \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=masahiroy@kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=mripard@kernel.org \
    --cc=nathan@kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=nicolas.schier@linux.dev \
    --cc=ojeda@kernel.org \
    --cc=rafael@kernel.org \
    --cc=rmoar@google.com \
    --cc=robh@kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=russ.weight@linux.dev \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=saravanak@google.com \
    --cc=simona@ffwll.ch \
    --cc=tamird@gmail.com \
    --cc=tglx@linutronix.de \
    --cc=tmgross@umich.edu \
    --cc=tzimmermann@suse.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.