Skip to content

Commit d737b25

Browse files
kwan-intcjgunthorpe
authored andcommitted
IB/hfi1: Do not flush send queue in the TID RDMA second leg
When a QP is put into error state, the send queue will be flushed. This mechanism is implemented in both the first and the second leg of the send engine. Since the second leg is only responsible for data transactions in the KDETH space for the TID RDMA WRITE request, it should not perform the flushing of the send queue. This patch removes the flushing function of the second leg, but still keeps the bailing out of the QP if it is put into error state. Fixes: 70dcb2e ("IB/hfi1: Add the TID second leg send packet builder") Reviewed-by: Mike Marciniszyn <[email protected]> Signed-off-by: Kaike Wan <[email protected]> Signed-off-by: Dennis Dalessandro <[email protected]> Signed-off-by: Jason Gunthorpe <[email protected]>
1 parent 00fb67e commit d737b25

File tree

1 file changed

+8
-23
lines changed

1 file changed

+8
-23
lines changed

drivers/infiniband/hw/hfi1/tid_rdma.c

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5017,24 +5017,14 @@ int hfi1_make_tid_rdma_pkt(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
50175017
make_tid_rdma_ack(qp, ohdr, ps))
50185018
return 1;
50195019

5020-
if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK)) {
5021-
if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND))
5022-
goto bail;
5023-
/* We are in the error state, flush the work request. */
5024-
if (qp->s_last == READ_ONCE(qp->s_head))
5025-
goto bail;
5026-
/* If DMAs are in progress, we can't flush immediately. */
5027-
if (iowait_sdma_pending(&priv->s_iowait)) {
5028-
qp->s_flags |= RVT_S_WAIT_DMA;
5029-
goto bail;
5030-
}
5031-
clear_ahg(qp);
5032-
wqe = rvt_get_swqe_ptr(qp, qp->s_last);
5033-
hfi1_trdma_send_complete(qp, wqe, qp->s_last != qp->s_acked ?
5034-
IB_WC_SUCCESS : IB_WC_WR_FLUSH_ERR);
5035-
/* will get called again */
5036-
goto done_free_tx;
5037-
}
5020+
/*
5021+
* Bail out if we can't send data.
5022+
* Be reminded that this check must been done after the call to
5023+
* make_tid_rdma_ack() because the responding QP could be in
5024+
* RTR state where it can send TID RDMA ACK, not TID RDMA WRITE DATA.
5025+
*/
5026+
if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK))
5027+
goto bail;
50385028

50395029
if (priv->s_flags & RVT_S_WAIT_ACK)
50405030
goto bail;
@@ -5144,11 +5134,6 @@ int hfi1_make_tid_rdma_pkt(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
51445134
hfi1_make_ruc_header(qp, ohdr, (opcode << 24), bth1, bth2,
51455135
middle, ps);
51465136
return 1;
5147-
done_free_tx:
5148-
hfi1_put_txreq(ps->s_txreq);
5149-
ps->s_txreq = NULL;
5150-
return 1;
5151-
51525137
bail:
51535138
hfi1_put_txreq(ps->s_txreq);
51545139
bail_no_tx:

0 commit comments

Comments
 (0)