All of lore.kernel.org
 help / color / mirror / Atom feed
From: Markus Armbruster <armbru@redhat.com>
To: Maksim Davydov <davydov-max@yandex-team.ru>
Cc: qemu-devel@nongnu.org,  eduardo@habkost.net,
	marcel.apfelbaum@gmail.com,  philmd@linaro.org,
	 wangyanan55@huawei.com, jsnow@redhat.com,  eblake@redhat.com,
	 pbonzini@redhat.com, berrange@redhat.com,  alxndr@bu.edu,
	 vsementsov@yandex-team.ru, alexander.ivanov@virtuozzo.com,
	 den@virtuozzo.com, michael.labiuk@virtuozzo.com
Subject: Re: [PATCH v8 2/4] qmp: add dump machine type compatibility properties
Date: Mon, 19 Feb 2024 15:10:14 +0100	[thread overview]
Message-ID: <874je4lf3t.fsf@pond.sub.org> (raw)
In-Reply-To: <20240125115610.23697-3-davydov-max@yandex-team.ru> (Maksim Davydov's message of "Thu, 25 Jan 2024 14:56:08 +0300")

Maksim Davydov <davydov-max@yandex-team.ru> writes:

> To control that creating new machine type doesn't affect the previous
> types (their compat_props) and to check complex compat_props inheritance
> we need qmp command to print machine type compatibility properties.
> This patch adds the ability to get list of all the compat_props of the
> corresponding supported machines for their comparison via new optional
> argument of "query-machines" command.

Rationale for the argument, please.  You actually provided it during
review of v6: the additional output is hundreds of KiB.  I then asked
you to explain this briefly in the commit message, with suggested text:
"Since information on compatibility properties can increase the command
output by a factor of 40, add an argument to enable it, default off."

I still wonder whether a separate command would be better than
complicating query-machines.

> Signed-off-by: Maksim Davydov <davydov-max@yandex-team.ru>
> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
> ---
>  hw/core/machine-qmp-cmds.c  | 23 ++++++++++++-
>  qapi/machine.json           | 64 +++++++++++++++++++++++++++++++++++--
>  tests/qtest/fuzz/qos_fuzz.c |  2 +-
>  3 files changed, 85 insertions(+), 4 deletions(-)
>
> diff --git a/hw/core/machine-qmp-cmds.c b/hw/core/machine-qmp-cmds.c
> index 3860a50c3b..a49d0dc362 100644
> --- a/hw/core/machine-qmp-cmds.c
> +++ b/hw/core/machine-qmp-cmds.c
> @@ -66,7 +66,8 @@ CpuInfoFastList *qmp_query_cpus_fast(Error **errp)
>      return head;
>  }
>  
> -MachineInfoList *qmp_query_machines(Error **errp)
> +MachineInfoList *qmp_query_machines(bool has_compat_props, bool compat_props,
> +                                    Error **errp)
>  {
>      GSList *el, *machines = object_class_get_list(TYPE_MACHINE, false);
>      MachineInfoList *mach_list = NULL;
> @@ -98,6 +99,26 @@ MachineInfoList *qmp_query_machines(Error **errp)
>              info->default_ram_id = g_strdup(mc->default_ram_id);
>          }
>  
> +        if (compat_props && mc->compat_props) {
> +            int i;
> +            info->compat_props = NULL;
> +            CompatPropertyList **tail = &(info->compat_props);
> +            info->has_compat_props = true;
> +
> +            for (i = 0; i < mc->compat_props->len; i++) {
> +                GlobalProperty *mt_prop = g_ptr_array_index(mc->compat_props,
> +                                                            i);
> +                CompatProperty *prop;
> +
> +                prop = g_malloc0(sizeof(*prop));
> +                prop->driver = g_strdup(mt_prop->driver);
> +                prop->property = g_strdup(mt_prop->property);
> +                prop->value = g_strdup(mt_prop->value);
> +
> +                QAPI_LIST_APPEND(tail, prop);
> +            }
> +        }
> +
>          QAPI_LIST_PREPEND(mach_list, info);
>      }
>  
> diff --git a/qapi/machine.json b/qapi/machine.json
> index b6d634b30d..15a1d62f42 100644
> --- a/qapi/machine.json
> +++ b/qapi/machine.json
> @@ -135,6 +135,29 @@
>  ##
>  { 'command': 'query-cpus-fast', 'returns': [ 'CpuInfoFast' ] }
>  
> +##
> +# @CompatProperty:
> +#
> +# Machine type compatibility property that uses in machine
> +# definitions to specify default values.  It's based on representaion
> +# of properties in QEMU and created for machine type comparing
> +# (see scripts/compare-machine-types.py)

Suggest

   # Property default values specific to a machine type, for use by
   # scripts/compare-machine-types.

> +#
> +# @driver: name of the driver which default value of certain property
> +#     is changed in the machine type

Let's name this @qom-type.  Yes, I know it's called @driver in struct
GlobalProperty, but it has become a QOM type name.  Since object-add
calls it qom-type, so should query-machines.

> +#
> +# @property: property name
> +#
> +# @value: property value that will be assigned as default to
> +#     the driver by machine type

Suggest

   # @qom-type: name of the QOM type to which the default applies
   #
   # @property: name of its property to which the default applies
   #
   # @value: the default value

