aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/ibm/ibmvnic.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/ibm/ibmvnic.c')
-rw-r--r--drivers/net/ethernet/ibm/ibmvnic.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
index 3da680073265..fa4bb940665c 100644
--- a/drivers/net/ethernet/ibm/ibmvnic.c
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
@@ -1568,6 +1568,8 @@ static netdev_tx_t ibmvnic_xmit(struct sk_buff *skb, struct net_device *netdev)
1568 lpar_rc = send_subcrq_indirect(adapter, handle_array[queue_num], 1568 lpar_rc = send_subcrq_indirect(adapter, handle_array[queue_num],
1569 (u64)tx_buff->indir_dma, 1569 (u64)tx_buff->indir_dma,
1570 (u64)num_entries); 1570 (u64)num_entries);
1571 dma_unmap_single(dev, tx_buff->indir_dma,
1572 sizeof(tx_buff->indir_arr), DMA_TO_DEVICE);
1571 } else { 1573 } else {
1572 tx_buff->num_entries = num_entries; 1574 tx_buff->num_entries = num_entries;
1573 lpar_rc = send_subcrq(adapter, handle_array[queue_num], 1575 lpar_rc = send_subcrq(adapter, handle_array[queue_num],
@@ -1981,6 +1983,10 @@ static void __ibmvnic_reset(struct work_struct *work)
1981 1983
1982 rwi = get_next_rwi(adapter); 1984 rwi = get_next_rwi(adapter);
1983 while (rwi) { 1985 while (rwi) {
1986 if (adapter->state == VNIC_REMOVING ||
1987 adapter->state == VNIC_REMOVED)
1988 goto out;
1989
1984 if (adapter->force_reset_recovery) { 1990 if (adapter->force_reset_recovery) {
1985 adapter->force_reset_recovery = false; 1991 adapter->force_reset_recovery = false;
1986 rc = do_hard_reset(adapter, rwi, reset_state); 1992 rc = do_hard_reset(adapter, rwi, reset_state);
@@ -2005,7 +2011,7 @@ static void __ibmvnic_reset(struct work_struct *work)
2005 netdev_dbg(adapter->netdev, "Reset failed\n"); 2011 netdev_dbg(adapter->netdev, "Reset failed\n");
2006 free_all_rwi(adapter); 2012 free_all_rwi(adapter);
2007 } 2013 }
2008 2014out:
2009 adapter->resetting = false; 2015 adapter->resetting = false;
2010 if (we_lock_rtnl) 2016 if (we_lock_rtnl)
2011 rtnl_unlock(); 2017 rtnl_unlock();
@@ -2788,7 +2794,6 @@ static int ibmvnic_complete_tx(struct ibmvnic_adapter *adapter,
2788 union sub_crq *next; 2794 union sub_crq *next;
2789 int index; 2795 int index;
2790 int i, j; 2796 int i, j;
2791 u8 *first;
2792 2797
2793restart_loop: 2798restart_loop:
2794 while (pending_scrq(adapter, scrq)) { 2799 while (pending_scrq(adapter, scrq)) {
@@ -2818,14 +2823,6 @@ restart_loop:
2818 2823
2819 txbuff->data_dma[j] = 0; 2824 txbuff->data_dma[j] = 0;
2820 } 2825 }
2821 /* if sub_crq was sent indirectly */
2822 first = &txbuff->indir_arr[0].generic.first;
2823 if (*first == IBMVNIC_CRQ_CMD) {
2824 dma_unmap_single(dev, txbuff->indir_dma,
2825 sizeof(txbuff->indir_arr),
2826 DMA_TO_DEVICE);
2827 *first = 0;
2828 }
2829 2826
2830 if (txbuff->last_frag) { 2827 if (txbuff->last_frag) {
2831 dev_kfree_skb_any(txbuff->skb); 2828 dev_kfree_skb_any(txbuff->skb);