From: Yury Norov <ynorov@nvidia.com>
To: Link Mauve <linkmauve@linkmauve.fr>
Cc: "Alexandre Courbot" <acourbot@nvidia.com>,
"Yury Norov" <yury.norov@gmail.com>,
rust-for-linux@vger.kernel.org, "Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Tamir Duberstein" <tamird@kernel.org>,
"Onur Özkan" <work@onurozkan.dev>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] rust: num: Add inline annotation to Bounded methods
Date: Mon, 19 Oct 2026 10:51:15 -0400 [thread overview]
Message-ID: <atYuY1ExPAqZywrr@yury> (raw)
In-Reply-To: <20261019105744.2943249-1-linkmauve@linkmauve.fr>
On Mon, Oct 19, 2026 at 12:57:38PM +0200, Link Mauve wrote:
> It was previously generating a ton of very short functions, such as
> <<kernel::num::bounded::Bounded<u32, 32>>::shr::<17, 15>> or
> <<kernel::num::bounded::Bounded<u16, 16>>::new::<16384>> on use.
>
> These are obviously better inlined, although I wasn’t completely sure
> between #[inline] and #[inline(always)], but the former worked fine in
> my setup so I went for it, we can always adjust it later.
>
> Signed-off-by: Link Mauve <linkmauve@linkmauve.fr>
Reviewed-by: Yury Norov <ynorov@nvidia.com>
Do you want me to take the patch with the bitops branch, or you've
a better route in mind?
Thanks,
Yury
> ---
> rust/kernel/num/bounded.rs | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/rust/kernel/num/bounded.rs b/rust/kernel/num/bounded.rs
> index 0b32f4343922..d3486675046a 100644
> --- a/rust/kernel/num/bounded.rs
> +++ b/rust/kernel/num/bounded.rs
> @@ -264,6 +264,7 @@ impl<const N: u32> Bounded<$type, N> {
> ", 4>::new::<7>();")]
> /// assert_eq!(v.get(), 7);
> /// ```
> + #[inline]
> pub const fn new<const VALUE: $type>() -> Self {
> // Statically assert that `VALUE` fits within the set number of bits.
> const_assert!(fits_within!(VALUE, $type, N));
> @@ -309,6 +310,7 @@ impl<T, const N: u32> Bounded<T, N>
> /// # Safety
> ///
> /// The caller must ensure that `value` can be represented within `N` bits.
> + #[inline]
> const unsafe fn __new(value: T) -> Self {
> // Enforce the type invariants.
> // `N` cannot be zero.
> @@ -350,6 +352,7 @@ impl<T, const N: u32> Bounded<T, N>
> /// let v = Bounded::<i8, 4>::try_new(8);
> /// assert_eq!(v, None);
> /// ```
> + #[inline]
> pub fn try_new(value: T) -> Option<Self> {
> fits_within(value, N).then(|| {
> // SAFETY: `fits_within` confirmed that `value` can be represented within `N` bits.
> @@ -412,6 +415,7 @@ pub fn from_expr(expr: T) -> Self {
> /// let v = Bounded::<u32, 4>::new::<7>();
> /// assert_eq!(v.get(), 7u32);
> /// ```
> + #[inline]
> pub const fn get(self) -> T {
> self.0
> }
> @@ -430,6 +434,7 @@ pub const fn get(self) -> T {
> /// // The contained values are equal even though `larger_v` has a bigger capacity.
> /// assert_eq!(larger_v, v);
> /// ```
> + #[inline]
> pub const fn extend<const M: u32>(self) -> Bounded<T, M> {
> const_assert!(
> M >= N,
> @@ -459,6 +464,7 @@ pub const fn extend<const M: u32>(self) -> Bounded<T, M> {
> /// // ... but doesn't fit within `2` bits.
> /// assert_eq!(v.try_shrink::<2>(), None);
> /// ```
> + #[inline]
> pub fn try_shrink<const M: u32>(self) -> Option<Bounded<T, M>> {
> Bounded::<T, M>::try_new(self.get())
> }
> @@ -482,6 +488,7 @@ pub fn try_shrink<const M: u32>(self) -> Option<Bounded<T, M>> {
> /// // This won't build: a `u8` is smaller than the required 12 bits.
> /// // let _: Bounded<u8, 12> = v.cast();
> /// ```
> + #[inline]
> pub fn cast<U>(self) -> Bounded<U, N>
> where
> U: TryFrom<T> + Integer,
> @@ -510,6 +517,7 @@ pub fn cast<U>(self) -> Bounded<U, N>
> ///
> /// assert_eq!(v_shifted.get(), 0xff);
> /// ```
> + #[inline]
> pub fn shr<const SHIFT: u32, const RES: u32>(self) -> Bounded<T, RES> {
> const_assert!(SHIFT < T::BITS);
> const_assert!(RES + SHIFT >= N);
> @@ -563,6 +571,7 @@ pub fn shr_exact<const SHIFT: u32, const RES: u32>(self) -> Option<Bounded<T, RE
> ///
> /// assert_eq!(v_shifted.get(), 0xff00);
> /// ```
> + #[inline]
> pub fn shl<const SHIFT: u32, const RES: u32>(self) -> Bounded<T, RES> {
> const_assert!(RES >= N + SHIFT);
>
>
> base-commit: 2efb7a11f1aa4d2dc285fe2680cca22cb9f72f64
> --
> 2.56.0
next prev parent reply other threads:[~2026-10-19 14:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 10:57 Link Mauve
2026-10-19 11:09 ` Gary Guo
2026-10-19 14:07 ` Alice Ryhl
2026-10-19 14:25 ` Alexandre Courbot
2026-10-19 14:51 ` Yury Norov [this message]
2026-10-19 15:07 ` Alexandre Courbot
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=atYuY1ExPAqZywrr@yury \
--to=ynorov@nvidia.com \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=gary@garyguo.net \
--cc=linkmauve@linkmauve.fr \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tamird@kernel.org \
--cc=tmgross@umich.edu \
--cc=work@onurozkan.dev \
--cc=yury.norov@gmail.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®