Skip to contentSkip to conversation

i40e/i40evf updates

PATCH New Joshua Hay 5 participants 32 messages Dec 9, 2015 – Jan 20, 2016

Subsystems (2)
lore
Share & tools
lore

Joshua Hay

author
#0 lore raw

cover i40e/i40evf updates

Anjali fixes Rx hash reported to the stack by our driver, adds fix for recursive RTNL lock during PROMISC change, fixes RSS rx-flow-hash configuration through ethtool, makes some changes in the nvm read code, and cleans up the code with respect to restarting autoneg.

Catherine replaces X722 mac check in ethtool get_settings.

Jesse removes forever unused ID, makes tunnels generic, and updates features with right offload.

Kiran adds mac_filter_element at the end of the list instead of HEAD.

Mitch allows channel bonding of VFs, and nulls out ring pointers on free.

Shannon defines function capabilities in only one place.

 drivers/net/ethernet/intel/i40e/i40e.h             |  4 +-
 drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h  |  1 +
 drivers/net/ethernet/intel/i40e/i40e_common.c      | 86 +++++++---------------
 drivers/net/ethernet/intel/i40e/i40e_devids.h      |  1 -
 drivers/net/ethernet/intel/i40e/i40e_ethtool.c     | 16 ++--
 drivers/net/ethernet/intel/i40e/i40e_main.c        | 27 ++++---
 drivers/net/ethernet/intel/i40e/i40e_nvm.c         | 70 +++++++++++++++---
 drivers/net/ethernet/intel/i40e/i40e_txrx.c        | 61 ++++++++-------
 drivers/net/ethernet/intel/i40e/i40e_txrx.h        |  2 +-
 .../net/ethernet/intel/i40evf/i40e_adminq_cmd.h    |  1 +
 drivers/net/ethernet/intel/i40evf/i40e_common.c    |  1 -
 drivers/net/ethernet/intel/i40evf/i40e_devids.h    |  1 -
 drivers/net/ethernet/intel/i40evf/i40e_txrx.c      | 56 +++++++-------
 drivers/net/ethernet/intel/i40evf/i40e_txrx.h      |  2 +-
 drivers/net/ethernet/intel/i40evf/i40evf.h         |  1 +
 drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c | 40 ++--------
 drivers/net/ethernet/intel/i40evf/i40evf_main.c    | 11 ++-
 .../net/ethernet/intel/i40evf/i40evf_virtchnl.c    |  2 +
 18 files changed, 196 insertions(+), 187 deletions(-)
Signature · 1 line
2.1.0
author
#1 lore raw

PATCH 1/13 i40e: Fix Rx hash reported to the stack by our driver

From: Anjali Singhai Jain <[email protected]>

If the driver calls skb_set_hash even with a zero hash, that indicates to the stack that the hash calculation is offloaded in hardware. So the Stack doesn't do a SW hash which is required for load balancing if the user decides to turn of rx-hashing on our device.

This patch fixes the path so that we do not call skb_set_hash if the feature is disabled.

Change-ID Ic4debfa4ff91b5a72e447348a75768ed7a2d3e1b

---
Testing Hints:Test interrupt overload x710 Apart from the interrupt overload, the user sees a problem where the stack is not calculating the hash when rx-hasing is turned off which is resulting in tpacket_v3 not balancing the load across multiple threads.

 drivers/net/ethernet/intel/i40e/i40e_txrx.c   | 54 ++++++++++++++-------------
 drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 54 ++++++++++++++-------------
 2 files changed, 58 insertions(+), 50 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_txrx.c +29 -25
index e2ab7a6..28d2943 100644
@@ -1422,31 +1422,12 @@ checksum_fail:
 }
 
 /**
- * i40e_rx_hash - returns the hash value from the Rx descriptor
- * @ring: descriptor ring
- * @rx_desc: specific descriptor
- **/
-static inline u32 i40e_rx_hash(struct i40e_ring *ring,
-			       union i40e_rx_desc *rx_desc)
-{
-	const __le64 rss_mask =
-		cpu_to_le64((u64)I40E_RX_DESC_FLTSTAT_RSS_HASH <<
-			    I40E_RX_DESC_STATUS_FLTSTAT_SHIFT);
-
-	if ((ring->netdev->features & NETIF_F_RXHASH) &&
-	    (rx_desc->wb.qword1.status_error_len & rss_mask) == rss_mask)
-		return le32_to_cpu(rx_desc->wb.qword0.hi_dword.rss);
-	else
-		return 0;
-}
-
-/**
- * i40e_ptype_to_hash - get a hash type
+ * i40e_ptype_to_htype - get a hash type
  * @ptype: the ptype value from the descriptor
  *
  * Returns a hash type to be used by skb_set_hash
  **/
-static inline enum pkt_hash_types i40e_ptype_to_hash(u8 ptype)
+static inline enum pkt_hash_types i40e_ptype_to_htype(u8 ptype)
 {
 	struct i40e_rx_ptype_decoded decoded = decode_rx_desc_ptype(ptype);
 
@@ -1464,6 +1445,30 @@ static inline enum pkt_hash_types i40e_ptype_to_hash(u8 ptype)
 }
 
 /**
+ * i40e_rx_hash - set the hash value in the skb
+ * @ring: descriptor ring
+ * @rx_desc: specific descriptor
+ **/
+static inline void i40e_rx_hash(struct i40e_ring *ring,
+				union i40e_rx_desc *rx_desc,
+				struct sk_buff *skb,
+				u8 rx_ptype)
+{
+	u32 hash;
+	const __le64 rss_mask  =
+		cpu_to_le64((u64)I40E_RX_DESC_FLTSTAT_RSS_HASH <<
+			    I40E_RX_DESC_STATUS_FLTSTAT_SHIFT);
+
+	if (ring->netdev->features & NETIF_F_RXHASH)
+		return;
+
+	if ((rx_desc->wb.qword1.status_error_len & rss_mask) == rss_mask) {
+		hash = le32_to_cpu(rx_desc->wb.qword0.hi_dword.rss);
+		skb_set_hash(skb, hash, i40e_ptype_to_htype(rx_ptype));
+	}
+}
+
+/**
  * i40e_clean_rx_irq_ps - Reclaim resources after receive; packet split
  * @rx_ring:  rx ring to clean
  * @budget:   how many cleans we're allowed
@@ -1612,8 +1617,8 @@ static int i40e_clean_rx_irq_ps(struct i40e_ring *rx_ring, int budget)
 			continue;
 		}
 
-		skb_set_hash(skb, i40e_rx_hash(rx_ring, rx_desc),
-			     i40e_ptype_to_hash(rx_ptype));
+		i40e_rx_hash(rx_ring, rx_desc, skb, rx_ptype);
+
 		if (unlikely(rx_status & I40E_RXD_QW1_STATUS_TSYNVALID_MASK)) {
 			i40e_ptp_rx_hwtstamp(vsi->back, skb, (rx_status &
 					   I40E_RXD_QW1_STATUS_TSYNINDX_MASK) >>
@@ -1741,8 +1746,7 @@ static int i40e_clean_rx_irq_1buf(struct i40e_ring *rx_ring, int budget)
 			continue;
 		}
 
-		skb_set_hash(skb, i40e_rx_hash(rx_ring, rx_desc),
-			     i40e_ptype_to_hash(rx_ptype));
+		i40e_rx_hash(rx_ring, rx_desc, skb, rx_ptype);
 		if (unlikely(rx_status & I40E_RXD_QW1_STATUS_TSYNVALID_MASK)) {
 			i40e_ptp_rx_hwtstamp(vsi->back, skb, (rx_status &
 					   I40E_RXD_QW1_STATUS_TSYNINDX_MASK) >>
drivers/net/ethernet/intel/i40evf/i40e_txrx.c +29 -25

82 lines not on this page · raw message

Signature · 1 line
2.1.0
#2 lore raw

PATCH 1/13 i40e: Fix Rx hash reported to the stack by our driver

Quoted 26 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:50 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 01/13] i40e: Fix Rx hash reported to the stack by our driver

From: Anjali Singhai Jain <[email protected]>

If the driver calls skb_set_hash even with a zero hash, that indicates to the stack that the hash calculation is offloaded in hardware. So the Stack doesn't do a SW hash which is required for load balancing if the user decides to turn of rx-hashing on our device.

This patch fixes the path so that we do not call skb_set_hash if the feature is disabled.

Change-ID Ic4debfa4ff91b5a72e447348a75768ed7a2d3e1b

---
Testing Hints:Test interrupt overload x710 Apart from the interrupt overload, the user sees a problem where the stack is not calculating the hash when rx- hasing is turned off which is resulting in tpacket_v3 not balancing the load across multiple threads.

Quoted 5 lines
 drivers/net/ethernet/intel/i40e/i40e_txrx.c   | 54 ++++++++++++++----------
---
 drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 54 ++++++++++++++---------
----
 2 files changed, 58 insertions(+), 50 deletions(-)

Patch code changes correctly applied, load properly balances across queues with hashing enabled and disabled

author
#3 lore raw

PATCH 2/13 i40e: remove forever unused ID

In reply to Joshua Hay

From: Jesse Brandeburg <[email protected]>

Somehow an ID that has never been productized is in the code. There are no plans to use it, so just get rid of it.

Change-ID I59117d48ea9ee0360b0fe33833ac8092f8a24b4c

---
Testing Hints: make sure the code is all gone that refers to it.

 drivers/net/ethernet/intel/i40e/i40e_common.c   | 1 -
 drivers/net/ethernet/intel/i40e/i40e_devids.h   | 1 -
 drivers/net/ethernet/intel/i40e/i40e_main.c     | 1 -
 drivers/net/ethernet/intel/i40evf/i40e_common.c | 1 -
 drivers/net/ethernet/intel/i40evf/i40e_devids.h | 1 -
 5 files changed, 5 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_common.c +0 -1
index 2d74c6e..6a034dd 100644
@@ -44,7 +44,6 @@ static i40e_status i40e_set_mac_type(struct i40e_hw *hw)
 		switch (hw->device_id) {
 		case I40E_DEV_ID_SFP_XL710:
 		case I40E_DEV_ID_QEMU:
-		case I40E_DEV_ID_KX_A:
 		case I40E_DEV_ID_KX_B:
 		case I40E_DEV_ID_KX_C:
 		case I40E_DEV_ID_QSFP_A:
drivers/net/ethernet/intel/i40e/i40e_devids.h +0 -1
index c601ca4..448ef4c 100644
@@ -30,7 +30,6 @@
 /* Device IDs */
 #define I40E_DEV_ID_SFP_XL710		0x1572
 #define I40E_DEV_ID_QEMU		0x1574
