diff options
Diffstat (limited to 'drivers/net/ethernet/ibm/ibmvnic.c')
| -rw-r--r-- | drivers/net/ethernet/ibm/ibmvnic.c | 19 | 
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c index 3da392bfd659..3da680073265 100644 --- a/drivers/net/ethernet/ibm/ibmvnic.c +++ b/drivers/net/ethernet/ibm/ibmvnic.c @@ -428,9 +428,10 @@ static int reset_rx_pools(struct ibmvnic_adapter *adapter)  		if (rx_pool->buff_size != be64_to_cpu(size_array[i])) {  			free_long_term_buff(adapter, &rx_pool->long_term_buff);  			rx_pool->buff_size = be64_to_cpu(size_array[i]); -			alloc_long_term_buff(adapter, &rx_pool->long_term_buff, -					     rx_pool->size * -					     rx_pool->buff_size); +			rc = alloc_long_term_buff(adapter, +						  &rx_pool->long_term_buff, +						  rx_pool->size * +						  rx_pool->buff_size);  		} else {  			rc = reset_long_term_buff(adapter,  						  &rx_pool->long_term_buff); @@ -696,9 +697,9 @@ static int init_tx_pools(struct net_device *netdev)  			return rc;  		} -		init_one_tx_pool(netdev, &adapter->tso_pool[i], -				 IBMVNIC_TSO_BUFS, -				 IBMVNIC_TSO_BUF_SZ); +		rc = init_one_tx_pool(netdev, &adapter->tso_pool[i], +				      IBMVNIC_TSO_BUFS, +				      IBMVNIC_TSO_BUF_SZ);  		if (rc) {  			release_tx_pools(adapter);  			return rc; @@ -1745,7 +1746,8 @@ static int do_reset(struct ibmvnic_adapter *adapter,  	ibmvnic_cleanup(netdev); -	if (adapter->reset_reason != VNIC_RESET_MOBILITY && +	if (reset_state == VNIC_OPEN && +	    adapter->reset_reason != VNIC_RESET_MOBILITY &&  	    adapter->reset_reason != VNIC_RESET_FAILOVER) {  		rc = __ibmvnic_close(netdev);  		if (rc) @@ -1844,6 +1846,9 @@ static int do_reset(struct ibmvnic_adapter *adapter,  		return 0;  	} +	/* refresh device's multicast list */ +	ibmvnic_set_multi(netdev); +  	/* kick napi */  	for (i = 0; i < adapter->req_rx_queues; i++)  		napi_schedule(&adapter->napi[i]);  | 
