Patchwork qom: Refine container_get() to allow using a custom root

login
register
mail settings
Submitter Andreas Färber
Date April 5, 2012, 11:21 a.m.
Message ID <1333624906-7870-1-git-send-email-afaerber@suse.de>
Download mbox | patch
Permalink /patch/151041/
State New
Headers show

Comments

Andreas Färber - April 5, 2012, 11:21 a.m.
Specify the root to search from as argument. This avoids hardcoding
"/machine" in some places and makes it more flexible.

Signed-off-by: Andreas Färber <afaerber@suse.de>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Anthony Liguori <anthony@codemonkey.ws>
---
 hw/qdev-monitor.c     |    4 ++--
 hw/qdev.c             |    7 ++++---
 include/qemu/object.h |    3 ++-
 qom/container.c       |    4 ++--
 4 files changed, 10 insertions(+), 8 deletions(-)
Anthony Liguori - April 24, 2012, 6:24 p.m.
On 04/05/2012 06:21 AM, Andreas Färber wrote:
> Specify the root to search from as argument. This avoids hardcoding
> "/machine" in some places and makes it more flexible.
>
> Signed-off-by: Andreas Färber<afaerber@suse.de>
> Cc: Paolo Bonzini<pbonzini@redhat.com>
> Cc: Anthony Liguori<anthony@codemonkey.ws>

Applied.  Thanks.

Regards,

Anthony Liguori

