IB/{hfi1, qib, rdmavt}: Move send completion logic to rdmavt
Moving send completion code into rdmavt in order to have shared logic between qib and hfi1 drivers. Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Reviewed-by: Brian Welty <brian.welty@intel.com> Signed-off-by: Venkata Sandeep Dhanalakota <venkata.s.dhanalakota@intel.com> Signed-off-by: Harish Chegondi <harish.chegondi@intel.com> Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
Esse commit está contido em:

commit de
Jason Gunthorpe

pai
019f118b94
commit
116aa0330e
@@ -2658,6 +2658,49 @@ void rvt_qp_iter(struct rvt_dev_info *rdi,
|
||||
}
|
||||
EXPORT_SYMBOL(rvt_qp_iter);
|
||||
|
||||
/*
|
||||
* This should be called with s_lock held.
|
||||
*/
|
||||
void rvt_send_complete(struct rvt_qp *qp, struct rvt_swqe *wqe,
|
||||
enum ib_wc_status status)
|
||||
{
|
||||
u32 old_last, last;
|
||||
struct rvt_dev_info *rdi = ib_to_rvt(qp->ibqp.device);
|
||||
|
||||
if (!(ib_rvt_state_ops[qp->state] & RVT_PROCESS_OR_FLUSH_SEND))
|
||||
return;
|
||||
|
||||
last = qp->s_last;
|
||||
old_last = last;
|
||||
trace_rvt_qp_send_completion(qp, wqe, last);
|
||||
if (++last >= qp->s_size)
|
||||
last = 0;
|
||||
trace_rvt_qp_send_completion(qp, wqe, last);
|
||||
qp->s_last = last;
|
||||
/* See post_send() */
|
||||
barrier();
|
||||
rvt_put_swqe(wqe);
|
||||
if (qp->ibqp.qp_type == IB_QPT_UD ||
|
||||
qp->ibqp.qp_type == IB_QPT_SMI ||
|
||||
qp->ibqp.qp_type == IB_QPT_GSI)
|
||||
atomic_dec(&ibah_to_rvtah(wqe->ud_wr.ah)->refcount);
|
||||
|
||||
rvt_qp_swqe_complete(qp,
|
||||
wqe,
|
||||
rdi->wc_opcode[wqe->wr.opcode],
|
||||
status);
|
||||
|
||||
if (qp->s_acked == old_last)
|
||||
qp->s_acked = last;
|
||||
if (qp->s_cur == old_last)
|
||||
qp->s_cur = last;
|
||||
if (qp->s_tail == old_last)
|
||||
qp->s_tail = last;
|
||||
if (qp->state == IB_QPS_SQD && last == qp->s_cur)
|
||||
qp->s_draining = 0;
|
||||
}
|
||||
EXPORT_SYMBOL(rvt_send_complete);
|
||||
|
||||
/**
|
||||
* rvt_copy_sge - copy data to SGE memory
|
||||
* @qp: associated QP
|
||||
|
@@ -153,6 +153,48 @@ TRACE_EVENT(
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(
|
||||
rvt_qp_send_completion,
|
||||
TP_PROTO(struct rvt_qp *qp, struct rvt_swqe *wqe, u32 idx),
|
||||
TP_ARGS(qp, wqe, idx),
|
||||
TP_STRUCT__entry(
|
||||
RDI_DEV_ENTRY(ib_to_rvt(qp->ibqp.device))
|
||||
__field(struct rvt_swqe *, wqe)
|
||||
__field(u64, wr_id)
|
||||
__field(u32, qpn)
|
||||
__field(u32, qpt)
|
||||
__field(u32, length)
|
||||
__field(u32, idx)
|
||||
__field(u32, ssn)
|
||||
__field(enum ib_wr_opcode, opcode)
|
||||
__field(int, send_flags)
|
||||
),
|
||||
TP_fast_assign(
|
||||
RDI_DEV_ASSIGN(ib_to_rvt(qp->ibqp.device))
|
||||
__entry->wqe = wqe;
|
||||
__entry->wr_id = wqe->wr.wr_id;
|
||||
__entry->qpn = qp->ibqp.qp_num;
|
||||
__entry->qpt = qp->ibqp.qp_type;
|
||||
__entry->length = wqe->length;
|
||||
__entry->idx = idx;
|
||||
__entry->ssn = wqe->ssn;
|
||||
__entry->opcode = wqe->wr.opcode;
|
||||
__entry->send_flags = wqe->wr.send_flags;
|
||||
),
|
||||
TP_printk(
|
||||
"[%s] qpn 0x%x qpt %u wqe %p idx %u wr_id %llx length %u ssn %u opcode %x send_flags %x",
|
||||
__get_str(dev),
|
||||
__entry->qpn,
|
||||
__entry->qpt,
|
||||
__entry->wqe,
|
||||
__entry->idx,
|
||||
__entry->wr_id,
|
||||
__entry->length,
|
||||
__entry->ssn,
|
||||
__entry->opcode,
|
||||
__entry->send_flags
|
||||
)
|
||||
);
|
||||
#endif /* __RVT_TRACE_TX_H */
|
||||
|
||||
#undef TRACE_INCLUDE_PATH
|
||||
|
Referência em uma nova issue
Block a user