diff options
Diffstat (limited to 'drivers/net/ethernet/emulex/benet')
| -rw-r--r-- | drivers/net/ethernet/emulex/benet/be_cmds.c | 6 | ||||
| -rw-r--r-- | drivers/net/ethernet/emulex/benet/be_main.c | 2 | 
2 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/ethernet/emulex/benet/be_cmds.c b/drivers/net/ethernet/emulex/benet/be_cmds.c index 7fac97b4bb5..8c63d06ab12 100644 --- a/drivers/net/ethernet/emulex/benet/be_cmds.c +++ b/drivers/net/ethernet/emulex/benet/be_cmds.c @@ -259,7 +259,7 @@ int be_process_mcc(struct be_adapter *adapter)  	int num = 0, status = 0;  	struct be_mcc_obj *mcc_obj = &adapter->mcc_obj; -	spin_lock_bh(&adapter->mcc_cq_lock); +	spin_lock(&adapter->mcc_cq_lock);  	while ((compl = be_mcc_compl_get(adapter))) {  		if (compl->flags & CQE_FLAGS_ASYNC_MASK) {  			/* Interpret flags as an async trailer */ @@ -280,7 +280,7 @@ int be_process_mcc(struct be_adapter *adapter)  	if (num)  		be_cq_notify(adapter, mcc_obj->cq.id, mcc_obj->rearm_cq, num); -	spin_unlock_bh(&adapter->mcc_cq_lock); +	spin_unlock(&adapter->mcc_cq_lock);  	return status;  } @@ -295,7 +295,9 @@ static int be_mcc_wait_compl(struct be_adapter *adapter)  		if (be_error(adapter))  			return -EIO; +		local_bh_disable();  		status = be_process_mcc(adapter); +		local_bh_enable();  		if (atomic_read(&mcc_obj->q.used) == 0)  			break; diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c index 90a903d83d8..78b8aa8069f 100644 --- a/drivers/net/ethernet/emulex/benet/be_main.c +++ b/drivers/net/ethernet/emulex/benet/be_main.c @@ -3763,7 +3763,9 @@ static void be_worker(struct work_struct *work)  	/* when interrupts are not yet enabled, just reap any pending  	* mcc completions */  	if (!netif_running(adapter->netdev)) { +		local_bh_disable();  		be_process_mcc(adapter); +		local_bh_enable();  		goto reschedule;  	}  |