From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:41814) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XC6nG-0004N0-6K for qemu-devel@nongnu.org; Tue, 29 Jul 2014 08:46:21 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XC6n5-00033i-N0 for qemu-devel@nongnu.org; Tue, 29 Jul 2014 08:46:14 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45983) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XC6n5-00033Z-GF for qemu-devel@nongnu.org; Tue, 29 Jul 2014 08:46:03 -0400 From: Juan Quintela In-Reply-To: <1406302776-2306-4-git-send-email-sanidhya.iiith@gmail.com> (Sanidhya Kashyap's message of "Fri, 25 Jul 2014 21:09:27 +0530") References: <1406302776-2306-1-git-send-email-sanidhya.iiith@gmail.com> <1406302776-2306-4-git-send-email-sanidhya.iiith@gmail.com> Date: Tue, 29 Jul 2014 14:45:59 +0200 Message-ID: <87ha20tjso.fsf@troll.troll> MIME-Version: 1.0 Content-Type: text/plain Subject: Re: [Qemu-devel] [PATCH RFC v2 03/12] VMState test: query command to extract the qdevified device names Reply-To: quintela@redhat.com List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Sanidhya Kashyap Cc: qemu list , "Dr. David Alan Gilbert" Sanidhya Kashyap 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 > --- > 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;