On 20/05/2025 01:32, Charlie Jenkins wrote: > On Thu, May 15, 2025 at 10:22:10AM +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 <cleger@xxxxxxxxxxxx> >> Reviewed-by: Andrew Jones <ajones@xxxxxxxxxxxxxxxx> >> --- >> 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 e551ba17f557..287ec37021c8 100644 >> --- a/arch/riscv/kernel/traps_misaligned.c >> +++ b/arch/riscv/kernel/traps_misaligned.c >> @@ -647,6 +647,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) != > > misaligned_access_speed is only defined when > CONFIG_RISCV_SCALAR_MISALIGNED. This function should return false when > !CONFIG_RISCV_SCALAR_MISALIGNED and only use this logic otherwise. Hi Charlie, misaligned_access_speed is defined in unaligned_access_speed.c which is compiled based on CONFIG_RISCV_MISALIGNED (ditto for trap_misaligned.c) obj-$(CONFIG_RISCV_MISALIGNED) += unaligned_access_speed.o However, the declaration for it in the header cpu-feature.h however is under a CONFIG_RISCV_SCALAR_MISALIGNED ifdef. So either the declaration or the definition is wrong but the ifdefery soup makes it quite difficult to understand what's going on. I would suggest to move the DECLARE_PER_CPU under CONFIG_RISCV_MISALIGNED so that it reduces ifdef in traps_misaligned as well. Thanks, Clément > > - Charlie > >> + RISCV_HWPROBE_MISALIGNED_SCALAR_EMULATED) >> + return false; >> + >> + return true; >> +} >> + >> #ifdef CONFIG_RISCV_SCALAR_MISALIGNED >> >> static bool unaligned_ctl __read_mostly; >> @@ -685,8 +697,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 >> @@ -694,10 +704,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 >> >> >> _______________________________________________ >> linux-riscv mailing list >> linux-riscv@xxxxxxxxxxxxxxxxxxx >> http://lists.infradead.org/mailman/listinfo/linux-riscv