[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH for-2.7 3/4] virtio: add virtqueue_rewind()
From: |
Cornelia Huck |
Subject: |
Re: [Qemu-devel] [PATCH for-2.7 3/4] virtio: add virtqueue_rewind() |
Date: |
Mon, 15 Aug 2016 10:36:25 +0200 |
On Fri, 12 Aug 2016 16:32:57 +0100
Stefan Hajnoczi <address@hidden> wrote:
> virtqueue_discard() requires a VirtQueueElement but virtio-balloon does
> not migrate its in-use element. Introduce a new function that is
> similar to virtqueue_discard() but doesn't require a VirtQueueElement.
>
> This will allow virtio-balloon to access element again after migration
> with the usual proviso that the guest may have modified the vring since
> last time.
>
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> ---
> hw/virtio/virtio.c | 22 ++++++++++++++++++++++
> include/hw/virtio/virtio.h | 1 +
> 2 files changed, 23 insertions(+)
>
> diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
> index 00158b6..22727ba 100644
> --- a/hw/virtio/virtio.c
> +++ b/hw/virtio/virtio.c
> @@ -272,6 +272,28 @@ void virtqueue_discard(VirtQueue *vq, const
> VirtQueueElement *elem,
> virtqueue_unmap_sg(vq, elem, len);
> }
>
> +/* virtqueue_rewind:
> + * @vq: The #VirtQueue
> + * @num: Number of elements to push back
> + *
> + * Pretend that elements weren't popped from the virtqueue. The next
> + * virtqueue_pop() will refetch the oldest element.
> + *
> + * Use virtqueue_discard() instead if you have a VirtQueueElement.
> + *
> + * Returns: true on success, false if @num is greater than the number of in
> use
> + * elements.
Does it make sense at all to rewind multiple elements at once? Or does
it make more sense for the caller to rewind one-by-one until they know
that there are no more elements that could be refetched?
> + */
> +bool virtqueue_rewind(VirtQueue *vq, unsigned int num)
> +{
> + if (num > vq->inuse) {
> + return false;
> + }
> + vq->last_avail_idx -= num;
> + vq->inuse -= num;
> + return true;
> +}
> +
> void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem,
> unsigned int len, unsigned int idx)
> {
- [Qemu-devel] [PATCH for-2.7 0/4] virtio-balloon: fix stats vq migration, Stefan Hajnoczi, 2016/08/12
- [Qemu-devel] [PATCH for-2.7 2/4] virtio: decrement vq->inuse in virtqueue_discard(), Stefan Hajnoczi, 2016/08/12
- [Qemu-devel] [PATCH for-2.7 4/4] virtio-balloon: fix stats vq migration, Stefan Hajnoczi, 2016/08/12
- [Qemu-devel] [PATCH for-2.7 3/4] virtio: add virtqueue_rewind(), Stefan Hajnoczi, 2016/08/12
- Re: [Qemu-devel] [PATCH for-2.7 3/4] virtio: add virtqueue_rewind(),
Cornelia Huck <=
- [Qemu-devel] [PATCH for-2.7 1/4] virtio: recalculate vq->inuse after migration, Stefan Hajnoczi, 2016/08/12
- Re: [Qemu-devel] [PATCH for-2.7 0/4] virtio-balloon: fix stats vq migration, no-reply, 2016/08/12
- Re: [Qemu-devel] [PATCH for-2.7 0/4] virtio-balloon: fix stats vq migration, Gaudenz Steinlin, 2016/08/15