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 f547894ff48f..8b92acb448c2 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) | |||
867 | ehea_reset_cq_ep(pr->send_cq); | 867 | ehea_reset_cq_ep(pr->send_cq); |
868 | ehea_reset_cq_n1(pr->recv_cq); | 868 | ehea_reset_cq_n1(pr->recv_cq); |
869 | ehea_reset_cq_n1(pr->send_cq); | 869 | ehea_reset_cq_n1(pr->send_cq); |
870 | rmb(); | ||
870 | cqe = ehea_poll_rq1(pr->qp, &wqe_index); | 871 | cqe = ehea_poll_rq1(pr->qp, &wqe_index); |
871 | cqe_skb = ehea_poll_cq(pr->send_cq); | 872 | cqe_skb = ehea_poll_cq(pr->send_cq); |
872 | 873 | ||
@@ -2859,6 +2860,7 @@ static void ehea_reset_port(struct work_struct *work) | |||
2859 | container_of(work, struct ehea_port, reset_task); | 2860 | container_of(work, struct ehea_port, reset_task); |
2860 | struct net_device *dev = port->netdev; | 2861 | struct net_device *dev = port->netdev; |
2861 | 2862 | ||
2863 | mutex_lock(&dlpar_mem_lock); | ||
2862 | port->resets++; | 2864 | port->resets++; |
2863 | mutex_lock(&port->port_lock); | 2865 | mutex_lock(&port->port_lock); |
2864 | netif_stop_queue(dev); | 2866 | netif_stop_queue(dev); |
@@ -2881,6 +2883,7 @@ static void ehea_reset_port(struct work_struct *work) | |||
2881 | netif_wake_queue(dev); | 2883 | netif_wake_queue(dev); |
2882 | out: | 2884 | out: |
2883 | mutex_unlock(&port->port_lock); | 2885 | mutex_unlock(&port->port_lock); |
2886 | mutex_unlock(&dlpar_mem_lock); | ||
2884 | } | 2887 | } |
2885 | 2888 | ||
2886 | static void ehea_rereg_mrs(struct work_struct *work) | 2889 | static void ehea_rereg_mrs(struct work_struct *work) |
@@ -3542,10 +3545,7 @@ static int ehea_mem_notifier(struct notifier_block *nb, | |||
3542 | int ret = NOTIFY_BAD; | 3545 | int ret = NOTIFY_BAD; |
3543 | struct memory_notify *arg = data; | 3546 | struct memory_notify *arg = data; |
3544 | 3547 | ||
3545 | if (!mutex_trylock(&dlpar_mem_lock)) { | 3548 | mutex_lock(&dlpar_mem_lock); |
3546 | ehea_info("ehea_mem_notifier must not be called parallelized"); | ||
3547 | goto out; | ||
3548 | } | ||
3549 | 3549 | ||
3550 | switch (action) { | 3550 | switch (action) { |
3551 | case MEM_CANCEL_OFFLINE: | 3551 | case MEM_CANCEL_OFFLINE: |
@@ -3574,7 +3574,6 @@ static int ehea_mem_notifier(struct notifier_block *nb, | |||
3574 | 3574 | ||
3575 | out_unlock: | 3575 | out_unlock: |
3576 | mutex_unlock(&dlpar_mem_lock); | 3576 | mutex_unlock(&dlpar_mem_lock); |
3577 | out: | ||
3578 | return ret; | 3577 | return ret; |
3579 | } | 3578 | } |
3580 | 3579 | ||