From: Nathan Fontenot <nfont@linux.vnet.ibm.com>
To: netdev@vger.kernel.org
Cc: brking@linux.vnet.ibm.com, jallen@linux.vnet.ibm.com,
muvic@linux.vnet.ibm.com, tlfalcon@linux.vnet.ibm.com
Subject: [PATCH v4 net-next 06/11] ibmvnic: Clean up tx pools when closing
Date: Wed, 03 May 2017 14:04:56 -0400 [thread overview]
Message-ID: <20170503180456.29742.89921.stgit@ltcalpine2-lp23.aus.stglabs.ibm.com> (raw)
In-Reply-To: <20170503180246.29742.64039.stgit@ltcalpine2-lp23.aus.stglabs.ibm.com>
When closing the ibmvnic driver, most notably during the reset
path, the tx pools need to be cleaned to ensure there are no
hanging skbs that need to be free'ed.
The need for this was found during debugging a loss of network
traffic after handling a driver reset. The underlying cause was
some skbs in the tx pool that were never free'ed. As a
result the upper network layers never tried a re-send since it
believed the driver still had the skb.
Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
---
drivers/net/ethernet/ibm/ibmvnic.c | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index bbbd57e..2297cf2 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -760,6 +760,34 @@ static void disable_sub_crqs(struct ibmvnic_adapter *adapter)
}
}
+static void clean_tx_pools(struct ibmvnic_adapter *adapter)
+{
+ struct ibmvnic_tx_pool *tx_pool;
+ u64 tx_entries;
+ int tx_scrqs;
+ int i, j;
+
+ if (!adapter->tx_pool)
+ return;
+
+ tx_scrqs = be32_to_cpu(adapter->login_rsp_buf->num_txsubm_subcrqs);
+ tx_entries = adapter->req_tx_entries_per_subcrq;
+
+ /* Free any remaining skbs in the tx buffer pools */
+ for (i = 0; i < tx_scrqs; i++) {
+ tx_pool = &adapter->tx_pool[i];
+ if (!tx_pool)
+ continue;
+
+ for (j = 0; j < tx_entries; j++) {
+ if (tx_pool->tx_buff[j].skb) {
+ dev_kfree_skb_any(tx_pool->tx_buff[j].skb);
+ tx_pool->tx_buff[j].skb = NULL;
+ }
+ }
+ }
+}
+
static int __ibmvnic_close(struct net_device *netdev)
{
struct ibmvnic_adapter *adapter = netdev_priv(netdev);
@@ -768,6 +796,8 @@ static int __ibmvnic_close(struct net_device *netdev)
adapter->state = VNIC_CLOSING;
netif_tx_stop_all_queues(netdev);
+
+ clean_tx_pools(adapter);
disable_sub_crqs(adapter);
if (adapter->napi) {
next prev parent reply other threads:[~2017-05-03 14:16 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-03 18:04 [PATCH v4 net-next 00/11] ibmvnic: Updated reset handler and code fixes Nathan Fontenot
2017-05-03 15:33 ` David Miller
2017-05-03 18:04 ` [PATCH v4 net-next 01/11] ibmvnic: Move resource initialization to its own routine Nathan Fontenot
2017-05-03 18:04 ` [PATCH v4 net-next 02/11] ibmvnic: Replace is_closed with state field Nathan Fontenot
2017-05-03 18:04 ` [PATCH v4 net-next 03/11] ibmvnic: Updated reset handling Nathan Fontenot
2017-05-03 18:04 ` [PATCH v4 net-next 04/11] ibmvnic: Delete napi's when releasing driver resources Nathan Fontenot
2017-05-03 18:04 ` [PATCH v4 net-next 05/11] ibmvnic: Whitespace correction in release_rx_pools Nathan Fontenot
2017-05-03 18:04 ` Nathan Fontenot [this message]
2017-05-03 18:05 ` [PATCH v4 net-next 07/11] ibmvnic: Wait for any pending scrqs entries at driver close Nathan Fontenot
2017-05-03 18:05 ` [PATCH v4 net-next 08/11] ibmvnic: Check for driver reset first in ibmvnic_xmit Nathan Fontenot
2017-05-03 18:05 ` [PATCH v4 net-next 09/11] ibmvnic: Continue skb processing after skb completion error Nathan Fontenot
2017-05-03 18:05 ` [PATCH v4 net-next 10/11] ibmvnic: Record SKB RX queue during poll Nathan Fontenot
2017-05-03 18:05 ` [PATCH v4 net-next 11/11] ibmvnic: Move queue restarting in ibmvnic_tx_complete Nathan Fontenot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170503180456.29742.89921.stgit@ltcalpine2-lp23.aus.stglabs.ibm.com \
--to=nfont@linux.vnet.ibm.com \
--cc=brking@linux.vnet.ibm.com \
--cc=jallen@linux.vnet.ibm.com \
--cc=muvic@linux.vnet.ibm.com \
--cc=netdev@vger.kernel.org \
--cc=tlfalcon@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox