From nobody Tue Feb 10 02:49:04 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=1658237159; cv=none; d=zohomail.com; s=zohoarc; b=RJojSePCYvb5r6VDUb++WAYy4UwWOaE3t0QD6uJNNNOB5KLvgGfzzivYblGa9b09CAnM18ZG3u9qoPnGRzIO50ikWoiCqd2cW4InsiCqaKDmM80+azq1UpLfoIuG34gFMFgVi4zwMVYs2qpfOm5KfHUZAQ1sL3wXJUF4Furwyxk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658237159; 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=2G4CfY7T1VZeOzHmVwzEz7gw1/UKh2ZTwHQxLW6ZvAw=; b=KOuWBzKmbf3WZP1+JiqLpdCZX9H0X9LoxHEBM78nTG3VfvFFTqG2KbIhHdM5dS/ov+y9rmeaA3GLYzx+lgG2pM39TN4b9AcqEkWT0SDEClnqvAdCvxtQ4RE4+/b05QzkOA0tRmr2kDRsikELbCk7yuOcyBdkKRi13RVd8+4xURA= 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 1658237159184676.8353675148246; Tue, 19 Jul 2022 06:25:59 -0700 (PDT) Received: from localhost ([::1]:55306 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oDnEc-00051e-4I for importer@patchew.org; Tue, 19 Jul 2022 09:25:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40488) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDn63-00079f-1U for qemu-devel@nongnu.org; Tue, 19 Jul 2022 09:17:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]:60419) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oDn61-0004og-J2 for qemu-devel@nongnu.org; Tue, 19 Jul 2022 09:17:06 -0400 Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-177-CpCpCsJONhC2YZ1kGcYNKg-1; Tue, 19 Jul 2022 09:17:02 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.rdu2.redhat.com [10.11.54.1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 0569138149A7; Tue, 19 Jul 2022 13:17:02 +0000 (UTC) Received: from localhost.localdomain (ovpn-12-77.pek2.redhat.com [10.72.12.77]) by smtp.corp.redhat.com (Postfix) with ESMTP id 158DB40CFD0A; Tue, 19 Jul 2022 13:16:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1658236623; 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=2G4CfY7T1VZeOzHmVwzEz7gw1/UKh2ZTwHQxLW6ZvAw=; b=ZjpaobXgHYw+J0JG7SaC7IqTJz/spQxJujmKjBl8WM3euZY/2xH50FcKDz7gSroZx1jjCd h3+vRbcKGFsQcicupLQb8Ol6w9R7v8idmQOODPeAMHKxsQNn6h8rBQTg9YSq+WnGqBlotd LHLIjvzRzV+gafezUwUyFKxtVfa6R7o= X-MC-Unique: CpCpCsJONhC2YZ1kGcYNKg-1 From: Jason Wang To: qemu-devel@nongnu.org, peter.maydell@linaro.org Cc: =?UTF-8?q?Eugenio=20P=C3=A9rez?= , Jason Wang Subject: [PULL 04/24] vdpa: Avoid compiler to squash reads to used idx Date: Tue, 19 Jul 2022 21:16:17 +0800 Message-Id: <20220719131637.46131-5-jasowang@redhat.com> In-Reply-To: <20220719131637.46131-1-jasowang@redhat.com> References: <20220719131637.46131-1-jasowang@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 2.84 on 10.11.54.1 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.129.124; envelope-from=jasowang@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -28 X-Spam_score: -2.9 X-Spam_bar: -- X-Spam_report: (-2.9 / 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_LOW=-0.7, 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: 1658237160869100001 From: Eugenio P=C3=A9rez 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, separated from the polling. Signed-off-by: Eugenio P=C3=A9rez Signed-off-by: Jason Wang --- 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 e2184a4..560d07a 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.7.4