Skip to content

Commit 713dd6c

Browse files
madhuchittimkuba-moo
authored andcommitted
idpf: fix offloads support for encapsulated packets
Split offloads into csum, tso and other offloads so that tunneled packets do not by default have all the offloads enabled. Stateless offloads for encapsulated packets are not yet supported in firmware/software but in the driver we were setting the features same as non encapsulated features. Fixed naming to clarify CSUM bits are being checked for Tx. Inherit netdev features to VLAN interfaces as well. Fixes: 0fe4546 ("idpf: add create vport and netdev configuration") Reviewed-by: Sridhar Samudrala <[email protected]> Signed-off-by: Madhu Chittim <[email protected]> Tested-by: Zachary Goldstein <[email protected]> Tested-by: Samuel Salin <[email protected]> Signed-off-by: Tony Nguyen <[email protected]> Reviewed-by: Willem de Bruijn <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 425c5f2 commit 713dd6c

File tree

2 files changed

+27
-48
lines changed

2 files changed

+27
-48
lines changed

drivers/net/ethernet/intel/idpf/idpf.h

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -629,13 +629,13 @@ bool idpf_is_capability_ena(struct idpf_adapter *adapter, bool all,
629629
VIRTCHNL2_CAP_RX_HSPLIT_AT_L4V4 |\
630630
VIRTCHNL2_CAP_RX_HSPLIT_AT_L4V6)
631631

632-
#define IDPF_CAP_RX_CSUM_L4V4 (\
633-
VIRTCHNL2_CAP_RX_CSUM_L4_IPV4_TCP |\
634-
VIRTCHNL2_CAP_RX_CSUM_L4_IPV4_UDP)
632+
#define IDPF_CAP_TX_CSUM_L4V4 (\
633+
VIRTCHNL2_CAP_TX_CSUM_L4_IPV4_TCP |\
634+
VIRTCHNL2_CAP_TX_CSUM_L4_IPV4_UDP)
635635

636-
#define IDPF_CAP_RX_CSUM_L4V6 (\
637-
VIRTCHNL2_CAP_RX_CSUM_L4_IPV6_TCP |\
638-
VIRTCHNL2_CAP_RX_CSUM_L4_IPV6_UDP)
636+
#define IDPF_CAP_TX_CSUM_L4V6 (\
637+
VIRTCHNL2_CAP_TX_CSUM_L4_IPV6_TCP |\
638+
VIRTCHNL2_CAP_TX_CSUM_L4_IPV6_UDP)
639639

640640
#define IDPF_CAP_RX_CSUM (\
641641
VIRTCHNL2_CAP_RX_CSUM_L3_IPV4 |\
@@ -644,11 +644,9 @@ bool idpf_is_capability_ena(struct idpf_adapter *adapter, bool all,
644644
VIRTCHNL2_CAP_RX_CSUM_L4_IPV6_TCP |\
645645
VIRTCHNL2_CAP_RX_CSUM_L4_IPV6_UDP)
646646

647-
#define IDPF_CAP_SCTP_CSUM (\
647+
#define IDPF_CAP_TX_SCTP_CSUM (\
648648
VIRTCHNL2_CAP_TX_CSUM_L4_IPV4_SCTP |\
649-
VIRTCHNL2_CAP_TX_CSUM_L4_IPV6_SCTP |\
650-
VIRTCHNL2_CAP_RX_CSUM_L4_IPV4_SCTP |\
651-
VIRTCHNL2_CAP_RX_CSUM_L4_IPV6_SCTP)
649+
VIRTCHNL2_CAP_TX_CSUM_L4_IPV6_SCTP)
652650

653651
#define IDPF_CAP_TUNNEL_TX_CSUM (\
654652
VIRTCHNL2_CAP_TX_CSUM_L3_SINGLE_TUNNEL |\

drivers/net/ethernet/intel/idpf/idpf_lib.c