> ---
>   hw/qdev-monitor.c     |    4 ++--
>   hw/qdev.c             |    7 ++++---
>   include/qemu/object.h |    3 ++-
>   qom/container.c       |    4 ++--
>   4 files changed, 10 insertions(+), 8 deletions(-)
>
> diff --git a/hw/qdev-monitor.c b/hw/qdev-monitor.c
> index 4783366..67f296b 100644
> --- a/hw/qdev-monitor.c
> +++ b/hw/qdev-monitor.c
> @@ -180,7 +180,7 @@ static Object *qdev_get_peripheral(void)
>       static Object *dev;
>
>       if (dev == NULL) {
> -        dev = container_get("/machine/peripheral");
> +        dev = container_get(qdev_get_machine(), "/peripheral");
>       }
>
>       return dev;
> @@ -191,7 +191,7 @@ static Object *qdev_get_peripheral_anon(void)
>       static Object *dev;
>
>       if (dev == NULL) {
> -        dev = container_get("/machine/peripheral-anon");
> +        dev = container_get(qdev_get_machine(), "/peripheral-anon");
>       }
>
>       return dev;
> diff --git a/hw/qdev.c b/hw/qdev.c
> index 0d3c0fc..efa4c5d 100644
> --- a/hw/qdev.c
> +++ b/hw/qdev.c
> @@ -157,8 +157,9 @@ int qdev_init(DeviceState *dev)
>           static int unattached_count = 0;
>           gchar *name = g_strdup_printf("device[%d]", unattached_count++);
>
> -        object_property_add_child(container_get("/machine/unattached"), name,
> -                                  OBJECT(dev), NULL);
> +        object_property_add_child(container_get(qdev_get_machine(),
> +                                                "/unattached"),
> +                                  name, OBJECT(dev), NULL);
>           g_free(name);
>       }
>
> @@ -673,7 +674,7 @@ Object *qdev_get_machine(void)
>       static Object *dev;
>
>       if (dev == NULL) {
> -        dev = container_get("/machine");
> +        dev = container_get(object_get_root(), "/machine");
>       }
>
>       return dev;
> diff --git a/include/qemu/object.h b/include/qemu/object.h
> index a675937..ca1649c 100644
> --- a/include/qemu/object.h
> +++ b/include/qemu/object.h
> @@ -905,6 +905,7 @@ void object_property_add_str(Object *obj, const char *name,
>
>   /**
>    * container_get:
> + * @root: root of the #path, e.g., object_get_root()
>    * @path: path to the container
>    *
>    * Return a container object whose path is @path.  Create more containers
> @@ -912,7 +913,7 @@ void object_property_add_str(Object *obj, const char *name,
>    *
>    * Returns: the container object.
>    */
> -Object *container_get(const char *path);
> +Object *container_get(Object *root, const char *path);
>
>
>   #endif
> diff --git a/qom/container.c b/qom/container.c
> index 67e9e8a..c9940ab 100644
> --- a/qom/container.c
> +++ b/qom/container.c
> @@ -25,7 +25,7 @@ static void container_register_types(void)
>       type_register_static(&container_info);
>   }
>
> -Object *container_get(const char *path)
> +Object *container_get(Object *root, const char *path)
>   {
>       Object *obj, *child;
>       gchar **parts;
> @@ -33,7 +33,7 @@ Object *container_get(const char *path)
>
>       parts = g_strsplit(path, "/", 0);
>       assert(parts != NULL&&  parts[0] != NULL&&  !parts[0][0]);
> -    obj = object_get_root();
> +    obj = root;
>
>       for (i = 1; parts[i] != NULL; i++, obj = child) {
>           child = object_resolve_path_component(obj, parts[i]);

Patch

diff --git a/hw/qdev-monitor.c b/hw/qdev-monitor.c
index 4783366..67f296b 100644
--- a/hw/qdev-monitor.c
+++ b/hw/qdev-monitor.c
@@ -180,7 +180,7 @@  static Object *qdev_get_peripheral(void)
     static Object *dev;
 
     if (dev == NULL) {
-        dev = container_get("/machine/peripheral");
+        dev = container_get(qdev_get_machine(), "/peripheral");
     }
 
     return dev;
@@ -191,7 +191,7 @@  static Object *qdev_get_peripheral_anon(void)
     static Object *dev;
 
     if (dev == NULL) {
-        dev = container_get("/machine/peripheral-anon");
+        dev = container_get(qdev_get_machine(), "/peripheral-anon");
     }
 
     return dev;
diff --git a/hw/qdev.c b/hw/qdev.c
index 0d3c0fc..efa4c5d 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -157,8 +157,9 @@  int qdev_init(DeviceState *dev)
         static int unattached_count = 0;
         gchar *name = g_strdup_printf("device[%d]", unattached_count++);
 
-        object_property_add_child(container_get("/machine/unattached"), name,
-                                  OBJECT(dev), NULL);
+        object_property_add_child(container_get(qdev_get_machine(),
+                                                "/unattached"),
+                                  name, OBJECT(dev), NULL);
         g_free(name);
     }
 
@@ -673,7 +674,7 @@  Object *qdev_get_machine(void)
     static Object *dev;
 
     if (dev == NULL) {
-        dev = container_get("/machine");
+        dev = container_get(object_get_root(), "/machine");
     }
 
     return dev;
diff --git a/include/qemu/object.h b/include/qemu/object.h
index a675937..ca1649c 100644
--- a/include/qemu/object.h
+++ b/include/qemu/object.h
@@ -905,6 +905,7 @@  void object_property_add_str(Object *obj, const char *name,
 
 /**
  * container_get:
+ * @root: root of the #path, e.g., object_get_root()
  * @path: path to the container
  *
  * Return a container object whose path is @path.  Create more containers
@@ -912,7 +913,7 @@  void object_property_add_str(Object *obj, const char *name,
  *
  * Returns: the container object.
  */
-Object *container_get(const char *path);
+Object *container_get(Object *root, const char *path);
 
 
 #endif
diff --git a/qom/container.c b/qom/container.c
index 67e9e8a..c9940ab 100644
--- a/qom/container.c
+++ b/qom/container.c
@@ -25,7 +25,7 @@  static void container_register_types(void)
     type_register_static(&container_info);
 }
 
-Object *container_get(const char *path)
+Object *container_get(Object *root, const char *path)
 {
     Object *obj, *child;
     gchar **parts;
@@ -33,7 +33,7 @@  Object *container_get(const char *path)
 
     parts = g_strsplit(path, "/", 0);
     assert(parts != NULL && parts[0] != NULL && !parts[0][0]);
-    obj = object_get_root();
+    obj = root;
 
     for (i = 1; parts[i] != NULL; i++, obj = child) {
         child = object_resolve_path_component(obj, parts[i]);