qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PULL v2 2/9] well-defined listing order for machine ty


From: Laszlo Ersek
Subject: Re: [Qemu-devel] [PULL v2 2/9] well-defined listing order for machine types
Date: Mon, 03 Nov 2014 14:04:25 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.2.0

On 10/22/14 10:18, Michael S. Tsirkin wrote:
> From: Laszlo Ersek <address@hidden>
> 
> Commit 261747f1 ("vl: Use MachineClass instead of global QEMUMachine
> list") broke the ordering of the machine types in the user-visible output
> of
> 
>   qemu-system-XXXX -M \?
> 
> This occurred because registration was rebased from a manually maintained
> linked list to GLib hash tables:
> 
>   qemu_register_machine()
>     type_register()
>       type_register_internal()
>         type_table_add()
>           g_hash_table_insert()
> 
> and because the listing was rebased accordingly, from the traversal of the
> list to the traversal of the hash table (rendered as an ad-hoc list):
> 
>   machine_parse()
>     object_class_get_list(TYPE_MACHINE)
>       object_class_foreach()
>         g_hash_table_foreach()
> 
> The current order is a "random" one, for practical purposes, which is
> annoying for users.
> 
> Introduce new members QEMUMachine.family and MachineClass.family, allowing
> machine types to be "clustered". Introduce a comparator function that
> establishes a total ordering between machine types, ordering machine types
> in the same family next to each other. In machine_parse(), list the
> supported machine types sorted with the comparator function.
> 
> The comparator function:
> - sorts whole families before standalone machine types,
> - sorts whole families between each other in alphabetically increasing
>   order,
> - sorts machine types inside the same family in alphabetically decreasing
>   order,
> - sorts standalone machine types between each other in alphabetically
>   increasing order.
> 
> After this patch, all machine types are considered standalone, and
> accordingly, the output is alphabetically ascending. This will be refined
> in the following patches.
> 
> Effects on the x86_64 output:
> 
> Before:
> 
>> Supported machines are:
>> pc-0.13              Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-2.0        Standard PC (i440FX + PIIX, 1996)
>> pc-1.0               Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-2.1        Standard PC (i440FX + PIIX, 1996)
>> pc-q35-1.7           Standard PC (Q35 + ICH9, 2009)
>> pc-1.1               Standard PC (i440FX + PIIX, 1996)
>> pc-0.14              Standard PC (i440FX + PIIX, 1996)
>> pc-q35-2.0           Standard PC (Q35 + ICH9, 2009)
>> pc-i440fx-1.4        Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-1.5        Standard PC (i440FX + PIIX, 1996)
>> pc-0.15              Standard PC (i440FX + PIIX, 1996)
>> pc-q35-1.4           Standard PC (Q35 + ICH9, 2009)
>> isapc                ISA-only PC
>> pc                   Standard PC (i440FX + PIIX, 1996) (alias of 
>> pc-i440fx-2.2)
>> pc-i440fx-2.2        Standard PC (i440FX + PIIX, 1996) (default)
>> pc-1.2               Standard PC (i440FX + PIIX, 1996)
>> pc-0.10              Standard PC (i440FX + PIIX, 1996)
>> pc-0.11              Standard PC (i440FX + PIIX, 1996)
>> pc-q35-2.1           Standard PC (Q35 + ICH9, 2009)
>> q35                  Standard PC (Q35 + ICH9, 2009) (alias of pc-q35-2.2)
>> pc-q35-2.2           Standard PC (Q35 + ICH9, 2009)
>> pc-i440fx-1.6        Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-1.7        Standard PC (i440FX + PIIX, 1996)
>> none                 empty machine
>> pc-q35-1.5           Standard PC (Q35 + ICH9, 2009)
>> pc-q35-1.6           Standard PC (Q35 + ICH9, 2009)
>> pc-0.12              Standard PC (i440FX + PIIX, 1996)
>> pc-1.3               Standard PC (i440FX + PIIX, 1996)
> 
> After:
> 
>> Supported machines are:
>> isapc                ISA-only PC
>> none                 empty machine
>> pc-0.10              Standard PC (i440FX + PIIX, 1996)
>> pc-0.11              Standard PC (i440FX + PIIX, 1996)
>> pc-0.12              Standard PC (i440FX + PIIX, 1996)
>> pc-0.13              Standard PC (i440FX + PIIX, 1996)
>> pc-0.14              Standard PC (i440FX + PIIX, 1996)
>> pc-0.15              Standard PC (i440FX + PIIX, 1996)
>> pc-1.0               Standard PC (i440FX + PIIX, 1996)
>> pc-1.1               Standard PC (i440FX + PIIX, 1996)
>> pc-1.2               Standard PC (i440FX + PIIX, 1996)
>> pc-1.3               Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-1.4        Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-1.5        Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-1.6        Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-1.7        Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-2.0        Standard PC (i440FX + PIIX, 1996)
>> pc-i440fx-2.1        Standard PC (i440FX + PIIX, 1996)
>> pc                   Standard PC (i440FX + PIIX, 1996) (alias of 
>> pc-i440fx-2.2)
>> pc-i440fx-2.2        Standard PC (i440FX + PIIX, 1996) (default)
>> pc-q35-1.4           Standard PC (Q35 + ICH9, 2009)
>> pc-q35-1.5           Standard PC (Q35 + ICH9, 2009)
>> pc-q35-1.6           Standard PC (Q35 + ICH9, 2009)
>> pc-q35-1.7           Standard PC (Q35 + ICH9, 2009)
>> pc-q35-2.0           Standard PC (Q35 + ICH9, 2009)
>> pc-q35-2.1           Standard PC (Q35 + ICH9, 2009)
>> q35                  Standard PC (Q35 + ICH9, 2009) (alias of pc-q35-2.2)
>> pc-q35-2.2           Standard PC (Q35 + ICH9, 2009)
> 
> Effects on the aarch64 output:
> 
> Before:
> 
>> Supported machines are:
>> lm3s811evb           Stellaris LM3S811EVB
>> canon-a1100          Canon PowerShot A1100 IS
>> vexpress-a15         ARM Versatile Express for Cortex-A15
>> vexpress-a9          ARM Versatile Express for Cortex-A9
>> xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9
>> connex               Gumstix Connex (PXA255)
>> n800                 Nokia N800 tablet aka. RX-34 (OMAP2420)
>> lm3s6965evb          Stellaris LM3S6965EVB
>> versatileab          ARM Versatile/AB (ARM926EJ-S)
>> borzoi               Borzoi PDA (PXA270)
>> tosa                 Tosa PDA (PXA255)
>> cheetah              Palm Tungsten|E aka. Cheetah PDA (OMAP310)
>> midway               Calxeda Midway (ECX-2000)
>> mainstone            Mainstone II (PXA27x)
>> n810                 Nokia N810 tablet aka. RX-44 (OMAP2420)
>> terrier              Terrier PDA (PXA270)
>> highbank             Calxeda Highbank (ECX-1000)
>> cubieboard           cubietech cubieboard
>> sx1-v1               Siemens SX1 (OMAP310) V1
>> sx1                  Siemens SX1 (OMAP310) V2
>> realview-eb-mpcore   ARM RealView Emulation Baseboard (ARM11MPCore)
>> kzm                  ARM KZM Emulation Baseboard (ARM1136)
>> akita                Akita PDA (PXA270)
>> z2                   Zipit Z2 (PXA27x)
>> musicpal             Marvell 88w8618 / MusicPal (ARM926EJ-S)
>> realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8
>> versatilepb          ARM Versatile/PB (ARM926EJ-S)
>> realview-eb          ARM RealView Emulation Baseboard (ARM926EJ-S)
>> realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9
>> spitz                Spitz PDA (PXA270)
>> none                 empty machine
>> virt                 ARM Virtual Machine
>> collie               Collie PDA (SA-1110)
>> smdkc210             Samsung SMDKC210 board (Exynos4210)
>> verdex               Gumstix Verdex (PXA270)
>> nuri                 Samsung NURI board (Exynos4210)
>> integratorcp         ARM Integrator/CP (ARM926EJ-S)
> 
> After:
> 
>> Supported machines are:
>> akita                Akita PDA (PXA270)
>> borzoi               Borzoi PDA (PXA270)
>> canon-a1100          Canon PowerShot A1100 IS
>> cheetah              Palm Tungsten|E aka. Cheetah PDA (OMAP310)
>> collie               Collie PDA (SA-1110)
>> connex               Gumstix Connex (PXA255)
>> cubieboard           cubietech cubieboard
>> highbank             Calxeda Highbank (ECX-1000)
>> integratorcp         ARM Integrator/CP (ARM926EJ-S)
>> kzm                  ARM KZM Emulation Baseboard (ARM1136)
>> lm3s6965evb          Stellaris LM3S6965EVB
>> lm3s811evb           Stellaris LM3S811EVB
>> mainstone            Mainstone II (PXA27x)
>> midway               Calxeda Midway (ECX-2000)
>> musicpal             Marvell 88w8618 / MusicPal (ARM926EJ-S)
>> n800                 Nokia N800 tablet aka. RX-34 (OMAP2420)
>> n810                 Nokia N810 tablet aka. RX-44 (OMAP2420)
>> none                 empty machine
>> nuri                 Samsung NURI board (Exynos4210)
>> realview-eb          ARM RealView Emulation Baseboard (ARM926EJ-S)
>> realview-eb-mpcore   ARM RealView Emulation Baseboard (ARM11MPCore)
>> realview-pb-a8       ARM RealView Platform Baseboard for Cortex-A8
>> realview-pbx-a9      ARM RealView Platform Baseboard Explore for Cortex-A9
>> smdkc210             Samsung SMDKC210 board (Exynos4210)
>> spitz                Spitz PDA (PXA270)
>> sx1                  Siemens SX1 (OMAP310) V2
>> sx1-v1               Siemens SX1 (OMAP310) V1
>> terrier              Terrier PDA (PXA270)
>> tosa                 Tosa PDA (PXA255)
>> verdex               Gumstix Verdex (PXA270)
>> versatileab          ARM Versatile/AB (ARM926EJ-S)
>> versatilepb          ARM Versatile/PB (ARM926EJ-S)
>> vexpress-a15         ARM Versatile Express for Cortex-A15
>> vexpress-a9          ARM Versatile Express for Cortex-A9
>> virt                 ARM Virtual Machine
>> xilinx-zynq-a9       Xilinx Zynq Platform Baseboard for Cortex-A9
>> z2                   Zipit Z2 (PXA27x)
> 
> RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=1145042
> Signed-off-by: Laszlo Ersek <address@hidden>
> Reviewed-by: Michael S. Tsirkin <address@hidden>
> Signed-off-by: Michael S. Tsirkin <address@hidden>
> Reviewed-by: Paolo Bonzini <address@hidden>
> Reviewed-by: Marcel Apfelbaum <address@hidden>
> Acked-by: David Gibson <address@hidden>
> ---
>  include/hw/boards.h |  2 ++
>  hw/i386/pc.c        |  1 +
>  vl.c                | 38 +++++++++++++++++++++++++++++++++++++-
>  3 files changed, 40 insertions(+), 1 deletion(-)
> 
> diff --git a/include/hw/boards.h b/include/hw/boards.h
> index e07c03f..4429a1e 100644
> --- a/include/hw/boards.h
> +++ b/include/hw/boards.h
> @@ -19,6 +19,7 @@ typedef void QEMUMachineHotAddCPUFunc(const int64_t id, 
> Error **errp);
>  typedef int QEMUMachineGetKvmtypeFunc(const char *arg);
>  
>  struct QEMUMachine {
> +    const char *family; /* NULL iff @name identifies a standalone machtype */
>      const char *name;
>      const char *alias;
>      const char *desc;
> @@ -76,6 +77,7 @@ struct MachineClass {
>      ObjectClass parent_class;
>      /*< public >*/
>  
> +    const char *family; /* NULL iff @name identifies a standalone machtype */
>      const char *name;
>      const char *alias;
>      const char *desc;
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index d045e8b..21beb72 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -1516,6 +1516,7 @@ static void pc_generic_machine_class_init(ObjectClass 
> *oc, void *data)
>      MachineClass *mc = MACHINE_CLASS(oc);
>      QEMUMachine *qm = data;
>  
> +    mc->family = qm->family;
>      mc->name = qm->name;
>      mc->alias = qm->alias;
>      mc->desc = qm->desc;
> diff --git a/vl.c b/vl.c
> index aee73e1..a518f84 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -1460,6 +1460,7 @@ static void machine_class_init(ObjectClass *oc, void 
> *data)
>      MachineClass *mc = MACHINE_CLASS(oc);
>      QEMUMachine *qm = data;
>  
> +    mc->family = qm->family;
>      mc->name = qm->name;
>      mc->alias = qm->alias;
>      mc->desc = qm->desc;
> @@ -2534,7 +2535,41 @@ static int debugcon_parse(const char *devname)
>      return 0;
>  }
>  
> -static MachineClass *machine_parse(const char *name)
> +static gint machine_class_cmp(gconstpointer a, gconstpointer b)
> +{
> +    const MachineClass *mc1 = a, *mc2 = b;
> +    int res;
> +
> +    if (mc1->family == NULL) {
> +        if (mc2->family == NULL) {
> +            /* Compare standalone machine types against each other; they sort
> +             * in increasing order.
> +             */
> +            return strcmp(object_class_get_name(OBJECT_CLASS(mc1)),
> +                          object_class_get_name(OBJECT_CLASS(mc2)));
> +        }
> +
> +        /* Standalone machine types sort after families. */
> +        return 1;
> +    }
> +
> +    if (mc2->family == NULL) {
> +        /* Families sort before standalone machine types. */
> +        return -1;
> +    }
> +
> +    /* Families sort between each other alphabetically increasingly. */
> +    res = strcmp(mc1->family, mc2->family);
> +    if (res != 0) {
> +        return res;
> +    }
> +
> +    /* Within the same family, machine types sort in decreasing order. */
> +    return strcmp(object_class_get_name(OBJECT_CLASS(mc2)),
> +                  object_class_get_name(OBJECT_CLASS(mc1)));
> +}
> +
> + static MachineClass *machine_parse(const char *name)
>  {
>      MachineClass *mc = NULL;
>      GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
> @@ -2550,6 +2585,7 @@ static MachineClass *machine_parse(const char *name)
>          error_printf("Use -machine help to list supported machines!\n");
>      } else {
>          printf("Supported machines are:\n");
> +        machines = g_slist_sort(machines, machine_class_cmp);
>          for (el = machines; el; el = el->next) {
>              MachineClass *mc = el->data;
>              if (mc->alias) {
> 

May I ask about the fate of this PULL request (in particular I care
about this patch, and the next one)?

Thank you,
Laszlo



reply via email to

[Prev in Thread] Current Thread [Next in Thread]