net/virtio: do not claim to support LRO
authorStephen Hemminger <stephen@networkplumber.org>
Fri, 7 Jul 2017 19:52:50 +0000 (12:52 -0700)
committerThomas Monjalon <thomas@monjalon.net>
Sun, 9 Jul 2017 16:39:11 +0000 (18:39 +0200)
The current virtio supports Transmit Segmentation Offload, but
does not really support Large Receive Offload. The driver was confusing
the two offloads.

Fixes: 86d59b21468a ("net/virtio: support LRO")
Cc: stable@dpdk.org
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
drivers/net/virtio/virtio_ethdev.c

index ca60790..00a3122 100644 (file)
@@ -1659,11 +1659,8 @@ virtio_dev_configure(struct rte_eth_dev *dev)
 {
        const struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
        struct virtio_hw *hw = dev->data->dev_private;
-       uint64_t req_features;
-       int ret;
 
        PMD_INIT_LOG(DEBUG, "configure");
-       req_features = VIRTIO_PMD_DEFAULT_GUEST_FEATURES;
 
        /* Virtio does L4 checksum but not L3! */
        if (rxmode->hw_ip_checksum) {
@@ -1671,23 +1668,10 @@ virtio_dev_configure(struct rte_eth_dev *dev)
                            "virtio does not support IP checksum");
                return -ENOTSUP;
        }
-       if (rxmode->enable_lro)
-               req_features |=
-                       (1ULL << VIRTIO_NET_F_GUEST_TSO4) |
-                       (1ULL << VIRTIO_NET_F_GUEST_TSO6);
-
-       /* if request features changed, reinit the device */
-       if (req_features != hw->req_guest_features) {
-               ret = virtio_init_device(dev, req_features);
-               if (ret < 0)
-                       return ret;
-       }
 
-       if (rxmode->enable_lro &&
-               (!vtpci_with_feature(hw, VIRTIO_NET_F_GUEST_TSO4) ||
-                       !vtpci_with_feature(hw, VIRTIO_NET_F_GUEST_TSO4))) {
+       if (rxmode->enable_lro) {
                PMD_DRV_LOG(NOTICE,
-                       "lro not available on this host");
+                           "virtio does not support Large Receive Offload");
                return -ENOTSUP;
        }
 
@@ -1913,8 +1897,6 @@ virtio_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
        }
        tso_mask = (1ULL << VIRTIO_NET_F_GUEST_TSO4) |
                (1ULL << VIRTIO_NET_F_GUEST_TSO6);
-       if ((host_features & tso_mask) == tso_mask)
-               dev_info->rx_offload_capa |= DEV_RX_OFFLOAD_TCP_LRO;
 
        dev_info->tx_offload_capa = 0;
        if (hw->guest_features & (1ULL << VIRTIO_NET_F_CSUM)) {