-#define I40E_DEV_ID_KX_A		0x157F
 #define I40E_DEV_ID_KX_B		0x1580
 #define I40E_DEV_ID_KX_C		0x1581
 #define I40E_DEV_ID_QSFP_A		0x1583
drivers/net/ethernet/intel/i40e/i40e_main.c +0 -1
index f3e4b1a..4fd29e7 100644
@@ -79,7 +79,6 @@ static int i40e_veb_get_bw_info(struct i40e_veb *veb);
 static const struct pci_device_id i40e_pci_tbl[] = {
 	{PCI_VDEVICE(INTEL, I40E_DEV_ID_SFP_XL710), 0},
 	{PCI_VDEVICE(INTEL, I40E_DEV_ID_QEMU), 0},
-	{PCI_VDEVICE(INTEL, I40E_DEV_ID_KX_A), 0},
 	{PCI_VDEVICE(INTEL, I40E_DEV_ID_KX_B), 0},
 	{PCI_VDEVICE(INTEL, I40E_DEV_ID_KX_C), 0},
 	{PCI_VDEVICE(INTEL, I40E_DEV_ID_QSFP_A), 0},
drivers/net/ethernet/intel/i40evf/i40e_common.c +0 -1
index 72b1942..938783e 100644
@@ -44,7 +44,6 @@ i40e_status i40e_set_mac_type(struct i40e_hw *hw)
 		switch (hw->device_id) {
 		case I40E_DEV_ID_SFP_XL710:
 		case I40E_DEV_ID_QEMU:
-		case I40E_DEV_ID_KX_A:
 		case I40E_DEV_ID_KX_B:
 		case I40E_DEV_ID_KX_C:
 		case I40E_DEV_ID_QSFP_A:
drivers/net/ethernet/intel/i40evf/i40e_devids.h +0 -1
index e6a39c9..ca8b58c 100644
@@ -30,7 +30,6 @@
 /* Device IDs */
 #define I40E_DEV_ID_SFP_XL710		0x1572
 #define I40E_DEV_ID_QEMU		0x1574
-#define I40E_DEV_ID_KX_A		0x157F
 #define I40E_DEV_ID_KX_B		0x1580
 #define I40E_DEV_ID_KX_C		0x1581
 #define I40E_DEV_ID_QSFP_A		0x1583
Signature · 1 line
2.1.0
#4 lore raw

PATCH 2/13 i40e: remove forever unused ID

Quoted 19 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:50 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 02/13] i40e: remove forever unused ID

From: Jesse Brandeburg <[email protected]>

Somehow an ID that has never been productized is in the code. There are no plans to use it, so just get rid of it.

Change-ID I59117d48ea9ee0360b0fe33833ac8092f8a24b4c

---
Testing Hints: make sure the code is all gone that refers to it.

Quoted 6 lines
 drivers/net/ethernet/intel/i40e/i40e_common.c   | 1 -
 drivers/net/ethernet/intel/i40e/i40e_devids.h   | 1 -
 drivers/net/ethernet/intel/i40e/i40e_main.c     | 1 -
 drivers/net/ethernet/intel/i40evf/i40e_common.c | 1 -
drivers/net/ethernet/intel/i40evf/i40e_devids.h | 1 -
 5 files changed, 5 deletions(-)

Patch code changes correctly applied

author
#5 lore raw

PATCH 3/13 i40e: Add mac_filter_element at the end of the list instead of HEAD

In reply to Joshua Hay

From: Kiran Patil <[email protected]>

Add MAC filter element to the end of the list in the given order, just to be tidy, and just in case there are ever any ordering issues in the future.

Change-ID Idc15276147593ea9393ac72c861f9c7905a791b4

---
Testing Hints: There is no straight targeted test for this issue.

 drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/intel/i40e/i40e_main.c +1 -1
index 4fd29e7..44bbfd8 100644
@@ -1365,7 +1365,7 @@ struct i40e_mac_filter *i40e_add_filter(struct i40e_vsi *vsi,
 		f->changed = true;
 
 		INIT_LIST_HEAD(&f->list);
-		list_add(&f->list, &vsi->mac_filter_list);
+		list_add_tail(&f->list, &vsi->mac_filter_list);
 	}
 
 	/* increment counter and add a new flag if needed */
Signature · 1 line
2.1.0
#6 lore raw

PATCH 3/13 i40e: Add mac_filter_element at the end of the list instead of HEAD

Quoted 13 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:50 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 03/13] i40e: Add mac_filter_element at the end of the list instead of HEAD

From: Kiran Patil <[email protected]>

Add MAC filter element to the end of the list in the given order, just to be tidy, and just in case there are ever any ordering issues in the future.

Quoted 7 lines
Change-ID Idc15276147593ea9393ac72c861f9c7905a791b4

---
Testing Hints: There is no straight targeted test for this issue.

 drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Patch code changes correctly applied

author
#7 lore raw

PATCH 4/13 i40e/i40evf: Fix RSS rx-flow-hash configuration through ethtool

In reply to Joshua Hay

From: Anjali Singhai Jain <[email protected]>

This patch fixes the Hash PCTYPE enable for X722 since it supports a broader selection of PCTYPES for TCP and UDP.

This patch also fixes a bug in XL710, X710, X722 support for RSS, as of now we cannot reduce the (4)tuple for RSS for TCP/IPv4/IPV6 or UDP/IPv4/IPv6 packets since this requires a product feature change that comes in a later release.

A VF should never be allowed to change the tuples for RSS for any PCTYPE since that's a global setting for the device in case of i40e devices.

Change-ID I0ee7203c9b24813260f58f3220798bc9d9ac4a12
---
 drivers/net/ethernet/intel/i40e/i40e_ethtool.c     | 14 +++-----
 drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c | 40 +++++-----------------
 2 files changed, 12 insertions(+), 42 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +4 -10
index 29d5833..c8b9dca 100644
@@ -2166,8 +2166,7 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc)
 	case TCP_V4_FLOW:
 		switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
 		case 0:
-			hena &= ~BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_TCP);
-			break;
+			return -EINVAL;
 		case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
 			hena |= BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_TCP);
 			break;
@@ -2178,8 +2177,7 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc)
 	case TCP_V6_FLOW:
 		switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
 		case 0:
-			hena &= ~BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_TCP);
-			break;
+			return -EINVAL;
 		case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
 			hena |= BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_TCP);
 			break;
