netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net v1 0/2] amd-xgbe: AMD XGBE driver fixes 2014-10-22
@ 2014-10-22 16:26 Tom Lendacky
  2014-10-22 16:26 ` [PATCH net v1 1/2] amd-xgbe: Properly handle feature changes via ethtool Tom Lendacky
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Tom Lendacky @ 2014-10-22 16:26 UTC (permalink / raw)
  To: netdev; +Cc: davem

The following series of patches includes fixes to the driver.

- Properly handle feature changes via ethtool by using correctly sized
  variables
- Perform proper napi packet counting and budget checking

This patch series is based on net.

---

Tom Lendacky (2):
      amd-xgbe: Properly handle feature changes via ethtool
      amd-xgbe: Fix napi Rx budget accounting


 drivers/net/ethernet/amd/xgbe/xgbe-drv.c |   22 +++++++++++++---------
 1 file changed, 13 insertions(+), 9 deletions(-)

-- 
Tom Lendacky

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH net v1 1/2] amd-xgbe: Properly handle feature changes via ethtool
  2014-10-22 16:26 [PATCH net v1 0/2] amd-xgbe: AMD XGBE driver fixes 2014-10-22 Tom Lendacky
@ 2014-10-22 16:26 ` Tom Lendacky
  2014-10-22 16:26 ` [PATCH net v1 2/2] amd-xgbe: Fix napi Rx budget accounting Tom Lendacky
  2014-10-22 21:51 ` [PATCH net v1 0/2] amd-xgbe: AMD XGBE driver fixes 2014-10-22 David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: Tom Lendacky @ 2014-10-22 16:26 UTC (permalink / raw)
  To: netdev; +Cc: davem

The ndo_set_features callback function was improperly using an unsigned
int to save the current feature value for features such as NETIF_F_RXCSUM.
Since that feature is in the upper 32 bits of a 64 bit variable the
result was always 0 making it not possible to actually turn off the
hardware RX checksum support.  Change the unsigned int type to the
netdev_features_t type in order to properly capture the current value
and perform the proper operation.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
---
 drivers/net/ethernet/amd/xgbe/xgbe-drv.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
