From nobody Thu Dec 18 17:55:18 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1597682849; cv=none; d=zohomail.com; s=zohoarc; b=QXuRaIz+WhQ9S9LeVa2RDOQWuWAMNsLlN6KTzRmV4paah4VW+59iBYiMiCrv9p+uKHJPl0Pe4VPRIe1NV3e/38gZONbVmb1Etm4Ovy33Gv8uVzojVYUW2rKiMx8IAwqz5lfITY+VhfYbwPsGvGHbN0cshYb7rCerM/XqISmmBNo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597682849; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=GuRV43yqQdNCB2WTLyAguTX0OKSfy9SmIjrn7/b6Sko=; b=VgAQRTWJtpvdibmNee91zy+3HMY+tmThkMn5UTbKrfzksolYzKtSQqZeV/VLs9qxQPiXYAaxAlgES3z+p1u0cvbUAFmb48f1ALJw5JItBrqmDVjZt1RqN4y8VHoGlj3mNG3v+plX/VL+++lpB5lsx3HZ8I9cLEcUJQPTfddh1e4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597682849545727.4921725233671; Mon, 17 Aug 2020 09:47:29 -0700 (PDT) Received: from localhost ([::1]:51162 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k7hI9-0000tF-4J for importer@patchew.org; Mon, 17 Aug 2020 11:43:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51236) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k7gsb-00088C-60 for qemu-devel@nongnu.org; Mon, 17 Aug 2020 11:16:57 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:57565 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1k7gsY-0003hH-IK for qemu-devel@nongnu.org; Mon, 17 Aug 2020 11:16:56 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-288-wLi6SOe_NzKFNacGDakofg-1; Mon, 17 Aug 2020 11:16:50 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5AD8B81F017; Mon, 17 Aug 2020 15:16:49 +0000 (UTC) Received: from localhost (ovpn-112-42.ams2.redhat.com [10.36.112.42]) by smtp.corp.redhat.com (Postfix) with ESMTP id C380F10021AA; Mon, 17 Aug 2020 15:16:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1597677412; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GuRV43yqQdNCB2WTLyAguTX0OKSfy9SmIjrn7/b6Sko=; b=Z89SdUhmDZCgA1KRvU1VnbWBcp0LLVXqtAQfH+BxB7xJ5sj1gcwPqPT9QMwft8xK3bQbmn uKRvsdb2nyaFUB7cZLeIiZLaTLOgT/xWj5epJDR4rnNQeOPrbX4PXA7iFgDl8D3nCxicWi GiazTvVDPYZLZ1VRa4XFCoBpGOFqTR8= X-MC-Unique: wLi6SOe_NzKFNacGDakofg-1 From: Stefan Hajnoczi To: qemu-devel@nongnu.org, Peter Maydell Subject: [PULL 2/3] async: always set ctx->notified in aio_notify() Date: Mon, 17 Aug 2020 16:16:33 +0100 Message-Id: <20200817151634.35563-3-stefanha@redhat.com> In-Reply-To: <20200817151634.35563-1-stefanha@redhat.com> References: <20200817151634.35563-1-stefanha@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=stefanha@redhat.com X-Mimecast-Spam-Score: 0.002 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=205.139.110.61; envelope-from=stefanha@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/08/17 05:03:47 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action 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: Fam Zheng , Kevin Wolf , Eduardo Habkost , qemu-block@nongnu.org, Max Reitz , Stefan Hajnoczi , Cleber Rosa , Paolo Bonzini , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" aio_notify() does not set ctx->notified when called with ctx->aio_notify_me disabled. Therefore aio_notify_me needs to be enabled during polling. This is suboptimal since expensive event_notifier_set(&ctx->notifier) and event_notifier_test_and_clear(&ctx->notifier) calls are required when ctx->aio_notify_me is enabled. Change aio_notify() so that aio->notified is always set, regardless of ctx->aio_notify_me. This will make polling cheaper since ctx->aio_notify_me can remain disabled. Move the event_notifier_test_and_clear() to the fd handler function (which is now no longer an empty function so "dummy" has been dropped from its name). The next patch takes advantage of this by optimizing polling in util/aio-posix.c. Signed-off-by: Stefan Hajnoczi Reviewed-by: Paolo Bonzini Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-id: 20200806131802.569478-3-stefanha@redhat.com [Paolo Bonzini pointed out that the smp_wmb() in aio_notify_accept() should be smp_wb() but the comment should be smp_wmb() instead of smp_wb(). Fixed. --Stefan] Signed-off-by: Stefan Hajnoczi --- util/async.c | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/util/async.c b/util/async.c index d9f987e133..4266745dee 100644 --- a/util/async.c +++ b/util/async.c @@ -419,25 +419,32 @@ LuringState *aio_get_linux_io_uring(AioContext *ctx) =20 void aio_notify(AioContext *ctx) { - /* Write e.g. bh->scheduled before reading ctx->notify_me. Pairs + /* + * Write e.g. bh->flags before writing ctx->notified. Pairs with smp_= mb in + * aio_notify_accept. + */ + smp_wmb(); + atomic_set(&ctx->notified, true); + + /* + * Write ctx->notified before reading ctx->notify_me. Pairs * with smp_mb in aio_ctx_prepare or aio_poll. */ smp_mb(); if (atomic_read(&ctx->notify_me)) { event_notifier_set(&ctx->notifier); - atomic_mb_set(&ctx->notified, true); } } =20 void aio_notify_accept(AioContext *ctx) { - if (atomic_xchg(&ctx->notified, false) -#ifdef WIN32 - || true -#endif - ) { - event_notifier_test_and_clear(&ctx->notifier); - } + atomic_set(&ctx->notified, false); + + /* + * Write ctx->notified before reading e.g. bh->flags. Pairs with smp_= wmb + * in aio_notify. + */ + smp_mb(); } =20 static void aio_timerlist_notify(void *opaque, QEMUClockType type) @@ -445,8 +452,11 @@ static void aio_timerlist_notify(void *opaque, QEMUClo= ckType type) aio_notify(opaque); } =20 -static void aio_context_notifier_dummy_cb(EventNotifier *e) +static void aio_context_notifier_cb(EventNotifier *e) { + AioContext *ctx =3D container_of(e, AioContext, notifier); + + event_notifier_test_and_clear(&ctx->notifier); } =20 /* Returns true if aio_notify() was called (e.g. a BH was scheduled) */ @@ -508,7 +518,7 @@ AioContext *aio_context_new(Error **errp) =20 aio_set_event_notifier(ctx, &ctx->notifier, false, - aio_context_notifier_dummy_cb, + aio_context_notifier_cb, aio_context_notifier_poll); #ifdef CONFIG_LINUX_AIO ctx->linux_aio =3D NULL; --=20 2.26.2