All of lore.kernel.org
 help / color / mirror / Atom feed
From: liu ping fan <qemulist@gmail.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org,
	"Anthony Liguori" <anthony@codemonkey.ws>,
	"Avi Kivity" <avi@redhat.com>,
	"Jan Kiszka" <jan.kiszka@siemens.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	"Stefan Hajnoczi" <stefanha@gmail.com>,
	"Blue Swirl" <blauwirbel@gmail.com>,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [PATCH 03/15] qom: introduce reclaimer to release obj
Date: Thu, 9 Aug 2012 15:38:06 +0800	[thread overview]
Message-ID: <CAJnKYQkUNUT5xm6OYhMxxEcHZD9dQ1Gh-dnEXmzeJ667APY3Xg@mail.gmail.com> (raw)
In-Reply-To: <502232E5.80208@redhat.com>

On Wed, Aug 8, 2012 at 5:35 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 08/08/2012 08:25, Liu Ping Fan ha scritto:
>> From: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
>>
>> Collect unused object and release them at caller demand.
>>
>> Signed-off-by: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
>> ---
>>  include/qemu/reclaimer.h |   28 ++++++++++++++++++++++
>>  main-loop.c              |    5 ++++
>>  qemu-tool.c              |    5 ++++
>>  qom/Makefile.objs        |    2 +-
>>  qom/reclaimer.c          |   58 ++++++++++++++++++++++++++++++++++++++++++++++
>>  5 files changed, 97 insertions(+), 1 deletions(-)
>>  create mode 100644 include/qemu/reclaimer.h
>>  create mode 100644 qom/reclaimer.c
>>
>> diff --git a/include/qemu/reclaimer.h b/include/qemu/reclaimer.h
>> new file mode 100644
>> index 0000000..9307e93
>> --- /dev/null
>> +++ b/include/qemu/reclaimer.h
>> @@ -0,0 +1,28 @@
>> +/*
>> + * QEMU reclaimer
>> + *
>> + * Copyright IBM, Corp. 2012
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
>> + * See the COPYING file in the top-level directory.
>> + */
>> +
>> +#ifndef QEMU_RECLAIMER
>> +#define QEMU_RECLAIMER
>> +
>> +typedef void ReleaseHandler(void *opaque);
>> +typedef struct Chunk {
>> +    QLIST_ENTRY(Chunk) list;
>> +    void *opaque;
>> +    ReleaseHandler *release;
>> +} Chunk;
>> +
>> +typedef struct ChunkHead {
>> +        struct Chunk *lh_first;
>> +} ChunkHead;
>> +
>> +void reclaimer_enqueue(ChunkHead *head, void *opaque, ReleaseHandler *release);
>> +void reclaimer_worker(ChunkHead *head);
>> +void qemu_reclaimer_enqueue(void *opaque, ReleaseHandler *release);
>> +void qemu_reclaimer(void);
>
> So "enqueue" is call_rcu and qemu_reclaimer marks a quiescent state +
> empties the pending call_rcu.
>
> But what's the difference between the two pairs of APIs?
>
I add the new one for V2 to reclaim the resource for mem view. And
yes, as you point out, I will delete the 2nd API, for it can be
substituted by the 1st one easily.

