[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v8 2/4] qmp: add dump machine type compatibility properties
From: |
Markus Armbruster |
Subject: |
Re: [PATCH v8 2/4] qmp: add dump machine type compatibility properties |
Date: |
Mon, 19 Feb 2024 15:10:14 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
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);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH v8 2/4] qmp: add dump machine type compatibility properties,
Markus Armbruster <=