From: Paolo Bonzini <pbonzini@redhat.com>
To: Liu Ping Fan <qemulist@gmail.com>
Cc: Liu Ping Fan <pingfank@linux.vnet.ibm.com>,
qemu-devel@nongnu.org, Anthony Liguori <anthony@codemonkey.ws>,
Avi Kivity <avi@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 05/10] qdev: finalize of qbus, qdev will not the right place to free children
Date: Fri, 24 Aug 2012 16:50:06 +0200 [thread overview]
Message-ID: <5037949E.9080606@redhat.com> (raw)
In-Reply-To: <1345801763-24227-6-git-send-email-qemulist@gmail.com>
Il 24/08/2012 11:49, Liu Ping Fan ha scritto:
> From: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
>
> When breaking big lock, the child object can be hold by mmio-dispatch,
> and it is not right to free them when their parent gone.
> We will isolate and release the children by qdev_delete_subtree(),
> and let each object manage its own life cycle.
I think this makes sense, but is it already working at this point of the
series? That is, before patch 7 starts using qdev_delete_subtree()?
Paolo
> Signed-off-by: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
> ---
> hw/qdev.c | 30 ++++++++++++------------------
> 1 files changed, 12 insertions(+), 18 deletions(-)
>
> diff --git a/hw/qdev.c b/hw/qdev.c
> index 570f0bf..d6c8130 100644
> --- a/hw/qdev.c
> +++ b/hw/qdev.c
> @@ -756,10 +756,8 @@ static void device_finalize(Object *obj)
> DeviceClass *dc = DEVICE_GET_CLASS(dev);
>
> if (dev->state == DEV_STATE_INITIALIZED) {
> - while (dev->num_child_bus) {
> - bus = QLIST_FIRST(&dev->child_bus);
> - qbus_free(bus);
> - }
> +
> + g_assert(QLIST_EMPTY(&dev->child_bus));
> if (qdev_get_vmsd(dev)) {
> vmstate_unregister(dev, qdev_get_vmsd(dev), dev);
> }
> @@ -770,9 +768,8 @@ static void device_finalize(Object *obj)
> qemu_opts_del(dev->opts);
> }
> }
> - if (dev->parent_bus) {
> - bus_remove_child(dev->parent_bus, dev);
> - }
> +
> + g_assert((dev->parent_bus == NULL));
> }
>
> static void device_class_base_init(ObjectClass *class, void *data)
> @@ -826,19 +823,16 @@ static void qbus_initfn(Object *obj)
> 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);
> + assert(bus != sysbus_get_default()); /* main_system_bus is never freed */
> + /* just blind check, since bus->parent has been set to NULL */
> + qemu_unregister_reset(qbus_reset_all_fn, bus);
> + if (bus->overlap != NULL) {
> + object_unref(OBJECT(bus->overlap));
> }
> + assert(QTAILQ_EMPTY(&bus->children));
> + /* have reset it to NULL, to prevent reader */
> + assert((bus->parent == NULL));
> g_free((char *)bus->name);
> }
>
>
next prev parent reply other threads:[~2012-08-24 14:56 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-24 9:49 [Qemu-devel] [PATCH 0/10] rework on hot unplug Liu Ping Fan
2012-08-24 9:49 ` [Qemu-devel] [PATCH 01/10] qom: add, remove of link property need to ref, unref its target Liu Ping Fan
2012-08-24 14:52 ` Paolo Bonzini
2012-08-24 9:49 ` [Qemu-devel] [PATCH 02/10] qdev: change iterator callback seq Liu Ping Fan
2012-08-24 9:49 ` [Qemu-devel] [PATCH 03/10] qom: export object_property_is_child, object_property_is_link Liu Ping Fan
2012-08-24 14:51 ` Paolo Bonzini
2012-08-25 7:43 ` liu ping fan
2012-08-25 8:04 ` Blue Swirl
2012-08-24 9:49 ` [Qemu-devel] [PATCH 04/10] qdev: introduce new interface to remove composite sub-tree Liu Ping Fan
2012-08-24 9:49 ` [Qemu-devel] [PATCH 05/10] qdev: finalize of qbus, qdev will not the right place to free children Liu Ping Fan
2012-08-24 14:50 ` Paolo Bonzini [this message]
2012-08-24 9:49 ` [Qemu-devel] [PATCH 06/10] qom: expose object_property_del_child Liu Ping Fan
2012-08-24 14:44 ` Paolo Bonzini
2012-08-24 9:49 ` [Qemu-devel] [PATCH 07/10] unplug: using new intf qdev_delete_subtree in acpi_piix_eject_slot Liu Ping Fan
2012-08-24 10:24 ` Paolo Bonzini
2012-08-25 7:05 ` liu ping fan
2012-08-24 9:49 ` [Qemu-devel] [PATCH 08/10] qdev: rename qdev_unplug to qdev_unplug_req Liu Ping Fan
2012-08-24 14:48 ` Paolo Bonzini
2012-08-24 9:49 ` [Qemu-devel] [PATCH 09/10] mon: release dev's ref hold by qdev_get_peripheral Liu Ping Fan
2012-08-24 9:49 ` [Qemu-devel] [PATCH 10/10] qdev: fix create in place obj's life cycle problem Liu Ping Fan
2012-08-24 14:42 ` Paolo Bonzini
2012-08-25 7:42 ` liu ping fan
2012-08-27 7:01 ` Paolo Bonzini
2012-08-27 7:47 ` Jan Kiszka
2012-08-27 8:17 ` liu ping fan
2012-08-27 8:27 ` Jan Kiszka
2012-08-27 17:09 ` Avi Kivity
2012-08-27 17:14 ` Jan Kiszka
2012-08-27 18:09 ` Avi Kivity
2012-08-27 18:17 ` Jan Kiszka
2012-08-27 18:20 ` Avi Kivity
2012-08-27 18:39 ` Jan Kiszka
2012-08-27 18:52 ` Avi Kivity
2012-08-27 19:38 ` Jan Kiszka
2012-08-27 20:53 ` Avi Kivity
2012-08-28 1:01 ` Jan Kiszka
2012-08-29 17:13 ` Avi Kivity
2012-08-29 17:21 ` Jan Kiszka
2012-08-29 17:27 ` Avi Kivity
2012-08-29 17:41 ` Jan Kiszka
2012-09-03 9:09 ` Avi Kivity
2012-08-28 3:09 ` liu ping fan
2012-08-28 3:38 ` liu ping fan
2012-08-28 9:42 ` Jan Kiszka
2012-08-28 10:05 ` Paolo Bonzini
2012-08-29 17:23 ` Avi Kivity
2012-08-29 17:30 ` Jan Kiszka
2012-08-29 17:40 ` Avi Kivity
2012-08-29 17:49 ` Jan Kiszka
2012-09-01 8:31 ` Avi Kivity
2012-09-01 8:57 ` Jan Kiszka
2012-09-01 9:30 ` Avi Kivity
2012-08-30 5:54 ` liu ping fan
2012-08-30 7:08 ` Jan Kiszka
2012-08-30 7:47 ` liu ping fan
2012-09-01 8:46 ` Avi Kivity
2012-09-03 7:44 ` liu ping fan
2012-09-03 8:52 ` Avi Kivity
2012-09-03 10:06 ` liu ping fan
2012-09-03 10:16 ` Avi Kivity
2012-09-04 2:33 ` liu ping fan
2012-09-04 2:34 ` liu ping fan
2012-09-05 8:19 ` liu ping fan
2012-09-05 9:52 ` Avi Kivity
2012-09-05 10:36 ` Jan Kiszka
2012-09-05 10:53 ` Avi Kivity
2012-09-05 11:11 ` Jan Kiszka
2012-09-05 11:25 ` Avi Kivity
2012-09-05 12:02 ` Jan Kiszka
2012-09-05 12:17 ` Avi Kivity
2012-08-27 13:19 ` Anthony Liguori
2012-08-27 15:02 ` Jan Kiszka
2012-08-27 15:14 ` Anthony Liguori
2012-08-27 15:26 ` Jan Kiszka
2012-08-27 16:24 ` Anthony Liguori
2012-08-27 16:59 ` Jan Kiszka
2012-08-27 18:35 ` Avi Kivity
2012-08-27 19:17 ` Anthony Liguori
2012-08-27 19:22 ` Jan Kiszka
2012-08-27 20:58 ` Avi Kivity
2012-08-27 21:34 ` Paolo Bonzini
2012-08-27 18:27 ` Avi Kivity
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=5037949E.9080606@redhat.com \
--to=pbonzini@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=avi@redhat.com \
--cc=pingfank@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
--cc=qemulist@gmail.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 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.