]> git.droids-corp.org - dpdk.git/commitdiff
vhost: make some vDPA callbacks mandatory
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Mon, 6 Jul 2020 11:24:47 +0000 (13:24 +0200)
committerFerruh Yigit <ferruh.yigit@intel.com>
Sat, 11 Jul 2020 04:18:52 +0000 (06:18 +0200)
Some of the vDPA callbacks have to be implemented
for vDPA to work properly.

This patch marks them as mandatory in the API doc and
simplify code calling these ops with removing
unnecessary checks that are now done at registration
time.

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
lib/librte_vhost/rte_vdpa_dev.h
lib/librte_vhost/socket.c
lib/librte_vhost/vdpa.c
lib/librte_vhost/vhost.c
lib/librte_vhost/vhost_user.c

index 65557cb05e1989a92b9067834bb05abfad945d00..89444c2ea1bc5448286ea097665ea9e9814be0ea 100644 (file)
  * vdpa device operations
  */
 struct rte_vdpa_dev_ops {
-       /** Get capabilities of this device */
+       /** Get capabilities of this device (Mandatory) */
        int (*get_queue_num)(struct rte_vdpa_device *dev, uint32_t *queue_num);
 
-       /** Get supported features of this device */
+       /** Get supported features of this device (Mandatory) */
        int (*get_features)(struct rte_vdpa_device *dev, uint64_t *features);
 
-       /** Get supported protocol features of this device */
+       /** Get supported protocol features of this device (Mandatory) */
        int (*get_protocol_features)(struct rte_vdpa_device *dev,
                        uint64_t *protocol_features);
 
-       /** Driver configure/close the device */
+       /** Driver configure the device (Mandatory) */
        int (*dev_conf)(int vid);
+
+       /** Driver close the device (Mandatory) */
        int (*dev_close)(int vid);
 
-       /** Enable/disable this vring */
+       /** Enable/disable this vring (Mandatory) */
        int (*set_vring_state)(int vid, int vring, int state);
 
-       /** Set features when changed */
+       /** Set features when changed (Mandatory) */
        int (*set_features)(int vid);
 
        /** Destination operations when migration done */
index c4626d2c46845bf162ab3b10dec25c5e1c63b9ad..73e1dca95e1d8685416a8ffdfe58d2bfdf7f1ca7 100644 (file)
@@ -710,7 +710,7 @@ rte_vhost_driver_get_features(const char *path, uint64_t *features)
        }
 
        vdpa_dev = vsocket->vdpa_dev;
-       if (!vdpa_dev || !vdpa_dev->ops->get_features) {
+       if (!vdpa_dev) {
                *features = vsocket->features;
                goto unlock_exit;
        }
@@ -763,7 +763,7 @@ rte_vhost_driver_get_protocol_features(const char *path,
        }
 
        vdpa_dev = vsocket->vdpa_dev;
-       if (!vdpa_dev || !vdpa_dev->ops->get_protocol_features) {
+       if (!vdpa_dev) {
                *protocol_features = vsocket->protocol_features;
                goto unlock_exit;
        }
@@ -803,7 +803,7 @@ rte_vhost_driver_get_queue_num(const char *path, uint32_t *queue_num)
        }
 
        vdpa_dev = vsocket->vdpa_dev;
-       if (!vdpa_dev || !vdpa_dev->ops->get_queue_num) {
+       if (!vdpa_dev) {
                *queue_num = VHOST_MAX_QUEUE_PAIRS;
                goto unlock_exit;
        }
index ef21ca2a1ef8c388a1764a2ab116d15b3e4f1aeb..ae6fdd24edbece10206ec5c27b961868977c797a 100644 (file)
@@ -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);
index 8351d7e439cf125793996ad50ece85896edfef59..14b3e253e8377c6680cee480425d0a955fba2fde 100644 (file)
@@ -648,7 +648,7 @@ vhost_destroy_device_notify(struct virtio_net *dev)
 
        if (dev->flags & VIRTIO_DEV_RUNNING) {
                vdpa_dev = dev->vdpa_dev;
-               if (vdpa_dev && vdpa_dev->ops->dev_close)
+               if (vdpa_dev)
                        vdpa_dev->ops->dev_close(dev->vid);
                dev->flags &= ~VIRTIO_DEV_RUNNING;
                dev->notify_ops->destroy_device(dev->vid);
index 257a035604a957a8e10d41314d4375b736c1f723..1d9e1127b85aa6078c8c8705580948015fa4a15f 100644 (file)
@@ -398,7 +398,7 @@ vhost_user_set_features(struct virtio_net **pdev, struct VhostUserMsg *msg,
        }
 
        vdpa_dev = dev->vdpa_dev;
-       if (vdpa_dev && vdpa_dev->ops->set_features)
+       if (vdpa_dev)
                vdpa_dev->ops->set_features(dev->vid);
 
        return RTE_VHOST_MSG_RESULT_OK;
@@ -2866,9 +2866,7 @@ skip_to_post_handle:
                goto out;
 
        if (!(dev->flags & VIRTIO_DEV_VDPA_CONFIGURED)) {
-               if (vdpa_dev->ops->dev_conf)
-                       vdpa_dev->ops->dev_conf(dev->vid);
-
+               vdpa_dev->ops->dev_conf(dev->vid);
                dev->flags |= VIRTIO_DEV_VDPA_CONFIGURED;
        }