From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peterson, Scott D Date: Tue, 15 Nov 2016 19:03:59 +0000 Subject: [Intel-wired-lan] [net-next PATCH] ixgbe/ixgbevf: Enables TSO for MPLS encapsulated packets Message-ID: <1479236637.26945.70.camel@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: intel-wired-lan@osuosl.org List-ID: This patch advertises TSO & GSO features in netdev->mpls_features.? In ixgbe(vf)_tso() where we set up segmentation offload, the IP? header will be the inner network header when eth_p_mpls() indicates the Ethernet protocol is MPLS (UC or MC). We're submitting this upstream first, because it depends on related upstream changes not yet present in the OOT drivers. Suggested-by: Alexander Duyck Signed-off-by: Scott Peterson --- ?drivers/net/ethernet/intel/ixgbe/ixgbe_main.c?????| 12 ++++++++++-- ?drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 12 ++++++++++-- ?2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index 2436984..04b2ceb 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -55,6 +55,7 @@ ?#include ?#include ?#include +#include ? ?#include "ixgbe.h" ?#include "ixgbe_common.h" @@ -7279,7 +7280,10 @@ static int ixgbe_tso(struct ixgbe_ring *tx_ring, ????????if (err < 0) ????????????????return err; ? -???????ip.hdr = skb_network_header(skb); +???????if (eth_p_mpls(first->protocol)) +???????????????ip.hdr = skb_inner_network_header(skb); +???????else +???????????????ip.hdr = skb_network_header(skb); ????????l4.hdr = skb_checksum_start(skb); ? ????????/* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */ @@ -9653,7 +9657,11 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ? ????????netdev->vlan_features |= netdev->features | NETIF_F_TSO_MANGLEID; ????????netdev->hw_enc_features |= netdev->vlan_features; -???????netdev->mpls_features |= NETIF_F_HW_CSUM; +???????netdev->mpls_features |= NETIF_F_SG | +????????????????????????????????NETIF_F_TSO | +????????????????????????????????NETIF_F_TSO6 | +????????????????????????????????NETIF_F_HW_CSUM; +???????netdev->mpls_features |= IXGBE_GSO_PARTIAL_FEATURES; ? ????????/* set this bit last since it cannot be part of vlan_features */ ????????netdev->features |= NETIF_F_HW_VLAN_CTAG_FILTER | diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c index d316f50..8498eed 100644 --- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c @@ -49,6 +49,7 @@ ?#include ?#include ?#include +#include ? ?#include "ixgbevf.h" ? @@ -3327,7 +3328,10 @@ static int ixgbevf_tso(struct ixgbevf_ring *tx_ring, ????????if (err < 0) ????????????????return err; ? -???????ip.hdr = skb_network_header(skb); +???????if (eth_p_mpls(first->protocol)) +???????????????ip.hdr = skb_inner_network_header(skb); +???????else +???????????????ip.hdr = skb_network_header(skb); ????????l4.hdr = skb_checksum_start(skb); ? ????????/* ADV DTYP TUCMD MKRLOC/ISCSIHEDLEN */ @@ -4083,7 +4087,11 @@ static int ixgbevf_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ????????????????netdev->features |= NETIF_F_HIGHDMA; ? ????????netdev->vlan_features |= netdev->features | NETIF_F_TSO_MANGLEID; -???????netdev->mpls_features |= NETIF_F_HW_CSUM; +???????netdev->mpls_features |= NETIF_F_SG | +????????????????????????????????NETIF_F_TSO | +????????????????????????????????NETIF_F_TSO6 | +????????????????????????????????NETIF_F_HW_CSUM; +???????netdev->mpls_features |= IXGBEVF_GSO_PARTIAL_FEATURES; ????????netdev->hw_enc_features |= netdev->vlan_features; ? ????????/* set this bit last since it cannot be part of vlan_features */