Re: [PATCH RFC v7 03/14] vhost: use batched get_vq_desc version
From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2020-06-10 15:13:47
Also in:
kvm, lkml, virtualization
From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2020-06-10 15:13:47
Also in:
kvm, lkml, virtualization
On Wed, Jun 10, 2020 at 02:37:50PM +0200, Eugenio Perez Martin wrote:
quoted
+/* This function returns a value > 0 if a descriptor was found, or 0 if none were found. + * A negative code is returned on error. */ +static int fetch_descs(struct vhost_virtqueue *vq) +{ + int ret; + + if (unlikely(vq->first_desc >= vq->ndescs)) { + vq->first_desc = 0; + vq->ndescs = 0; + } + + if (vq->ndescs) + return 1; + + for (ret = 1; + ret > 0 && vq->ndescs <= vhost_vq_num_batch_descs(vq); + ret = fetch_buf(vq)) + ;(Expanding comment in V6): We get an infinite loop this way: * vq->ndescs == 0, so we call fetch_buf() here * fetch_buf gets less than vhost_vq_num_batch_descs(vq); descriptors. ret = 1 * This loop calls again fetch_buf, but vq->ndescs > 0 (and avail_vq == last_avail_vq), so it just return 1
That's what [PATCH RFC v7 08/14] fixup! vhost: use batched get_vq_desc version is supposed to fix. -- MST