[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 04/20] vdpa: Avoid compiler to squash reads to used idx
From: |
Eugenio Pérez |
Subject: |
[PATCH v5 04/20] vdpa: Avoid compiler to squash reads to used idx |
Date: |
Tue, 19 Jul 2022 11:56:13 +0200 |
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érez <eperezma@redhat.com>
---
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-virtqueue.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(EventNotifier *n)
static bool vhost_svq_more_used(VhostShadowVirtqueue *svq)
{
+ uint16_t *used_idx = &svq->vring.used->idx;
if (svq->last_used_idx != svq->shadow_used_idx) {
return true;
}
- svq->shadow_used_idx = cpu_to_le16(svq->vring.used->idx);
+ svq->shadow_used_idx = cpu_to_le16(*(volatile uint16_t *)used_idx);
return svq->last_used_idx != svq->shadow_used_idx;
}
--
2.31.1
- [PATCH v5 00/20] vdpa net devices Rx filter change notification with Shadow VQ, Eugenio Pérez, 2022/07/19
- [PATCH v5 02/20] virtio-net: Expose MAC_TABLE_ENTRIES, Eugenio Pérez, 2022/07/19
- [PATCH v5 01/20] vhost: move descriptor translation to vhost_svq_vring_write_descs, Eugenio Pérez, 2022/07/19
- [PATCH v5 04/20] vdpa: Avoid compiler to squash reads to used idx,
Eugenio Pérez <=
- [PATCH v5 03/20] virtio-net: Expose ctrl virtqueue logic, Eugenio Pérez, 2022/07/19
- [PATCH v5 06/20] vhost: Move vhost_svq_kick call to vhost_svq_add, Eugenio Pérez, 2022/07/19
- [PATCH v5 05/20] vhost: Reorder vhost_svq_kick, Eugenio Pérez, 2022/07/19
- [PATCH v5 07/20] vhost: Check for queue full at vhost_svq_add, Eugenio Pérez, 2022/07/19
- [PATCH v5 08/20] vhost: Decouple vhost_svq_add from VirtQueueElement, Eugenio Pérez, 2022/07/19
- [PATCH v5 12/20] vhost: Expose vhost_svq_add, Eugenio Pérez, 2022/07/19
- [PATCH v5 09/20] vhost: Add SVQDescState, Eugenio Pérez, 2022/07/19
- [PATCH v5 11/20] vhost: add vhost_svq_push_elem, Eugenio Pérez, 2022/07/19
- [PATCH v5 10/20] vhost: Track number of descs in SVQDescState, Eugenio Pérez, 2022/07/19
- [PATCH v5 13/20] vhost: add vhost_svq_poll, Eugenio Pérez, 2022/07/19