>> +#endif
>> diff --git a/main-loop.c b/main-loop.c
>> index eb3b6e6..be9d095 100644
>> --- a/main-loop.c
>> +++ b/main-loop.c
>> @@ -26,6 +26,7 @@
>>  #include "qemu-timer.h"
>>  #include "slirp/slirp.h"
>>  #include "main-loop.h"
>> +#include "qemu/reclaimer.h"
>>
>>  #ifndef _WIN32
>>
>> @@ -505,5 +506,9 @@ int main_loop_wait(int nonblocking)
>>         them.  */
>>      qemu_bh_poll();
>>
>> +    /* ref to device from iohandler/bh/timer do not obey the rules, so delay
>> +     * reclaiming until now.
>> +     */
>> +    qemu_reclaimer();
>>      return ret;
>>  }
>> diff --git a/qemu-tool.c b/qemu-tool.c
>> index 318c5fc..f5fe319 100644
>> --- a/qemu-tool.c
>> +++ b/qemu-tool.c
>> @@ -21,6 +21,7 @@
>>  #include "main-loop.h"
>>  #include "qemu_socket.h"
>>  #include "slirp/libslirp.h"
>> +#include "qemu/reclaimer.h"
>>
>>  #include <sys/time.h>
>>
>> @@ -75,6 +76,10 @@ void qemu_mutex_unlock_iothread(void)
>>  {
>>  }
>>
>> +void qemu_reclaimer(void)
>> +{
>> +}
>> +
>>  int use_icount;
>>
>>  void qemu_clock_warp(QEMUClock *clock)
>> diff --git a/qom/Makefile.objs b/qom/Makefile.objs
>> index 5ef060a..a579261 100644
>> --- a/qom/Makefile.objs
>> +++ b/qom/Makefile.objs
>> @@ -1,4 +1,4 @@
>> -qom-obj-y = object.o container.o qom-qobject.o
>> +qom-obj-y = object.o container.o qom-qobject.o reclaimer.o
>>  qom-obj-twice-y = cpu.o
>>  common-obj-y = $(qom-obj-twice-y)
>>  user-obj-y = $(qom-obj-twice-y)
>> diff --git a/qom/reclaimer.c b/qom/reclaimer.c
>> new file mode 100644
>> index 0000000..6cb53e3
>> --- /dev/null
>> +++ b/qom/reclaimer.c
>> @@ -0,0 +1,58 @@
>> +/*
>> + * QEMU reclaimer
>> + *
>> + * Copyright IBM, Corp. 2012
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
>> + * See the COPYING file in the top-level directory.
>> + */
>> +
>> +#include "qemu-common.h"
>> +#include "qemu-thread.h"
>> +#include "main-loop.h"
>> +#include "qemu-queue.h"
>> +#include "qemu/reclaimer.h"
>> +
>> +static struct QemuMutex reclaimer_lock;
>> +static QLIST_HEAD(rcl, Chunk) reclaimer_list;
>> +
>> +void reclaimer_enqueue(ChunkHead *head, void *opaque, ReleaseHandler *release)
>> +{
>> +    Chunk *r = g_malloc0(sizeof(Chunk));
>> +    r->opaque = opaque;
>> +    r->release = release;
>> +    QLIST_INSERT_HEAD_RCU(head, r, list);
>> +}
>
> No lock?
Yes, need!  I will think it more closely.

Thanks and regards,
pingfan
>
>> +void reclaimer_worker(ChunkHead *head)
>> +{
>> +    Chunk *cur, *next;
>> +
>> +    QLIST_FOREACH_SAFE(cur, head, list, next) {
>> +        QLIST_REMOVE(cur, list);
>> +        cur->release(cur->opaque);
>> +        g_free(cur);
>> +    }
>
> QLIST_REMOVE needs a lock too, so using the lockless
> QLIST_INSERT_HEAD_RCU is not necessary.
>
>> +}
>> +
>> +void qemu_reclaimer_enqueue(void *opaque, ReleaseHandler *release)
>> +{
>> +    Chunk *r = g_malloc0(sizeof(Chunk));
>> +    r->opaque = opaque;
>> +    r->release = release;
>> +    qemu_mutex_lock(&reclaimer_lock);
>> +    QLIST_INSERT_HEAD_RCU(&reclaimer_list, r, list);
>> +    qemu_mutex_unlock(&reclaimer_lock);
>> +}
>> +
>> +
>> +void qemu_reclaimer(void)
>> +{
>> +    Chunk *cur, *next;
>> +
>> +    QLIST_FOREACH_SAFE(cur, &reclaimer_list, list, next) {
>> +        QLIST_REMOVE(cur, list);
>> +        cur->release(cur->opaque);
>> +        g_free(cur);
>> +    }
>
> Same here.
>
>> +}
>>
>
>

WARNING: multiple messages have this Message-ID (diff)
From: liu ping fan <qemulist@gmail.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, "Jan Kiszka" <jan.kiszka@siemens.com>,
	"Marcelo Tosatti" <mtosatti@redhat.com>,
	qemu-devel@nongnu.org, "Blue Swirl" <blauwirbel@gmail.com>,
	"Avi Kivity" <avi@redhat.com>,
	"Anthony Liguori" <anthony@codemonkey.ws>,
	"Stefan Hajnoczi" <stefanha@gmail.com>,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH 03/15] qom: introduce reclaimer to release obj
Date: Thu, 9 Aug 2012 15:38:06 +0800	[thread overview]
Message-ID: <CAJnKYQkUNUT5xm6OYhMxxEcHZD9dQ1Gh-dnEXmzeJ667APY3Xg@mail.gmail.com> (raw)
In-Reply-To: <502232E5.80208@redhat.com>

