From: Jonah Palmer <jonah.palmer@oracle.com>
To: qemu-devel@nongnu.org
Cc: mst@redhat.com, qemu_oss@crudebyte.com, kraxel@redhat.com,
si-wei.liu@oracle.com, joao.m.martins@oracle.com,
eblake@redhat.com, qemu-block@nongnu.org, david@redhat.com,
armbru@redhat.com, arei.gonglei@huawei.com,
marcandre.lureau@redhat.com, lvivier@redhat.com,
thuth@redhat.com, michael.roth@amd.com, groug@kaod.org,
dgilbert@redhat.com, eric.auger@redhat.com, stefanha@redhat.com,
boris.ostrovsky@oracle.com, kwolf@redhat.com,
mathieu.poirier@linaro.org, raphael.norwitz@nutanix.com,
pbonzini@redhat.com
Subject: [PATCH v8 3/8] qmp: add QMP command x-debug-query-virtio
Date: Wed, 27 Oct 2021 07:41:44 -0400 [thread overview]
Message-ID: <1635334909-31614-4-git-send-email-jonah.palmer@oracle.com> (raw)
In-Reply-To: <1635334909-31614-1-git-send-email-jonah.palmer@oracle.com>
From: Laurent Vivier <lvivier@redhat.com>
This new command lists all the instances of VirtIODevice with
their QOM paths and virtio type/name.
Signed-off-by: Jonah Palmer <jonah.palmer@oracle.com>
---
hw/virtio/meson.build | 2 ++
hw/virtio/virtio-stub.c | 14 ++++++++++
hw/virtio/virtio.c | 27 +++++++++++++++++++
include/hw/virtio/virtio.h | 1 +
qapi/meson.build | 1 +
qapi/qapi-schema.json | 1 +
qapi/virtio.json | 67 ++++++++++++++++++++++++++++++++++++++++++++++
tests/qtest/qmp-cmd-test.c | 1 +
8 files changed, 114 insertions(+)
create mode 100644 hw/virtio/virtio-stub.c
create mode 100644 qapi/virtio.json
diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
index 521f7d6..d893f5f 100644
--- a/hw/virtio/meson.build
+++ b/hw/virtio/meson.build
@@ -6,8 +6,10 @@ softmmu_virtio_ss.add(when: 'CONFIG_VHOST', if_false: files('vhost-stub.c'))
softmmu_ss.add_all(when: 'CONFIG_VIRTIO', if_true: softmmu_virtio_ss)
softmmu_ss.add(when: 'CONFIG_VIRTIO', if_false: files('vhost-stub.c'))
+softmmu_ss.add(when: 'CONFIG_VIRTIO', if_false: files('virtio-stub.c'))
softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('vhost-stub.c'))
+softmmu_ss.add(when: 'CONFIG_ALL', if_true: files('virtio-stub.c'))
virtio_ss = ss.source_set()
virtio_ss.add(files('virtio.c'))
diff --git a/hw/virtio/virtio-stub.c b/hw/virtio/virtio-stub.c
new file mode 100644
index 0000000..d4a88f5
--- /dev/null
+++ b/hw/virtio/virtio-stub.c
@@ -0,0 +1,14 @@
+#include "qemu/osdep.h"
+#include "qapi/error.h"
+#include "qapi/qapi-commands-virtio.h"
+
+static void *qmp_virtio_unsupported(Error **errp)
+{
+ error_setg(errp, "Virtio is disabled");
+ return NULL;
+}
+
+VirtioInfoList *qmp_x_debug_query_virtio(Error **errp)
+{
+ return qmp_virtio_unsupported(errp);
+}
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index 7050bd5..ad17be7 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -13,6 +13,8 @@
#include "qemu/osdep.h"
#include "qapi/error.h"
+#include "qapi/qapi-commands-virtio.h"
+#include "qapi/qapi-visit-virtio.h"
#include "cpu.h"
#include "trace.h"
#include "qemu/error-report.h"
@@ -29,6 +31,9 @@
#include "sysemu/runstate.h"
#include "standard-headers/linux/virtio_ids.h"
+/* QAPI list of VirtIODevices */
+static QTAILQ_HEAD(, VirtIODevice) virtio_list;
+
/*
* The alignment to use between consumer and producer parts of vring.
* x86 pagesize again. This is the default, used by transports like PCI
@@ -3709,6 +3714,7 @@ static void virtio_device_realize(DeviceState *dev, Error **errp)
vdev->listener.commit = virtio_memory_listener_commit;
vdev->listener.name = "virtio";
memory_listener_register(&vdev->listener, vdev->dma_as);
+ QTAILQ_INSERT_TAIL(&virtio_list, vdev, next);
}
static void virtio_device_unrealize(DeviceState *dev)
@@ -3723,6 +3729,7 @@ static void virtio_device_unrealize(DeviceState *dev)
vdc->unrealize(dev);
}
+ QTAILQ_REMOVE(&virtio_list, vdev, next);
g_free(vdev->bus_name);
vdev->bus_name = NULL;
}
@@ -3896,6 +3903,8 @@ static void virtio_device_class_init(ObjectClass *klass, void *data)
vdc->stop_ioeventfd = virtio_device_stop_ioeventfd_impl;
vdc->legacy_features |= VIRTIO_LEGACY_FEATURES;
+
+ QTAILQ_INIT(&virtio_list);
}
bool virtio_device_ioeventfd_enabled(VirtIODevice *vdev)
@@ -3906,6 +3915,24 @@ bool virtio_device_ioeventfd_enabled(VirtIODevice *vdev)
return virtio_bus_ioeventfd_enabled(vbus);
}
+VirtioInfoList *qmp_x_debug_query_virtio(Error **errp)
+{
+ VirtioInfoList *list = NULL;
+ VirtioInfoList *node;
+ VirtIODevice *vdev;
+
+ QTAILQ_FOREACH(vdev, &virtio_list, next) {
+ DeviceState *dev = DEVICE(vdev);
+ node = g_new0(VirtioInfoList, 1);
+ node->value = g_new(VirtioInfo, 1);
+ node->value->path = g_strdup(dev->canonical_path);
+ node->value->type = g_strdup(vdev->name);
+ QAPI_LIST_PREPEND(list, node->value);
+ }
+
+ return list;
+}
+
static const TypeInfo virtio_device_info = {
.name = TYPE_VIRTIO_DEVICE,
.parent = TYPE_DEVICE,
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index 105b98c..eceaafc 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -110,6 +110,7 @@ struct VirtIODevice
bool use_guest_notifier_mask;
AddressSpace *dma_as;
QLIST_HEAD(, VirtQueue) *vector_queues;
+ QTAILQ_ENTRY(VirtIODevice) next;
};
struct VirtioDeviceClass {
diff --git a/qapi/meson.build b/qapi/meson.build
index c356a38..df5662e 100644
--- a/qapi/meson.build
+++ b/qapi/meson.build
@@ -45,6 +45,7 @@ qapi_all_modules = [
'sockets',
'trace',
'transaction',
+ 'virtio',
'yank',
]
if have_system
diff --git a/qapi/qapi-schema.json b/qapi/qapi-schema.json
index 4912b97..1512ada 100644
--- a/qapi/qapi-schema.json
+++ b/qapi/qapi-schema.json
@@ -93,3 +93,4 @@
{ 'include': 'audio.json' }
{ 'include': 'acpi.json' }
{ 'include': 'pci.json' }
+{ 'include': 'virtio.json' }
diff --git a/qapi/virtio.json b/qapi/virtio.json
new file mode 100644
index 0000000..4490c2c
--- /dev/null
+++ b/qapi/virtio.json
@@ -0,0 +1,67 @@
+# -*- Mode: Python -*-
+# vim: filetype=python
+#
+
+##
+# = Virtio devices
+##
+
+##
+# @VirtioInfo:
+#
+# Basic information about a given VirtIODevice including the device
+# canonical QOM path as well as the name of the device.
+#
+# @path: VirtIO device canonical QOM path
+#
+# @type: VirtIO device name
+#
+# Since: 6.2
+#
+##
+{ 'struct': 'VirtioInfo',
+ 'data': {
+ 'path': 'str',
+ 'type': 'str'
+ }
+}
+
+##
+# @x-debug-query-virtio:
+#
+# Returns a list of all initalized VirtIO devices
+#
+# Returns: list of gathered @VirtioInfo devices
+#
+# Since: 6.2
+#
+# Example:
+#
+# -> { "execute": "x-debug-query-virtio" }
+# <- { "return": [
+# {
+# "path": "/machine/peripheral-anon/device[4]/virtio-backend",
+# "type": "virtio-input"
+# },
+# {
+# "path": "/machine/peripheral/crypto0/virtio-backend",
+# "type": "virtio-crypto"
+# },
+# {
+# "path": "/machine/peripheral-anon/device[2]/virtio-backend",
+# "type": "virtio-scsi"
+# },
+# {
+# "path": "/machine/peripheral-anon/device[1]/virtio-backend",
+# "type": "virtio-net"
+# },
+# {
+# "path": "/machine/peripheral-anon/device[0]/virtio-backend",
+# "type": "virtio-serial"
+# }
+# ]
+# }
+#
+##
+
+{ 'command': 'x-debug-query-virtio', 'returns': ['VirtioInfo'] }
diff --git a/tests/qtest/qmp-cmd-test.c b/tests/qtest/qmp-cmd-test.c
index 1af2f74..62c6cc4 100644
--- a/tests/qtest/qmp-cmd-test.c
+++ b/tests/qtest/qmp-cmd-test.c
@@ -95,6 +95,7 @@ static bool query_is_ignored(const char *cmd)
"query-gic-capabilities", /* arm */
/* Success depends on target-specific build configuration: */
"query-pci", /* CONFIG_PCI */
+ "x-debug-query-virtio", /* CONFIG_VIRTIO */
/* Success depends on launching SEV guest */
"query-sev-launch-measure",
/* Success depends on Host or Hypervisor SEV support */
--
1.8.3.1
next prev parent reply other threads:[~2021-10-27 11:58 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-27 11:41 [PATCH v8 0/8] hmp,qmp: Add commands to introspect virtio devices Jonah Palmer
2021-10-27 11:41 ` [PATCH v8 1/8] virtio: drop name parameter for virtio_init() Jonah Palmer
2021-10-27 11:41 ` [PATCH v8 2/8] virtio: add vhost support for virtio devices Jonah Palmer
2021-10-27 11:41 ` Jonah Palmer [this message]
2021-11-04 15:15 ` [PATCH v8 3/8] qmp: add QMP command x-debug-query-virtio Markus Armbruster
2021-11-05 8:24 ` Jonah Palmer
2021-10-27 11:41 ` [PATCH v8 4/8] qmp: add QMP command x-debug-virtio-status Jonah Palmer
2021-11-04 15:37 ` Markus Armbruster
2021-11-05 8:36 ` Jonah Palmer
2021-10-27 11:41 ` [PATCH v8 5/8] qmp: decode feature & status bits in virtio-status Jonah Palmer
2021-10-27 11:59 ` David Hildenbrand
2021-10-27 12:18 ` Laurent Vivier
2021-10-28 7:56 ` Jonah Palmer
2021-10-28 7:57 ` David Hildenbrand
2021-10-27 11:41 ` [PATCH v8 6/8] qmp: add QMP commands for virtio/vhost queue-status Jonah Palmer
2021-10-27 11:41 ` [PATCH v8 7/8] qmp: add QMP command x-debug-virtio-queue-element Jonah Palmer
2021-10-27 11:41 ` [PATCH v8 8/8] hmp: add virtio commands Jonah Palmer
2021-11-05 7:23 ` Markus Armbruster
2021-11-05 8:40 ` Jonah Palmer
2021-10-27 11:55 ` [PATCH v8 0/8] hmp, qmp: Add commands to introspect virtio devices Daniel P. Berrangé
2021-10-28 7:54 ` Jonah Palmer
2021-10-28 9:04 ` Dr. David Alan Gilbert
2021-11-05 7:26 ` Markus Armbruster
2021-11-05 8:58 ` Jonah Palmer
2021-11-05 8:50 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1635334909-31614-4-git-send-email-jonah.palmer@oracle.com \
--to=jonah.palmer@oracle.com \
--cc=arei.gonglei@huawei.com \
--cc=armbru@redhat.com \
--cc=boris.ostrovsky@oracle.com \
--cc=david@redhat.com \
--cc=dgilbert@redhat.com \
--cc=eblake@redhat.com \
--cc=eric.auger@redhat.com \
--cc=groug@kaod.org \
--cc=joao.m.martins@oracle.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=lvivier@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=mathieu.poirier@linaro.org \
--cc=michael.roth@amd.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu_oss@crudebyte.com \
--cc=raphael.norwitz@nutanix.com \
--cc=si-wei.liu@oracle.com \
--cc=stefanha@redhat.com \
--cc=thuth@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).