This is still rather terse.  For instance, it doesn't explain that
machine-specific defaults override the "default" default, and how to
query that "default" default.  It'll do for an experimental interface.

> +#
> +# Since: 9.0
> +##
> +{ 'struct': 'CompatProperty',
> +  'data': { 'driver': 'str',
> +            'property': 'str',
> +            'value': 'str' } }
> +
>  ##
>  # @MachineInfo:
>  #
> @@ -166,6 +189,13 @@
>  #
>  # @acpi: machine type supports ACPI (since 8.0)
>  #
> +# @compat-props: List of the machine type's compatibility properties.
> +#     (since 9.0)

Let's scratch "List of".

Must tell when the member is present.

Taken together:

   # @compat-props: The machine type's compatibility properties.  Only
   #     present when query-machines argument @compat-props is true.
   #     (since 9.0)

> +#
> +# Features:
> +#
> +# @unstable: Member @compat-props is experimental.
> +#
>  # Since: 1.2
>  ##
>  { 'struct': 'MachineInfo',
> @@ -173,18 +203,48 @@
>              '*is-default': 'bool', 'cpu-max': 'int',
>              'hotpluggable-cpus': 'bool',  'numa-mem-supported': 'bool',
>              'deprecated': 'bool', '*default-cpu-type': 'str',
> -            '*default-ram-id': 'str', 'acpi': 'bool' } }
> +            '*default-ram-id': 'str', 'acpi': 'bool',
> +            '*compat-props': { 'type': ['CompatProperty'],
> +                               'features': ['unstable'] } } }
>  
>  ##
>  # @query-machines:
>  #
>  # Return a list of supported machines
>  #
> +# @compat-props: if true return will contain information about
> +#     machine type compatibility properties (since 9.0)

Missing: (default false)

Perhaps

   # @compat-props: if true, also return compatibility properties.
   #     (default false)

> +#
>  # Returns: a list of MachineInfo
>  #
>  # Since: 1.2
> +#
> +# Example:
> +#
> +# -> { "execute": "query-machines", "arguments": { "compat-props": true } }
> +# <- { "return": [
> +#          {
> +#              "hotpluggable-cpus": true,
> +#              "name": "pc-q35-6.2",
> +#              "compat-props": [
> +#                  {
> +#                      "driver": "virtio-mem",
> +#                      "property": "unplugged-inaccessible",
> +#                      "value": "off"
> +#                   }
> +#               ],
> +#               "numa-mem-supported": false,
> +#               "default-cpu-type": "qemu64-x86_64-cpu",
> +#               "cpu-max": 288,
> +#               "deprecated": false,
> +#               "default-ram-id": "pc.ram"
> +#           },
> +#           ...
> +#    }
>  ##
> -{ 'command': 'query-machines', 'returns': ['MachineInfo'] }
> +{ 'command': 'query-machines',
> +  'data': { '*compat-props': 'bool' },

Make that

     'data': { '*compat-props': { 'type': 'bool',
                                  'features': [ 'unstable' ] } },

and add

   # Features:
   #
   # @unstable: Argument @compat-props is experimental.
   #

to the doc comment.

> +  'returns': ['MachineInfo'] }
>  
>  ##
>  # @CurrentMachineParams:
> diff --git a/tests/qtest/fuzz/qos_fuzz.c b/tests/qtest/fuzz/qos_fuzz.c
> index e403d373a0..b71e945c5f 100644
> --- a/tests/qtest/fuzz/qos_fuzz.c
> +++ b/tests/qtest/fuzz/qos_fuzz.c
> @@ -46,7 +46,7 @@ static void qos_set_machines_devices_available(void)
>      MachineInfoList *mach_info;
>      ObjectTypeInfoList *type_info;
>  
> -    mach_info = qmp_query_machines(&error_abort);
> +    mach_info = qmp_query_machines(false, false, &error_abort);
>      machines_apply_to_node(mach_info);
>      qapi_free_MachineInfoList(mach_info);



  reply	other threads:[~2024-02-19 14:11 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-25 11:56 [PATCH v8 0/4] compare machine type compat_props Maksim Davydov
2024-01-25 11:56 ` [PATCH v8 1/4] qom: qom-list-properties: add default value Maksim Davydov
2024-01-25 11:56 ` [PATCH v8 2/4] qmp: add dump machine type compatibility properties Maksim Davydov
2024-02-19 14:10   ` Markus Armbruster [this message]
2024-01-25 11:56 ` [PATCH v8 3/4] python/qemu/machine: add method to retrieve QEMUMachine::binary field Maksim Davydov
2024-01-25 11:56 ` [PATCH v8 4/4] scripts: add script to compare compatibility properties Maksim Davydov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874je4lf3t.fsf@pond.sub.org \
    --to=armbru@redhat.com \
    --cc=alexander.ivanov@virtuozzo.com \
    --cc=alxndr@bu.edu \
    --cc=berrange@redhat.com \
    --cc=davydov-max@yandex-team.ru \
    --cc=den@virtuozzo.com \
    --cc=eblake@redhat.com \
    --cc=eduardo@habkost.net \
    --cc=jsnow@redhat.com \
    --cc=marcel.apfelbaum@gmail.com \
    --cc=michael.labiuk@virtuozzo.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=vsementsov@yandex-team.ru \
    --cc=wangyanan55@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.