On Wed, Aug 8, 2012 at 5:35 PM, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Il 08/08/2012 08:25, Liu Ping Fan ha scritto:
>> From: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
>>
>> Collect unused object and release them at caller demand.
>>
>> Signed-off-by: Liu Ping Fan <pingfank@linux.vnet.ibm.com>
>> ---
>>  include/qemu/reclaimer.h |   28 ++++++++++++++++++++++
>>  main-loop.c              |    5 ++++
>>  qemu-tool.c              |    5 ++++
>>  qom/Makefile.objs        |    2 +-
>>  qom/reclaimer.c          |   58 ++++++++++++++++++++++++++++++++++++++++++++++
>>  5 files changed, 97 insertions(+), 1 deletions(-)
>>  create mode 100644 include/qemu/reclaimer.h
>>  create mode 100644 qom/reclaimer.c
>>
>> diff --git a/include/qemu/reclaimer.h b/include/qemu/reclaimer.h
>> new file mode 100644
>> index 0000000..9307e93
>> --- /dev/null
>> +++ b/include/qemu/reclaimer.h
>> @@ -0,0 +1,28 @@
>> +/*
>> + * QEMU reclaimer
>> + *
>> + * Copyright IBM, Corp. 2012
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
>> + * See the COPYING file in the top-level directory.
>> + */
>> +
>> +#ifndef QEMU_RECLAIMER
>> +#define QEMU_RECLAIMER
>> +
>> +typedef void ReleaseHandler(void *opaque);
>> +typedef struct Chunk {
>> +    QLIST_ENTRY(Chunk) list;
>> +    void *opaque;
>> +    ReleaseHandler *release;
>> +} Chunk;
>> +
>> +typedef struct ChunkHead {
>> +        struct Chunk *lh_first;
>> +} ChunkHead;
>> +
>> +void reclaimer_enqueue(ChunkHead *head, void *opaque, ReleaseHandler *release);
>> +void reclaimer_worker(ChunkHead *head);
>> +void qemu_reclaimer_enqueue(void *opaque, ReleaseHandler *release);
>> +void qemu_reclaimer(void);
>
> So "enqueue" is call_rcu and qemu_reclaimer marks a quiescent state +
> empties the pending call_rcu.
>
> But what's the difference between the two pairs of APIs?
>
I add the new one for V2 to reclaim the resource for mem view. And
yes, as you point out, I will delete the 2nd API, for it can be
substituted by the 1st one easily.

>> +#endif
>> diff --git a/main-loop.c b/main-loop.c
>> index eb3b6e6..be9d095 100644
>> --- a/main-loop.c
>> +++ b/main-loop.c
>> @@ -26,6 +26,7 @@
>>  #include "qemu-timer.h"
>>  #include "slirp/slirp.h"
>>  #include "main-loop.h"
>> +#include "qemu/reclaimer.h"
>>
>>  #ifndef _WIN32
>>
>> @@ -505,5 +506,9 @@ int main_loop_wait(int nonblocking)
>>         them.  */
>>      qemu_bh_poll();
>>
>> +    /* ref to device from iohandler/bh/timer do not obey the rules, so delay
>> +     * reclaiming until now.
>> +     */
>> +    qemu_reclaimer();
>>      return ret;
>>  }
>> diff --git a/qemu-tool.c b/qemu-tool.c
>> index 318c5fc..f5fe319 100644
>> --- a/qemu-tool.c
>> +++ b/qemu-tool.c
>> @@ -21,6 +21,7 @@
>>  #include "main-loop.h"
>>  #include "qemu_socket.h"
>>  #include "slirp/libslirp.h"
>> +#include "qemu/reclaimer.h"
>>
>>  #include <sys/time.h>
>>
>> @@ -75,6 +76,10 @@ void qemu_mutex_unlock_iothread(void)
>>  {
>>  }
>>
>> +void qemu_reclaimer(void)
>> +{
>> +}
>> +
>>  int use_icount;
>>
>>  void qemu_clock_warp(QEMUClock *clock)
>> diff --git a/qom/Makefile.objs b/qom/Makefile.objs
>> index 5ef060a..a579261 100644
>> --- a/qom/Makefile.objs
>> +++ b/qom/Makefile.objs
>> @@ -1,4 +1,4 @@
>> -qom-obj-y = object.o container.o qom-qobject.o
>> +qom-obj-y = object.o container.o qom-qobject.o reclaimer.o
>>  qom-obj-twice-y = cpu.o
>>  common-obj-y = $(qom-obj-twice-y)
>>  user-obj-y = $(qom-obj-twice-y)
>> diff --git a/qom/reclaimer.c b/qom/reclaimer.c
>> new file mode 100644
>> index 0000000..6cb53e3
>> --- /dev/null
>> +++ b/qom/reclaimer.c
>> @@ -0,0 +1,58 @@
>> +/*
>> + * QEMU reclaimer
>> + *
>> + * Copyright IBM, Corp. 2012
>> + *
>> + * This work is licensed under the terms of the GNU GPL, version 2 or later.
>> + * See the COPYING file in the top-level directory.
>> + */
>> +
>> +#include "qemu-common.h"
>> +#include "qemu-thread.h"
>> +#include "main-loop.h"
>> +#include "qemu-queue.h"
>> +#include "qemu/reclaimer.h"
>> +
>> +static struct QemuMutex reclaimer_lock;
>> +static QLIST_HEAD(rcl, Chunk) reclaimer_list;
>> +
>> +void reclaimer_enqueue(ChunkHead *head, void *opaque, ReleaseHandler *release)
>> +{
>> +    Chunk *r = g_malloc0(sizeof(Chunk));
>> +    r->opaque = opaque;
>> +    r->release = release;
>> +    QLIST_INSERT_HEAD_RCU(head, r, list);
>> +}
>
> No lock?
Yes, need!  I will think it more closely.

