diff options
Diffstat (limited to 'drivers/net/ehea/ehea_main.c')
| -rw-r--r-- | drivers/net/ehea/ehea_main.c | 9 | 
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index f547894ff48..8b92acb448c 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c @@ -867,6 +867,7 @@ static int ehea_poll(struct napi_struct *napi, int budget)  		ehea_reset_cq_ep(pr->send_cq);  		ehea_reset_cq_n1(pr->recv_cq);  		ehea_reset_cq_n1(pr->send_cq); +		rmb();  		cqe = ehea_poll_rq1(pr->qp, &wqe_index);  		cqe_skb = ehea_poll_cq(pr->send_cq); @@ -2859,6 +2860,7 @@ static void ehea_reset_port(struct work_struct *work)  		container_of(work, struct ehea_port, reset_task);  	struct net_device *dev = port->netdev; +	mutex_lock(&dlpar_mem_lock);  	port->resets++;  	mutex_lock(&port->port_lock);  	netif_stop_queue(dev); @@ -2881,6 +2883,7 @@ static void ehea_reset_port(struct work_struct *work)  	netif_wake_queue(dev);  out:  	mutex_unlock(&port->port_lock); +	mutex_unlock(&dlpar_mem_lock);  }  static void ehea_rereg_mrs(struct work_struct *work) @@ -3542,10 +3545,7 @@ static int ehea_mem_notifier(struct notifier_block *nb,  	int ret = NOTIFY_BAD;  	struct memory_notify *arg = data; -	if (!mutex_trylock(&dlpar_mem_lock)) { -		ehea_info("ehea_mem_notifier must not be called parallelized"); -		goto out; -	} +	mutex_lock(&dlpar_mem_lock);  	switch (action) {  	case MEM_CANCEL_OFFLINE: @@ -3574,7 +3574,6 @@ static int ehea_mem_notifier(struct notifier_block *nb,  out_unlock:  	mutex_unlock(&dlpar_mem_lock); -out:  	return ret;  }  |