]> git.droids-corp.org - dpdk.git/commitdiff
net/vhost: enable compliant offloading mode
authorMaxime Coquelin <maxime.coquelin@redhat.com>
Wed, 8 Jun 2022 12:49:43 +0000 (14:49 +0200)
committerMaxime Coquelin <maxime.coquelin@redhat.com>
Fri, 17 Jun 2022 12:41:04 +0000 (14:41 +0200)
This patch enables the compliant offloading flags mode by
default, which prevents the Rx path to set Tx offload flags,
which is illegal. A new legacy-ol-flags devarg is introduced
to enable the legacy behaviour.

Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com>
Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
doc/guides/nics/vhost.rst
drivers/net/vhost/rte_eth_vhost.c

index ee802ec4a89b4843cc6ab4530b348581203b2651..d7c0e2ade86fdfcb75c8ff3e6f9da38cd54c2eab 100644 (file)
@@ -64,6 +64,12 @@ The user can specify below arguments in `--vdev` option.
     It is used to enable external buffer support in vhost library.
     (Default: 0 (disabled))
 
+#.  ``legacy-ol-flags``:
+
+    It is used to restore legacy behavior for offloading that was not
+    compliant with offloading API.
+    (Default: 0 (disabled))
+
 Vhost PMD event handling
 ------------------------
 
index 8dee629fb0f80ea9089180584b42886862900470..1620e30df82d50842bdec29dcec056846841ced0 100644 (file)
@@ -31,9 +31,10 @@ enum {VIRTIO_RXQ, VIRTIO_TXQ, VIRTIO_QNUM};
 #define ETH_VHOST_CLIENT_ARG           "client"
 #define ETH_VHOST_IOMMU_SUPPORT                "iommu-support"
 #define ETH_VHOST_POSTCOPY_SUPPORT     "postcopy-support"
-#define ETH_VHOST_VIRTIO_NET_F_HOST_TSO "tso"
-#define ETH_VHOST_LINEAR_BUF  "linear-buffer"
-#define ETH_VHOST_EXT_BUF  "ext-buffer"
+#define ETH_VHOST_VIRTIO_NET_F_HOST_TSO        "tso"
+#define ETH_VHOST_LINEAR_BUF           "linear-buffer"
+#define ETH_VHOST_EXT_BUF              "ext-buffer"
+#define ETH_VHOST_LEGACY_OL_FLAGS      "legacy-ol-flags"
 #define VHOST_MAX_PKT_BURST 32
 
 static const char *valid_arguments[] = {
@@ -45,6 +46,7 @@ static const char *valid_arguments[] = {
        ETH_VHOST_VIRTIO_NET_F_HOST_TSO,
        ETH_VHOST_LINEAR_BUF,
        ETH_VHOST_EXT_BUF,
+       ETH_VHOST_LEGACY_OL_FLAGS,
        NULL
 };
 
@@ -1470,6 +1472,7 @@ rte_pmd_vhost_probe(struct rte_vdev_device *dev)
        int tso = 0;
        int linear_buf = 0;
        int ext_buf = 0;
+       int legacy_ol_flags = 0;
        struct rte_eth_dev *eth_dev;
        const char *name = rte_vdev_device_name(dev);
 
@@ -1579,6 +1582,17 @@ rte_pmd_vhost_probe(struct rte_vdev_device *dev)
                        flags |= RTE_VHOST_USER_EXTBUF_SUPPORT;
        }
 
+       if (rte_kvargs_count(kvlist, ETH_VHOST_LEGACY_OL_FLAGS) == 1) {
+               ret = rte_kvargs_process(kvlist,
+                               ETH_VHOST_LEGACY_OL_FLAGS,
+                               &open_int, &legacy_ol_flags);
+               if (ret < 0)
+                       goto out_free;
+       }
+
+       if (legacy_ol_flags == 0)
+               flags |= RTE_VHOST_USER_NET_COMPLIANT_OL_FLAGS;
+
        if (dev->device.numa_node == SOCKET_ID_ANY)
                dev->device.numa_node = rte_socket_id();