From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34143) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YqFc7-0004Zs-1w for qemu-devel@nongnu.org; Thu, 07 May 2015 02:48:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YqFc3-0003r0-Hd for qemu-devel@nongnu.org; Thu, 07 May 2015 02:48:54 -0400 Received: from mail.ispras.ru ([83.149.199.45]:39111) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YqFc3-0003qf-9e for qemu-devel@nongnu.org; Thu, 07 May 2015 02:48:51 -0400 From: "Pavel Dovgaluk" References: <20150506140238.17288.87548.stgit@PASHA-ISP> <20150506140406.17288.85396.stgit@PASHA-ISP> <554A27A8.4040700@redhat.com> In-Reply-To: <554A27A8.4040700@redhat.com> Date: Thu, 7 May 2015 09:48:51 +0300 Message-ID: <000601d08891$e1e98f40$a5bcadc0$@Dovgaluk@ispras.ru> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Language: ru Subject: Re: [Qemu-devel] [RFC PATCH v13 15/21] bottom halves: introduce bh call function List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: 'Paolo Bonzini' , qemu-devel@nongnu.org Cc: peter.maydell@linaro.org, peter.crosthwaite@xilinx.com, alex.bennee@linaro.org, mark.burton@greensocs.com, real@ispras.ru, batuzovk@ispras.ru, maria.klimushenkova@ispras.ru, fred.konrad@greensocs.com > From: Paolo Bonzini [mailto:pbonzini@redhat.com] > On 06/05/2015 16:04, Pavel Dovgalyuk wrote: > > This patch introduces aio_bh_call function. It is used to execute > > bottom halves as callbacks without adding them to the queue. > > > > Signed-off-by: Pavel Dovgalyuk > > --- > > async.c | 8 +++++++- > > include/block/aio.h | 5 +++++ > > 2 files changed, 12 insertions(+), 1 deletions(-) > > > > diff --git a/async.c b/async.c > > index 46d9e63..734c76c 100644 > > --- a/async.c > > +++ b/async.c > > @@ -59,6 +59,12 @@ QEMUBH *aio_bh_new(AioContext *ctx, QEMUBHFunc = *cb, void *opaque) > > return bh; > > } > > > > +void aio_bh_call(void *opaque) > > +{ > > + QEMUBH *bh =3D (QEMUBH *)opaque; >=20 > This can have a QEMUBH * argument. I can fix it when committing. >=20 > > + bh->cb(bh->opaque); > > +} > > + > > /* Multiple occurrences of aio_bh_poll cannot be called = concurrently */ > > int aio_bh_poll(AioContext *ctx) > > { > > @@ -82,7 +88,7 @@ int aio_bh_poll(AioContext *ctx) > > if (!bh->idle) > > ret =3D 1; > > bh->idle =3D 0; > > - bh->cb(bh->opaque); > > + aio_bh_call(bh); > > } > > } > > > > diff --git a/include/block/aio.h b/include/block/aio.h > > index d2bb423..b498704 100644 > > --- a/include/block/aio.h > > +++ b/include/block/aio.h > > @@ -157,6 +157,11 @@ QEMUBH *aio_bh_new(AioContext *ctx, QEMUBHFunc = *cb, void *opaque); > > void aio_notify(AioContext *ctx); > > > > /** > > + * aio_bh_call: Executes callback function of the specified BH. > > + */ > > +void aio_bh_call(void *opaque); > > + > > +/** > > * aio_bh_poll: Poll bottom halves for an AioContext. > > * > > * These are internal functions used by the QEMU main loop. > > >=20 > Works for me! I am not sure why patch 16 works though. :) I'll = ponder > on it, in the meanwhile some extra explanation from you would be = welcome... As you know, there is a replay queue for different asynchronous events = like user input or thread pool callback. ptimer uses bottom halves layer to execute such an asynchronous = callback. We put this callback into the replay queue instead of bottom halves one. When checkpoint is met by main loop thread, the replay queue is = processed and callback is executed. Binding callback moment to one of the checkpoints makes it = deterministic. Pavel Dovgalyuk