From nobody Fri Dec 19 15:46:37 2025 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=1658308305; cv=none; d=zohomail.com; s=zohoarc; b=CBChqFwXmMK3ndT4OB6dJGpuuthrAeJbfxl0xA9F2JT5oqnw2dbDirIrS5QBwmg2kvn7bwsc3LzeQBfDzZVcrMO9L+fIkNDdtAxxkEjKewb6THgZZSKCTew46DB7ZJfJBZRdI8sFShde+I61RSZ5vgpj3dT+tXsvnb5dNbEAJ+U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1658308305; 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=EqHY+0Zk59/c6CxQY2aipKe4ezT0c09YH/vkJsM6Fmk=; b=PKeb/7V33/r5392AphR3Ox9Ubo4LYjiANZArJ6g7HhWQOJ+zpsG/9vEp7Q/Xeh/bp/Qv2YWP4PbgPPXLB+SNGbE5c58h8Qrh+6RJQOOBR7nKlkcq77pcE8SISXSo29uikx3v41FHOy64c95qgz2fcgkRMJF3APbVH/hwd3nzOUg= 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 1658308305853851.0869939593398; Wed, 20 Jul 2022 02:11:45 -0700 (PDT) Received: from localhost ([::1]:54900 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oE5k7-0003aG-Oa for importer@patchew.org; Wed, 20 Jul 2022 05:11:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58268) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oE5cE-000846-Ih for qemu-devel@nongnu.org; Wed, 20 Jul 2022 05:03:35 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:46976) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oE5cD-0001Ly-3Z for qemu-devel@nongnu.org; Wed, 20 Jul 2022 05:03:34 -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-522-53RbfULYONiXregQ72lxMA-1; Wed, 20 Jul 2022 05:03:30 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id DDCBC29ABA0F; Wed, 20 Jul 2022 09:03:29 +0000 (UTC) Received: from localhost.localdomain (ovpn-13-110.pek2.redhat.com [10.72.13.110]) by smtp.corp.redhat.com (Postfix) with ESMTP id BBD50492C3B; Wed, 20 Jul 2022 09:03:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1658307811; 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=EqHY+0Zk59/c6CxQY2aipKe4ezT0c09YH/vkJsM6Fmk=; b=LLnjnx6xR5iuREvOzFZgH6gaEQGXJntEVVfXiNWW+nvxuByBhTERSzCt2xmDuMQeaYremC Kfb8UyUs4FUBRL/p2oc4vLtZZLQiULGxv+4Gn07dPfEBhWQ5e0thniv1O6LWzGyCh9Ft70 QIF6+wDL866lcc0cSvMR/ldQpuacSbA= X-MC-Unique: 53RbfULYONiXregQ72lxMA-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 V2 04/25] vdpa: Avoid compiler to squash reads to used idx Date: Wed, 20 Jul 2022 17:02:52 +0800 Message-Id: <20220720090313.55169-5-jasowang@redhat.com> In-Reply-To: <20220720090313.55169-1-jasowang@redhat.com> References: <20220720090313.55169-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.85 on 10.11.54.10 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=jasowang@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: 1658308306576100001 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, sepparated 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