net/mlx5: move Linux-specific functions
[dpdk.git] / drivers / net / virtio / virtio_user_ethdev.c
index 40ad786..798f191 100644 (file)
@@ -89,7 +89,8 @@ virtio_user_server_reconnect(struct virtio_user_dev *dev)
        dev->features &= dev->device_features;
 
        /* For packed ring, resetting queues is required in reconnection. */
-       if (vtpci_packed_queue(hw)) {
+       if (vtpci_packed_queue(hw) &&
+          (vtpci_get_status(hw) & VIRTIO_CONFIG_STATUS_DRIVER_OK)) {
                PMD_INIT_LOG(NOTICE, "Packets on the fly will be dropped"
                                " when packed ring reconnecting.");
                virtio_user_reset_queues_packed(eth_dev);
@@ -528,6 +529,7 @@ virtio_user_eth_dev_alloc(struct rte_vdev_device *vdev)
        hw->use_msix = 1;
        hw->modern   = 0;
        hw->use_vec_rx = 0;
+       hw->use_vec_tx = 0;
        hw->use_inorder_rx = 0;
        hw->use_inorder_tx = 0;
        hw->virtio_user_dev = dev;
@@ -732,15 +734,26 @@ virtio_user_pmd_probe(struct rte_vdev_device *dev)
                goto end;
        }
 
-       /* previously called by rte_pci_probe() for physical dev */
+       /* previously called by pci probing for physical dev */
        if (eth_virtio_dev_init(eth_dev) < 0) {
                PMD_INIT_LOG(ERR, "eth_virtio_dev_init fails");
                virtio_user_eth_dev_free(eth_dev);
                goto end;
        }
 
-       if (vectorized)
-               hw->use_vec_rx = 1;
+       if (vectorized) {
+               if (packed_vq) {
+#if defined(CC_AVX512_SUPPORT)
+                       hw->use_vec_rx = 1;
+                       hw->use_vec_tx = 1;
+#else
+                       PMD_INIT_LOG(INFO,
+                               "building environment do not support packed ring vectorized");
+#endif
+               } else {
+                       hw->use_vec_rx = 1;
+               }
+       }
 
        rte_eth_dev_probing_finish(eth_dev);
        ret = 0;