Thanks and regards,
pingfan
>
>> +void reclaimer_worker(ChunkHead *head)
>> +{
>> +    Chunk *cur, *next;
>> +
>> +    QLIST_FOREACH_SAFE(cur, head, list, next) {
>> +        QLIST_REMOVE(cur, list);
>> +        cur->release(cur->opaque);
>> +        g_free(cur);
>> +    }
>
> QLIST_REMOVE needs a lock too, so using the lockless
> QLIST_INSERT_HEAD_RCU is not necessary.
>
>> +}
>> +
>> +void qemu_reclaimer_enqueue(void *opaque, ReleaseHandler *release)
>> +{
>> +    Chunk *r = g_malloc0(sizeof(Chunk));
>> +    r->opaque = opaque;
>> +    r->release = release;
>> +    qemu_mutex_lock(&reclaimer_lock);
>> +    QLIST_INSERT_HEAD_RCU(&reclaimer_list, r, list);
>> +    qemu_mutex_unlock(&reclaimer_lock);
>> +}
>> +
>> +
>> +void qemu_reclaimer(void)
>> +{
>> +    Chunk *cur, *next;
>> +
>> +    QLIST_FOREACH_SAFE(cur, &reclaimer_list, list, next) {
>> +        QLIST_REMOVE(cur, list);
>> +        cur->release(cur->opaque);
>> +        g_free(cur);
>> +    }
>
> Same here.
>
>> +}
>>
>
>

  reply	other threads:[~2012-08-09  7:38 UTC|newest]

