diff options
author | Nathan Fontenot <nfont@linux.vnet.ibm.com> | 2017-05-26 10:30:54 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-05-26 15:32:46 -0400 |
commit | 152ce47dc48280182ab58539a721dadb3d7a8575 (patch) | |
tree | cc3252c6e9fb92b4a768a70f45b5b957a19f9a2e /drivers/net/ethernet/ibm/ibmvnic.c | |
parent | f185a49a77bd34309fd6af6c5c7695386d010534 (diff) |
ibmvnic: Check adapter state during ibmvnic_poll
We do not want to process any receive frames if the ibmvnic_poll
routine is invoked while a reset is in process. Also, before
replenishing the rx pools in the ibmvnic_poll, we want to
make sure the adapter is not in the process of closing.
Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/ibm/ibmvnic.c')
-rw-r--r-- | drivers/net/ethernet/ibm/ibmvnic.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 47421e4052c3..760352f7f98d 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c | |||
@@ -1435,6 +1435,10 @@ static int ibmvnic_poll(struct napi_struct *napi, int budget) | |||
1435 | struct ibmvnic_adapter *adapter = netdev_priv(netdev); | 1435 | struct ibmvnic_adapter *adapter = netdev_priv(netdev); |
1436 | int scrq_num = (int)(napi - adapter->napi); | 1436 | int scrq_num = (int)(napi - adapter->napi); |
1437 | int frames_processed = 0; | 1437 | int frames_processed = 0; |
1438 | |||
1439 | if (adapter->resetting) | ||
1440 | return 0; | ||
1441 | |||
1438 | restart_poll: | 1442 | restart_poll: |
1439 | while (frames_processed < budget) { | 1443 | while (frames_processed < budget) { |
1440 | struct sk_buff *skb; | 1444 | struct sk_buff *skb; |
@@ -1493,7 +1497,9 @@ restart_poll: | |||
1493 | netdev->stats.rx_bytes += length; | 1497 | netdev->stats.rx_bytes += length; |
1494 | frames_processed++; | 1498 | frames_processed++; |
1495 | } | 1499 | } |
1496 | replenish_rx_pool(adapter, &adapter->rx_pool[scrq_num]); | 1500 | |
1501 | if (adapter->state != VNIC_CLOSING) | ||
1502 | replenish_rx_pool(adapter, &adapter->rx_pool[scrq_num]); | ||
1497 | 1503 | ||
1498 | if (frames_processed < budget) { | 1504 | if (frames_processed < budget) { |
1499 | enable_scrq_irq(adapter, adapter->rx_scrq[scrq_num]); | 1505 | enable_scrq_irq(adapter, adapter->rx_scrq[scrq_num]); |