diff options
| author | Linus Torvalds <torvalds@g5.osdl.org> | 2006-05-26 14:51:08 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-05-26 14:51:08 -0400 |
| commit | 309c68cc17ba1f6f733038562b7469b5340e1a1d (patch) | |
| tree | 68f582ca59e1b4dd0d89a8ec4cd8d841e4f01ff3 | |
| parent | 705af309505681f197f81618440954d10f120dc0 (diff) | |
| parent | ab28b171eabc0a414e0404844453c11af3caed10 (diff) | |
Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband:
IB/mthca: Fix posting lists of 256 receive requests to SRQ for Tavor
| -rw-r--r-- | drivers/infiniband/hw/mthca/mthca_srq.c | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_srq.c b/drivers/infiniband/hw/mthca/mthca_srq.c index 1ea433291fa7..b292fefa3b41 100644 --- a/drivers/infiniband/hw/mthca/mthca_srq.c +++ b/drivers/infiniband/hw/mthca/mthca_srq.c | |||
| @@ -490,26 +490,7 @@ int mthca_tavor_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr, | |||
| 490 | 490 | ||
| 491 | first_ind = srq->first_free; | 491 | first_ind = srq->first_free; |
| 492 | 492 | ||
| 493 | for (nreq = 0; wr; ++nreq, wr = wr->next) { | 493 | for (nreq = 0; wr; wr = wr->next) { |
| 494 | if (unlikely(nreq == MTHCA_TAVOR_MAX_WQES_PER_RECV_DB)) { | ||
| 495 | nreq = 0; | ||
| 496 | |||
| 497 | doorbell[0] = cpu_to_be32(first_ind << srq->wqe_shift); | ||
| 498 | doorbell[1] = cpu_to_be32(srq->srqn << 8); | ||
| 499 | |||
| 500 | /* | ||
| 501 | * Make sure that descriptors are written | ||
| 502 | * before doorbell is rung. | ||
| 503 | */ | ||
| 504 | wmb(); | ||
| 505 | |||
| 506 | mthca_write64(doorbell, | ||
| 507 | dev->kar + MTHCA_RECEIVE_DOORBELL, | ||
| 508 | MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); | ||
| 509 | |||
| 510 | first_ind = srq->first_free; | ||
| 511 | } | ||
| 512 | |||
| 513 | ind = srq->first_free; | 494 | ind = srq->first_free; |
| 514 | 495 | ||
| 515 | if (ind < 0) { | 496 | if (ind < 0) { |
| @@ -569,6 +550,26 @@ int mthca_tavor_post_srq_recv(struct ib_srq *ibsrq, struct ib_recv_wr *wr, | |||
| 569 | 550 | ||
| 570 | srq->wrid[ind] = wr->wr_id; | 551 | srq->wrid[ind] = wr->wr_id; |
| 571 | srq->first_free = next_ind; | 552 | srq->first_free = next_ind; |
| 553 | |||
| 554 | ++nreq; | ||
| 555 | if (unlikely(nreq == MTHCA_TAVOR_MAX_WQES_PER_RECV_DB)) { | ||
| 556 | nreq = 0; | ||
| 557 | |||
| 558 | doorbell[0] = cpu_to_be32(first_ind << srq->wqe_shift); | ||
| 559 | doorbell[1] = cpu_to_be32(srq->srqn << 8); | ||
| 560 | |||
| 561 | /* | ||
| 562 | * Make sure that descriptors are written | ||
| 563 | * before doorbell is rung. | ||
| 564 | */ | ||
| 565 | wmb(); | ||
| 566 | |||
| 567 | mthca_write64(doorbell, | ||
| 568 | dev->kar + MTHCA_RECEIVE_DOORBELL, | ||
| 569 | MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock)); | ||
| 570 | |||
| 571 | first_ind = srq->first_free; | ||
| 572 | } | ||
| 572 | } | 573 | } |
| 573 | 574 | ||
| 574 | if (likely(nreq)) { | 575 | if (likely(nreq)) { |
