]> git.droids-corp.org - dpdk.git/commitdiff
net/virtio: keep Rx handler whatever the Tx queue config
authorOlivier Matz <olivier.matz@6wind.com>
Thu, 7 Sep 2017 12:13:46 +0000 (14:13 +0200)
committerYuanhan Liu <yliu@fridaylinux.org>
Tue, 10 Oct 2017 13:52:27 +0000 (15:52 +0200)
Split use_simple_rxtx into use_simple_rx and use_simple_tx,
and ensure that only use_simple_tx is updated when txq flags
forces to use the standard Tx handler.

This change is also useful for next commit (disable simple Rx
path when Rx checksum is requested).

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
drivers/net/virtio/virtio_ethdev.c
drivers/net/virtio/virtio_pci.h
drivers/net/virtio/virtio_rxtx.c
drivers/net/virtio/virtio_user_ethdev.c

index f310c97768e9345a1cc1cb5ee52c2c2bef536bea..07eb723773a0e4a47e426ab227b6a8c51ff19873 100644 (file)
@@ -1242,7 +1242,7 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev)
 {
        struct virtio_hw *hw = eth_dev->data->dev_private;
 
-       if (hw->use_simple_rxtx) {
+       if (hw->use_simple_rx) {
                PMD_INIT_LOG(INFO, "virtio: using simple Rx path on port %u",
                        eth_dev->data->port_id);
                eth_dev->rx_pkt_burst = virtio_recv_pkts_vec;
@@ -1257,7 +1257,7 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev)
                eth_dev->rx_pkt_burst = &virtio_recv_pkts;
        }
 
-       if (hw->use_simple_rxtx) {
+       if (hw->use_simple_tx) {
                PMD_INIT_LOG(INFO, "virtio: using simple Tx path on port %u",
                        eth_dev->data->port_id);
                eth_dev->tx_pkt_burst = virtio_xmit_pkts_simple;
@@ -1742,14 +1742,19 @@ virtio_dev_configure(struct rte_eth_dev *dev)
                        return -EBUSY;
                }
 
-       hw->use_simple_rxtx = 1;
+       hw->use_simple_rx = 1;
+       hw->use_simple_tx = 1;
 
 #if defined RTE_ARCH_ARM64 || defined CONFIG_RTE_ARCH_ARM
-       if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON))
-               hw->use_simple_rxtx = 0;
+       if (!rte_cpu_get_flag_enabled(RTE_CPUFLAG_NEON)) {
+               hw->use_simple_rx = 0;
+               hw->use_simple_tx = 0;
+       }
 #endif
-       if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF))
-               hw->use_simple_rxtx = 0;
+       if (vtpci_with_feature(hw, VIRTIO_NET_F_MRG_RXBUF)) {
+               hw->use_simple_rx = 0;
+               hw->use_simple_tx = 0;
+       }
 
        return 0;
 }
index 330ee94bec53581902b74906eb500c84055b3ab0..5f3b6c8db4ad587ab6a4e4ed660cdd046b1c8e82 100644 (file)
@@ -259,7 +259,8 @@ struct virtio_hw {
        uint8_t     vlan_strip;
        uint8_t     use_msix;
        uint8_t     modern;
-       uint8_t     use_simple_rxtx;
+       uint8_t     use_simple_rx;
+       uint8_t     use_simple_tx;
        uint16_t    port_id;
        uint8_t     mac_addr[ETHER_ADDR_LEN];
        uint32_t    notify_off_multiplier;
index 868550757b5406d801f85bfa212a64cb184e03f3..609b4138a31d9d794a70c08fdd1f572e9fbe7787 100644 (file)
@@ -455,7 +455,7 @@ virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, uint16_t queue_idx)
        /* Allocate blank mbufs for the each rx descriptor */
        nbufs = 0;
 
-       if (hw->use_simple_rxtx) {
+       if (hw->use_simple_rx) {
                for (desc_idx = 0; desc_idx < vq->vq_nentries;
                     desc_idx++) {
                        vq->vq_ring.avail->ring[desc_idx] = desc_idx;
@@ -477,7 +477,7 @@ virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, uint16_t queue_idx)
                        break;
 
                /* Enqueue allocated buffers */
-               if (hw->use_simple_rxtx)
+               if (hw->use_simple_rx)
                        error = virtqueue_enqueue_recv_refill_simple(vq, m);
                else
                        error = virtqueue_enqueue_recv_refill(vq, m);
@@ -524,7 +524,7 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,
 
        /* cannot use simple rxtx funcs with multisegs or offloads */
        if ((tx_conf->txq_flags & VIRTIO_SIMPLE_FLAGS) != VIRTIO_SIMPLE_FLAGS)
-               hw->use_simple_rxtx = 0;
+               hw->use_simple_tx = 0;
 
        if (nb_desc == 0 || nb_desc > vq->vq_nentries)
                nb_desc = vq->vq_nentries;
@@ -566,7 +566,7 @@ virtio_dev_tx_queue_setup_finish(struct rte_eth_dev *dev,
 
        PMD_INIT_FUNC_TRACE();
 
-       if (hw->use_simple_rxtx) {
+       if (hw->use_simple_tx) {
                for (desc_idx = 0; desc_idx < mid_idx; desc_idx++) {
                        vq->vq_ring.avail->ring[desc_idx] =
                                desc_idx + mid_idx;
index c96144434adf350042543d8bafa1571f96f7d818..57c964d6d88ee7ba006adf6d8c1892251b75ab81 100644 (file)
@@ -369,7 +369,8 @@ virtio_user_eth_dev_alloc(struct rte_vdev_device *vdev)
         */
        hw->use_msix = 1;
        hw->modern   = 0;
-       hw->use_simple_rxtx = 0;
+       hw->use_simple_rx = 0;
+       hw->use_simple_tx = 0;
        hw->virtio_user_dev = dev;
        data->dev_flags = RTE_ETH_DEV_DETACHABLE;
        return eth_dev;