diff options
Diffstat (limited to 'drivers/infiniband/hw/mthca/mthca_qp.c')
| -rw-r--r-- | drivers/infiniband/hw/mthca/mthca_qp.c | 12 | 
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_qp.c b/drivers/infiniband/hw/mthca/mthca_qp.c index f5081bfde6d..c10576fa60c 100644 --- a/drivers/infiniband/hw/mthca/mthca_qp.c +++ b/drivers/infiniband/hw/mthca/mthca_qp.c @@ -1319,10 +1319,12 @@ int mthca_alloc_qp(struct mthca_dev *dev,  }  static void mthca_lock_cqs(struct mthca_cq *send_cq, struct mthca_cq *recv_cq) +	__acquires(&send_cq->lock) __acquires(&recv_cq->lock)  { -	if (send_cq == recv_cq) +	if (send_cq == recv_cq) {  		spin_lock_irq(&send_cq->lock); -	else if (send_cq->cqn < recv_cq->cqn) { +		__acquire(&recv_cq->lock); +	} else if (send_cq->cqn < recv_cq->cqn) {  		spin_lock_irq(&send_cq->lock);  		spin_lock_nested(&recv_cq->lock, SINGLE_DEPTH_NESTING);  	} else { @@ -1332,10 +1334,12 @@ static void mthca_lock_cqs(struct mthca_cq *send_cq, struct mthca_cq *recv_cq)  }  static void mthca_unlock_cqs(struct mthca_cq *send_cq, struct mthca_cq *recv_cq) +	__releases(&send_cq->lock) __releases(&recv_cq->lock)  { -	if (send_cq == recv_cq) +	if (send_cq == recv_cq) { +		__release(&recv_cq->lock);  		spin_unlock_irq(&send_cq->lock); -	else if (send_cq->cqn < recv_cq->cqn) { +	} else if (send_cq->cqn < recv_cq->cqn) {  		spin_unlock(&recv_cq->lock);  		spin_unlock_irq(&send_cq->lock);  	} else {  |