qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, aliguori@us.ibm.com,
	liwp@linux.vnet.ibm.com, afaerber@suse.de
Subject: [Qemu-devel] [PATCH 21/21] qbus: initialize in standard way
Date: Wed,  2 May 2012 13:31:13 +0200	[thread overview]
Message-ID: <1335958273-769-22-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1335958273-769-1-git-send-email-pbonzini@redhat.com>

From: Anthony Liguori <aliguori@us.ibm.com>

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/qdev.c |   84 +++++++++++++++++++++++++++++++++++++------------------------
 1 file changed, 51 insertions(+), 33 deletions(-)

diff --git a/hw/qdev.c b/hw/qdev.c
index 6965da0..9aaa1d3 100644
--- a/hw/qdev.c
+++ b/hw/qdev.c
@@ -410,40 +410,35 @@ DeviceState *qdev_find_recursive(BusState *bus, const char *id)
     return NULL;
 }
 
-/* FIXME move this logic into instance_init */
-static void do_qbus_create_inplace(BusState *bus, const char *typename,
-                                   DeviceState *parent, const char *name)
+static void qbus_realize(BusState *bus)
 {
+    const char *typename = object_get_typename(OBJECT(bus));
     char *buf;
     int i,len;
 
-    bus->parent = parent;
-
-    if (name) {
+    if (bus->name) {
         /* use supplied name */
-        bus->name = g_strdup(name);
-    } else if (parent && parent->id) {
+    } else if (bus->parent && bus->parent->id) {
         /* parent device has id -> use it for bus name */
-        len = strlen(parent->id) + 16;
+        len = strlen(bus->parent->id) + 16;
         buf = g_malloc(len);
-        snprintf(buf, len, "%s.%d", parent->id, parent->num_child_bus);
+        snprintf(buf, len, "%s.%d", bus->parent->id, bus->parent->num_child_bus);
         bus->name = buf;
     } else {
         /* no id -> use lowercase bus type for bus name */
         len = strlen(typename) + 16;
         buf = g_malloc(len);
         len = snprintf(buf, len, "%s.%d", typename,
-                       parent ? parent->num_child_bus : 0);
+                       bus->parent ? bus->parent->num_child_bus : 0);
         for (i = 0; i < len; i++)
             buf[i] = qemu_tolower(buf[i]);
         bus->name = buf;
     }
 
-    QTAILQ_INIT(&bus->children);
-    if (parent) {
-        QLIST_INSERT_HEAD(&parent->child_bus, bus, sibling);
-        parent->num_child_bus++;
-        object_property_add_child(OBJECT(parent), bus->name, OBJECT(bus), NULL);
+    if (bus->parent) {
+        QLIST_INSERT_HEAD(&bus->parent->child_bus, bus, sibling);
+        bus->parent->num_child_bus++;
+        object_property_add_child(OBJECT(bus->parent), bus->name, OBJECT(bus), NULL);
     } else if (bus != sysbus_get_default()) {
         /* TODO: once all bus devices are qdevified,
            only reset handler for main_system_bus should be registered here. */
@@ -455,7 +450,10 @@ void qbus_create_inplace(BusState *bus, const char *typename,
                          DeviceState *parent, const char *name)
 {
     object_initialize(bus, typename);
-    do_qbus_create_inplace(bus, typename, parent, name);
+
+    bus->parent = parent;
+    bus->name = name ? g_strdup(name) : NULL;
+    qbus_realize(bus);
 }
 
 BusState *qbus_create(const char *typename, DeviceState *parent, const char *name)
@@ -464,28 +462,20 @@ BusState *qbus_create(const char *typename, DeviceState *parent, const char *nam
 
     bus = BUS(object_new(typename));
     bus->qdev_allocated = 1;
-    do_qbus_create_inplace(bus, typename, parent, name);
+
+    bus->parent = parent;
+    bus->name = name ? g_strdup(name) : NULL;
+    qbus_realize(bus);
+
     return bus;
 }
 
 void qbus_free(BusState *bus)
 {
-    BusChild *kid;
-
-    while ((kid = QTAILQ_FIRST(&bus->children)) != NULL) {
-        DeviceState *dev = kid->child;
-        qdev_free(dev);
-    }
-    if (bus->parent) {
-        QLIST_REMOVE(bus, sibling);
-        bus->parent->num_child_bus--;
-    } else {
-        assert(bus != sysbus_get_default()); /* main_system_bus is never freed */
-        qemu_unregister_reset(qbus_reset_all_fn, bus);
-    }
-    g_free((void*)bus->name);
     if (bus->qdev_allocated) {
-        g_free(bus);
+        object_delete(OBJECT(bus));
+    } else {
+        object_finalize(OBJECT(bus));
     }
 }
 
@@ -765,12 +755,40 @@ static TypeInfo device_type_info = {
     .class_size = sizeof(DeviceClass),
 };
 
+static void qbus_initfn(Object *obj)
+{
+    BusState *bus = BUS(obj);
+
+    QTAILQ_INIT(&bus->children);
+}
+
+static void qbus_finalize(Object *obj)
+{
+    BusState *bus = BUS(obj);
+    BusChild *kid;
+
+    while ((kid = QTAILQ_FIRST(&bus->children)) != NULL) {
+        DeviceState *dev = kid->child;
+        qdev_free(dev);
+    }
+    if (bus->parent) {
+        QLIST_REMOVE(bus, sibling);
+        bus->parent->num_child_bus--;
+    } else {
+        assert(bus != sysbus_get_default()); /* main_system_bus is never freed */
+        qemu_unregister_reset(qbus_reset_all_fn, bus);
+    }
+    g_free((char *)bus->name);
+}
+
 static TypeInfo bus_info = {
     .name = TYPE_BUS,
     .parent = TYPE_OBJECT,
     .instance_size = sizeof(BusState),
     .abstract = true,
     .class_size = sizeof(BusClass),
+    .instance_init = qbus_initfn,
+    .instance_finalize = qbus_finalize,
 };
 
 static void qdev_register_types(void)
-- 
1.7.9.3

  parent reply	other threads:[~2012-05-02 11:32 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-02 11:30 [Qemu-devel] [PATCH 00/21] qbus QOM conversion, rebased on top of my patches Paolo Bonzini
2012-05-02 11:30 ` [Qemu-devel] [PATCH 01/21] qom: documentation addition Paolo Bonzini
2012-05-02 11:59   ` Andreas Färber
2012-05-11  2:08     ` Andreas Färber
2012-05-02 11:30 ` [Qemu-devel] [PATCH 02/21] qom: add object_class_get_parent Paolo Bonzini
2012-05-02 12:21   ` Andreas Färber
2012-05-11  2:25     ` Andreas Färber
2012-05-02 11:30 ` [Qemu-devel] [PATCH 03/21] qom: add class_base_init Paolo Bonzini
2012-05-14 21:34   ` Andreas Färber
2012-05-02 11:30 ` [Qemu-devel] [PATCH 04/21] qom: make Object a type Paolo Bonzini
2012-05-16  8:16   ` Andreas Färber
2012-05-23 16:53     ` Andreas Färber
2012-05-02 11:30 ` [Qemu-devel] [PATCH 05/21] qom: assert that public types have a non-NULL parent field Paolo Bonzini
2012-05-02 12:35   ` Andreas Färber
2012-05-23 17:01     ` Andreas Färber
2012-05-02 11:30 ` [Qemu-devel] [PATCH 06/21] qdev: push "type" property up to Object Paolo Bonzini
2012-05-23 17:06   ` Andreas Färber
2012-05-23 17:18     ` Paolo Bonzini
2012-05-23 17:40       ` Andreas Färber
2012-05-23 18:00         ` Paolo Bonzini
2012-05-02 11:30 ` [Qemu-devel] [PATCH 07/21] qdev: fix -device foo,? Paolo Bonzini
2012-05-11 14:03   ` Andreas Färber
2012-05-14 20:11   ` Anthony Liguori
2012-05-02 11:31 ` [Qemu-devel] [PATCH 08/21] qdev: use object_property_print in info qtree Paolo Bonzini
2012-05-11 14:20   ` Andreas Färber
2012-05-11 14:45     ` Paolo Bonzini
2012-05-12  0:23       ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 09/21] qdev: move bus properties to a separate global Paolo Bonzini
2012-05-23 23:39   ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 10/21] qdev: do not propagate properties to subclasses Paolo Bonzini
2012-05-23 23:46   ` Andreas Färber
2012-05-24  1:34     ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 11/21] qdev: move bus properties to abstract superclasses Paolo Bonzini
2012-05-02 12:29   ` Anthony Liguori
2012-05-02 13:21     ` Paolo Bonzini
2012-05-02 20:00       ` Anthony Liguori
2012-05-02 21:50         ` Paolo Bonzini
2012-05-03 12:45           ` Anthony Liguori
2012-05-03 12:56             ` Paolo Bonzini
2012-05-02 11:31 ` [Qemu-devel] [PATCH 12/21] pc: add back PCI.rombar compat property Paolo Bonzini
2012-05-02 11:38   ` Michael S. Tsirkin
2012-05-02 11:41     ` Paolo Bonzini
2012-05-02 11:44       ` Michael S. Tsirkin
2012-05-02 11:31 ` [Qemu-devel] [PATCH 13/21] qdev: clean up global properties Paolo Bonzini
2012-05-24 16:27   ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 14/21] qdev: remove qdev_prop_set_defaults Paolo Bonzini
2012-05-02 12:30   ` Anthony Liguori
2012-05-24 16:30     ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 15/21] qdev: fix adding of ptr properties Paolo Bonzini
2012-05-12 12:34   ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 16/21] qdev: use wrapper for qdev_get_path Paolo Bonzini
2012-05-24 16:31   ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 17/21] qdev: move sysbus initialization to sysbus.c Paolo Bonzini
2012-05-24 16:32   ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 18/21] qdev: convert busses to QEMU Object Model Paolo Bonzini
2012-05-24 16:48   ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 19/21] qdev: connect busses with their parent devices Paolo Bonzini
2012-05-24 16:49   ` Andreas Färber
2012-05-02 11:31 ` [Qemu-devel] [PATCH 20/21] qbus: make child devices links Paolo Bonzini
2012-05-24 16:51   ` Andreas Färber
2012-05-02 11:31 ` Paolo Bonzini [this message]
2012-05-24 16:52   ` [Qemu-devel] [PATCH 21/21] qbus: initialize in standard way Andreas Färber
2012-05-04 16:15 ` [Qemu-devel] [PATCH 00/21] qbus QOM conversion, rebased on top of my patches Paolo Bonzini
2012-05-23 15:43 ` Paolo Bonzini

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=1335958273-769-22-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=afaerber@suse.de \
    --cc=aliguori@us.ibm.com \
    --cc=liwp@linux.vnet.ibm.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.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).