]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/vhost/vhost.c
vhost: better detection of available buffers
[mirror_ubuntu-bionic-kernel.git] / drivers / vhost / vhost.c
index d6432603880c1343ea2451eba6df1973e6d61822..9f118388a5b7cc6f70b727f8bafdfadf9a401ac2 100644 (file)
@@ -2241,11 +2241,15 @@ bool vhost_vq_avail_empty(struct vhost_dev *dev, struct vhost_virtqueue *vq)
        __virtio16 avail_idx;
        int r;
 
+       if (vq->avail_idx != vq->last_avail_idx)
+               return false;
+
        r = vhost_get_user(vq, avail_idx, &vq->avail->idx);
-       if (r)
+       if (unlikely(r))
                return false;
+       vq->avail_idx = vhost16_to_cpu(vq, avail_idx);
 
-       return vhost16_to_cpu(vq, avail_idx) == vq->avail_idx;
+       return vq->avail_idx == vq->last_avail_idx;
 }
 EXPORT_SYMBOL_GPL(vhost_vq_avail_empty);