From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33232) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V7MEm-0005sW-FO for qemu-devel@nongnu.org; Thu, 08 Aug 2013 05:10:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1V7MEe-0002MP-TV for qemu-devel@nongnu.org; Thu, 08 Aug 2013 05:10:28 -0400 Received: from mail6.webfaction.com ([74.55.86.74]:33423 helo=smtp.webfaction.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1V7MEe-0002M2-Nu for qemu-devel@nongnu.org; Thu, 08 Aug 2013 05:10:20 -0400 Message-ID: <5203607A.3020104@ctshepherd.com> Date: Thu, 08 Aug 2013 10:10:18 +0100 From: Charlie Shepherd MIME-Version: 1.0 References: <1375728247-1306-1-git-send-email-charlie@ctshepherd.com> <1375728247-1306-3-git-send-email-charlie@ctshepherd.com> <20130807191805.GA16226@stefanha-thinkpad.hitronhub.home> <20130807221336.GA4393@kerneis.info> <5202F483.9020109@ctshepherd.com> <20130808061619.GA4736@kerneis.info> In-Reply-To: <20130808061619.GA4736@kerneis.info> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 2/5] qemu_coroutine_self should not be marked coroutine_fn as it cannot yield List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Gabriel Kerneis Cc: kwolf@redhat.com, Stefan Hajnoczi , qemu-devel@nongnu.org, pbonzini@redhat.com On 08/08/2013 07:16, Gabriel Kerneis wrote: > On Thu, Aug 08, 2013 at 02:29:39AM +0100, Charlie Shepherd wrote: >> On 07/08/2013 23:13, Gabriel Kerneis wrote: >>> On Wed, Aug 07, 2013 at 09:18:05PM +0200, Stefan Hajnoczi wrote: >>>> I guess the practical problem is that CPC will get >>>> upset that it's being called by the coroutine implementation from >>>> non-coroutine contexts. >>> But is it really the case? If Charlie added an annotation, it probably means >>> that in practice it was only called from coroutine context anyway. >> It was also called from coroutine implementation in functions that >> weren't annotated coroutine_fn (qemu_coroutine_switch() and >> friends). > In that case, the interface/implementation split suggested by Stefan makes > sense. > > Note that qemu_coroutine_self() in principle really needs to be annotated > coroutine_fn since it accesses (and returns) its execution context. The fact > that it is implemented with thread-local variables in Qemu is an implementation > detail, almost a hack (however smart); the "natural" CPC way would be to just > return the coroutine associated with the current continuation. So keeping the > annotation definitely makes sense. While that would be the natural way, we are going to need the thread local variables regardless due to the use of the "leader" coroutine I believe (Stefan is this correct?). Also implementing the split in the way Stefan suggests would mean it's not possible to return the CPC continuation without a hack like the last hack I did for qemu_coroutine_yield(), as internal_qemu_coroutine_self() (I guess this function needs a better name too) would be marked as non coroutine across all coroutine implementions (ie in coroutine_int.h). Charlie