On 2026/07/20 07:24 PM, Pierrick Bouvier wrote: > The existing compare function only make sure that we list cpus with PVR > order. However, we never compare cpu names. > As a result, while cpus are grouped per PVR, the order within a group is > non deterministic. Depending on QOM type initialization order, we get > different results for -cpu help. > > For instance, previous output could be: > Available CPUs: > 755_v1.0 PVR 00083100 > 745_v1.0 PVR 00083100 > 755_v1.1 PVR 00083101 > 745_v1.1 PVR 00083101 > > While a sorted output should be: > Available CPUs: > 745_v1.0 PVR 00083100 > 755_v1.0 PVR 00083100 > 745_v1.1 PVR 00083101 > 755_v1.1 PVR 00083101 > > Fix it by comparing cpu names to have a stable result.
Verified the before/after output of `qemu-system-ppc64 -cpu help`. The patch correctly stabilises ordering in all PVR-collision groups. No regressions: identical CPU set, ordering only. Reviewed-by: Amit Machhiwal <[email protected]> Tested-by: Amit Machhiwal <[email protected]> Minor nit: subject line has a typo ("determnistic" should be "deterministic"). Thanks, Amit > This allows us to record and compare various command line results across > versions to make sure we didn't break anything while working on > single-binary. > > Signed-off-by: Pierrick Bouvier <[email protected]> > --- > target/ppc/cpu_init.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c > index f404c7e549d..3443dbeeb01 100644 > --- a/target/ppc/cpu_init.c > +++ b/target/ppc/cpu_init.c > @@ -7130,7 +7130,7 @@ static gint ppc_cpu_list_compare(gconstpointer a, > gconstpointer b, gpointer d) > } else if (pcc_a->pvr > pcc_b->pvr) { > return 1; > } else { > - return 0; > + return strcmp(name_a, name_b); > } > } > } > -- > 2.43.0 > >
