vhost: extract virtqueue cleaning and freeing functions
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Wed, 13 Dec 2017 08:51:08 +0000 (09:51 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Tue, 16 Jan 2018 17:47:49 +0000 (18:47 +0100)
This patch extracts needed code for vhost_user.c to be able
to clean and free virtqueues unitary.

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Acked-by: Laszlo Ersek <lersek@redhat.com>
Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
lib/librte_vhost/vhost.c
lib/librte_vhost/vhost.h

index 4eb450c..5cc7cad 100644 (file)
@@ -74,7 +74,7 @@ get_device(int vid)
        return dev;
 }
 
-static void
+void
 cleanup_vq(struct vhost_virtqueue *vq, int destroy)
 {
        if ((vq->callfd >= 0) && (destroy != 0))
@@ -98,6 +98,15 @@ cleanup_device(struct virtio_net *dev, int destroy)
                cleanup_vq(dev->virtqueue[i], destroy);
 }
 
+void
+free_vq(struct vhost_virtqueue *vq)
+{
+       rte_free(vq->shadow_used_ring);
+       rte_free(vq->batch_copy_elems);
+       rte_mempool_free(vq->iotlb_pool);
+       rte_free(vq);
+}
+
 /*
  * Release virtqueues and device memory.
  */
@@ -105,16 +114,9 @@ static void
 free_device(struct virtio_net *dev)
 {
        uint32_t i;
-       struct vhost_virtqueue *vq;
-
-       for (i = 0; i < dev->nr_vring; i++) {
-               vq = dev->virtqueue[i];
 
-               rte_free(vq->shadow_used_ring);
-               rte_free(vq->batch_copy_elems);
-               rte_mempool_free(vq->iotlb_pool);
-               rte_free(vq);
-       }
+       for (i = 0; i < dev->nr_vring; i++)
+               free_vq(dev->virtqueue[i]);
 
        rte_free(dev);
 }
index 8afb426..487aedd 100644 (file)
@@ -338,6 +338,9 @@ void cleanup_device(struct virtio_net *dev, int destroy);
 void reset_device(struct virtio_net *dev);
 void vhost_destroy_device(int);
 
+void cleanup_vq(struct vhost_virtqueue *vq, int destroy);
+void free_vq(struct vhost_virtqueue *vq);
+
 int alloc_vring_queue(struct virtio_net *dev, uint32_t vring_idx);
 
 void vhost_set_ifname(int, const char *if_name, unsigned int if_len);