All of lore.kernel.org
 help / color / mirror / Atom feed
* [PULL 0/1] Monitor patches patches for 2021-11-10
@ 2021-11-10  5:45 Markus Armbruster
  2021-11-10  5:45 ` [PULL 1/1] monitor: Fix find_device_state() for IDs containing slashes Markus Armbruster
  2021-11-10 10:24 ` [PULL 0/1] Monitor patches patches for 2021-11-10 Richard Henderson
  0 siblings, 2 replies; 3+ messages in thread
From: Markus Armbruster @ 2021-11-10  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: richard.henderson

The following changes since commit 0a70bcf18caf7a61d480f8448723c15209d128ef:

  Update version for v6.2.0-rc0 release (2021-11-09 18:22:57 +0100)

are available in the Git repository at:

  git://repo.or.cz/qemu/armbru.git tags/pull-monitor-2021-11-10

for you to fetch changes up to 1bf4d3294bd48b702530b131e3344860495425fd:

  monitor: Fix find_device_state() for IDs containing slashes (2021-11-10 06:14:51 +0100)

----------------------------------------------------------------
Monitor patches patches for 2021-11-10

----------------------------------------------------------------
Markus Armbruster (1):
      monitor: Fix find_device_state() for IDs containing slashes

 include/qom/object.h   | 12 ++++++++++++
 qom/object.c           | 11 +++++++++++
 softmmu/qdev-monitor.c |  8 +-------
 3 files changed, 24 insertions(+), 7 deletions(-)

-- 
2.31.1



^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PULL 1/1] monitor: Fix find_device_state() for IDs containing slashes
  2021-11-10  5:45 [PULL 0/1] Monitor patches patches for 2021-11-10 Markus Armbruster
@ 2021-11-10  5:45 ` Markus Armbruster
  2021-11-10 10:24 ` [PULL 0/1] Monitor patches patches for 2021-11-10 Richard Henderson
  1 sibling, 0 replies; 3+ messages in thread
From: Markus Armbruster @ 2021-11-10  5:45 UTC (permalink / raw)
  To: qemu-devel; +Cc: Christian Borntraeger, richard.henderson, Paolo Bonzini

Recent commit 6952026120 "monitor: Tidy up find_device_state()"
assumed the function's argument is "the device's ID or QOM path" (as
documented for device_del).  It's actually either an absolute QOM
path, or a QOM path relative to /machine/peripheral/.  Such a relative
path is a device ID when it doesn't contain a slash.  When it does,
the function now always fails.  Broke iotest 200, which uses relative
path "vda/virtio-backend".

It fails because object_resolve_path_component() resolves just one
component, not a relative path.

The obvious function to resolve relative paths is
object_resolve_path().  It picks a parent automatically.  Too much
magic, we want to specify the parent.  Create new
object_resolve_path_at() for that, and use it in find_device_state().

Reported-by: Christian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20211019085711.86377-1-armbru@redhat.com>
Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
---
 include/qom/object.h   | 12 ++++++++++++
 qom/object.c           | 11 +++++++++++
 softmmu/qdev-monitor.c |  8 +-------
 3 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/include/qom/object.h b/include/qom/object.h
index faae0d841f..fae096f51c 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -1543,6 +1543,18 @@ Object *object_resolve_path(const char *path, bool *ambiguous);
 Object *object_resolve_path_type(const char *path, const char *typename,
                                  bool *ambiguous);
 