@@ -2190,9 +2188,7 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc)
 	case UDP_V4_FLOW:
 		switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
 		case 0:
-			hena &= ~(BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_UDP) |
-				  BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV4));
-			break;
+			return -EINVAL;
 		case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
 			hena |= (BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_UDP) |
 				 BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV4));
@@ -2204,9 +2200,7 @@ static int i40e_set_rss_hash_opt(struct i40e_pf *pf, struct ethtool_rxnfc *nfc)
 	case UDP_V6_FLOW:
 		switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
 		case 0:
-			hena &= ~(BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_UDP) |
-				  BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV6));
-			break;
+			return -EINVAL;
 		case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
 			hena |= (BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_UDP) |
 				 BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV6));
drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c +8 -32
index a4c9feb..8906785 100644
@@ -477,54 +477,30 @@ static int i40evf_set_rss_hash_opt(struct i40evf_adapter *adapter,
 
 	switch (nfc->flow_type) {
 	case TCP_V4_FLOW:
-		switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
-		case 0:
-			hena &= ~BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_TCP);
-			break;
-		case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
+		if (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3))
 			hena |= BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_TCP);
-			break;
-		default:
+		else
 			return -EINVAL;
-		}
 		break;
 	case TCP_V6_FLOW:
-		switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
-		case 0:
-			hena &= ~BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_TCP);
-			break;
-		case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
+		if (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3))
 			hena |= BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_TCP);
-			break;
-		default:
+		else
 			return -EINVAL;
-		}
 		break;
 	case UDP_V4_FLOW:
-		switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
-		case 0:
-			hena &= ~(BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_UDP) |
-				  BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV4));
-			break;
-		case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
+		if (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
 			hena |= (BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV4_UDP) |
 				 BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV4));
-			break;
-		default:
+		} else {
 			return -EINVAL;
 		}
 		break;
 	case UDP_V6_FLOW:
-		switch (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
-		case 0:
-			hena &= ~(BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_UDP) |
-				  BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV6));
-			break;
-		case (RXH_L4_B_0_1 | RXH_L4_B_2_3):
+		if (nfc->data & (RXH_L4_B_0_1 | RXH_L4_B_2_3)) {
 			hena |= (BIT_ULL(I40E_FILTER_PCTYPE_NONF_IPV6_UDP) |
 				 BIT_ULL(I40E_FILTER_PCTYPE_FRAG_IPV6));
-			break;
-		default:
+		} else {
 			return -EINVAL;
 		}
 		break;
Signature · 1 line
2.1.0
#8 lore raw

PATCH 4/13 i40e/i40evf: Fix RSS rx-flow-hash configuration through ethtool

Quoted 21 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:50 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 04/13] i40e/i40evf: Fix RSS rx- flow-hash configuration through ethtool

From: Anjali Singhai Jain <[email protected]>

This patch fixes the Hash PCTYPE enable for X722 since it supports a broader selection of PCTYPES for TCP and UDP.

This patch also fixes a bug in XL710, X710, X722 support for RSS, as of now we cannot reduce the (4)tuple for RSS for TCP/IPv4/IPV6 or UDP/IPv4/IPv6 packets since this requires a product feature change that comes in a later release.

A VF should never be allowed to change the tuples for RSS for any PCTYPE since that's a global setting for the device in case of i40e devices.

Quoted 6 lines
Change-ID I0ee7203c9b24813260f58f3220798bc9d9ac4a12
---
 drivers/net/ethernet/intel/i40e/i40e_ethtool.c     | 14 +++-----
 drivers/net/ethernet/intel/i40evf/i40evf_ethtool.c | 40 +++++-----------------
 2 files changed, 12 insertions(+), 42 deletions(-)

Patch code changes correctly applied, RSS works correctly on PF and VF with UDP and TCP traffic

author
#9 lore raw

PATCH 5/13 i40e: Replace X722 mac check in ethtool get_settings

In reply to Joshua Hay

From: Catherine Sullivan <[email protected]>

100M SGMII is only supported on X722. Replace the mac check with a feature flag check that is only set for the X722 device.

Change-ID I53452d9af6af8cd9dca8500215fbc6ce93418f52

---
Testing Hints: Check that 100M SGMII is not listed as supported on X710 devices and is listed as supported on X722 devices.

 drivers/net/ethernet/intel/i40e/i40e.h         | 3 ++-
 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)
