diff options
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 18 | ||||
| -rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c | 3 | 
2 files changed, 13 insertions, 8 deletions
| diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c index 9a2b166d651e..dbf9a0e6601d 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c @@ -2643,6 +2643,9 @@ static void detach_ulds(struct adapter *adap)  {  	unsigned int i; +	if (!is_uld(adap)) +		return; +  	mutex_lock(&uld_mutex);  	list_del(&adap->list_node); @@ -7141,10 +7144,13 @@ static void remove_one(struct pci_dev *pdev)  		 */  		destroy_workqueue(adapter->workq); -		if (is_uld(adapter)) { -			detach_ulds(adapter); -			t4_uld_clean_up(adapter); -		} +		detach_ulds(adapter); + +		for_each_port(adapter, i) +			if (adapter->port[i]->reg_state == NETREG_REGISTERED) +				unregister_netdev(adapter->port[i]); + +		t4_uld_clean_up(adapter);  		adap_free_hma_mem(adapter); @@ -7152,10 +7158,6 @@ static void remove_one(struct pci_dev *pdev)  		cxgb4_free_mps_ref_entries(adapter); -		for_each_port(adapter, i) -			if (adapter->port[i]->reg_state == NETREG_REGISTERED) -				unregister_netdev(adapter->port[i]); -  		debugfs_remove_recursive(adapter->debugfs_root);  		if (!is_t4(adapter->params.chip)) diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c index 743af9e654aa..17faac715882 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c @@ -581,6 +581,9 @@ void t4_uld_clean_up(struct adapter *adap)  {  	unsigned int i; +	if (!is_uld(adap)) +		return; +  	mutex_lock(&uld_mutex);  	for (i = 0; i < CXGB4_ULD_MAX; i++) {  		if (!adap->uld[i].handle) |