[PATCH v2 3/7] rust: cpufreq: always inline functions using build_assert with arguments

Alexandre Courbot posted 7 patches 2 months, 1 week ago
There is a newer version of this series
[PATCH v2 3/7] rust: cpufreq: always inline functions using build_assert with arguments
Posted by Alexandre Courbot 2 months, 1 week ago
`build_assert` relies on the compiler to optimize out its error path.
Functions using it with its arguments must thus always be inlined,
otherwise the error path of `build_assert` might not be optimized out,
triggering a build error.

Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
---
 rust/kernel/cpufreq.rs | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/rust/kernel/cpufreq.rs b/rust/kernel/cpufreq.rs
index 1a555fcb120a..df5d9f6f43f3 100644
--- a/rust/kernel/cpufreq.rs
+++ b/rust/kernel/cpufreq.rs
@@ -1015,6 +1015,8 @@ impl<T: Driver> Registration<T> {
         ..pin_init::zeroed()
     };
 
+    // Always inline to optimize out error path of `build_assert`.
+    #[inline(always)]
     const fn copy_name(name: &'static CStr) -> [c_char; CPUFREQ_NAME_LEN] {
         let src = name.to_bytes_with_nul();
         let mut dst = [0; CPUFREQ_NAME_LEN];

-- 
2.52.0
Re: [PATCH v2 3/7] rust: cpufreq: always inline functions using build_assert with arguments
Posted by Viresh Kumar 2 months, 1 week ago
On 28-11-25, 11:11, Alexandre Courbot wrote:
> `build_assert` relies on the compiler to optimize out its error path.
> Functions using it with its arguments must thus always be inlined,
> otherwise the error path of `build_assert` might not be optimized out,
> triggering a build error.
> 
> Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> ---
>  rust/kernel/cpufreq.rs | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/rust/kernel/cpufreq.rs b/rust/kernel/cpufreq.rs
> index 1a555fcb120a..df5d9f6f43f3 100644
> --- a/rust/kernel/cpufreq.rs
> +++ b/rust/kernel/cpufreq.rs
> @@ -1015,6 +1015,8 @@ impl<T: Driver> Registration<T> {
>          ..pin_init::zeroed()
>      };
>  
> +    // Always inline to optimize out error path of `build_assert`.
> +    #[inline(always)]
>      const fn copy_name(name: &'static CStr) -> [c_char; CPUFREQ_NAME_LEN] {
>          let src = name.to_bytes_with_nul();
>          let mut dst = [0; CPUFREQ_NAME_LEN];

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>

Lemme know if you want me to pick this instead.

-- 
viresh
Re: [PATCH v2 3/7] rust: cpufreq: always inline functions using build_assert with arguments
Posted by Alice Ryhl 2 months, 1 week ago
On Fri, Nov 28, 2025 at 11:42:55AM +0530, Viresh Kumar wrote:
> On 28-11-25, 11:11, Alexandre Courbot wrote:
> > `build_assert` relies on the compiler to optimize out its error path.
> > Functions using it with its arguments must thus always be inlined,
> > otherwise the error path of `build_assert` might not be optimized out,
> > triggering a build error.
> > 
> > Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> > ---
> >  rust/kernel/cpufreq.rs | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/rust/kernel/cpufreq.rs b/rust/kernel/cpufreq.rs
> > index 1a555fcb120a..df5d9f6f43f3 100644
> > --- a/rust/kernel/cpufreq.rs
> > +++ b/rust/kernel/cpufreq.rs
> > @@ -1015,6 +1015,8 @@ impl<T: Driver> Registration<T> {
> >          ..pin_init::zeroed()
> >      };
> >  
> > +    // Always inline to optimize out error path of `build_assert`.
> > +    #[inline(always)]
> >      const fn copy_name(name: &'static CStr) -> [c_char; CPUFREQ_NAME_LEN] {
> >          let src = name.to_bytes_with_nul();
> >          let mut dst = [0; CPUFREQ_NAME_LEN];
> 
> Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
> 
> Lemme know if you want me to pick this instead.

There's no reason these can't be picked up independently, so it would be
fine if you pick up this one.

Alice
Re: [PATCH v2 3/7] rust: cpufreq: always inline functions using build_assert with arguments
Posted by Viresh Kumar 2 months, 1 week ago
On 28-11-25, 09:32, Alice Ryhl wrote:
> On Fri, Nov 28, 2025 at 11:42:55AM +0530, Viresh Kumar wrote:
> > On 28-11-25, 11:11, Alexandre Courbot wrote:
> > > `build_assert` relies on the compiler to optimize out its error path.
> > > Functions using it with its arguments must thus always be inlined,
> > > otherwise the error path of `build_assert` might not be optimized out,
> > > triggering a build error.
> > > 
> > > Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
> > > ---
> > >  rust/kernel/cpufreq.rs | 2 ++
> > >  1 file changed, 2 insertions(+)
> > > 
> > > diff --git a/rust/kernel/cpufreq.rs b/rust/kernel/cpufreq.rs
> > > index 1a555fcb120a..df5d9f6f43f3 100644
> > > --- a/rust/kernel/cpufreq.rs
> > > +++ b/rust/kernel/cpufreq.rs
> > > @@ -1015,6 +1015,8 @@ impl<T: Driver> Registration<T> {
> > >          ..pin_init::zeroed()
> > >      };
> > >  
> > > +    // Always inline to optimize out error path of `build_assert`.
> > > +    #[inline(always)]
> > >      const fn copy_name(name: &'static CStr) -> [c_char; CPUFREQ_NAME_LEN] {
> > >          let src = name.to_bytes_with_nul();
> > >          let mut dst = [0; CPUFREQ_NAME_LEN];
> > 
> > Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
> > 
> > Lemme know if you want me to pick this instead.
> 
> There's no reason these can't be picked up independently, so it would be
> fine if you pick up this one.

Applied. Thanks.

-- 
viresh