mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-01 23:03:54 -06:00
vdpa: Avoid compiler to squash reads to used idx
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> Signed-off-by: Jason Wang <jasowang@redhat.com>
This commit is contained in:
parent
640b8a1c58
commit
c381abc37f
1 changed files with 2 additions and 1 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue