summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJason Wang <jasowang@redhat.com>2013-01-30 19:12:36 +0800
committerAnthony Liguori <aliguori@us.ibm.com>2013-02-01 11:03:02 -0600
commitf23fd811ac4f49f482058cad3b465dc5dc0edc11 (patch)
tree403969fc76e3749d9d0f9832d243daf60f22e3de
parenta9f98bb5ebe6fb1869321dcc58e72041ae626ad8 (diff)
downloadfocaccia-qemu-f23fd811ac4f49f482058cad3b465dc5dc0edc11.tar.gz
focaccia-qemu-f23fd811ac4f49f482058cad3b465dc5dc0edc11.zip
virtio: introduce virtio_del_queue()
Some device (such as virtio-net) needs the ability to destroy or re-order the
virtqueues, this patch adds a helper to do this.

Signed-off-by: Jason Wang <jasowang>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-rw-r--r--hw/virtio.c9
-rw-r--r--hw/virtio.h2
2 files changed, 11 insertions, 0 deletions
diff --git a/hw/virtio.c b/hw/virtio.c
index ca170c319e..d8c77b054d 100644
--- a/hw/virtio.c
+++ b/hw/virtio.c
@@ -701,6 +701,15 @@ VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size,
     return &vdev->vq[i];
 }
 
+void virtio_del_queue(VirtIODevice *vdev, int n)
+{
+    if (n < 0 || n >= VIRTIO_PCI_QUEUE_MAX) {
+        abort();
+    }
+
+    vdev->vq[n].vring.num = 0;
+}
+
 void virtio_irq(VirtQueue *vq)
 {
     trace_virtio_irq(vq);
diff --git a/hw/virtio.h b/hw/virtio.h
index 9cc7b85671..d3da1d25df 100644
--- a/hw/virtio.h
+++ b/hw/virtio.h
@@ -181,6 +181,8 @@ VirtQueue *virtio_add_queue(VirtIODevice *vdev, int queue_size,
                             void (*handle_output)(VirtIODevice *,
                                                   VirtQueue *));
 
+void virtio_del_queue(VirtIODevice *vdev, int n);
+
 void virtqueue_push(VirtQueue *vq, const VirtQueueElement *elem,
                     unsigned int len);
 void virtqueue_flush(VirtQueue *vq, unsigned int count);