+/**
+ * object_resolve_path_at:
+ * @parent: the object in which to resolve the path
+ * @path: the path to resolve
+ *
+ * This is like object_resolve_path(), except paths not starting with
+ * a slash are relative to @parent.
+ *
+ * Returns: The resolved object or NULL on path lookup failure.
+ */
+Object *object_resolve_path_at(Object *parent, const char *path);
+
 /**
  * object_resolve_path_component:
  * @parent: the object in which to resolve the path
diff --git a/qom/object.c b/qom/object.c
index 6be710bc40..4f0677cca9 100644
--- a/qom/object.c
+++ b/qom/object.c
@@ -2144,6 +2144,17 @@ Object *object_resolve_path(const char *path, bool *ambiguous)
     return object_resolve_path_type(path, TYPE_OBJECT, ambiguous);
 }
 
+Object *object_resolve_path_at(Object *parent, const char *path)
+{
+    g_auto(GStrv) parts = g_strsplit(path, "/", 0);
+
+    if (*path == '/') {
+        return object_resolve_abs_path(object_get_root(), parts + 1,
+                                       TYPE_OBJECT);
+    }
+    return object_resolve_abs_path(parent, parts, TYPE_OBJECT);
+}
+
 typedef struct StringProperty
 {
     char *(*get)(Object *, Error **);
diff --git a/softmmu/qdev-monitor.c b/softmmu/qdev-monitor.c
index f8b3a4cd82..b5aaae4b8c 100644
--- a/softmmu/qdev-monitor.c
+++ b/softmmu/qdev-monitor.c
@@ -871,15 +871,9 @@ void qmp_device_add(QDict *qdict, QObject **ret_data, Error **errp)
 
 static DeviceState *find_device_state(const char *id, Error **errp)
 {
-    Object *obj;
+    Object *obj = object_resolve_path_at(qdev_get_peripheral(), id);
     DeviceState *dev;
 
-    if (id[0] == '/') {
-        obj = object_resolve_path(id, NULL);
-    } else {
-        obj = object_resolve_path_component(qdev_get_peripheral(), id);
-    }
-
     if (!obj) {
         error_set(errp, ERROR_CLASS_DEVICE_NOT_FOUND,
                   "Device '%s' not found", id);
-- 
2.31.1



^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PULL 0/1] Monitor patches patches for 2021-11-10
  2021-11-10  5:45 [PULL 0/1] Monitor patches patches for 2021-11-10 Markus Armbruster
  2021-11-10  5:45 ` [PULL 1/1] monitor: Fix find_device_state() for IDs containing slashes Markus Armbruster
@ 2021-11-10 10:24 ` Richard Henderson
  1 sibling, 0 replies; 3+ messages in thread
From: Richard Henderson @ 2021-11-10 10:24 UTC (permalink / raw)
  To: Markus Armbruster, qemu-devel

On 11/10/21 6:45 AM, Markus Armbruster wrote:
> The following changes since commit 0a70bcf18caf7a61d480f8448723c15209d128ef:
> 
>    Update version for v6.2.0-rc0 release (2021-11-09 18:22:57 +0100)
> 
> are available in the Git repository at:
> 
>    git://repo.or.cz/qemu/armbru.git tags/pull-monitor-2021-11-10
> 
> for you to fetch changes up to 1bf4d3294bd48b702530b131e3344860495425fd:
> 
>    monitor: Fix find_device_state() for IDs containing slashes (2021-11-10 06:14:51 +0100)
> 
> ----------------------------------------------------------------
> Monitor patches patches for 2021-11-10
> 
> ----------------------------------------------------------------
> Markus Armbruster (1):
>        monitor: Fix find_device_state() for IDs containing slashes
> 
>   include/qom/object.h   | 12 ++++++++++++
>   qom/object.c           | 11 +++++++++++
>   softmmu/qdev-monitor.c |  8 +-------
>   3 files changed, 24 insertions(+), 7 deletions(-)

Applied, thanks.

r~



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-11-10 10:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-10  5:45 [PULL 0/1] Monitor patches patches for 2021-11-10 Markus Armbruster
2021-11-10  5:45 ` [PULL 1/1] monitor: Fix find_device_state() for IDs containing slashes Markus Armbruster
2021-11-10 10:24 ` [PULL 0/1] Monitor patches patches for 2021-11-10 Richard Henderson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.