qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Manos Pitsidianakis <manos.pitsidianakis@linaro.org>
To: qemu-devel@nongnu.org, Jonah Palmer <jonah.palmer@oracle.com>
Cc: philmd@linaro.org, laurent@vivier.eu, mst@redhat.com,
	boris.ostrovsky@oracle.com, alex.bennee@linaro.org,
	viresh.kumar@linaro.org, armbru@redhat.com, pbonzini@redhat.com,
	berrange@redhat.com, eduardo@habkost.net
Subject: Re: [PATCH v3 1/3] qmp: remove virtio_list, search QOM tree instead
Date: Thu, 03 Aug 2023 19:40:46 +0300	[thread overview]
Message-ID: <ytsdr.hu96pu2zioj@linaro.org> (raw)
In-Reply-To: <20230803145500.2108691-2-jonah.palmer@oracle.com>

On Thu, 03 Aug 2023 17:54, Jonah Palmer <jonah.palmer@oracle.com> wrote:
>-VirtioInfoList *qmp_x_query_virtio(Error **errp)
>+static int query_dev_child(Object *child, void *opaque)
> {
>-    VirtioInfoList *list = NULL;
>-    VirtioInfo *node;
>-    VirtIODevice *vdev;
>+    VirtioInfoList **vdevs = opaque;
>+    Object *dev = object_dynamic_cast(child, TYPE_VIRTIO_DEVICE);
>+    if (dev != NULL && DEVICE(dev)->realized) {
>+        VirtIODevice *vdev = VIRTIO_DEVICE(dev);
>+
>+        VirtioInfo *info = g_new(VirtioInfo, 1);
>+
>+        /* Get canonical path of device */
>+        gchar *path = object_get_canonical_path(dev);

(You can use g_autofree char * here)

>+
>+        info->path = g_strdup(path);
>+        info->name = g_strdup(vdev->name);
>+        QAPI_LIST_PREPEND(*vdevs, info);
> 
>-    QTAILQ_FOREACH(vdev, &virtio_list, next) {
>-        DeviceState *dev = DEVICE(vdev);
>-        Error *err = NULL;
>-        QObject *obj = qmp_qom_get(dev->canonical_path, "realized", &err);
>-
>-        if (err == NULL) {
>-            GString *is_realized = qobject_to_json_pretty(obj, true);
>-            /* virtio device is NOT realized, remove it from list */
>-            if (!strncmp(is_realized->str, "false", 4)) {
>-                QTAILQ_REMOVE(&virtio_list, vdev, next);
>-            } else {
>-                node = g_new(VirtioInfo, 1);
>-                node->path = g_strdup(dev->canonical_path);
>-                node->name = g_strdup(vdev->name);
>-                QAPI_LIST_PREPEND(list, node);
>-            }
>-           g_string_free(is_realized, true);
>-        }
>-        qobject_unref(obj);
>+        g_free(path);
>+    } else {
>+        object_unref(dev);
>     }

The object_unref should not happen only in the else branch, no? Though 
it's not clear to me where the ref count was previously incremented.

>+    object_child_foreach_recursive(object_get_root(), query_dev_child, 
>&vdevs);
>+    if (vdevs == NULL) {
>+        error_setg(errp, "No virtio devices found");
>+        return NULL;

(No need for early return here)

>     }
>-    return NULL;
>+    return vdevs;
>+}
>+
>+VirtIODevice *qmp_find_virtio_device(const char *path)
>+{
>+    /* Verify the canonical path is a realized virtio device */
>+    Object *dev = object_dynamic_cast(object_resolve_path(path, NULL),
>+                                      TYPE_VIRTIO_DEVICE);
>+    if (!dev || !DEVICE(dev)->realized) {
>+        object_unref(dev);

Same as before with object refs


  parent reply	other threads:[~2023-08-03 17:25 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-03 14:54 [PATCH v3 0/3] qmp, vhost-user: Remove virtio_list & update virtio introspection Jonah Palmer
2023-08-03 14:54 ` [PATCH v3 1/3] qmp: remove virtio_list, search QOM tree instead Jonah Palmer
2023-08-03 15:05   ` Daniel P. Berrangé
2023-08-04 14:00     ` Jonah Palmer
2023-08-03 16:40   ` Manos Pitsidianakis [this message]
2023-08-04 14:17     ` Jonah Palmer
2023-08-03 14:54 ` [PATCH v3 2/3] qmp: update virtio feature maps, vhost-user-gpio introspection Jonah Palmer
2023-08-03 16:38   ` Manos Pitsidianakis
2023-08-03 14:55 ` [PATCH v3 3/3] vhost-user: move VhostUserProtocolFeature definition to header file Jonah Palmer
2023-08-03 16:32   ` Manos Pitsidianakis
2023-08-03 19:50 ` [PATCH v3 0/3] qmp,vhost-user: Remove virtio_list & update virtio introspection Michael S. Tsirkin
2023-08-04 14:27   ` [PATCH v3 0/3] qmp, vhost-user: " Jonah Palmer

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=ytsdr.hu96pu2zioj@linaro.org \
    --to=manos.pitsidianakis@linaro.org \
    --cc=alex.bennee@linaro.org \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=eduardo@habkost.net \
    --cc=jonah.palmer@oracle.com \
    --cc=laurent@vivier.eu \
    --cc=mst@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=viresh.kumar@linaro.org \
    /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).