On Fri, Sep 27, 2019 at 11:42:26AM +0100, Andre Przywara wrote: > At the moment the smp selftest outputs one line for each vCPU, with the > CPU number and its MPIDR printed in the same test result line. > For automated test frameworks this has the problem of including variable > output in the test name, also the number of tests varies, depending on the > number of vCPUs. > > Fix this by only generating a single line of output for the SMP test, > which summarises the result. We use two cpumasks, to let each vCPU report > its result and completion of the test (code stolen from the GIC test). > > For informational purposes we keep the one line per CPU, but prefix it > with an INFO: tag, so that frameworks can ignore it. > > Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx> > --- > arm/selftest.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/arm/selftest.c b/arm/selftest.c > index a0c1ab8..e9dc5c0 100644 > --- a/arm/selftest.c > +++ b/arm/selftest.c > @@ -17,6 +17,8 @@ > #include <asm/smp.h> > #include <asm/barrier.h> > > +static cpumask_t ready, valid; > + > static void __user_psci_system_off(void) > { > psci_system_off(); > @@ -341,8 +343,11 @@ static void cpu_report(void *data __unused) > uint64_t mpidr = get_mpidr(); > int cpu = smp_processor_id(); > > - report("CPU(%3d) mpidr=%010" PRIx64, > - mpidr_to_cpu(mpidr) == cpu, cpu, mpidr); > + if (mpidr_to_cpu(mpidr) == cpu) > + cpumask_set_cpu(smp_processor_id(), &valid); > + smp_wmb(); /* Paired with rmb in main(). */ > + cpumask_set_cpu(smp_processor_id(), &ready); > + report_info("CPU%3d: MPIDR=%010" PRIx64, cpu, mpidr); > } > > int main(int argc, char **argv) > @@ -371,6 +376,11 @@ int main(int argc, char **argv) > > report("PSCI version", psci_check()); > on_cpus(cpu_report, NULL); > + while (!cpumask_full(&ready)) > + cpu_relax(); > + smp_rmb(); /* Paired with wmb in cpu_report(). */ > + report("MPIDR test on all CPUs", cpumask_full(&valid)); > + report_info("%d CPUs reported back", nr_cpus); > > } else { > printf("Unknown subtest\n"); > -- > 2.17.1 > Reviewed-by: Andrew Jones <drjones@xxxxxxxxxx>