From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:59070) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XAhbo-00005s-7U for qemu-devel@nongnu.org; Fri, 25 Jul 2014 11:40:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XAhbf-0001LL-6j for qemu-devel@nongnu.org; Fri, 25 Jul 2014 11:40:36 -0400 Received: from mail-pa0-x234.google.com ([2607:f8b0:400e:c03::234]:55479) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XAhbe-0001KI-W0 for qemu-devel@nongnu.org; Fri, 25 Jul 2014 11:40:27 -0400 Received: by mail-pa0-f52.google.com with SMTP id bj1so6299228pad.11 for ; Fri, 25 Jul 2014 08:40:25 -0700 (PDT) From: Sanidhya Kashyap Date: Fri, 25 Jul 2014 21:09:27 +0530 Message-Id: <1406302776-2306-4-git-send-email-sanidhya.iiith@gmail.com> In-Reply-To: <1406302776-2306-1-git-send-email-sanidhya.iiith@gmail.com> References: <1406302776-2306-1-git-send-email-sanidhya.iiith@gmail.com> Subject: [Qemu-devel] [PATCH RFC v2 03/12] VMState test: query command to extract the qdevified device names List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu list Cc: Sanidhya Kashyap , "Dr. David Alan Gilbert" , Juan Quintela 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 +# +# 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" ] + } + ] + } + +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; -- 1.9.3