On Tue, May 20, 2025 at 10:19:47AM +0200, Clément Léger wrote: > > > 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. Here is the patch I am using locally for testing purposes, but if there is a way to reduce the number of ifdefs that is probably the better way to go: