If no L4 checksum can be requested, OVS may as well compute IPv4
checksum when needed.

This allows a small optimisation where the whole preparation step can be
skipped on a batch when a (vhost-user) DPDK port has no offload
capability.

Signed-off-by: David Marchand <david.march...@redhat.com>
---
 lib/netdev-dpdk.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c
index b9e5ad9b8f..5dee56be31 100644
--- a/lib/netdev-dpdk.c
+++ b/lib/netdev-dpdk.c
@@ -3303,10 +3303,12 @@ netdev_dpdk_common_send(struct netdev *netdev, struct 
dp_packet_batch *batch,
     stats->tx_mtu_exceeded_drops += pkt_cnt - cnt;
     pkt_cnt = cnt;
 
-    /* Prepare each mbuf for hardware offloading. */
-    cnt = netdev_dpdk_prep_hwol_batch(dev, pkts, pkt_cnt);
-    stats->tx_invalid_hwol_drops += pkt_cnt - cnt;
-    pkt_cnt = cnt;
+    if (netdev->ol_flags) {
+        /* Prepare each mbuf for hardware offloading. */
+        cnt = netdev_dpdk_prep_hwol_batch(dev, pkts, pkt_cnt);
+        stats->tx_invalid_hwol_drops += pkt_cnt - cnt;
+        pkt_cnt = cnt;
+    }
 
     /* Apply Quality of Service policy. */
     cnt = netdev_dpdk_qos_run(dev, pkts, pkt_cnt, true);
@@ -4910,6 +4912,10 @@ new_device(int vid)
                     dev->hw_ol_features |= NETDEV_TX_TCP_CKSUM_OFFLOAD;
                     dev->hw_ol_features |= NETDEV_TX_UDP_CKSUM_OFFLOAD;
                     dev->hw_ol_features |= NETDEV_TX_SCTP_CKSUM_OFFLOAD;
+
+                    /* There is no support in virtio net to offload IPv4 csum,
+                     * but the vhost library handles IPv4 csum offloading. */
+                    dev->hw_ol_features |= NETDEV_TX_IPV4_CKSUM_OFFLOAD;
                 }
 
                 if (userspace_tso_enabled()
@@ -4928,10 +4934,6 @@ new_device(int vid)
                 }
             }
 
-            /* There is no support in virtio net to offload IPv4 csum,
-             * but the vhost library handles IPv4 csum offloading fine. */
-            dev->hw_ol_features |= NETDEV_TX_IPV4_CKSUM_OFFLOAD;
-
             netdev_dpdk_update_netdev_flags(dev);
 
             ovsrcu_index_set(&dev->vid, vid);
-- 
2.49.0

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to