Sanidhya Kashyap <sanidhya.ii...@gmail.com> wrote: > I have provided a qmp interface for getting the list of qdevified devices > that have been registered with SaveVMHandlers. > > Signed-off-by: Sanidhya Kashyap <sanidhya.ii...@gmail.com> > --- > qapi-schema.json | 22 ++++++++++++++++++++++ > qmp-commands.hx | 25 +++++++++++++++++++++++++ > savevm.c | 34 ++++++++++++++++++++++++++++++++++ > 3 files changed, 81 insertions(+) > > diff --git a/qapi-schema.json b/qapi-schema.json > index b11aad2..996e6b5 100644 > --- a/qapi-schema.json > +++ b/qapi-schema.json > @@ -3480,3 +3480,25 @@ > # Since: 2.1 > ## > { 'command': 'rtc-reset-reinjection' } > + > +## > +# @VMstatesQdevDevices > +# > +# list of qdevified devices that are registered with SaveStateEntry > +# > +# @device: list of qdevified device names
Should we use qdev on the name? Or just list of devices? My understanding is that all devices are on this list, no? > +# > +# Since 2.2 > +## > +{ 'type': 'VMStatesQdevDevices', > + 'data': { 'device': ['str'] } } > + > +## > +# @query-qdev-devices > +# > +# returns the VMStatesQdevDevices that have the associated value > +# > +# Since 2.2 > +## > +{ 'command': 'query-qdev-devices', > + 'returns': 'VMStatesQdevDevices' } > diff --git a/qmp-commands.hx b/qmp-commands.hx > index 4be4765..2e20032 100644 > --- a/qmp-commands.hx > +++ b/qmp-commands.hx > @@ -3755,3 +3755,28 @@ Example: > <- { "return": {} } > > EQMP > + > + { > + .name = "query-qdev-devices", > + .args_type = "", > + .mhandler.cmd_new = qmp_marshal_input_query_qdev_devices, > + }, > + > +SQMP > +query-qdev-devices > +------------------ > + > +Shows registered Qdevified devices > + > + > +Example (1): > + > +-> { "execute": "query-qdev-devices" } > +<- { "return": [ > + { > + "devices": [ "kvm-tpr-opt", "piix4_pm" ] Once here, can we change this to also include the device version? i.e. something like: "devices": [ [ "device": [ "name": "kvm-tpr-opt", "version", 15]]], ...] Or somesuch? > + } > + ] > + } > + > +EQMP > diff --git a/savevm.c b/savevm.c > index 0255fa0..7c1600a 100644 > --- a/savevm.c > +++ b/savevm.c > @@ -1167,6 +1167,40 @@ void do_savevm(Monitor *mon, const QDict *qdict) > } > } > > +static strList *create_qdev_list(const char *name, strList *list) > +{ > + strList *temp_list; > + int len; > + > + if (!list) { > + list = g_malloc0(sizeof(strList)); > + len = strlen(name); > + list->value = g_malloc0(sizeof(char)*(len+1)); > + strcpy(list->value, name); > + list->next = NULL; > + return list; > + } > + temp_list = g_malloc0(sizeof(strList)); > + len = strlen(name); > + temp_list->value = g_malloc0(sizeof(char)*(len+1)); > + strcpy(temp_list->value, name); > + temp_list->next = list; > + list = temp_list; > + return list; > +} > + > +VMStatesQdevDevices *qmp_query_qdev_devices(Error **errp) > +{ > + VMStatesQdevResetEntry *qre; > + VMStatesQdevDevices *qdev_devices = > g_malloc0(sizeof(VMStatesQdevDevices)); > + > + QTAILQ_FOREACH(qre, &vmstate_reset_handlers, entry) { > + qdev_devices->device = create_qdev_list(qre->device_name, > + qdev_devices->device); > + } > + return qdev_devices; > +} > + > void qmp_xen_save_devices_state(const char *filename, Error **errp) > { > QEMUFile *f;