qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH 1/6] accel: Introduce 'query-accels' QMP command


From: Markus Armbruster
Subject: Re: [PATCH 1/6] accel: Introduce 'query-accels' QMP command
Date: Tue, 16 Mar 2021 07:51:18 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux)

Eric Blake <eblake@redhat.com> writes:

> On 3/11/21 5:11 PM, Philippe Mathieu-Daudé wrote:
[...]
>> diff --git a/accel/accel-qmp.c b/accel/accel-qmp.c
>> new file mode 100644
>> index 00000000000..f16e49b8956
>> --- /dev/null
>> +++ b/accel/accel-qmp.c
>> @@ -0,0 +1,47 @@
>> +/*
>> + * QEMU accelerators, QMP commands
>> + *
>> + * Copyright (c) 2021 Red Hat Inc.
>> + *
>> + * SPDX-License-Identifier: GPL-2.0-or-later
>> + */
>> +
>> +#include "qemu/osdep.h"
>> +#include "qapi/qapi-commands-machine.h"
>> +
>> +static const Accelerator accel_list[] = {
>> +    ACCELERATOR_QTEST,
>> +#ifdef CONFIG_TCG
>> +    ACCELERATOR_TCG,
>> +#endif
>> +#ifdef CONFIG_KVM
>> +    ACCELERATOR_KVM,
>> +#endif
>
> ...would it be worth compiling the enum to only list enum values that
> were actually compiled in?  That would change it to:
>
> { 'enum': 'Accelerator',
>   'data': [ 'qtest',
>             { 'name': 'tcg', 'if': 'defined(CONFIG_TCG)' },
> ...

Makes introspection more useful.  Management applications can get the
information the list of compiled-in accelerators from query-qmp-schema.
They don't have to be taught to use query-accels.

In fact, query-accels becomes useless except as a tool to force
visibility of Accelerator in query-qmp-schema.  We wouldn't have to
force if we had CLI introspection that shows the type of -accel's
parameter @accel.  Adding a query command is a common work-around for
our anemic CLI introspection capabilities.

The query command could be made more useful than introspection if it
reflected run time state, i.e. it showed an accelerator only when the
host system actually supports it.  Can't say how practical that would
be.

>>
>> +AcceleratorInfoList *qmp_query_accels(Error **errp)
>> +{
>> +    AcceleratorInfoList *list = NULL, **tail = &list;
>> +
>> +    for (unsigned i = 0; i < ARRAY_SIZE(accel_list); i++) {
>> +        AcceleratorInfo *info = g_new0(AcceleratorInfo, 1);
>> +
>> +        info->name = accel_list[i];
>> +
>> +        QAPI_LIST_APPEND(tail, info);
>> +    }
>> +
>> +    return list;
>> +}

You could then use something like

        for (accel = 0; accel < ACCELERATOR__MAX; accel++) {
            AcceleratorInfo *info = g_new0(AcceleratorInfo, 1);

            info->name = Accelerator_str(accel);

            QAPI_LIST_APPEND(tail, info);
        }




reply via email to

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