Message ID | 20210316172449.3148634-2-philmd@redhat.com |
---|---|
State | New |
Headers | show |
Series | qtests: Check accelerator available at runtime via QMP 'query-accels' | expand |
On 3/16/21 12:24 PM, Philippe Mathieu-Daudé wrote: > Introduce the 'query-accels' QMP command which returns a list > of built-in accelerator names. > > - Accelerator is a QAPI enum of all existing accelerators, > > - AcceleratorInfo is a QAPI structure providing accelerator > specific information. Currently the common structure base > provides the name of the accelerator, while the specific > part is empty, but each accelerator can expand it. > > Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> > --- > Since v1: 'type' -> 'name' in comments > --- > qapi/machine.json | 55 +++++++++++++++++++++++++++++++++++++++++++++++ > accel/accel-qmp.c | 49 +++++++++++++++++++++++++++++++++++++++++ > accel/meson.build | 2 +- > 3 files changed, 105 insertions(+), 1 deletion(-) > create mode 100644 accel/accel-qmp.c > > diff --git a/qapi/machine.json b/qapi/machine.json > index 330189efe3d..610252fc25c 100644 > --- a/qapi/machine.json > +++ b/qapi/machine.json > @@ -1471,3 +1471,58 @@ > ## > { 'event': 'MEM_UNPLUG_ERROR', > 'data': { 'device': 'str', 'msg': 'str' } } > + > +## > +# @Accelerator: > +# > +# An enumeration of accelerator names. > +# > +# Since: 6.0 > +## > +{ 'enum': 'Accelerator', > + 'data': [ { 'name': 'qtest' }, > + { 'name': 'tcg' }, > + { 'name': 'kvm' }, > + { 'name': 'hax' }, > + { 'name': 'hvf' }, > + { 'name': 'whpx' }, > + { 'name': 'xen' } ] } Shorter, but semantically equivalent: { 'enum': 'Accelerator', 'data': [ 'qtest', 'tcg', ... ] } I'd mention in the commit message body that we can't make the enum values or union branches conditional because of target-specific poisoning. With that, Reviewed-by: Eric Blake <eblake@redhat.com> If we're trying to get it into 6.0, it is a new feature, and so we should get it in a pull request before feature freeze today. Otherwise we'll have to s/6.0/6.1/
On 3/16/21 6:29 PM, Eric Blake wrote: > On 3/16/21 12:24 PM, Philippe Mathieu-Daudé wrote: >> Introduce the 'query-accels' QMP command which returns a list >> of built-in accelerator names. >> >> - Accelerator is a QAPI enum of all existing accelerators, >> >> - AcceleratorInfo is a QAPI structure providing accelerator >> specific information. Currently the common structure base >> provides the name of the accelerator, while the specific >> part is empty, but each accelerator can expand it. >> > >> Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> >> --- >> Since v1: 'type' -> 'name' in comments >> --- >> qapi/machine.json | 55 +++++++++++++++++++++++++++++++++++++++++++++++ >> accel/accel-qmp.c | 49 +++++++++++++++++++++++++++++++++++++++++ >> accel/meson.build | 2 +- >> 3 files changed, 105 insertions(+), 1 deletion(-) >> create mode 100644 accel/accel-qmp.c >> >> diff --git a/qapi/machine.json b/qapi/machine.json >> index 330189efe3d..610252fc25c 100644 >> --- a/qapi/machine.json >> +++ b/qapi/machine.json >> @@ -1471,3 +1471,58 @@ >> ## >> { 'event': 'MEM_UNPLUG_ERROR', >> 'data': { 'device': 'str', 'msg': 'str' } } >> + >> +## >> +# @Accelerator: >> +# >> +# An enumeration of accelerator names. >> +# >> +# Since: 6.0 >> +## >> +{ 'enum': 'Accelerator', >> + 'data': [ { 'name': 'qtest' }, >> + { 'name': 'tcg' }, >> + { 'name': 'kvm' }, >> + { 'name': 'hax' }, >> + { 'name': 'hvf' }, >> + { 'name': 'whpx' }, >> + { 'name': 'xen' } ] } > > Shorter, but semantically equivalent: > { 'enum': 'Accelerator', 'data': [ 'qtest', 'tcg', ... ] } > > I'd mention in the commit message body that we can't make the enum > values or union branches conditional because of target-specific > poisoning. Good idea. > With that, > > Reviewed-by: Eric Blake <eblake@redhat.com> > > If we're trying to get it into 6.0, it is a new feature, and so we > should get it in a pull request before feature freeze today. Otherwise > we'll have to s/6.0/6.1/ There is no rush for this, I posted it to scratch it from my today's TODO list and be able to focus on the next task. I'll wait for other review and repost with 6.1 (except if someone judge it is useful to get this for 6.0). Thanks for your review! Phil.
diff --git a/qapi/machine.json b/qapi/machine.json index 330189efe3d..610252fc25c 100644 --- a/qapi/machine.json +++ b/qapi/machine.json @@ -1471,3 +1471,58 @@ ## { 'event': 'MEM_UNPLUG_ERROR', 'data': { 'device': 'str', 'msg': 'str' } } + +## +# @Accelerator: +# +# An enumeration of accelerator names. +# +# Since: 6.0 +## +{ 'enum': 'Accelerator', + 'data': [ { 'name': 'qtest' }, + { 'name': 'tcg' }, + { 'name': 'kvm' }, + { 'name': 'hax' }, + { 'name': 'hvf' }, + { 'name': 'whpx' }, + { 'name': 'xen' } ] } + +## +# @AcceleratorInfo: +# +# Accelerator information. +# +# @name: The accelerator name. +# +# Since: 6.0 +## +{ 'union': 'AcceleratorInfo', + 'base': {'name': 'Accelerator'}, + 'discriminator': 'name', + 'data': { } } + +## +# @query-accels: +# +# Get a list of AcceleratorInfo for all built-in accelerators. +# +# Returns: a list of @AcceleratorInfo describing each accelerator. +# +# Since: 6.0 +# +# Example: +# +# -> { "execute": "query-accels" } +# <- { "return": [ +# { +# "name": "qtest" +# }, +# { +# "name": "kvm" +# } +# ] } +# +## +{ 'command': 'query-accels', + 'returns': ['AcceleratorInfo'] } diff --git a/accel/accel-qmp.c b/accel/accel-qmp.c new file mode 100644 index 00000000000..426737b3f9a --- /dev/null +++ b/accel/accel-qmp.c @@ -0,0 +1,49 @@ +/* + * 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 bool accel_builtin_list[ACCELERATOR__MAX] = { + [ACCELERATOR_QTEST] = true, +#ifdef CONFIG_TCG + [ACCELERATOR_TCG] = true, +#endif +#ifdef CONFIG_KVM + [ACCELERATOR_KVM] = true, +#endif +#ifdef CONFIG_HAX + [ACCELERATOR_HAX] = true, +#endif +#ifdef CONFIG_HVF + [ACCELERATOR_HVF] = true, +#endif +#ifdef CONFIG_WHPX + [ACCELERATOR_WHPX] = true, +#endif +#ifdef CONFIG_XEN_BACKEND + [ACCELERATOR_XEN] = true, +#endif +}; + +AcceleratorInfoList *qmp_query_accels(Error **errp) +{ + AcceleratorInfoList *list = NULL, **tail = &list; + + for (Accelerator accel = 0; accel < ACCELERATOR__MAX; accel++) { + if (accel_builtin_list[accel]) { + AcceleratorInfo *info = g_new0(AcceleratorInfo, 1); + + info->name = accel; + + QAPI_LIST_APPEND(tail, info); + } + } + + return list; +} diff --git a/accel/meson.build b/accel/meson.build index b44ba30c864..7a48f6d568d 100644 --- a/accel/meson.build +++ b/accel/meson.build @@ -1,4 +1,4 @@ -specific_ss.add(files('accel-common.c')) +specific_ss.add(files('accel-common.c', 'accel-qmp.c')) softmmu_ss.add(files('accel-softmmu.c')) user_ss.add(files('accel-user.c'))
Introduce the 'query-accels' QMP command which returns a list of built-in accelerator names. - Accelerator is a QAPI enum of all existing accelerators, - AcceleratorInfo is a QAPI structure providing accelerator specific information. Currently the common structure base provides the name of the accelerator, while the specific part is empty, but each accelerator can expand it. - 'query-accels' QMP command returns a list of @AcceleratorInfo For example on a KVM-only build we get: { "execute": "query-accels" } { "return": [ { "name": "qtest" }, { "name": "kvm" } ] } Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- Since v1: 'type' -> 'name' in comments --- qapi/machine.json | 55 +++++++++++++++++++++++++++++++++++++++++++++++ accel/accel-qmp.c | 49 +++++++++++++++++++++++++++++++++++++++++ accel/meson.build | 2 +- 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 accel/accel-qmp.c