From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33257) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VEbS2-00064D-GW for qemu-devel@nongnu.org; Wed, 28 Aug 2013 04:50:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VEbRv-0006Xj-74 for qemu-devel@nongnu.org; Wed, 28 Aug 2013 04:50:06 -0400 Received: from mail-ea0-f181.google.com ([209.85.215.181]:43549) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VEbRv-0006XM-1L for qemu-devel@nongnu.org; Wed, 28 Aug 2013 04:49:59 -0400 Received: by mail-ea0-f181.google.com with SMTP id d10so2781552eaj.40 for ; Wed, 28 Aug 2013 01:49:43 -0700 (PDT) Date: Wed, 28 Aug 2013 10:49:36 +0200 From: Stefan Hajnoczi Message-ID: <20130828084936.GF4696@stefanha-thinkpad.muc.redhat.com> References: <1377614385-20466-1-git-send-email-stefanha@redhat.com> <521D6DAD.6080309@linux.vnet.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <521D6DAD.6080309@linux.vnet.ibm.com> Subject: Re: [Qemu-devel] [RFC] aio: add aio_context_acquire() and aio_context_release() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Wenchao Xia Cc: Kevin Wolf , Paolo Bonzini , qemu-devel@nongnu.org, Stefan Hajnoczi On Wed, Aug 28, 2013 at 11:25:33AM +0800, Wenchao Xia wrote: > > +void aio_context_release(AioContext *ctx) > > +{ > > + qemu_mutex_lock(&ctx->acquire_lock); > > + assert(ctx->owner && qemu_thread_is_self(ctx->owner)); > > + ctx->owner = NULL; > > + qemu_cond_signal(&ctx->acquire_cond); > > + qemu_mutex_unlock(&ctx->acquire_lock); > > +} > if main thread have call bdrv_aio_readv(cb *bdrv_cb), now it > is possible bdrv_cb will be executed in another thread which > aio_context_acquire() it. I think there are some ways to solve, > but leave a comments here now to tip better? Callbacks, BHs, and timers are executed in the thread that calls aio_poll(). This is safe since other threads cannot run aio_poll() or submit new block I/O requests at the same time. In other words: code should only care which AioContext it runs under, not which thread ID it runs under. (I think we talked about this on IRC a few weeks ago.) Are there any situations you are worried about? Stefan