qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] qom: trigger unrealized when device_finalize
@ 2013-07-05  3:26 Liu Ping Fan
  2013-07-05  7:04 ` Paolo Bonzini
  0 siblings, 1 reply; 2+ messages in thread
From: Liu Ping Fan @ 2013-07-05  3:26 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini, Andreas Färber

Currently, unrealized is triggered in device_unparent(). But
unrealized normally involves the reclaim of resource occupied by
DeviceState. To obey the idiom that reclaiming resource when
refcnt reach zero, move it on the path of object_finalize().

As for device_unparent(), it would be the place to detach the
device from the other system.

Signed-off-by: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
---
 hw/core/qdev.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/hw/core/qdev.c b/hw/core/qdev.c
index 9190a7e..4258d8a 100644
--- a/hw/core/qdev.c
+++ b/hw/core/qdev.c
@@ -768,6 +768,10 @@ static void device_initfn(Object *obj)
 static void device_finalize(Object *obj)
 {
     DeviceState *dev = DEVICE(obj);
+
+    if (dev->realized) {
+        object_property_set_bool(obj, false, "realized", NULL);
+    }
     if (dev->opts) {
         qemu_opts_del(dev->opts);
     }
@@ -794,9 +798,6 @@ static void device_unparent(Object *obj)
         bus = QLIST_FIRST(&dev->child_bus);
         qbus_free(bus);
     }
-    if (dev->realized) {
-        object_property_set_bool(obj, false, "realized", NULL);
-    }
     if (dev->parent_bus) {
         bus_remove_child(dev->parent_bus, dev);
         object_unref(OBJECT(dev->parent_bus));
-- 
1.8.1.4

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

* Re: [Qemu-devel] [PATCH] qom: trigger unrealized when device_finalize
  2013-07-05  3:26 [Qemu-devel] [PATCH] qom: trigger unrealized when device_finalize Liu Ping Fan
@ 2013-07-05  7:04 ` Paolo Bonzini
  0 siblings, 0 replies; 2+ messages in thread
From: Paolo Bonzini @ 2013-07-05  7:04 UTC (permalink / raw)
  To: Liu Ping Fan; +Cc: qemu-devel, Andreas Färber

Il 05/07/2013 05:26, Liu Ping Fan ha scritto:
> Currently, unrealized is triggered in device_unparent(). But
> unrealized normally involves the reclaim of resource occupied by
> DeviceState. To obey the idiom that reclaiming resource when
> refcnt reach zero, move it on the path of object_finalize().
> 
> As for device_unparent(), it would be the place to detach the
> device from the other system.

This is wrong, unrealize is where the resources should be made invisible
to the guest.  This removes a bunch of references to the memory regions
(from the flatview, from the parent region, etc.). Ultimately causes
finalization to be called (after we add RCU, finalization will happen at
the next grace period, because some of the references are removed from
call_rcu callbacks).

What you want is
http://permalink.gmane.org/gmane.comp.emulators.qemu/214871.

Paolo

> Signed-off-by: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
> ---
>  hw/core/qdev.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/hw/core/qdev.c b/hw/core/qdev.c
> index 9190a7e..4258d8a 100644
> --- a/hw/core/qdev.c
> +++ b/hw/core/qdev.c
> @@ -768,6 +768,10 @@ static void device_initfn(Object *obj)
>  static void device_finalize(Object *obj)
>  {
>      DeviceState *dev = DEVICE(obj);
> +
> +    if (dev->realized) {
> +        object_property_set_bool(obj, false, "realized", NULL);
> +    }
>      if (dev->opts) {
>          qemu_opts_del(dev->opts);
>      }
> @@ -794,9 +798,6 @@ static void device_unparent(Object *obj)
>          bus = QLIST_FIRST(&dev->child_bus);
>          qbus_free(bus);
>      }
> -    if (dev->realized) {
> -        object_property_set_bool(obj, false, "realized", NULL);
> -    }
>      if (dev->parent_bus) {
>          bus_remove_child(dev->parent_bus, dev);
>          object_unref(OBJECT(dev->parent_bus));
> 

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

end of thread, other threads:[~2013-07-05  7:04 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-05  3:26 [Qemu-devel] [PATCH] qom: trigger unrealized when device_finalize Liu Ping Fan
2013-07-05  7:04 ` Paolo Bonzini

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).