forked from Minki/linux
ibmvnic: Update TX pool cleaning routine
Update routine that cleans up any outstanding transmits that have not received completions when the device needs to close. Introduces a helper function that cleans one TX pool to make code more readable. Signed-off-by: Thomas Falcon <tlfalcon@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
86b61a5f2e
commit
e9e1e97884
@ -1128,34 +1128,42 @@ static void clean_rx_pools(struct ibmvnic_adapter *adapter)
|
||||
}
|
||||
}
|
||||
|
||||
static void clean_tx_pools(struct ibmvnic_adapter *adapter)
|
||||
static void clean_one_tx_pool(struct ibmvnic_adapter *adapter,
|
||||
struct ibmvnic_tx_pool *tx_pool)
|
||||
{
|
||||
struct ibmvnic_tx_pool *tx_pool;
|
||||
struct ibmvnic_tx_buff *tx_buff;
|
||||
u64 tx_entries;
|
||||
int tx_scrqs;
|
||||
int i, j;
|
||||
int i;
|
||||
|
||||
if (!adapter->tx_pool)
|
||||
if (!tx_pool && !tx_pool->tx_buff)
|
||||
return;
|
||||
|
||||
tx_entries = tx_pool->num_buffers;
|
||||
|
||||
for (i = 0; i < tx_entries; i++) {
|
||||
tx_buff = &tx_pool->tx_buff[i];
|
||||
if (tx_buff && tx_buff->skb) {
|
||||
dev_kfree_skb_any(tx_buff->skb);
|
||||
tx_buff->skb = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void clean_tx_pools(struct ibmvnic_adapter *adapter)
|
||||
{
|
||||
int tx_scrqs;
|
||||
int i;
|
||||
|
||||
if (!adapter->tx_pool || !adapter->tso_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 && !tx_pool->tx_buff)
|
||||
continue;
|
||||
|
||||
netdev_dbg(adapter->netdev, "Cleaning tx_pool[%d]\n", i);
|
||||
for (j = 0; j < tx_entries; j++) {
|
||||
tx_buff = &tx_pool->tx_buff[j];
|
||||
if (tx_buff && tx_buff->skb) {
|
||||
dev_kfree_skb_any(tx_buff->skb);
|
||||
tx_buff->skb = NULL;
|
||||
}
|
||||
}
|
||||
clean_one_tx_pool(adapter, &adapter->tx_pool[i]);
|
||||
clean_one_tx_pool(adapter, &adapter->tso_pool[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user