[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 08/14] virtio: add virtqueue_rewind()
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PULL 08/14] virtio: add virtqueue_rewind() |
Date: |
Fri, 9 Sep 2016 23:34:24 +0300 |
From: Stefan Hajnoczi <address@hidden>
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.
Cc: Michael S. Tsirkin <address@hidden>
Cc: Roman Kagan <address@hidden>
Cc: Stefan Hajnoczi <address@hidden>
Signed-off-by: Ladi Prosek <address@hidden>
Reviewed-by: Michael S. Tsirkin <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
include/hw/virtio/virtio.h | 1 +
hw/virtio/virtio.c | 22 ++++++++++++++++++++++
2 files changed, 23 insertions(+)
diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h
index d2490c1..f05559d 100644
--- a/include/hw/virtio/virtio.h
+++ b/include/hw/virtio/virtio.h
@@ -154,6 +154,7 @@ void virtqueue_push(VirtQueue *vq, const VirtQueueElement
*elem,
void virtqueue_flush(VirtQueue *vq, unsigned int count);
void virtqueue_discard(VirtQueue *vq, const VirtQueueElement *elem,
unsigned int len);
+bool virtqueue_rewind(VirtQueue *vq, unsigned int num);
void virtqueue_fill(VirtQueue *vq, const VirtQueueElement *elem,
unsigned int len, unsigned int idx);
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index e8a13a5..fcf3358 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.
+ */
+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)
{
--
MST
- [Qemu-devel] [PULL 00/14] virtio,vhost,pc: fixes and updates, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 01/14] virtio: Tell the user what went wrong when event_notifier_init failed, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 02/14] virtio-pci: use size from correct structure, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 03/14] pc: Add 2.8 machine, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 04/14] target-i386: present virtual L3 cache info for vcpus, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 06/14] virtio: zero vq->inuse in virtio_reset(), Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 05/14] virtio-pci: reduce modern_mem_bar size, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 08/14] virtio: add virtqueue_rewind(),
Michael S. Tsirkin <=
- [Qemu-devel] [PULL 09/14] virtio-balloon: fix stats vq migration, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 07/14] virtio-balloon: discard virtqueue element on reset, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 10/14] virtio-pci: error out when both legacy and modern modes are disabled, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 14/14] tests/acpi: speedup acpi tests, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 13/14] vhost-vsock: add virtio sockets device, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 12/14] virtio-pci: minor refactoring, Michael S. Tsirkin, 2016/09/09
- [Qemu-devel] [PULL 11/14] vhost: don't set vring call if no vector, Michael S. Tsirkin, 2016/09/09
- Re: [Qemu-devel] [PULL 00/14] virtio,vhost,pc: fixes and updates, Michael S. Tsirkin, 2016/09/09