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
> 
> 

Reply via email to