net/octeontx2: add Tx queue rate limit
[dpdk.git] / drivers / net / virtio / virtio_ethdev.c
index 76bd40a..f9d0ea7 100644 (file)
@@ -465,8 +465,8 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
                return -EINVAL;
        }
 
-       if (!rte_is_power_of_2(vq_size)) {
-               PMD_INIT_LOG(ERR, "virtqueue size is not powerof 2");
+       if (!vtpci_packed_queue(hw) && !rte_is_power_of_2(vq_size)) {
+               PMD_INIT_LOG(ERR, "split virtqueue size is not powerof 2");
                return -EINVAL;
        }
 
@@ -1913,6 +1913,8 @@ eth_virtio_dev_init(struct rte_eth_dev *eth_dev)
                        goto err_vtpci_init;
        }
 
+       rte_spinlock_init(&hw->state_lock);
+
        /* reset device and negotiate default features */
        ret = virtio_init_device(eth_dev, VIRTIO_PMD_DEFAULT_GUEST_FEATURES);
        if (ret < 0)
@@ -2073,6 +2075,13 @@ virtio_dev_configure(struct rte_eth_dev *dev)
                return -EINVAL;
        }
 
+       if (txmode->mq_mode != ETH_MQ_TX_NONE) {
+               PMD_DRV_LOG(ERR,
+                       "Unsupported Tx multi queue mode %d",
+                       txmode->mq_mode);
+               return -EINVAL;
+       }
+
        if (dev->data->dev_conf.intr_conf.rxq) {
                ret = virtio_init_device(dev, hw->req_guest_features);
                if (ret < 0)
@@ -2148,8 +2157,6 @@ virtio_dev_configure(struct rte_eth_dev *dev)
                        return -EBUSY;
                }
 
-       rte_spinlock_init(&hw->state_lock);
-
        hw->use_simple_rx = 1;
 
        if (vtpci_with_feature(hw, VIRTIO_F_IN_ORDER)) {