drivers/net/ethernet/intel/i40e/i40e.h +2 -1
index 3d0269b..4747219 100644
@@ -334,7 +334,8 @@ struct i40e_pf {
 #define I40E_FLAG_MULTIPLE_TCP_UDP_RSS_PCTYPE	BIT_ULL(38)
 #define I40E_FLAG_LINK_POLLING_ENABLED		BIT_ULL(39)
 #define I40E_FLAG_VEB_MODE_ENABLED		BIT_ULL(40)
-#define I40E_FLAG_NO_PCI_LINK_CHECK		BIT_ULL(42)
+#define I40E_FLAG_NO_PCI_LINK_CHECK		BIT_ULL(41)
+#define I40E_FLAG_100M_SGMII_CAPABLE		BIT_ULL(42)
 
 	/* tracks features that get auto disabled by errors */
 	u64 auto_disable_flags;
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +1 -1
index c8b9dca..252a9dd 100644
@@ -340,7 +340,7 @@ static void i40e_get_settings_link_up(struct i40e_hw *hw,
 				  SUPPORTED_1000baseT_Full;
 		if (hw_link_info->requested_speeds & I40E_LINK_SPEED_1GB)
 			ecmd->advertising |= ADVERTISED_1000baseT_Full;
-		if (pf->hw.mac.type == I40E_MAC_X722) {
+		if (pf->flags & I40E_FLAG_100M_SGMII_CAPABLE) {
 			ecmd->supported |= SUPPORTED_100baseT_Full;
 			if (hw_link_info->requested_speeds &
 			    I40E_LINK_SPEED_100MB)
Signature · 1 line
2.1.0
#10 lore raw

PATCH 5/13 i40e: Replace X722 mac check in ethtool get_settings

Quoted 15 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:50 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 05/13] i40e: Replace X722 mac check in ethtool get_settings

From: Catherine Sullivan <[email protected]>

100M SGMII is only supported on X722. Replace the mac check with a feature flag check that is only set for the X722 device.

Change-ID I53452d9af6af8cd9dca8500215fbc6ce93418f52
Quoted 7 lines

---
Testing Hints: Check that 100M SGMII is not listed as supported on X710 devices and is listed as supported on X722 devices.

 drivers/net/ethernet/intel/i40e/i40e.h         | 3 ++-
 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 2 +-
 2 files changed, 3 insertions(+), 2 deletions(-)

Patch code changes correctly applied, does not break base driver

author
#11 lore raw

PATCH 6/13 i40e/i40evf: tunnels can be generic

In reply to Joshua Hay

From: Jesse Brandeburg <[email protected]>

Since the i40e driver now supports VxLAN, GRE, and soon to be Geneve tunnels, the driver can just note that an skb contains a tunneled packet generically, instead of calling out VXLAN specifically. The tunnel set up we do for hardware is almost always the same for all tunnel types.

This specifically enables ATR/Flow Director on GRE packets which increases performance/scaling. Without this patch GRE RX packets end up on a random RSS assigned queue.

Change-ID Ie8e205603654910d2f718592cbef8132ae0719e4
---
 drivers/net/ethernet/intel/i40e/i40e_txrx.c   | 7 ++++---
 drivers/net/ethernet/intel/i40e/i40e_txrx.h   | 2 +-
 drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 2 +-
 drivers/net/ethernet/intel/i40evf/i40e_txrx.h | 2 +-
 4 files changed, 7 insertions(+), 6 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_txrx.c +4 -3
index 28d2943..ba79f67 100644
@@ -2005,7 +2005,7 @@ static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb,
 	if (!(tx_flags & (I40E_TX_FLAGS_IPV4 | I40E_TX_FLAGS_IPV6)))
 		return;
 
-	if (!(tx_flags & I40E_TX_FLAGS_VXLAN_TUNNEL)) {
+	if ((tx_flags & I40E_TX_FLAGS_TUNNEL)) {
 		/* snag network header to get L4 type and address */
 		hdr.network = skb_network_header(skb);
 
@@ -2090,7 +2090,7 @@ static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb,
 		     I40E_TXD_FLTR_QW1_FD_STATUS_SHIFT;
 
 	dtype_cmd |= I40E_TXD_FLTR_QW1_CNT_ENA_MASK;
-	if (!(tx_flags & I40E_TX_FLAGS_VXLAN_TUNNEL))
+	if (!(tx_flags & I40E_TX_FLAGS_TUNNEL))
 		dtype_cmd |=
 			((u32)I40E_FD_ATR_STAT_IDX(pf->hw.pf_id) <<
 			I40E_TXD_FLTR_QW1_CNTINDEX_SHIFT) &
@@ -2323,10 +2323,11 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,
 			oudph = udp_hdr(skb);
 			oiph = ip_hdr(skb);
 			l4_tunnel = I40E_TXD_CTX_UDP_TUNNELING;
-			*tx_flags |= I40E_TX_FLAGS_VXLAN_TUNNEL;
+			*tx_flags |= I40E_TX_FLAGS_TUNNEL;
 			break;
 		case IPPROTO_GRE:
 			l4_tunnel = I40E_TXD_CTX_GRE_TUNNELING;
+			*tx_flags |= I40E_TX_FLAGS_TUNNEL;
 			break;
 		default:
 			return;
drivers/net/ethernet/intel/i40e/i40e_txrx.h +1 -1
index dccc1eb..1d167b6 100644
@@ -163,7 +163,7 @@ enum i40e_dyn_idx_t {
 #define I40E_TX_FLAGS_FSO		BIT(7)
 #define I40E_TX_FLAGS_TSYN		BIT(8)
 #define I40E_TX_FLAGS_FD_SB		BIT(9)
-#define I40E_TX_FLAGS_VXLAN_TUNNEL	BIT(10)
+#define I40E_TX_FLAGS_TUNNEL		BIT(10)
 #define I40E_TX_FLAGS_VLAN_MASK		0xffff0000
 #define I40E_TX_FLAGS_VLAN_PRIO_MASK	0xe0000000
 #define I40E_TX_FLAGS_VLAN_PRIO_SHIFT	29
drivers/net/ethernet/intel/i40evf/i40e_txrx.c +1 -1
index 7a00657..ed4934a 100644
@@ -1521,7 +1521,7 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,
 			oudph = udp_hdr(skb);
 			oiph = ip_hdr(skb);
 			l4_tunnel = I40E_TXD_CTX_UDP_TUNNELING;
-			*tx_flags |= I40E_TX_FLAGS_VXLAN_TUNNEL;
+			*tx_flags |= I40E_TX_FLAGS_TUNNEL;
 			break;
 		default:
 			return;
drivers/net/ethernet/intel/i40evf/i40e_txrx.h +1 -1
index e29bb3e..d7950b1 100644
@@ -162,7 +162,7 @@ enum i40e_dyn_idx_t {
 #define I40E_TX_FLAGS_FCCRC		BIT(6)
 #define I40E_TX_FLAGS_FSO		BIT(7)
 #define I40E_TX_FLAGS_FD_SB		BIT(9)
-#define I40E_TX_FLAGS_VXLAN_TUNNEL	BIT(10)
+#define I40E_TX_FLAGS_TUNNEL		BIT(10)
 #define I40E_TX_FLAGS_VLAN_MASK		0xffff0000
 #define I40E_TX_FLAGS_VLAN_PRIO_MASK	0xe0000000
 #define I40E_TX_FLAGS_VLAN_PRIO_SHIFT	29
Signature · 1 line
2.1.0
#12 lore raw

PATCH 6/13 i40e/i40evf: tunnels can be generic

Quoted 19 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:50 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 06/13] i40e/i40evf: tunnels can be generic

From: Jesse Brandeburg <[email protected]>

Since the i40e driver now supports VxLAN, GRE, and soon to be Geneve tunnels, the driver can just note that an skb contains a tunneled packet generically, instead of calling out VXLAN specifically. The tunnel set up we do for hardware is almost always the same for all tunnel types.

This specifically enables ATR/Flow Director on GRE packets which increases performance/scaling. Without this patch GRE RX packets end up on a random RSS assigned queue.

Quoted 8 lines
Change-ID Ie8e205603654910d2f718592cbef8132ae0719e4
---
 drivers/net/ethernet/intel/i40e/i40e_txrx.c   | 7 ++++---
 drivers/net/ethernet/intel/i40e/i40e_txrx.h   | 2 +-
 drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 2 +-
drivers/net/ethernet/intel/i40evf/i40e_txrx.h | 2 +-
 4 files changed, 7 insertions(+), 6 deletions(-)

Patch code changes correctly applied

#13 lore raw

PATCH 6/13 i40e/i40evf: tunnels can be generic

In reply to Joshua Hay
Quoted 27 lines · Joshua A

From: Jesse Brandeburg <[email protected]>

Since the i40e driver now supports VxLAN, GRE, and soon to be Geneve tunnels, the driver can just note that an skb contains a tunneled packet generically, instead of calling out VXLAN specifically. The tunnel set up we do for hardware is almost always the same for all tunnel types.

This specifically enables ATR/Flow Director on GRE packets which increases performance/scaling. Without this patch GRE RX packets end up on a random RSS assigned queue.

Change-ID Ie8e205603654910d2f718592cbef8132ae0719e4
---
  drivers/net/ethernet/intel/i40e/i40e_txrx.c   | 7 ++++---
  drivers/net/ethernet/intel/i40e/i40e_txrx.h   | 2 +-
  drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 2 +-
  drivers/net/ethernet/intel/i40evf/i40e_txrx.h | 2 +-
  4 files changed, 7 insertions(+), 6 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_txrx.c +0 -0
index 28d2943..ba79f67 100644

drivers/net/ethernet/intel/i40e/i40e_txrx.c static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb, · line 2011

Quoted 8 lines
drivers/net/ethernet/intel/i40e/i40e_txrx.c +1 -1
@@ -2005,7 +2005,7 @@ static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb,
  	if (!(tx_flags & (I40E_TX_FLAGS_IPV4 | I40E_TX_FLAGS_IPV6)))
  		return;
 
-	if (!(tx_flags & I40E_TX_FLAGS_VXLAN_TUNNEL)) {
+	if ((tx_flags & I40E_TX_FLAGS_TUNNEL)) {
  		/* snag network header to get L4 type and address */
  		hdr.network = skb_network_header(skb);
 

So this patch has a major bug right here. Specifically it is disabling ATR for everything since the logic got flipped an you are checking the outer headers for tunneled frames, and the inner headers for non-tunneled frames.

There is another bug a bit further down from here where the variable protocol is used which means it is outer header only and as such breaks any cases where you have v4 over v6 or v6 over v4.

Quoted 62 lines
drivers/net/ethernet/intel/i40e/i40e_txrx.c +3 -2
@@ -2090,7 +2090,7 @@ static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb,
  		     I40E_TXD_FLTR_QW1_FD_STATUS_SHIFT;
 
  	dtype_cmd |= I40E_TXD_FLTR_QW1_CNT_ENA_MASK;
-	if (!(tx_flags & I40E_TX_FLAGS_VXLAN_TUNNEL))
+	if (!(tx_flags & I40E_TX_FLAGS_TUNNEL))
  		dtype_cmd |=
  			((u32)I40E_FD_ATR_STAT_IDX(pf->hw.pf_id) <<
  			I40E_TXD_FLTR_QW1_CNTINDEX_SHIFT) &
@@ -2323,10 +2323,11 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,
  			oudph = udp_hdr(skb);
  			oiph = ip_hdr(skb);
  			l4_tunnel = I40E_TXD_CTX_UDP_TUNNELING;
-			*tx_flags |= I40E_TX_FLAGS_VXLAN_TUNNEL;
+			*tx_flags |= I40E_TX_FLAGS_TUNNEL;
  			break;
  		case IPPROTO_GRE:
  			l4_tunnel = I40E_TXD_CTX_GRE_TUNNELING;
+			*tx_flags |= I40E_TX_FLAGS_TUNNEL;
  			break;
  		default:
  			return;
drivers/net/ethernet/intel/i40e/i40e_txrx.h +1 -1
index dccc1eb..1d167b6 100644
@@ -163,7 +163,7 @@ enum i40e_dyn_idx_t {
  #define I40E_TX_FLAGS_FSO		BIT(7)
  #define I40E_TX_FLAGS_TSYN		BIT(8)
  #define I40E_TX_FLAGS_FD_SB		BIT(9)
-#define I40E_TX_FLAGS_VXLAN_TUNNEL	BIT(10)
+#define I40E_TX_FLAGS_TUNNEL		BIT(10)
  #define I40E_TX_FLAGS_VLAN_MASK		0xffff0000
  #define I40E_TX_FLAGS_VLAN_PRIO_MASK	0xe0000000
  #define I40E_TX_FLAGS_VLAN_PRIO_SHIFT	29
drivers/net/ethernet/intel/i40evf/i40e_txrx.c +1 -1
index 7a00657..ed4934a 100644
@@ -1521,7 +1521,7 @@ static void i40e_tx_enable_csum(struct sk_buff *skb, u32 *tx_flags,
  			oudph = udp_hdr(skb);
  			oiph = ip_hdr(skb);
  			l4_tunnel = I40E_TXD_CTX_UDP_TUNNELING;
-			*tx_flags |= I40E_TX_FLAGS_VXLAN_TUNNEL;
+			*tx_flags |= I40E_TX_FLAGS_TUNNEL;
  			break;
  		default:
  			return;
drivers/net/ethernet/intel/i40evf/i40e_txrx.h +1 -1
index e29bb3e..d7950b1 100644
@@ -162,7 +162,7 @@ enum i40e_dyn_idx_t {
  #define I40E_TX_FLAGS_FCCRC		BIT(6)
  #define I40E_TX_FLAGS_FSO		BIT(7)
  #define I40E_TX_FLAGS_FD_SB		BIT(9)
-#define I40E_TX_FLAGS_VXLAN_TUNNEL	BIT(10)
+#define I40E_TX_FLAGS_TUNNEL		BIT(10)
  #define I40E_TX_FLAGS_VLAN_MASK		0xffff0000
  #define I40E_TX_FLAGS_VLAN_PRIO_MASK	0xe0000000
  #define I40E_TX_FLAGS_VLAN_PRIO_SHIFT	29
#14 lore raw

PATCH 6/13 i40e/i40evf: tunnels can be generic

Quoted 46 lines · Alexander Duyck
Quoted 15 lines · Joshua A

From: Jesse Brandeburg <[email protected]>

Since the i40e driver now supports VxLAN, GRE, and soon to be Geneve tunnels, the driver can just note that an skb contains a tunneled packet generically, instead of calling out VXLAN specifically.? The tunnel set up we do for hardware is almost always the same for all tunnel types.

This specifically enables ATR/Flow Director on GRE packets which increases performance/scaling.? Without this patch GRE RX packets end up on a random RSS assigned queue.

Change-ID Ie8e205603654910d2f718592cbef8132ae0719e4

Review

Quoted 8 lines

---

?? drivers/net/ethernet/intel/i40e/i40e_txrx.c?? | 7 ++++---
?? drivers/net/ethernet/intel/i40e/i40e_txrx.h?? | 2 +-
?? drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 2 +-
?? drivers/net/ethernet/intel/i40evf/i40e_txrx.h | 2 +-

?? 4 files changed, 7 insertions(+), 6 deletions(-)

(quoted diff) +0 -0

b/drivers/net/ethernet/intel/i40e/i40e_txrx.c

drivers/net/ethernet/intel/i40e/i40e_txrx.c static void i40e_atr(struct i40e_ring

Quoted 4 lines

index 28d2943..ba79f67 100644

drivers/net/ethernet/intel/i40e/i40e_txrx.c +0 -0
@@ -2005,7 +2005,7 @@ static void i40e_atr(struct i40e_ring

*tx_ring, struct sk_buff *skb,

Quoted 8 lines
drivers/net/ethernet/intel/i40e/i40e_txrx.c +1 -1
 ???????if (!(tx_flags & (I40E_TX_FLAGS_IPV4 | I40E_TX_FLAGS_IPV6)))
 ???????????????return;
 
-?????if (!(tx_flags & I40E_TX_FLAGS_VXLAN_TUNNEL)) {
+?????if ((tx_flags & I40E_TX_FLAGS_TUNNEL)) {

???????????????/* snag network header to get L4 type and address */ ???????????????hdr.network = skb_network_header(skb);

So this patch has a major bug right here.? Specifically it is disabling?
ATR for everything since the logic got flipped an you are checking the?
outer headers for tunneled frames, and the inner headers for? non-tunneled frames.

Quoted 4 lines

There is another bug a bit further down from here where the variable? protocol is used which means it is outer header only and as such breaks?
any cases where you have v4 over v6 or v6 over v4.

Thanks Alex for finding this, Jesse is working on a revised patch right
now.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: This is a digitally signed message part
URL: <http://lists.osuosl.org/pipermail/intel-wired-lan/attachments/20160120/f6e716a6/attachment.asc>

#15 lore raw

PATCH 6/13 i40e/i40evf: tunnels can be generic

In reply to Alexander Duyck
Quoted 12 lines · On Tue, 19 Jan 2016 19:54:07 -0800 Alexander Duyck <[email protected]>…

drivers/net/ethernet/intel/i40e/i40e_txrx.c static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb, · line 2010

Quoted 6 lines · Joshua A

From: Jesse Brandeburg <[email protected]>

drivers/net/ethernet/intel/i40e/i40e_txrx.c +1 -1
-	if (!(tx_flags & I40E_TX_FLAGS_VXLAN_TUNNEL)) {
+	if ((tx_flags & I40E_TX_FLAGS_TUNNEL)) {
  		/* snag network header to get L4 type and address */
  		hdr.network = skb_network_header(skb);

So this patch has a major bug right here. Specifically it is disabling ATR for everything since the logic got flipped an you are checking the outer headers for tunneled frames, and the inner headers for non-tunneled frames.

I've got a patch ready that fixes the "major bug" part, which appears to be due to be a combination of several factors leading to this point where the code was broken. Thank you VERY much for catching this.

Quoted 3 lines

There is another bug a bit further down from here where the variable protocol is used which means it is outer header only and as such breaks any cases where you have v4 over v6 or v6 over v4.

Since this issue was not introduced in this patch, I'm going to punt to a separate patch to fix the "protocol".

#16 lore raw

PATCH 6/13 i40e/i40evf: tunnels can be generic

Quoted 20 lines · Jesse Brandeburg
Quoted 8 lines · On Tue, 19 Jan 2016 19:54:07 -0800 Alexander Duyck <[email protected]>…

drivers/net/ethernet/intel/i40e/i40e_txrx.c static void i40e_atr(struct i40e_ring *tx_ring, struct sk_buff *skb, · line 2010

Quoted 6 lines · Joshua A

From: Jesse Brandeburg <[email protected]>

drivers/net/ethernet/intel/i40e/i40e_txrx.c +1 -1
-   if (!(tx_flags & I40E_TX_FLAGS_VXLAN_TUNNEL)) {
+   if ((tx_flags & I40E_TX_FLAGS_TUNNEL)) {
            /* snag network header to get L4 type and address */
            hdr.network = skb_network_header(skb);
Quoted 4 lines

So this patch has a major bug right here. Specifically it is disabling ATR for everything since the logic got flipped an you are checking the outer headers for tunneled frames, and the inner headers for non-tunneled frames.

I've got a patch ready that fixes the "major bug" part, which appears to be due to be a combination of several factors leading to this point where the code was broken. Thank you VERY much for catching this.

Quoted 7 lines
Quoted 3 lines

There is another bug a bit further down from here where the variable protocol is used which means it is outer header only and as such breaks any cases where you have v4 over v6 or v6 over v4.

Since this issue was not introduced in this patch, I'm going to punt to a separate patch to fix the "protocol".

That's fine with me. I actually have a patch already put together to address the protocol bug. I just have to finish up sorting out the ATA issues I am having with the current net-next and once I have that resolved I will hopefully be able to work on splitting up the patches a bit more and will submit my v2 either tonight or early tomorrow.

- Alex

author
#17 lore raw

PATCH 7/13 i40evf: allow channel bonding of VFs

In reply to Joshua Hay

From: Mitch Williams <[email protected]>

In some modes, bonding would not enslave VF interfaces. This is due to bonding calling change_mtu and the immediately calling open. Because of the asynchronous nature of the admin queue mechanism, the VF returns -EBUSY to the open call, because it knows the previous operation hasn't finished yet. This causes bonding to fail with a less-than-useful error message.

To fix this, remove the check for pending operations at the beginning of open. But this introduces a new bug where the driver will panic on a quick close/open cycle. To fix that, we add a new driver state, __I40EVF_DOWN_PENDING, that the driver enters when down is called. The driver finally transitions to a fully DOWN state when it receives confirmation from the PF driver that all the queues are disabled. This allows open to complete even if there is a pending mtu change, and bonding is finally happy.

Change-ID I06f4c7e435d5bacbfceaa7c3f209e0ff04be21cc
---
 drivers/net/ethernet/intel/i40evf/i40evf.h          | 1 +
 drivers/net/ethernet/intel/i40evf/i40evf_main.c     | 9 +++++----
 drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c | 2 ++
 3 files changed, 8 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/i40evf/i40evf.h +1 -0
index be1b72b..9e15f68 100644
@@ -173,6 +173,7 @@ enum i40evf_state_t {
 	__I40EVF_RESETTING,		/* in reset */
 	/* Below here, watchdog is running */
 	__I40EVF_DOWN,			/* ready, can be opened */
+	__I40EVF_DOWN_PENDING,		/* descending, waiting for watchdog */
 	__I40EVF_TESTING,		/* in ethtool self-test */
 	__I40EVF_RUNNING,		/* opened, working */
 };
drivers/net/ethernet/intel/i40evf/i40evf_main.c +5 -4
index 455394c..d859045 100644
@@ -1032,7 +1032,7 @@ void i40evf_down(struct i40evf_adapter *adapter)
 	struct net_device *netdev = adapter->netdev;
 	struct i40evf_mac_filter *f;
 
-	if (adapter->state == __I40EVF_DOWN)
+	if (adapter->state <= __I40EVF_DOWN_PENDING)
 		return;
 
 	while (test_and_set_bit(__I40EVF_IN_CRITICAL_TASK,
@@ -2142,7 +2142,8 @@ static int i40evf_open(struct net_device *netdev)
 		dev_err(&adapter->pdev->dev, "Unable to open device due to PF driver failure.\n");
 		return -EIO;
 	}
-	if (adapter->state != __I40EVF_DOWN || adapter->aq_required)
+
+	if (adapter->state != __I40EVF_DOWN)
 		return -EBUSY;
 
 	/* allocate transmit descriptors */
@@ -2197,14 +2198,14 @@ static int i40evf_close(struct net_device *netdev)
 {
 	struct i40evf_adapter *adapter = netdev_priv(netdev);
 
-	if (adapter->state <= __I40EVF_DOWN)
+	if (adapter->state <= __I40EVF_DOWN_PENDING)
 		return 0;
 
 
 	set_bit(__I40E_DOWN, &adapter->vsi.state);
 
 	i40evf_down(adapter);
-	adapter->state = __I40EVF_DOWN;
+	adapter->state = __I40EVF_DOWN_PENDING;
 	i40evf_free_traffic_irqs(adapter);
 
 	return 0;
drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c +2 -0
index c1c5262..d3739cc 100644
@@ -804,6 +804,8 @@ void i40evf_virtchnl_completion(struct i40evf_adapter *adapter,
 	case I40E_VIRTCHNL_OP_DISABLE_QUEUES:
 		i40evf_free_all_tx_resources(adapter);
 		i40evf_free_all_rx_resources(adapter);
+		if (adapter->state == __I40EVF_DOWN_PENDING)
+			adapter->state = __I40EVF_DOWN;
 		break;
 	case I40E_VIRTCHNL_OP_VERSION:
 	case I40E_VIRTCHNL_OP_CONFIG_IRQ_MAP:
Signature · 1 line
2.1.0
#18 lore raw

PATCH 7/13 i40evf: allow channel bonding of VFs

Quoted 25 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:50 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 07/13] i40evf: allow channel bonding of VFs

From: Mitch Williams <[email protected]>

In some modes, bonding would not enslave VF interfaces. This is due to bonding calling change_mtu and the immediately calling open. Because of the asynchronous nature of the admin queue mechanism, the VF returns - EBUSY to the open call, because it knows the previous operation hasn't finished yet. This causes bonding to fail with a less-than-useful error message.

To fix this, remove the check for pending operations at the beginning of open. But this introduces a new bug where the driver will panic on a quick close/open cycle. To fix that, we add a new driver state, __I40EVF_DOWN_PENDING, that the driver enters when down is called. The driver finally transitions to a fully DOWN state when it receives confirmation from the PF driver that all the queues are disabled. This allows open to complete even if there is a pending mtu change, and bonding is finally happy.

Quoted 7 lines
Change-ID I06f4c7e435d5bacbfceaa7c3f209e0ff04be21cc
---
 drivers/net/ethernet/intel/i40evf/i40evf.h          | 1 +
 drivers/net/ethernet/intel/i40evf/i40evf_main.c     | 9 +++++----
 drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c | 2 ++
 3 files changed, 8 insertions(+), 4 deletions(-)

Patch code changes correctly applied

author
#19 lore raw

PATCH 8/13 i40e: define function capabilities in only one place

In reply to Joshua Hay

From: Shannon Nelson <[email protected]>

The device capabilities were defined in two places, and neither had all the definitions. It really belongs with the AQ API definition, so this patch removes the other set of definitions and fills out the missing item.

Change-ID I273ba7d79a476cd11d2e0ca5825fec1716740de2

---
Testing Hints: Apply and compile cleanly

 drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h  |  1 +
 drivers/net/ethernet/intel/i40e/i40e_common.c      | 85 +++++++---------------
 .../net/ethernet/intel/i40evf/i40e_adminq_cmd.h    |  1 +
 3 files changed, 30 insertions(+), 57 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h +1 -0
index b22012a..256ce65 100644
@@ -422,6 +422,7 @@ struct i40e_aqc_list_capabilities_element_resp {
 #define I40E_AQ_CAP_ID_LED		0x0061
 #define I40E_AQ_CAP_ID_SDP		0x0062
 #define I40E_AQ_CAP_ID_MDIO		0x0063
+#define I40E_AQ_CAP_ID_WSR_PROT		0x0064
 #define I40E_AQ_CAP_ID_FLEX10		0x00F1
 #define I40E_AQ_CAP_ID_CEM		0x00F2
 
drivers/net/ethernet/intel/i40e/i40e_common.c +28 -57

180 lines not on this page · raw message

drivers/net/ethernet/intel/i40evf/i40e_adminq_cmd.h +1 -0
index f5b2b36..0d3bc3b 100644
@@ -419,6 +419,7 @@ struct i40e_aqc_list_capabilities_element_resp {
 #define I40E_AQ_CAP_ID_LED		0x0061
 #define I40E_AQ_CAP_ID_SDP		0x0062
 #define I40E_AQ_CAP_ID_MDIO		0x0063
+#define I40E_AQ_CAP_ID_WSR_PROT		0x0064
 #define I40E_AQ_CAP_ID_FLEX10		0x00F1
 #define I40E_AQ_CAP_ID_CEM		0x00F2
 
Signature · 1 line
2.1.0
#20 lore raw

PATCH 8/13 i40e: define function capabilities in only one place

Quoted 9 lines · On Wed, 9 Dec 2015 15:50:28 -0800 Joshua Hay <[email protected]> wrote:

From: Shannon Nelson <[email protected]>

The device capabilities were defined in two places, and neither had all the definitions. It really belongs with the AQ API definition, so this patch removes the other set of definitions and fills out the missing item.

Only the Author's S.O.B should be included when submitting upstream, until Jeff adds his own S.O.B as part of the upstreaming process.

#21 lore raw

PATCH 8/13 i40e: define function capabilities in only one place

In reply to Joshua Hay
Quoted 18 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:50 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 08/13] i40e: define function capabilities in only one place

From: Shannon Nelson <[email protected]>

The device capabilities were defined in two places, and neither had all the definitions. It really belongs with the AQ API definition, so this patch removes the other set of definitions and fills out the missing item.

Change-ID I273ba7d79a476cd11d2e0ca5825fec1716740de2
Quoted 8 lines

---
Testing Hints: Apply and compile cleanly

 drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h  |  1 +
 drivers/net/ethernet/intel/i40e/i40e_common.c      | 85 +++++++-------------
--
 .../net/ethernet/intel/i40evf/i40e_adminq_cmd.h    |  1 +
 3 files changed, 30 insertions(+), 57 deletions(-)

Patch code changes correctly applied

#22 lore raw

PATCH 8/13 i40e: define function capabilities in only one place

Quoted 31 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Bowers, AndrewX
Sent: Thursday, December 17, 2015 8:54 AM
To: intel-wired-lan at lists.osuosl.org
Subject: Re: [Intel-wired-lan] [next PATCH S23 08/13] i40e: define function capabilities in only one place

Quoted 9 lines

-----Original Message-----
From: Intel-wired-lan
[mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:50 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 08/13] i40e: define function capabilities in only one place

Quoted 5 lines

From: Shannon Nelson <[email protected]>

The device capabilities were defined in two places, and neither had all the definitions. It really belongs with the AQ API definition, so this patch removes the other set of definitions and fills out the missing

item.

Quoted 8 lines
Change-ID I273ba7d79a476cd11d2e0ca5825fec1716740de2

---
Testing Hints: Apply and compile cleanly

Quoted 6 lines
Quoted 2 lines
 drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h  |  1 +
 drivers/net/ethernet/intel/i40e/i40e_common.c      | 85 +++++++-----------

--

Quoted 3 lines

--

 .../net/ethernet/intel/i40evf/i40e_adminq_cmd.h    |  1 +
 3 files changed, 30 insertions(+), 57 deletions(-)

Patch code changes correctly applied

author
#23 lore raw

PATCH 9/13 i40e: Make some changes in the nvm read code

In reply to Joshua Hay

From: Anjali Singhai Jain <[email protected]>

In X722, NVM reads can't be done through SRCTL registers. And require AQ calls, which require grabbing the NVM lock. Unfortunately some paths need the lock to be acquired once and do a whole bunch of stuff and then release it. This patch creates an unsafe version of the read calls, so that it can be called from the paths that need the bulk access.

Change-ID Ia9076e9100c5cf61206a856bd279059d3a052024

---
Testing Hints: Also make sure LAN driver
sees the correct NVM version and does not fail verify checksum during init and during reset.

 drivers/net/ethernet/intel/i40e/i40e_nvm.c | 70 +++++++++++++++++++++++++-----
 1 file changed, 59 insertions(+), 11 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_nvm.c +59 -11
index 6100cdd..79c0053 100644
@@ -212,6 +212,24 @@ read_nvm_exit:
 }
 
 /**
+ * __i40e_read_nvm_word - Reads nvm word, assumes caller does the locking
+ * @hw: pointer to the HW structure
+ * @offset: offset of the Shadow RAM word to read (0x000000 - 0x001FFF)
+ * @data: word read from the Shadow RAM
+ *
+ * Reads one 16 bit word from the Shadow RAM using the GLNVM_SRCTL register.
+ **/
+static i40e_status __i40e_read_nvm_word(struct i40e_hw *hw,
+					u16 offset,
+					u16 *data)
+{
+	i40e_status ret_code = 0;
+
+	ret_code = i40e_read_nvm_word_srctl(hw, offset, data);
+	return ret_code;
+}
+
+/**
  * i40e_read_nvm_aq - Read Shadow RAM.
  * @hw: pointer to the HW structure.
  * @module_pointer: module pointer location in words from the NVM beginning
@@ -280,7 +298,7 @@ static i40e_status i40e_read_nvm_word_aq(struct i40e_hw *hw, u16 offset,
 }
 
 /**
- * i40e_read_nvm_word - Reads Shadow RAM
+ * i40e_read_nvm_word - Reads nvm word and acquire lock if necessary
  * @hw: pointer to the HW structure
  * @offset: offset of the Shadow RAM word to read (0x000000 - 0x001FFF)
  * @data: word read from the Shadow RAM
@@ -393,7 +411,28 @@ read_nvm_buffer_aq_exit:
 }
 
 /**
- * i40e_read_nvm_buffer - Reads Shadow RAM buffer
+ * __i40e_read_nvm_buffer - Reads nvm buffer, caller must acquire lock
+ * @hw: pointer to the HW structure
+ * @offset: offset of the Shadow RAM word to read (0x000000 - 0x001FFF).
+ * @words: (in) number of words to read; (out) number of words actually read
+ * @data: words read from the Shadow RAM
+ *
+ * Reads 16 bit words (data buffer) from the SR using the i40e_read_nvm_srrd()
+ * method. The buffer read is preceded by the NVM ownership take
+ * and followed by the release.
+ **/
+static i40e_status __i40e_read_nvm_buffer(struct i40e_hw *hw,
+					  u16 offset,
+					  u16 *words, u16 *data)
+{
+	i40e_status ret_code = 0;
+
+	ret_code = i40e_read_nvm_buffer_srctl(hw, offset, words, data);
+	return ret_code;
+}
+
+/**
+ * i40e_read_nvm_buffer - Reads Shadow RAM buffer and acuire lock if necessary
  * @hw: pointer to the HW structure
  * @offset: offset of the Shadow RAM word to read (0x000000 - 0x001FFF).
  * @words: (in) number of words to read; (out) number of words actually read
@@ -499,15 +538,17 @@ static i40e_status i40e_calc_nvm_checksum(struct i40e_hw *hw,
 	data = (u16 *)vmem.va;
 
 	/* read pointer to VPD area */
-	ret_code = i40e_read_nvm_word(hw, I40E_SR_VPD_PTR, &vpd_module);
+	ret_code = __i40e_read_nvm_word(hw, I40E_SR_VPD_PTR,
+					&vpd_module);
 	if (ret_code) {
 		ret_code = I40E_ERR_NVM_CHECKSUM;
 		goto i40e_calc_nvm_checksum_exit;
 	}
 
 	/* read pointer to PCIe Alt Auto-load module */
-	ret_code = i40e_read_nvm_word(hw, I40E_SR_PCIE_ALT_AUTO_LOAD_PTR,
-				      &pcie_alt_module);
+	ret_code = __i40e_read_nvm_word(hw,
+					I40E_SR_PCIE_ALT_AUTO_LOAD_PTR,
+					&pcie_alt_module);
 	if (ret_code) {
 		ret_code = I40E_ERR_NVM_CHECKSUM;
 		goto i40e_calc_nvm_checksum_exit;
@@ -521,7 +562,7 @@ static i40e_status i40e_calc_nvm_checksum(struct i40e_hw *hw,
 		if ((i % I40E_SR_SECTOR_SIZE_IN_WORDS) == 0) {
 			u16 words = I40E_SR_SECTOR_SIZE_IN_WORDS;
 
-			ret_code = i40e_read_nvm_buffer(hw, i, &words, data);
+			ret_code = __i40e_read_nvm_buffer(hw, i, &words, data);
 			if (ret_code) {
 				ret_code = I40E_ERR_NVM_CHECKSUM;
 				goto i40e_calc_nvm_checksum_exit;
@@ -593,13 +634,18 @@ i40e_status i40e_validate_nvm_checksum(struct i40e_hw *hw,
 	u16 checksum_sr = 0;
 	u16 checksum_local = 0;
 
-	ret_code = i40e_calc_nvm_checksum(hw, &checksum_local);
-	if (ret_code)
+	if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE)
+		ret_code = i40e_acquire_nvm(hw, I40E_RESOURCE_READ);
+	if (!ret_code) {
+		ret_code = i40e_calc_nvm_checksum(hw, &checksum_local);
+		if (hw->flags & I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE)
+			i40e_release_nvm(hw);
+		if (ret_code)
+			goto i40e_validate_nvm_checksum_exit;
+	} else {
 		goto i40e_validate_nvm_checksum_exit;
+	}
 
-	/* Do not use i40e_read_nvm_word() because we do not want to take
-	 * the synchronization semaphores twice here.
-	 */
 	i40e_read_nvm_word(hw, I40E_SR_SW_CHECKSUM_WORD, &checksum_sr);
 
 	/* Verify read checksum from EEPROM is the same as
@@ -958,6 +1004,7 @@ retry:
 		break;
 
 	case I40E_NVMUPD_CSUM_CON:
+		/* Assumes the caller has acquired the nvm */
 		status = i40e_update_nvm_checksum(hw);
 		if (status) {
 			*perrno = hw->aq.asq_last_status ?
@@ -971,6 +1018,7 @@ retry:
 		break;
 
 	case I40E_NVMUPD_CSUM_LCB:
+		/* Assumes the caller has acquired the nvm */
 		status = i40e_update_nvm_checksum(hw);
 		if (status) {
 			*perrno = hw->aq.asq_last_status ?
Signature · 1 line
2.1.0
author
#24 lore raw

PATCH 10/13 i40evf: null out ring pointers on free

In reply to Joshua Hay

From: Mitch Williams <[email protected]>

Since we check these ring pointers to make sure we don't double-allocate or double-free the rings, we had better null them out after we free them. In very rare cases this can cause a panic if the driver is removed during reset recovery.

Change-ID Ib06eb4910a3058275c8f7ec5ef7f45baa4674f96
---
 drivers/net/ethernet/intel/i40evf/i40evf_main.c | 2 ++
 1 file changed, 2 insertions(+)
drivers/net/ethernet/intel/i40evf/i40evf_main.c +2 -0
index d859045..c7f98e7 100644
@@ -1122,7 +1122,9 @@ static void i40evf_free_queues(struct i40evf_adapter *adapter)
 	if (!adapter->vsi_res)
 		return;
 	kfree(adapter->tx_rings);
+	adapter->tx_rings = NULL;
 	kfree(adapter->rx_rings);
+	adapter->rx_rings = NULL;
 }
 
 /**
Signature · 1 line
2.1.0
#25 lore raw

PATCH 10/13 i40evf: null out ring pointers on free

Quoted 15 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:51 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 10/13] i40evf: null out ring pointers on free

From: Mitch Williams <[email protected]>

Since we check these ring pointers to make sure we don't double-allocate or double-free the rings, we had better null them out after we free them. In very rare cases this can cause a panic if the driver is removed during reset recovery.

Quoted 5 lines
Change-ID Ib06eb4910a3058275c8f7ec5ef7f45baa4674f96
---
 drivers/net/ethernet/intel/i40evf/i40evf_main.c | 2 ++
 1 file changed, 2 insertions(+)

Patch code changes correctly applied

author
#26 lore raw

PATCH 11/13 i40e: Cleanup the code with respect to restarting autoneg

In reply to Joshua Hay

From: Anjali Singhai Jain <[email protected]>

The restart-autoneg work around does not apply to X722. Added a flag to set it only for the right MAC and right FW version where the work around should be applied.

Change-ID I942c3ff40cccd1e56f424b1da776b020fe3c9d2a
---
 drivers/net/ethernet/intel/i40e/i40e.h      |  1 +
 drivers/net/ethernet/intel/i40e/i40e_main.c | 12 ++++++++----
 2 files changed, 9 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/i40e/i40e.h +1 -0
index 4747219..bf3776f 100644
@@ -336,6 +336,7 @@ struct i40e_pf {
 #define I40E_FLAG_VEB_MODE_ENABLED		BIT_ULL(40)
 #define I40E_FLAG_NO_PCI_LINK_CHECK		BIT_ULL(41)
 #define I40E_FLAG_100M_SGMII_CAPABLE		BIT_ULL(42)
+#define I40E_FLAG_RESTART_AUTONEG	        BIT_ULL(43)
 
 	/* tracks features that get auto disabled by errors */
 	u64 auto_disable_flags;
drivers/net/ethernet/intel/i40e/i40e_main.c +8 -4
index 44bbfd8..747387f 100644
@@ -6882,8 +6882,7 @@ static void i40e_reset_and_rebuild(struct i40e_pf *pf, bool reinit)
 		wr32(hw, I40E_REG_MSS, val);
 	}
 
-	if (((pf->hw.aq.fw_maj_ver == 4) && (pf->hw.aq.fw_min_ver < 33)) ||
-	    (pf->hw.aq.fw_maj_ver < 4)) {
+	if (pf->flags & I40E_FLAG_RESTART_AUTONEG) {
 		msleep(75);
 		ret = i40e_aq_set_link_restart_an(&pf->hw, true, NULL);
 		if (ret)
@@ -8362,6 +8361,12 @@ static int i40e_sw_init(struct i40e_pf *pf)
 				 pf->hw.func_caps.fd_filters_best_effort;
 	}
 
+	if (((pf->hw.mac.type == I40E_MAC_X710) ||
+	     (pf->hw.mac.type == I40E_MAC_XL710)) &&
+	    (((pf->hw.aq.fw_maj_ver == 4) && (pf->hw.aq.fw_min_ver < 33)) ||
+	    (pf->hw.aq.fw_maj_ver < 4)))
+		pf->flags |= I40E_FLAG_RESTART_AUTONEG;
+
 	if (pf->hw.func_caps.vmdq) {
 		pf->num_vmdq_vsis = I40E_DEFAULT_NUM_VMDQ_VSI;
 		pf->flags |= I40E_FLAG_VMDQ_ENABLED;
@@ -10791,8 +10796,7 @@ static int i40e_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		wr32(hw, I40E_REG_MSS, val);
 	}
 
-	if (((pf->hw.aq.fw_maj_ver == 4) && (pf->hw.aq.fw_min_ver < 33)) ||
-	    (pf->hw.aq.fw_maj_ver < 4)) {
+	if (pf->flags & I40E_FLAG_RESTART_AUTONEG) {
 		msleep(75);
 		err = i40e_aq_set_link_restart_an(&pf->hw, true, NULL);
 		if (err)
Signature · 1 line
2.1.0
#27 lore raw

PATCH 11/13 i40e: Cleanup the code with respect to restarting autoneg

Quoted 14 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:51 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 11/13] i40e: Cleanup the code with respect to restarting autoneg

From: Anjali Singhai Jain <[email protected]>

The restart-autoneg work around does not apply to X722.
Added a flag to set it only for the right MAC and right FW version where the work around should be applied.

Quoted 6 lines
Change-ID I942c3ff40cccd1e56f424b1da776b020fe3c9d2a
---
 drivers/net/ethernet/intel/i40e/i40e.h      |  1 +
 drivers/net/ethernet/intel/i40e/i40e_main.c | 12 ++++++++----
 2 files changed, 9 insertions(+), 4 deletions(-)

Patch code changes correctly applied

author
#28 lore raw

PATCH 12/13 i40e: update features with right offload

In reply to Joshua Hay

From: Jesse Brandeburg <[email protected]>

Synchronize code bases and add SCTP offload support.

Change-ID I9f99071f7176225479026930c387bf681a47494e

---
Testing Hints: Test SCTP in a tunnel like vxlan and make sure TSO is still working. Test GRE tunnels and make sure they work. See already applied GRE upstream commit for instructions.

 drivers/net/ethernet/intel/i40e/i40e_main.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)
drivers/net/ethernet/intel/i40e/i40e_main.c +6 -4
index 747387f..cc83332 100644
@@ -8847,10 +8847,12 @@ static int i40e_config_netdev(struct i40e_vsi *vsi)
 	np = netdev_priv(netdev);
 	np->vsi = vsi;
 
-	netdev->hw_enc_features |= NETIF_F_IP_CSUM	 |
-				  NETIF_F_GSO_UDP_TUNNEL |
-				  NETIF_F_GSO_GRE	 |
-				  NETIF_F_TSO;
+	netdev->hw_enc_features |= NETIF_F_IP_CSUM	  |
+				   NETIF_F_SCTP_CSUM	  |
+				   NETIF_F_GSO_UDP_TUNNEL |
+				   NETIF_F_GSO_GRE        |
+				   NETIF_F_TSO		  |
+				   0;
 
 	netdev->features = NETIF_F_SG		       |
 			   NETIF_F_IP_CSUM	       |
Signature · 1 line
2.1.0
#29 lore raw

PATCH 12/13 i40e: update features with right offload

Quoted 6 lines · On Wed, 9 Dec 2015 15:50:32 -0800 Joshua Hay <[email protected]> wrote:

From: Jesse Brandeburg <[email protected]>

Synchronize code bases and add SCTP offload support.

signed off by and reviewed by the same person looks bogus. Please only include the originator's S.O.B. when generating upstream commits.

author
#30 lore raw

PATCH 13/13 i40e: bump version to 1.4.10

In reply to Joshua Hay

From: Catherine Sullivan <[email protected]>

Bump.

Change-Id: I81c407a988a8ff3c0b3ae64b4330800c95e6c31b

Change-ID Ic9a495feb9ab0606f953c3848b0acf67169d3930

---
Testing Hints: check version

 drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/intel/i40e/i40e_main.c +1 -1
index cc83332..fb58608 100644
@@ -48,7 +48,7 @@ static const char i40e_driver_string[] =
 
 #define DRV_VERSION_MAJOR 1
 #define DRV_VERSION_MINOR 4
-#define DRV_VERSION_BUILD 8
+#define DRV_VERSION_BUILD 10
 #define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \
 	     __stringify(DRV_VERSION_MINOR) "." \
 	     __stringify(DRV_VERSION_BUILD)    DRV_KERN
Signature · 1 line
2.1.0
#31 lore raw

PATCH 13/13 i40e: bump version to 1.4.10

Quoted 14 lines

-----Original Message-----
From: Intel-wired-lan [mailto:intel-wired-lan-bounces at lists.osuosl.org] On Behalf Of Joshua Hay
Sent: Wednesday, December 09, 2015 3:51 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [next PATCH S23 13/13] i40e: bump version to 1.4.10

From: Catherine Sullivan <[email protected]>

Bump.

Change-Id: I81c407a988a8ff3c0b3ae64b4330800c95e6c31b

Quoted 7 lines
Change-ID Ic9a495feb9ab0606f953c3848b0acf67169d3930

---
Testing Hints: check version

 drivers/net/ethernet/intel/i40e/i40e_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Patch code changes correctly applied, modinfo/ethtool show correct version