From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-5.5 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F65CC28CC3 for ; Fri, 7 Jun 2019 07:59:54 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 27FFE208C0 for ; Fri, 7 Jun 2019 07:59:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 27FFE208C0 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:46620 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hZ9mz-0007YQ-E8 for qemu-devel@archiver.kernel.org; Fri, 07 Jun 2019 03:59:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49341) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hZ9lI-0006zc-So for qemu-devel@nongnu.org; Fri, 07 Jun 2019 03:58:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hZ9lD-0000GE-Km for qemu-devel@nongnu.org; Fri, 07 Jun 2019 03:58:06 -0400 Received: from mx1.redhat.com ([209.132.183.28]:47210) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hZ9l3-0008Lo-6o; Fri, 07 Jun 2019 03:57:53 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id D0883C04BD48; Fri, 7 Jun 2019 07:57:48 +0000 (UTC) Received: from dhcp-200-226.str.redhat.com (dhcp-200-226.str.redhat.com [10.33.200.226]) by smtp.corp.redhat.com (Postfix) with ESMTPS id BB31F5B2EB; Fri, 7 Jun 2019 07:57:41 +0000 (UTC) Date: Fri, 7 Jun 2019 09:57:40 +0200 From: Kevin Wolf To: Vladimir Sementsov-Ogievskiy Message-ID: <20190607075740.GA5055@dhcp-200-226.str.redhat.com> References: <20190411172709.205032-1-vsementsov@virtuozzo.com> <20190411172709.205032-6-vsementsov@virtuozzo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190411172709.205032-6-vsementsov@virtuozzo.com> User-Agent: Mutt/1.11.3 (2019-02-01) X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 07 Jun 2019 07:57:48 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: Re: [Qemu-devel] [PATCH v6 5/7] qemu-coroutine-sleep: introduce qemu_co_sleep_wake X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: qemu-block@nongnu.org, armbru@redhat.com, qemu-devel@nongnu.org, mreitz@redhat.com, stefanha@redhat.com, den@openvz.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Am 11.04.2019 um 19:27 hat Vladimir Sementsov-Ogievskiy geschrieben: > Introduce a function to gracefully wake-up a coroutine, sleeping in > qemu_co_sleep_ns() sleep. > > Signed-off-by: Vladimir Sementsov-Ogievskiy You can simply reenter the coroutine while it has yielded in qemu_co_sleep_ns(). This is supported. I think what you add here is just the condition that you wake up the coroutine only if it's currently sleeping, but not when it has yielded for other reasons. This suggests that you're trying to reenter a coroutine of which you don't know where exactly in its code it currently is. This is wrong. Just knowing that it's sleeping doesn't tell you where the coroutine is. It could have called a function that sleeps internally and must not be woken up early. If you reenter a coroutine, you always must know the exact point where it yielded (or in exceptional cases, the exact points (plural)). Just reentering because it sleeps will wake it up in unexpected places, generally speaking. So I don't think this function is a good idea. It's too easy to misuse, and if you don't misuse it, you can directly call aio_co_wake(). Kevin