diff options
Diffstat (limited to 'drivers/net/ethernet/ibm/ibmvnic.c')
| -rw-r--r-- | drivers/net/ethernet/ibm/ibmvnic.c | 15 | 
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 5afb3c9c52d2..d3a774331afc 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -479,6 +479,9 @@ static int reset_rx_pools(struct ibmvnic_adapter *adapter)  	int i, j, rc;  	u64 *size_array; +	if (!adapter->rx_pool) +		return -1; +  	size_array = (u64 *)((u8 *)(adapter->login_rsp_buf) +  		be32_to_cpu(adapter->login_rsp_buf->off_rxadd_buff_size)); @@ -649,6 +652,9 @@ static int reset_tx_pools(struct ibmvnic_adapter *adapter)  	int tx_scrqs;  	int i, rc; +	if (!adapter->tx_pool) +		return -1; +  	tx_scrqs = be32_to_cpu(adapter->login_rsp_buf->num_txsubm_subcrqs);  	for (i = 0; i < tx_scrqs; i++) {  		rc = reset_one_tx_pool(adapter, &adapter->tso_pool[i]); @@ -2011,7 +2017,10 @@ static int do_reset(struct ibmvnic_adapter *adapter,  		    adapter->req_rx_add_entries_per_subcrq !=  		    old_num_rx_slots ||  		    adapter->req_tx_entries_per_subcrq != -		    old_num_tx_slots) { +		    old_num_tx_slots || +		    !adapter->rx_pool || +		    !adapter->tso_pool || +		    !adapter->tx_pool) {  			release_rx_pools(adapter);  			release_tx_pools(adapter);  			release_napi(adapter); @@ -2024,10 +2033,14 @@ static int do_reset(struct ibmvnic_adapter *adapter,  		} else {  			rc = reset_tx_pools(adapter);  			if (rc) +				netdev_dbg(adapter->netdev, "reset tx pools failed (%d)\n", +						rc);  				goto out;  			rc = reset_rx_pools(adapter);  			if (rc) +				netdev_dbg(adapter->netdev, "reset rx pools failed (%d)\n", +						rc);  				goto out;  		}  		ibmvnic_disable_irqs(adapter);  |