Commit d737b25b authored by Kaike Wan's avatar Kaike Wan Committed by Jason Gunthorpe

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: 70dcb2e3 ("IB/hfi1: Add the TID second leg send packet builder")
Reviewed-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarKaike Wan <kaike.wan@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
parent 00fb67ec
...@@ -5017,24 +5017,14 @@ int hfi1_make_tid_rdma_pkt(struct rvt_qp *qp, struct hfi1_pkt_state *ps) ...@@ -5017,24 +5017,14 @@ int hfi1_make_tid_rdma_pkt(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
make_tid_rdma_ack(qp, ohdr, ps)) make_tid_rdma_ack(qp, ohdr, ps))
return 1; return 1;
if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK)) { /*
if (!(ib_rvt_state_ops[qp->state] & RVT_FLUSH_SEND)) * Bail out if we can't send data.
goto bail; * Be reminded that this check must been done after the call to
/* We are in the error state, flush the work request. */ * make_tid_rdma_ack() because the responding QP could be in
if (qp->s_last == READ_ONCE(qp->s_head)) * RTR state where it can send TID RDMA ACK, not TID RDMA WRITE DATA.
goto bail; */
/* If DMAs are in progress, we can't flush immediately. */ if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_SEND_OK))
if (iowait_sdma_pending(&priv->s_iowait)) { goto bail;
qp->s_flags |= RVT_S_WAIT_DMA;
goto bail;
}
clear_ahg(qp);
wqe = rvt_get_swqe_ptr(qp, qp->s_last);
hfi1_trdma_send_complete(qp, wqe, qp->s_last != qp->s_acked ?
IB_WC_SUCCESS : IB_WC_WR_FLUSH_ERR);
/* will get called again */
goto done_free_tx;
}
if (priv->s_flags & RVT_S_WAIT_ACK) if (priv->s_flags & RVT_S_WAIT_ACK)
goto bail; goto bail;
...@@ -5144,11 +5134,6 @@ int hfi1_make_tid_rdma_pkt(struct rvt_qp *qp, struct hfi1_pkt_state *ps) ...@@ -5144,11 +5134,6 @@ int hfi1_make_tid_rdma_pkt(struct rvt_qp *qp, struct hfi1_pkt_state *ps)
hfi1_make_ruc_header(qp, ohdr, (opcode << 24), bth1, bth2, hfi1_make_ruc_header(qp, ohdr, (opcode << 24), bth1, bth2,
middle, ps); middle, ps);
return 1; return 1;
done_free_tx:
hfi1_put_txreq(ps->s_txreq);
ps->s_txreq = NULL;
return 1;
bail: bail:
hfi1_put_txreq(ps->s_txreq); hfi1_put_txreq(ps->s_txreq);
bail_no_tx: bail_no_tx:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment