net/i40e: fix bitmap free
[dpdk.git] / lib / librte_vhost / vdpa.c
index 8810bf3..ae6fdd2 100644 (file)
@@ -17,6 +17,7 @@
 #include <rte_tailq.h>
 
 #include "rte_vdpa.h"
+#include "rte_vdpa_dev.h"
 #include "vhost.h"
 
 /** Double linked list of vDPA devices. */
@@ -25,7 +26,6 @@ TAILQ_HEAD(vdpa_device_list, rte_vdpa_device);
 static struct vdpa_device_list vdpa_device_list =
                TAILQ_HEAD_INITIALIZER(vdpa_device_list);
 static rte_spinlock_t vdpa_device_list_lock = RTE_SPINLOCK_INITIALIZER;
-static uint32_t vdpa_device_num;
 
 
 /* Unsafe, needs to be called with vdpa_device_list_lock held */
@@ -77,6 +77,16 @@ rte_vdpa_register_device(struct rte_device *rte_dev,
        if (ops == NULL)
                return NULL;
 
+       /* Check mandatory ops are implemented */
+       if (!ops->get_queue_num || !ops->get_features ||
+                       !ops->get_protocol_features || !ops->dev_conf ||
+                       !ops->dev_close || !ops->set_vring_state ||
+                       !ops->set_features) {
+               VHOST_LOG_CONFIG(ERR,
+                               "Some mandatory vDPA ops aren't implemented\n");
+               return NULL;
+       }
+
        rte_spinlock_lock(&vdpa_device_list_lock);
        /* Check the device hasn't been register already */
        dev = __vdpa_find_device_by_name(rte_dev->name);
@@ -92,7 +102,6 @@ rte_vdpa_register_device(struct rte_device *rte_dev,
        dev->device = rte_dev;
        dev->ops = ops;
        TAILQ_INSERT_TAIL(&vdpa_device_list, dev, next);
-       vdpa_device_num++;
 out_unlock:
        rte_spinlock_unlock(&vdpa_device_list_lock);
 
@@ -112,7 +121,6 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *dev)
 
                TAILQ_REMOVE(&vdpa_device_list, dev, next);
                rte_free(dev);
-               vdpa_device_num--;
                ret = 0;
                break;
        }
@@ -121,12 +129,6 @@ rte_vdpa_unregister_device(struct rte_vdpa_device *dev)
        return ret;
 }
 
-int
-rte_vdpa_get_device_num(void)
-{
-       return vdpa_device_num;
-}
-
 int
 rte_vdpa_relay_vring_used(int vid, uint16_t qid, void *vring_m)
 {