|
@@ -1799,15 +1799,11 @@ int mthca_tavor_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
|
|
|
|
|
out:
|
|
|
if (likely(nreq)) {
|
|
|
- __be32 doorbell[2];
|
|
|
-
|
|
|
- doorbell[0] = cpu_to_be32(((qp->sq.next_ind << qp->sq.wqe_shift) +
|
|
|
- qp->send_wqe_offset) | f0 | op0);
|
|
|
- doorbell[1] = cpu_to_be32((qp->qpn << 8) | size0);
|
|
|
-
|
|
|
wmb();
|
|
|
|
|
|
- mthca_write64(doorbell,
|
|
|
+ mthca_write64(((qp->sq.next_ind << qp->sq.wqe_shift) +
|
|
|
+ qp->send_wqe_offset) | f0 | op0,
|
|
|
+ (qp->qpn << 8) | size0,
|
|
|
dev->kar + MTHCA_SEND_DOORBELL,
|
|
|
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
|
|
|
/*
|
|
@@ -1829,7 +1825,6 @@ int mthca_tavor_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
|
|
|
{
|
|
|
struct mthca_dev *dev = to_mdev(ibqp->device);
|
|
|
struct mthca_qp *qp = to_mqp(ibqp);
|
|
|
- __be32 doorbell[2];
|
|
|
unsigned long flags;
|
|
|
int err = 0;
|
|
|
int nreq;
|
|
@@ -1907,13 +1902,10 @@ int mthca_tavor_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
|
|
|
if (unlikely(nreq == MTHCA_TAVOR_MAX_WQES_PER_RECV_DB)) {
|
|
|
nreq = 0;
|
|
|
|
|
|
- doorbell[0] = cpu_to_be32((qp->rq.next_ind << qp->rq.wqe_shift) | size0);
|
|
|
- doorbell[1] = cpu_to_be32(qp->qpn << 8);
|
|
|
-
|
|
|
wmb();
|
|
|
|
|
|
- mthca_write64(doorbell,
|
|
|
- dev->kar + MTHCA_RECEIVE_DOORBELL,
|
|
|
+ mthca_write64((qp->rq.next_ind << qp->rq.wqe_shift) | size0,
|
|
|
+ qp->qpn << 8, dev->kar + MTHCA_RECEIVE_DOORBELL,
|
|
|
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
|
|
|
|
|
|
qp->rq.next_ind = ind;
|
|
@@ -1923,13 +1915,10 @@ int mthca_tavor_post_receive(struct ib_qp *ibqp, struct ib_recv_wr *wr,
|
|
|
|
|
|
out:
|
|
|
if (likely(nreq)) {
|
|
|
- doorbell[0] = cpu_to_be32((qp->rq.next_ind << qp->rq.wqe_shift) | size0);
|
|
|
- doorbell[1] = cpu_to_be32((qp->qpn << 8) | nreq);
|
|
|
-
|
|
|
wmb();
|
|
|
|
|
|
- mthca_write64(doorbell,
|
|
|
- dev->kar + MTHCA_RECEIVE_DOORBELL,
|
|
|
+ mthca_write64((qp->rq.next_ind << qp->rq.wqe_shift) | size0,
|
|
|
+ qp->qpn << 8 | nreq, dev->kar + MTHCA_RECEIVE_DOORBELL,
|
|
|
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
|
|
|
}
|
|
|
|
|
@@ -1951,7 +1940,7 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
|
|
{
|
|
|
struct mthca_dev *dev = to_mdev(ibqp->device);
|
|
|
struct mthca_qp *qp = to_mqp(ibqp);
|
|
|
- __be32 doorbell[2];
|
|
|
+ u32 dbhi;
|
|
|
void *wqe;
|
|
|
void *prev_wqe;
|
|
|
unsigned long flags;
|
|
@@ -1981,10 +1970,8 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
|
|
if (unlikely(nreq == MTHCA_ARBEL_MAX_WQES_PER_SEND_DB)) {
|
|
|
nreq = 0;
|
|
|
|
|
|
- doorbell[0] = cpu_to_be32((MTHCA_ARBEL_MAX_WQES_PER_SEND_DB << 24) |
|
|
|
- ((qp->sq.head & 0xffff) << 8) |
|
|
|
- f0 | op0);
|
|
|
- doorbell[1] = cpu_to_be32((qp->qpn << 8) | size0);
|
|
|
+ dbhi = (MTHCA_ARBEL_MAX_WQES_PER_SEND_DB << 24) |
|
|
|
+ ((qp->sq.head & 0xffff) << 8) | f0 | op0;
|
|
|
|
|
|
qp->sq.head += MTHCA_ARBEL_MAX_WQES_PER_SEND_DB;
|
|
|
|
|
@@ -2000,7 +1987,8 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
|
|
* write MMIO send doorbell.
|
|
|
*/
|
|
|
wmb();
|
|
|
- mthca_write64(doorbell,
|
|
|
+
|
|
|
+ mthca_write64(dbhi, (qp->qpn << 8) | size0,
|
|
|
dev->kar + MTHCA_SEND_DOORBELL,
|
|
|
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
|
|
|
}
|
|
@@ -2154,10 +2142,7 @@ int mthca_arbel_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
|
|
|
|
|
|
out:
|
|
|
if (likely(nreq)) {
|
|
|
- doorbell[0] = cpu_to_be32((nreq << 24) |
|
|
|
- ((qp->sq.head & 0xffff) << 8) |
|
|
|
- f0 | op0);
|
|
|
- doorbell[1] = cpu_to_be32((qp->qpn << 8) | size0);
|
|
|
+ dbhi = (nreq << 24) | ((qp->sq.head & 0xffff) << 8) | f0 | op0;
|
|
|
|
|
|
qp->sq.head += nreq;
|
|
|
|
|
@@ -2173,8 +2158,8 @@ out:
|
|
|
* write MMIO send doorbell.
|
|
|
*/
|
|
|
wmb();
|
|
|
- mthca_write64(doorbell,
|
|
|
- dev->kar + MTHCA_SEND_DOORBELL,
|
|
|
+
|
|
|
+ mthca_write64(dbhi, (qp->qpn << 8) | size0, dev->kar + MTHCA_SEND_DOORBELL,
|
|
|
MTHCA_GET_DOORBELL_LOCK(&dev->doorbell_lock));
|
|
|
}
|
|
|
|