[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250407-63092ceb505ad536d8f1394e@orel>
Date: Mon, 7 Apr 2025 15:45:52 +0200
From: Andrew Jones <ajones@...tanamicro.com>
To: Geert Uytterhoeven <geert@...ux-m68k.org>
Cc: linux-riscv@...ts.infradead.org, linux-kernel@...r.kernel.org,
linux-doc@...r.kernel.org, paul.walmsley@...ive.com, palmer@...belt.com,
charlie@...osinc.com, cleger@...osinc.com, alex@...ti.fr,
Anup Patel <apatel@...tanamicro.com>, corbet@....net
Subject: Re: [PATCH v3 7/8] riscv: Add parameter for skipping access speed
tests
Hi Geert,
On Mon, Apr 07, 2025 at 11:49:59AM +0200, Geert Uytterhoeven wrote:
> Hi Andrew,
>
> On Tue, 4 Mar 2025 at 13:02, Andrew Jones <ajones@...tanamicro.com> wrote:
> > Allow skipping scalar and vector unaligned access speed tests. This
> > is useful for testing alternative code paths and to skip the tests in
> > environments where they run too slowly. All CPUs must have the same
> > unaligned access speed.
> >
> > The code movement is because we now need the scalar cpu hotplug
> > callback to always run, so we need to bring it and its supporting
> > functions out of CONFIG_RISCV_PROBE_UNALIGNED_ACCESS.
> >
> > Signed-off-by: Andrew Jones <ajones@...tanamicro.com>
>
> Thanks for your patch, which is now commit aecb09e091dc1433
> ("riscv: Add parameter for skipping access speed tests") in
> v6.15-rc1.
>
> > --- a/arch/riscv/kernel/unaligned_access_speed.c
> > +++ b/arch/riscv/kernel/unaligned_access_speed.c
>
> > static int __init check_unaligned_access_all_cpus(void)
> > {
> > int cpu;
> >
> > - if (!check_unaligned_access_emulated_all_cpus())
> > + if (unaligned_scalar_speed_param == RISCV_HWPROBE_MISALIGNED_SCALAR_UNKNOWN &&
> > + !check_unaligned_access_emulated_all_cpus()) {
> > check_unaligned_access_speed_all_cpus();
> > -
> > - if (!has_vector()) {
> > + } else {
> > + pr_info("scalar unaligned access speed set to '%s' by command line\n",
> > + speed_str[unaligned_scalar_speed_param]);
> > for_each_online_cpu(cpu)
> > - per_cpu(vector_misaligned_access, cpu) = RISCV_HWPROBE_MISALIGNED_VECTOR_UNSUPPORTED;
> > - } else if (!check_vector_unaligned_access_emulated_all_cpus() &&
> > - IS_ENABLED(CONFIG_RISCV_PROBE_VECTOR_UNALIGNED_ACCESS)) {
> > + per_cpu(misaligned_access_speed, cpu) = unaligned_scalar_speed_param;
> > + }
> > +
> > + if (!has_vector())
> > + unaligned_vector_speed_param = RISCV_HWPROBE_MISALIGNED_VECTOR_UNSUPPORTED;
> > +
> > + if (unaligned_vector_speed_param == RISCV_HWPROBE_MISALIGNED_VECTOR_UNKNOWN &&
> > + !check_vector_unaligned_access_emulated_all_cpus() &&
> > + IS_ENABLED(CONFIG_RISCV_PROBE_VECTOR_UNALIGNED_ACCESS)) {
> > kthread_run(vec_check_unaligned_access_speed_all_cpus,
> > NULL, "vec_check_unaligned_access_speed_all_cpus");
> > + } else {
> > + pr_info("vector unaligned access speed set to '%s' by command line\n",
> > + speed_str[unaligned_vector_speed_param]);
> > + for_each_online_cpu(cpu)
> > + per_cpu(vector_misaligned_access, cpu) = unaligned_vector_speed_param;
> > }
>
> On RZ/Five:
>
> vector unaligned access speed set to 'unsupported' by command line
>
> However, this is not set on my command line?
>
> Apparently this can be set using three different methods:
> 1. It is the default value in the declaration of vector_misaligned_access,
> 2. From the handle_vector_misaligned_load() exception handler,
> 3. From the command line.
> Hence the current kernel message is rather confusing...
Thanks for the report.
The three ways above are OK, since (1) sets it to 'unknown' which means
"not yet set" (by command line or otherwise), (2) doesn't actually touch
unaligned_vector_speed_param, just its per-cpu counterpart. And the
message applies to (3). However, there's a (4) which I added without
considering the message and that's the 'if (!has_vector())' part of the
hunk above, which sets 'unsupported', as you're seeing, when vector is
not present.
I'll send a patch that ensures we only get the message for truly command
line set states.
Thanks,
drew
Powered by blists - more mailing lists