Message ID | 1570812820-20052-3-git-send-email-johunt@akamai.com |
---|---|
State | Accepted |
Delegated to: | Jeff Kirsher |
Headers | show |
Series | igb, ixgbe, i40e UDP segmentation offload support | expand |
> -----Original Message----- > From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On > Behalf Of Josh Hunt > Sent: Friday, October 11, 2019 9:54 AM > To: netdev@vger.kernel.org; intel-wired-lan@lists.osuosl.org; Kirsher, > Jeffrey T <jeffrey.t.kirsher@intel.com> > Cc: Duyck, Alexander H <alexander.h.duyck@intel.com>; > willemb@google.com; Josh Hunt <johunt@akamai.com>; > alexander.h.duyck@linux.intel.com > Subject: [Intel-wired-lan] [PATCH v3 2/3] ixgbe: Add UDP segmentation > offload support > > Repost from a series by Alexander Duyck to add UDP segmentation offload > support to the igb driver: > https://lore.kernel.org/netdev/20180504003916.4769.66271.stgit@localhost.l > ocaldomain/ > > CC: Alexander Duyck <alexander.h.duyck@intel.com> > CC: Willem de Bruijn <willemb@google.com> > Suggested-by: Alexander Duyck <alexander.h.duyck@intel.com> > Signed-off-by: Josh Hunt <johunt@akamai.com> > --- > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 24 > ++++++++++++++++++------ > 1 file changed, 18 insertions(+), 6 deletions(-) Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
On Thu, Oct 17, 2019 at 5:33 AM Bowers, AndrewX <andrewx.bowers@intel.com> wrote: > > > -----Original Message----- > > From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On > > Behalf Of Josh Hunt > > Sent: Friday, October 11, 2019 9:54 AM > > To: netdev@vger.kernel.org; intel-wired-lan@lists.osuosl.org; Kirsher, > > Jeffrey T <jeffrey.t.kirsher@intel.com> > > Cc: Duyck, Alexander H <alexander.h.duyck@intel.com>; > > willemb@google.com; Josh Hunt <johunt@akamai.com>; > > alexander.h.duyck@linux.intel.com > > Subject: [Intel-wired-lan] [PATCH v3 2/3] ixgbe: Add UDP segmentation > > offload support > > > > Repost from a series by Alexander Duyck to add UDP segmentation offload > > support to the igb driver: > > https://lore.kernel.org/netdev/20180504003916.4769.66271.stgit@localhost.l > > ocaldomain/ > > > > CC: Alexander Duyck <alexander.h.duyck@intel.com> > > CC: Willem de Bruijn <willemb@google.com> > > Suggested-by: Alexander Duyck <alexander.h.duyck@intel.com> > > Signed-off-by: Josh Hunt <johunt@akamai.com> > > --- > > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 24 > > ++++++++++++++++++------ > > 1 file changed, 18 insertions(+), 6 deletions(-) > > Tested-by: Andrew Bowers <andrewx.bowers@intel.com> > > Andrew, thanks for testing. Were you able to validate the igb driver? Thanks
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 1ce2397306b9..6c9edd272c7a 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -7946,6 +7946,7 @@ static int ixgbe_tso(struct ixgbe_ring *tx_ring, } ip; union { struct tcphdr *tcp; + struct udphdr *udp; unsigned char *hdr; } l4; u32 paylen, l4_offset; @@ -7969,7 +7970,8 @@ static int ixgbe_tso(struct ixgbe_ring *tx_ring, l4.hdr = skb_checksum_start(skb); /* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */ - type_tucmd = IXGBE_ADVTXD_TUCMD_L4T_TCP; + type_tucmd = (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) ? + IXGBE_ADVTXD_TUCMD_L4T_UDP : IXGBE_ADVTXD_TUCMD_L4T_TCP; /* initialize outer IP header fields */ if (ip.v4->version == 4) { @@ -7999,12 +8001,20 @@ static int ixgbe_tso(struct ixgbe_ring *tx_ring, /* determine offset of inner transport header */ l4_offset = l4.hdr - skb->data; - /* compute length of segmentation header */ - *hdr_len = (l4.tcp->doff * 4) + l4_offset; - /* remove payload length from inner checksum */ paylen = skb->len - l4_offset; - csum_replace_by_diff(&l4.tcp->check, (__force __wsum)htonl(paylen)); + + if (type_tucmd & IXGBE_ADVTXD_TUCMD_L4T_TCP) { + /* compute length of segmentation header */ + *hdr_len = (l4.tcp->doff * 4) + l4_offset; + csum_replace_by_diff(&l4.tcp->check, + (__force __wsum)htonl(paylen)); + } else { + /* compute length of segmentation header */ + *hdr_len = sizeof(*l4.udp) + l4_offset; + csum_replace_by_diff(&l4.udp->check, + (__force __wsum)htonl(paylen)); + } /* update gso size and bytecount with header size */ first->gso_segs = skb_shinfo(skb)->gso_segs; @@ -10190,6 +10200,7 @@ ixgbe_features_check(struct sk_buff *skb, struct net_device *dev, if (unlikely(mac_hdr_len > IXGBE_MAX_MAC_HDR_LEN)) return features & ~(NETIF_F_HW_CSUM | NETIF_F_SCTP_CRC | + NETIF_F_GSO_UDP_L4 | NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_TSO | NETIF_F_TSO6); @@ -10198,6 +10209,7 @@ ixgbe_features_check(struct sk_buff *skb, struct net_device *dev, if (unlikely(network_hdr_len > IXGBE_MAX_NETWORK_HDR_LEN)) return features & ~(NETIF_F_HW_CSUM | NETIF_F_SCTP_CRC | + NETIF_F_GSO_UDP_L4 | NETIF_F_TSO | NETIF_F_TSO6); @@ -10907,7 +10919,7 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) IXGBE_GSO_PARTIAL_FEATURES; if (hw->mac.type >= ixgbe_mac_82599EB) - netdev->features |= NETIF_F_SCTP_CRC; + netdev->features |= NETIF_F_SCTP_CRC | NETIF_F_GSO_UDP_L4; #ifdef CONFIG_IXGBE_IPSEC #define IXGBE_ESP_FEATURES (NETIF_F_HW_ESP | \
Repost from a series by Alexander Duyck to add UDP segmentation offload support to the igb driver: https://lore.kernel.org/netdev/20180504003916.4769.66271.stgit@localhost.localdomain/ CC: Alexander Duyck <alexander.h.duyck@intel.com> CC: Willem de Bruijn <willemb@google.com> Suggested-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Josh Hunt <johunt@akamai.com> --- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-)