On Fri, May 23, 2025 at 12:19:26PM +0200, Clément Léger wrote: > Split the code that check for the uniformity of misaligned accesses > performance on all cpus from check_unaligned_access_emulated_all_cpus() > to its own function which will be used for delegation check. No > functional changes intended. > > Signed-off-by: Clément Léger <cle...@rivosinc.com> > Reviewed-by: Andrew Jones <ajo...@ventanamicro.com> > --- > arch/riscv/kernel/traps_misaligned.c | 20 ++++++++++++++------ > 1 file changed, 14 insertions(+), 6 deletions(-) > > diff --git a/arch/riscv/kernel/traps_misaligned.c > b/arch/riscv/kernel/traps_misaligned.c > index f1b2af515592..7ecaa8103fe7 100644 > --- a/arch/riscv/kernel/traps_misaligned.c > +++ b/arch/riscv/kernel/traps_misaligned.c > @@ -645,6 +645,18 @@ bool __init > check_vector_unaligned_access_emulated_all_cpus(void) > } > #endif > > +static bool all_cpus_unaligned_scalar_access_emulated(void) > +{ > + int cpu; > + > + for_each_online_cpu(cpu) > + if (per_cpu(misaligned_access_speed, cpu) != > + RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) > + return false; > + > + return true; > +}
This ends up wasting time when !CONFIG_RISCV_SCALAR_MISALIGNED since it will always return false in that case. Maybe there is a way to simplify the ifdefs and still have performant code, but I don't think this is a big enough problem to prevent this patch from merging. Reviewed-by: Charlie Jenkins <char...@rivosinc.com> Tested-by: Charlie Jenkins <char...@rivosinc.com> > + > #ifdef CONFIG_RISCV_SCALAR_MISALIGNED > > static bool unaligned_ctl __read_mostly; > @@ -683,8 +695,6 @@ static int > cpu_online_check_unaligned_access_emulated(unsigned int cpu) > > bool __init check_unaligned_access_emulated_all_cpus(void) > { > - int cpu; > - > /* > * We can only support PR_UNALIGN controls if all CPUs have misaligned > * accesses emulated since tasks requesting such control can run on any > @@ -692,10 +702,8 @@ bool __init > check_unaligned_access_emulated_all_cpus(void) > */ > on_each_cpu(check_unaligned_access_emulated, NULL, 1); > > - for_each_online_cpu(cpu) > - if (per_cpu(misaligned_access_speed, cpu) > - != RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) > - return false; > + if (!all_cpus_unaligned_scalar_access_emulated()) > + return false; > > unaligned_ctl = true; > return true; > -- > 2.49.0 >