net/virtio: add device config support to vDPA
[dpdk.git] / drivers / net / virtio / virtio_user_ethdev.c
index 1810a54..3ecbb41 100644 (file)
@@ -110,7 +110,8 @@ virtio_user_get_features(struct virtio_hw *hw)
        struct virtio_user_dev *dev = virtio_user_get_dev(hw);
 
        /* unmask feature bits defined in vhost user protocol */
-       return dev->device_features & VIRTIO_PMD_SUPPORTED_GUEST_FEATURES;
+       return (dev->device_features | dev->frontend_features) &
+               VIRTIO_PMD_SUPPORTED_GUEST_FEATURES;
 }
 
 static void
@@ -118,7 +119,7 @@ virtio_user_set_features(struct virtio_hw *hw, uint64_t features)
 {
        struct virtio_user_dev *dev = virtio_user_get_dev(hw);
 
-       dev->features = features & dev->device_features;
+       dev->features = features & (dev->device_features | dev->frontend_features);
 }
 
 static int
@@ -249,7 +250,7 @@ virtio_user_notify_queue(struct virtio_hw *hw, struct virtqueue *vq)
        uint64_t buf = 1;
        struct virtio_user_dev *dev = virtio_user_get_dev(hw);
 
-       if (hw->cvq && (hw->cvq->vq == vq)) {
+       if (hw->cvq && (virtnet_cq_to_vq(hw->cvq) == vq)) {
                if (virtio_with_packed_queue(vq->hw))
                        virtio_user_handle_cq_packed(dev, vq->vq_queue_index);
                else
@@ -360,7 +361,7 @@ vdpa_dynamic_major_num(void)
 {
        FILE *fp;
        char *line = NULL;
-       size_t size;
+       size_t size = 0;
        char name[11];
        bool found = false;
        uint32_t num;
@@ -380,6 +381,7 @@ vdpa_dynamic_major_num(void)
                        break;
                }
        }
+       free(line);
        fclose(fp);
        return found ? num : UNNAMED_MAJOR;
 }
@@ -428,7 +430,6 @@ virtio_user_eth_dev_alloc(struct rte_vdev_device *vdev)
        hw = &dev->hw;
 
        hw->port_id = data->port_id;
-       dev->port_id = data->port_id;
        VIRTIO_OPS(hw) = &virtio_user_ops;
 
        hw->intr_lsc = 1;