From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53047) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X7S7V-0001Hb-N5 for qemu-devel@nongnu.org; Wed, 16 Jul 2014 12:31:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X7S7P-0000v9-Fm for qemu-devel@nongnu.org; Wed, 16 Jul 2014 12:31:53 -0400 Received: from mail-pd0-f173.google.com ([209.85.192.173]:62483) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X7S7P-0000v5-AT for qemu-devel@nongnu.org; Wed, 16 Jul 2014 12:31:47 -0400 Received: by mail-pd0-f173.google.com with SMTP id w10so1501839pde.18 for ; Wed, 16 Jul 2014 09:31:46 -0700 (PDT) From: Ming Lei Date: Thu, 17 Jul 2014 00:31:09 +0800 Message-Id: <1405528281-23744-3-git-send-email-ming.lei@canonical.com> In-Reply-To: <1405528281-23744-1-git-send-email-ming.lei@canonical.com> References: <1405528281-23744-1-git-send-email-ming.lei@canonical.com> Subject: [Qemu-devel] [PATCH RFC 02/14] qemu aio: prepare for supporting selective bypass coroutine List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, Paolo Bonzini , Stefan Hajnoczi Cc: Kevin Wolf , Ming Lei , Fam Zheng , "Michael S. Tsirkin" If device thinks that it isn't necessary to apply coroutine in its performance sensitive path, it can call qemu_aio_set_bypass_co(false) to bypass the coroutine which has supported bypass mode and just call the function directly. One example is virtio-blk dataplane. Signed-off-by: Ming Lei --- async.c | 1 + include/block/aio.h | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/async.c b/async.c index 34af0b2..251a074 100644 --- a/async.c +++ b/async.c @@ -293,6 +293,7 @@ AioContext *aio_context_new(void) (EventNotifierHandler *) event_notifier_test_and_clear); timerlistgroup_init(&ctx->tlg, aio_timerlist_notify, ctx); + qemu_aio_set_bypass_co(ctx, false); return ctx; } diff --git a/include/block/aio.h b/include/block/aio.h index c23de3c..48d827e 100644 --- a/include/block/aio.h +++ b/include/block/aio.h @@ -87,6 +87,9 @@ struct AioContext { /* TimerLists for calling timers - one per clock type */ QEMUTimerListGroup tlg; + + /* support selective bypass coroutine */ + bool bypass_co; }; /* Used internally to synchronize aio_poll against qemu_bh_schedule. */ @@ -303,4 +306,14 @@ static inline void aio_timer_init(AioContext *ctx, timer_init(ts, ctx->tlg.tl[type], scale, cb, opaque); } +static inline void qemu_aio_set_bypass_co(AioContext *ctx, bool bypass) +{ + ctx->bypass_co = bypass; +} + +static inline bool qemu_aio_get_bypass_co(AioContext *ctx) +{ + return ctx->bypass_co; +} + #endif -- 1.7.9.5