From nobody Mon Feb 9 17:22:51 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1658300631; cv=none; d=zohomail.com; s=zohoarc; b=R3WSp6vohfmccbB3nulssmG8nEaRJbrE3kwPOCll/Pb4RxvbAzctAd3c5bfVZUlQBl+71QWaAfGa0lH8VxqUVDuTdp6Nt2AY22yIQngYBvtV6Rm3eOfPVoIG2lIessMLB/Ek5lkwlxA+OEijoxhxK8YKl/WY6/KdvHqQU3cVcCM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658300631; 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=v41Tsv2G5qImHxJ5w/1z5aG++NeWgfcws8c/jbD/QzE=; b=T89TI8KoyK78pnyR8D5LGDT1OGnUoey9wgv5oAgHjNu44Zhvh52SwEcFe6XgR2pPLBrpP1fI+fX5tsrd9J9Kuy7ISq8I8rQuQAhMIS51kPaLdVOoouLe0cQw6RRtL++nGqBOko9i4jZyMe6OWTfhEA04HMrRx0x1uf+JqW2T1K4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1658300631304845.3739796074576; Wed, 20 Jul 2022 00:03:51 -0700 (PDT) Received: from localhost ([::1]:56768 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oE3kM-0003L7-B6 for importer@patchew.org; Wed, 20 Jul 2022 03:03:50 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:33508) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oE3gv-0000Mq-MG for qemu-devel@nongnu.org; Wed, 20 Jul 2022 03:00:23 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:42732) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oE3gp-0006Rv-6M for qemu-devel@nongnu.org; Wed, 20 Jul 2022 03:00:16 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-372-eBeRAj78P462uCmNtX2tIg-1; Wed, 20 Jul 2022 03:00:07 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 8F65E185A7B2; Wed, 20 Jul 2022 07:00:06 +0000 (UTC) Received: from eperezma.remote.csb (unknown [10.39.192.102]) by smtp.corp.redhat.com (Postfix) with ESMTP id 9902818ECC; Wed, 20 Jul 2022 07:00:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1658300410; 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=v41Tsv2G5qImHxJ5w/1z5aG++NeWgfcws8c/jbD/QzE=; b=NLeJPqJQdUJAvwURG9zctd5RPklH+hQmSZMPbMgudvNjHOGeK0/xe7i6/XADI9FKqgok+r 67969nS6HHf0GoJdeLcpoZq6oSLIoZTmn0bPP0aSrKQrawq6BFUiYuCVrw9fxhxYhzY0KK GDHGsmWbAA9TWAaas+7/NS4+UbL0to4= X-MC-Unique: eBeRAj78P462uCmNtX2tIg-1 From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: qemu-devel@nongnu.org Cc: Stefano Garzarella , Liuxiangdong , Cornelia Huck , Laurent Vivier , Eli Cohen , Harpreet Singh Anand , Cindy Lu , Eric Blake , Zhu Lingshan , Jason Wang , Gautam Dawar , Parav Pandit , "Michael S. Tsirkin" , Markus Armbruster , Stefan Hajnoczi , Paolo Bonzini , "Gonglei (Arei)" Subject: [PATCH v6 04/21] vdpa: Avoid compiler to squash reads to used idx Date: Wed, 20 Jul 2022 08:59:29 +0200 Message-Id: <20220720065946.3122611-5-eperezma@redhat.com> In-Reply-To: <20220720065946.3122611-1-eperezma@redhat.com> References: <20220720065946.3122611-1-eperezma@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 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=170.10.133.124; envelope-from=eperezma@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -21 X-Spam_score: -2.2 X-Spam_bar: -- X-Spam_report: (-2.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.082, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1658300632406100001 In the next patch we will allow busypolling of this value. The compiler have a running path where shadow_used_idx, last_used_idx, and vring used idx are not modified within the same thread busypolling. This was not an issue before since we always cleared device event notifier before checking it, and that could act as memory barrier. However, the busypoll needs something similar to kernel READ_ONCE. Let's add it here, sepparated from the polling. Signed-off-by: Eugenio P=C3=A9rez --- hw/virtio/vhost-shadow-virtqueue.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/virtio/vhost-shadow-virtqueue.c b/hw/virtio/vhost-shadow-vi= rtqueue.c index e2184a4481..560d07ab36 100644 --- a/hw/virtio/vhost-shadow-virtqueue.c +++ b/hw/virtio/vhost-shadow-virtqueue.c @@ -327,11 +327,12 @@ static void vhost_handle_guest_kick_notifier(EventNot= ifier *n) =20 static bool vhost_svq_more_used(VhostShadowVirtqueue *svq) { + uint16_t *used_idx =3D &svq->vring.used->idx; if (svq->last_used_idx !=3D svq->shadow_used_idx) { return true; } =20 - svq->shadow_used_idx =3D cpu_to_le16(svq->vring.used->idx); + svq->shadow_used_idx =3D cpu_to_le16(*(volatile uint16_t *)used_idx); =20 return svq->last_used_idx !=3D svq->shadow_used_idx; } --=20 2.31.1