index 2955499..a480b23 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
@@ -1465,7 +1465,7 @@ static int xgbe_set_features(struct net_device *netdev,
 {
 	struct xgbe_prv_data *pdata = netdev_priv(netdev);
 	struct xgbe_hw_if *hw_if = &pdata->hw_if;
-	unsigned int rxcsum, rxvlan, rxvlan_filter;
+	netdev_features_t rxcsum, rxvlan, rxvlan_filter;
 
 	rxcsum = pdata->netdev_features & NETIF_F_RXCSUM;
 	rxvlan = pdata->netdev_features & NETIF_F_HW_VLAN_CTAG_RX;

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH net v1 2/2] amd-xgbe: Fix napi Rx budget accounting
  2014-10-22 16:26 [PATCH net v1 0/2] amd-xgbe: AMD XGBE driver fixes 2014-10-22 Tom Lendacky
  2014-10-22 16:26 ` [PATCH net v1 1/2] amd-xgbe: Properly handle feature changes via ethtool Tom Lendacky
@ 2014-10-22 16:26 ` Tom Lendacky
  2014-10-22 21:51 ` [PATCH net v1 0/2] amd-xgbe: AMD XGBE driver fixes 2014-10-22 David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: Tom Lendacky @ 2014-10-22 16:26 UTC (permalink / raw)
  To: netdev; +Cc: davem

Currently the amd-xgbe driver increments the packets processed counter
each time a descriptor is processed.  Since a packet can be represented
by more than one descriptor incrementing the counter in this way is not
appropriate.  Also, since multiple descriptors cause the budget check
to be short circuited, sometimes the returned value from the poll
function would be larger than the budget value resulting in a WARN_ONCE
being triggered.

Update the polling logic to properly account for the number of packets
processed and exit when the budget value is reached.

Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
---
 drivers/net/ethernet/amd/xgbe/xgbe-drv.c |   20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
index a480b23..2349ea9 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-drv.c
@@ -1598,7 +1598,8 @@ static int xgbe_rx_poll(struct xgbe_channel *channel, int budget)
 	struct skb_shared_hwtstamps *hwtstamps;
 	unsigned int incomplete, error, context_next, context;
 	unsigned int len, put_len, max_len;
-	int received = 0;
+	unsigned int received = 0;
+	int packet_count = 0;
 
 	DBGPR("-->xgbe_rx_poll: budget=%d\n", budget);
 
@@ -1608,7 +1609,7 @@ static int xgbe_rx_poll(struct xgbe_channel *channel, int budget)
 
 	rdata = XGBE_GET_DESC_DATA(ring, ring->cur);
 	packet = &ring->packet_data;
-	while (received < budget) {
+	while (packet_count < budget) {
 		DBGPR("  cur = %d\n", ring->cur);
 
 		/* First time in loop see if we need to restore state */
@@ -1662,7 +1663,7 @@ read_again:
 			if (packet->errors)
 				DBGPR("Error in received packet\n");
 			dev_kfree_skb(skb);
-			continue;
+			goto next_packet;
 		}
 
 		if (!context) {
@@ -1677,7 +1678,7 @@ read_again:
 					}
 
 					dev_kfree_skb(skb);
-					continue;
+					goto next_packet;
 				}
 				memcpy(skb_tail_pointer(skb), rdata->skb->data,
 				       put_len);
@@ -1694,7 +1695,7 @@ read_again:
 
 		/* Stray Context Descriptor? */
 		if (!skb)
-			continue;
+			goto next_packet;
 
 		/* Be sure we don't exceed the configured MTU */
 		max_len = netdev->mtu + ETH_HLEN;
@@ -1705,7 +1706,7 @@ read_again:
 		if (skb->len > max_len) {
 			DBGPR("packet length exceeds configured MTU\n");
 			dev_kfree_skb(skb);
-			continue;
+			goto next_packet;
 		}
 
 #ifdef XGMAC_ENABLE_RX_PKT_DUMP
@@ -1739,6 +1740,9 @@ read_again:
 
 		netdev->last_rx = jiffies;
 		napi_gro_receive(&pdata->napi, skb);
+
+next_packet:
+		packet_count++;
 	}
 
 	/* Check if we need to save state before leaving */
@@ -1752,9 +1756,9 @@ read_again:
 		rdata->state.error = error;
 	}
 
-	DBGPR("<--xgbe_rx_poll: received = %d\n", received);
+	DBGPR("<--xgbe_rx_poll: packet_count = %d\n", packet_count);
 
-	return received;
+	return packet_count;
 }
 
 static int xgbe_poll(struct napi_struct *napi, int budget)

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net v1 0/2] amd-xgbe: AMD XGBE driver fixes 2014-10-22
  2014-10-22 16:26 [PATCH net v1 0/2] amd-xgbe: AMD XGBE driver fixes 2014-10-22 Tom Lendacky
  2014-10-22 16:26 ` [PATCH net v1 1/2] amd-xgbe: Properly handle feature changes via ethtool Tom Lendacky
  2014-10-22 16:26 ` [PATCH net v1 2/2] amd-xgbe: Fix napi Rx budget accounting Tom Lendacky
@ 2014-10-22 21:51 ` David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2014-10-22 21:51 UTC (permalink / raw)
  To: thomas.lendacky; +Cc: netdev

From: Tom Lendacky <thomas.lendacky@amd.com>
Date: Wed, 22 Oct 2014 11:26:05 -0500

> The following series of patches includes fixes to the driver.
> 
> - Properly handle feature changes via ethtool by using correctly sized
>   variables
> - Perform proper napi packet counting and budget checking
> 
> This patch series is based on net.

Series applied, thanks Tom.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-10-22 21:51 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-10-22 16:26 [PATCH net v1 0/2] amd-xgbe: AMD XGBE driver fixes 2014-10-22 Tom Lendacky
2014-10-22 16:26 ` [PATCH net v1 1/2] amd-xgbe: Properly handle feature changes via ethtool Tom Lendacky
2014-10-22 16:26 ` [PATCH net v1 2/2] amd-xgbe: Fix napi Rx budget accounting Tom Lendacky
2014-10-22 21:51 ` [PATCH net v1 0/2] amd-xgbe: AMD XGBE driver fixes 2014-10-22 David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).