|
@@ -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)
|
|
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);
|
|
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_irq(&send_cq->lock);
|
|
spin_lock_nested(&recv_cq->lock, SINGLE_DEPTH_NESTING);
|
|
spin_lock_nested(&recv_cq->lock, SINGLE_DEPTH_NESTING);
|
|
} else {
|
|
} 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)
|
|
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);
|
|
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(&recv_cq->lock);
|
|
spin_unlock_irq(&send_cq->lock);
|
|
spin_unlock_irq(&send_cq->lock);
|
|
} else {
|
|
} else {
|