Lines changed: 19 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -703,8 +703,10 @@ static int idpf_cfg_netdev(struct idpf_vport *vport)
703703
{
704704
struct idpf_adapter *adapter = vport->adapter;
705705
struct idpf_vport_config *vport_config;
706+
netdev_features_t other_offloads = 0;
707+
netdev_features_t csum_offloads = 0;
708+
netdev_features_t tso_offloads = 0;
706709
netdev_features_t dflt_features;
707-
netdev_features_t offloads = 0;
708710
struct idpf_netdev_priv *np;
709711
struct net_device *netdev;
710712
u16 idx = vport->idx;
@@ -766,53 +768,32 @@ static int idpf_cfg_netdev(struct idpf_vport *vport)
766768

767769
if (idpf_is_cap_ena_all(adapter, IDPF_RSS_CAPS, IDPF_CAP_RSS))
768770
dflt_features |= NETIF_F_RXHASH;
769-
if (idpf_is_cap_ena_all(adapter, IDPF_CSUM_CAPS, IDPF_CAP_RX_CSUM_L4V4))
770-
dflt_features |= NETIF_F_IP_CSUM;
771-
if (idpf_is_cap_ena_all(adapter, IDPF_CSUM_CAPS, IDPF_CAP_RX_CSUM_L4V6))
772-
dflt_features |= NETIF_F_IPV6_CSUM;
771+
if (idpf_is_cap_ena_all(adapter, IDPF_CSUM_CAPS, IDPF_CAP_TX_CSUM_L4V4))
772+
csum_offloads |= NETIF_F_IP_CSUM;
773+
if (idpf_is_cap_ena_all(adapter, IDPF_CSUM_CAPS, IDPF_CAP_TX_CSUM_L4V6))
774+
csum_offloads |= NETIF_F_IPV6_CSUM;
773775
if (idpf_is_cap_ena(adapter, IDPF_CSUM_CAPS, IDPF_CAP_RX_CSUM))
774-
dflt_features |= NETIF_F_RXCSUM;
775-
if (idpf_is_cap_ena_all(adapter, IDPF_CSUM_CAPS, IDPF_CAP_SCTP_CSUM))
776-
dflt_features |= NETIF_F_SCTP_CRC;
776+
csum_offloads |= NETIF_F_RXCSUM;
777+
if (idpf_is_cap_ena_all(adapter, IDPF_CSUM_CAPS, IDPF_CAP_TX_SCTP_CSUM))
778+
csum_offloads |= NETIF_F_SCTP_CRC;
777779

778780
if (idpf_is_cap_ena(adapter, IDPF_SEG_CAPS, VIRTCHNL2_CAP_SEG_IPV4_TCP))
779-
dflt_features |= NETIF_F_TSO;
781+
tso_offloads |= NETIF_F_TSO;
780782
if (idpf_is_cap_ena(adapter, IDPF_SEG_CAPS, VIRTCHNL2_CAP_SEG_IPV6_TCP))
781-
dflt_features |= NETIF_F_TSO6;
783+
tso_offloads |= NETIF_F_TSO6;
782784
if (idpf_is_cap_ena_all(adapter, IDPF_SEG_CAPS,
783785
VIRTCHNL2_CAP_SEG_IPV4_UDP |
784786
VIRTCHNL2_CAP_SEG_IPV6_UDP))
785-
dflt_features |= NETIF_F_GSO_UDP_L4;
787+
tso_offloads |= NETIF_F_GSO_UDP_L4;
786788
if (idpf_is_cap_ena_all(adapter, IDPF_RSC_CAPS, IDPF_CAP_RSC))
787-
offloads |= NETIF_F_GRO_HW;
788-
/* advertise to stack only if offloads for encapsulated packets is
789-
* supported
790-
*/
791-
if (idpf_is_cap_ena(vport->adapter, IDPF_SEG_CAPS,
792-
VIRTCHNL2_CAP_SEG_TX_SINGLE_TUNNEL)) {
793-
offloads |= NETIF_F_GSO_UDP_TUNNEL |
794-
NETIF_F_GSO_GRE |
795-
NETIF_F_GSO_GRE_CSUM |
796-
NETIF_F_GSO_PARTIAL |
797-
NETIF_F_GSO_UDP_TUNNEL_CSUM |
798-
NETIF_F_GSO_IPXIP4 |
799-
NETIF_F_GSO_IPXIP6 |
800-
0;
801-
802-
if (!idpf_is_cap_ena_all(vport->adapter, IDPF_CSUM_CAPS,
803-
IDPF_CAP_TUNNEL_TX_CSUM))
804-
netdev->gso_partial_features |=
805-
NETIF_F_GSO_UDP_TUNNEL_CSUM;
806-
807-
netdev->gso_partial_features |= NETIF_F_GSO_GRE_CSUM;
808-
offloads |= NETIF_F_TSO_MANGLEID;
809-
}
789+
other_offloads |= NETIF_F_GRO_HW;
810790
if (idpf_is_cap_ena(adapter, IDPF_OTHER_CAPS, VIRTCHNL2_CAP_LOOPBACK))
811-
offloads |= NETIF_F_LOOPBACK;
791+
other_offloads |= NETIF_F_LOOPBACK;
812792

813-
netdev->features |= dflt_features;
814-
netdev->hw_features |= dflt_features | offloads;
815-
netdev->hw_enc_features |= dflt_features | offloads;
793+
netdev->features |= dflt_features | csum_offloads | tso_offloads;
794+
netdev->hw_features |= netdev->features | other_offloads;
795+
netdev->vlan_features |= netdev->features | other_offloads;
796+
netdev->hw_enc_features |= dflt_features | other_offloads;
816797
idpf_set_ethtool_ops(netdev);
817798
netif_set_affinity_auto(netdev);
818799
SET_NETDEV_DEV(netdev, &adapter->pdev->dev);

0 commit comments

Comments
 (0)