qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 14/15] qom: object_unref call reclaimer


From: Marcelo Tosatti
Subject: Re: [Qemu-devel] [PATCH 14/15] qom: object_unref call reclaimer
Date: Mon, 13 Aug 2012 15:56:10 -0300
User-agent: Mutt/1.5.21 (2010-09-15)

On Wed, Aug 08, 2012 at 02:25:55PM +0800, Liu Ping Fan wrote:
> From: Liu Ping Fan <address@hidden>
> 
> iohandler/bh/timer may use DeviceState when its refcnt=0,
> postpone the reclaimer till they have done with it.
> 
> Signed-off-by: Liu Ping Fan <address@hidden>
> ---
>  qom/object.c |    9 ++++++++-
>  1 files changed, 8 insertions(+), 1 deletions(-)
> 
> diff --git a/qom/object.c b/qom/object.c
> index 822bdb7..1452b1b 100644
> --- a/qom/object.c
> +++ b/qom/object.c
> @@ -23,6 +23,8 @@
>  #include "qbool.h"
>  #include "qint.h"
>  #include "qstring.h"
> +#include "hw/qdev.h"
> +#include "qemu/reclaimer.h"
>  
>  #define MAX_INTERFACES 32
>  
> @@ -646,7 +648,12 @@ void object_unref(Object *obj)
>  {
>      g_assert(atomic_read(&obj->ref) > 0);
>      if (atomic_dec_and_test(&obj->ref)) {
> -        object_finalize(obj);
> +        /* fixme, maybe introduce obj->finalze to make this more elegant */
> +        if (object_dynamic_cast(obj, TYPE_DEVICE) != NULL) {
> +            qemu_reclaimer_enqueue(obj, object_finalize);
> +        } else {
> +            object_finalize(obj);
> +        }
>      }

As mentioned, removal under the original plan is combination of
per-device lock and object reference. An initial step is parallel mmio
only, with everything else under the big lock.

Again, _only_ parallel mmio lookup as a first target is a good goal,
IMO.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]