New upstream version 16.11.3
[deb_dpdk.git] / drivers / net / virtio / virtio_ethdev.c
index 452ad2a..67ebb1e 100644 (file)
@@ -423,7 +423,7 @@ virtio_init_queue(struct rte_eth_dev *dev, uint16_t vtpci_queue_idx)
                }
        }
 
-       memset(mz->addr, 0, sizeof(mz->len));
+       memset(mz->addr, 0, mz->len);
 
        vq->vq_ring_mem = mz->phys_addr;
        vq->vq_ring_virt_mem = mz->addr;
@@ -1477,37 +1477,19 @@ 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;
-       if (rxmode->hw_ip_checksum)
-               req_features |= (1ULL << VIRTIO_NET_F_GUEST_CSUM);
-       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->hw_ip_checksum &&
-               !vtpci_with_feature(hw, VIRTIO_NET_F_GUEST_CSUM)) {
+       /* Virtio does L4 checksum but not L3! */
+       if (rxmode->hw_ip_checksum) {
                PMD_DRV_LOG(NOTICE,
-                       "rx ip checksum not available on this host");
+                           "virtio does not support IP checksum");
                return -ENOTSUP;
        }
 
-       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;
        }
 
@@ -1714,8 +1696,8 @@ virtio_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
        };
        dev_info->rx_offload_capa =
                DEV_RX_OFFLOAD_TCP_CKSUM |
-               DEV_RX_OFFLOAD_UDP_CKSUM |
-               DEV_RX_OFFLOAD_TCP_LRO;
+               DEV_RX_OFFLOAD_UDP_CKSUM;
+
        dev_info->tx_offload_capa = 0;
 
        if (hw->guest_features & (1ULL << VIRTIO_NET_F_CSUM)) {