Thread overview: 154+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-08  6:25 [PATCH 0/15 v2] prepare unplug out of protection of global lock Liu Ping Fan
2012-08-08  6:25 ` [Qemu-devel] " Liu Ping Fan
2012-08-08  6:25 ` [PATCH 01/15] atomic: introduce atomic operations Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  8:55   ` Paolo Bonzini
2012-08-08  8:55     ` [Qemu-devel] " Paolo Bonzini
2012-08-08  9:02   ` Avi Kivity
2012-08-08  9:02     ` [Qemu-devel] " Avi Kivity
2012-08-08  9:05     ` 陳韋任 (Wei-Ren Chen)
2012-08-08  9:05       ` 陳韋任 (Wei-Ren Chen)
2012-08-08  9:15       ` Avi Kivity
2012-08-08  9:15         ` [Qemu-devel] " Avi Kivity
2012-08-08  9:21   ` Peter Maydell
2012-08-08  9:21     ` Peter Maydell
2012-08-08 13:09     ` Stefan Hajnoczi
2012-08-08 13:09       ` Stefan Hajnoczi
2012-08-08 13:18       ` Paolo Bonzini
2012-08-08 13:18         ` Paolo Bonzini
2012-08-08 13:32         ` Peter Maydell
2012-08-08 13:32           ` [Qemu-devel] " Peter Maydell
2012-08-08 13:49           ` Paolo Bonzini
2012-08-08 13:49             ` [Qemu-devel] " Paolo Bonzini
2012-08-08 14:00             ` Avi Kivity
2012-08-08 14:00               ` [Qemu-devel] " Avi Kivity
2012-08-08  6:25 ` [PATCH 02/15] qom: using atomic ops to re-implement object_ref Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  6:25 ` [PATCH 03/15] qom: introduce reclaimer to release obj Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:05   ` Avi Kivity
2012-08-08  9:05     ` [Qemu-devel] " Avi Kivity
2012-08-08  9:07     ` Paolo Bonzini
2012-08-08  9:07       ` [Qemu-devel] " Paolo Bonzini
2012-08-08  9:15       ` Avi Kivity
2012-08-08  9:15         ` [Qemu-devel] " Avi Kivity
2012-08-09  7:33         ` liu ping fan
2012-08-09  7:33           ` [Qemu-devel] " liu ping fan
2012-08-09  7:49           ` Paolo Bonzini
2012-08-09  7:49             ` [Qemu-devel] " Paolo Bonzini
2012-08-09  8:18             ` Avi Kivity
2012-08-09  8:18               ` [Qemu-devel] " Avi Kivity
2012-08-10  6:43               ` liu ping fan
2012-08-10  6:43                 ` [Qemu-devel] " liu ping fan
2012-08-08  9:35   ` Paolo Bonzini
2012-08-08  9:35     ` [Qemu-devel] " Paolo Bonzini
2012-08-09  7:38     ` liu ping fan [this message]
2012-08-09  7:38       ` liu ping fan
2012-08-08  6:25 ` [PATCH 04/15] memory: MemoryRegion topology must be stable when updating Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:13   ` Avi Kivity
2012-08-08  9:13     ` [Qemu-devel] " Avi Kivity
2012-08-09  7:28     ` liu ping fan
2012-08-09  7:28       ` [Qemu-devel] " liu ping fan
2012-08-09  8:24       ` Avi Kivity
2012-08-09  8:24         ` [Qemu-devel] " Avi Kivity
2012-08-10  6:44         ` liu ping fan
2012-08-10  6:44           ` [Qemu-devel] " liu ping fan
2012-08-13 18:28       ` Marcelo Tosatti
2012-08-13 18:28         ` [Qemu-devel] " Marcelo Tosatti
2012-08-08 19:17   ` Blue Swirl
2012-08-08 19:17     ` [Qemu-devel] " Blue Swirl
2012-08-09  7:28     ` liu ping fan
2012-08-09  7:28       ` [Qemu-devel] " liu ping fan
2012-08-09 17:09       ` Blue Swirl
2012-08-09 17:09         ` [Qemu-devel] " Blue Swirl
2012-08-08  6:25 ` [PATCH 05/15] memory: introduce life_ops to MemoryRegion Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:18   ` Avi Kivity
2012-08-08  9:18     ` [Qemu-devel] " Avi Kivity
2012-08-08  6:25 ` [PATCH 06/15] memory: use refcnt to manage MemoryRegion Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:20   ` Avi Kivity
2012-08-08  9:20     ` [Qemu-devel] " Avi Kivity
2012-08-09  7:27     ` liu ping fan
2012-08-09  7:27       ` [Qemu-devel] " liu ping fan
2012-08-09  8:38       ` Avi Kivity
2012-08-09  8:38         ` [Qemu-devel] " Avi Kivity
2012-08-10  6:44         ` liu ping fan
2012-08-10  6:44           ` [Qemu-devel] " liu ping fan
2012-08-12  8:43           ` Avi Kivity
2012-08-12  8:43             ` [Qemu-devel] " Avi Kivity
2012-08-08  6:25 ` [PATCH 07/15] memory: inc/dec mr's ref when adding/removing from mem view Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  6:25 ` [PATCH 08/15] memory: introduce PhysMap to present snapshot of toploygy Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:27   ` Avi Kivity
2012-08-08  9:27     ` [Qemu-devel] " Avi Kivity
2012-08-08 19:18   ` Blue Swirl
2012-08-08 19:18     ` [Qemu-devel] " Blue Swirl
2012-08-09  7:29     ` liu ping fan
2012-08-09  7:29       ` [Qemu-devel] " liu ping fan
2012-08-08  6:25 ` [PATCH 09/15] memory: prepare flatview and radix-tree for rcu style access Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:41   ` Avi Kivity
2012-08-08  9:41     ` [Qemu-devel] " Avi Kivity
2012-08-11  1:58     ` liu ping fan
2012-08-11  1:58       ` [Qemu-devel] " liu ping fan
2012-08-11 10:06       ` liu ping fan
2012-08-11 10:06         ` [Qemu-devel] " liu ping fan
2012-08-08 19:23   ` Blue Swirl
2012-08-08 19:23     ` [Qemu-devel] " Blue Swirl
2012-08-09  7:29     ` liu ping fan
2012-08-09  7:29       ` [Qemu-devel] " liu ping fan
2012-08-08  6:25 ` [PATCH 10/15] memory: change tcg related code to using PhysMap Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  6:25 ` [PATCH 11/15] lock: introduce global lock for device tree Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:41   ` Paolo Bonzini
2012-08-08  9:41     ` [Qemu-devel] " Paolo Bonzini
2012-08-09  7:28     ` liu ping fan
2012-08-09  7:28       ` [Qemu-devel] " liu ping fan
2012-08-09  7:41       ` Paolo Bonzini
2012-08-09  7:41         ` [Qemu-devel] " Paolo Bonzini
2012-08-08  9:42   ` Avi Kivity
2012-08-08  9:42     ` [Qemu-devel] " Avi Kivity
2012-08-09  7:27     ` liu ping fan
2012-08-09  7:27       ` [Qemu-devel] " liu ping fan
2012-08-09  8:31       ` Avi Kivity
2012-08-09  8:31         ` [Qemu-devel] " Avi Kivity
2012-08-08  6:25 ` [PATCH 12/15] qdev: using devtree lock to protect device's accessing Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:33   ` Peter Maydell
2012-08-08  9:33     ` [Qemu-devel] " Peter Maydell
2012-08-08  6:25 ` [PATCH 13/15] hotplug: introduce qdev_unplug_complete() to remove device from views Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:52   ` Paolo Bonzini
2012-08-08  9:52     ` [Qemu-devel] " Paolo Bonzini
2012-08-08 10:07     ` Avi Kivity
2012-08-08 10:07       ` [Qemu-devel] " Avi Kivity
2012-08-09  7:28     ` liu ping fan
2012-08-09  7:28       ` [Qemu-devel] " liu ping fan
2012-08-09  8:00       ` Paolo Bonzini
2012-08-09  8:00         ` [Qemu-devel] " Paolo Bonzini
2012-08-10  6:42         ` liu ping fan
2012-08-10  6:42           ` [Qemu-devel] " liu ping fan
2012-08-13 18:53           ` Marcelo Tosatti
2012-08-13 18:53             ` [Qemu-devel] " Marcelo Tosatti
2012-08-13 18:51         ` Marcelo Tosatti
2012-08-13 18:51           ` [Qemu-devel] " Marcelo Tosatti
2012-08-08  6:25 ` [PATCH 14/15] qom: object_unref call reclaimer Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:40   ` Paolo Bonzini
2012-08-08  9:40     ` [Qemu-devel] " Paolo Bonzini
2012-08-13 18:56   ` Marcelo Tosatti
2012-08-13 18:56     ` [Qemu-devel] " Marcelo Tosatti
2012-08-08  6:25 ` [PATCH 15/15] e1000: using new interface--unmap to unplug Liu Ping Fan
2012-08-08  6:25   ` [Qemu-devel] " Liu Ping Fan
2012-08-08  9:56   ` Paolo Bonzini
2012-08-08  9:56     ` [Qemu-devel] " Paolo Bonzini
2012-08-09  7:28     ` liu ping fan
2012-08-09  7:28       ` [Qemu-devel] " liu ping fan
2012-08-09  7:40       ` Paolo Bonzini
2012-08-09  7:40         ` [Qemu-devel] " Paolo Bonzini
2012-08-10  6:43         ` liu ping fan
2012-08-10  6:43           ` [Qemu-devel] " liu ping fan

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=CAJnKYQkUNUT5xm6OYhMxxEcHZD9dQ1Gh-dnEXmzeJ667APY3Xg@mail.gmail.com \
    --to=qemulist@gmail.com \
    --cc=afaerber@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=avi@redhat.com \
    --cc=blauwirbel@gmail.com \
    --cc=jan.kiszka@siemens.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@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.