Commit 17f70f8d authored by Chuck Lever's avatar Chuck Lever

svcrdma: Record send_ctxt completion ID in trace_svcrdma_post_send()

First, refactor: Dereference the svc_rdma_send_ctxt inside
svc_rdma_send() instead of at every call site.

Then, it can be passed into trace_svcrdma_post_send() to get the
proper completion ID.
Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
parent 3ac56c2f
...@@ -196,7 +196,8 @@ extern struct svc_rdma_send_ctxt * ...@@ -196,7 +196,8 @@ extern struct svc_rdma_send_ctxt *
svc_rdma_send_ctxt_get(struct svcxprt_rdma *rdma); svc_rdma_send_ctxt_get(struct svcxprt_rdma *rdma);
extern void svc_rdma_send_ctxt_put(struct svcxprt_rdma *rdma, extern void svc_rdma_send_ctxt_put(struct svcxprt_rdma *rdma,
struct svc_rdma_send_ctxt *ctxt); struct svc_rdma_send_ctxt *ctxt);
extern int svc_rdma_send(struct svcxprt_rdma *rdma, struct ib_send_wr *wr); extern int svc_rdma_send(struct svcxprt_rdma *rdma,
struct svc_rdma_send_ctxt *ctxt);
extern int svc_rdma_map_reply_msg(struct svcxprt_rdma *rdma, extern int svc_rdma_map_reply_msg(struct svcxprt_rdma *rdma,
struct svc_rdma_send_ctxt *sctxt, struct svc_rdma_send_ctxt *sctxt,
const struct svc_rdma_recv_ctxt *rctxt, const struct svc_rdma_recv_ctxt *rctxt,
......
...@@ -1839,27 +1839,31 @@ DECLARE_EVENT_CLASS(svcrdma_sendcomp_event, ...@@ -1839,27 +1839,31 @@ DECLARE_EVENT_CLASS(svcrdma_sendcomp_event,
TRACE_EVENT(svcrdma_post_send, TRACE_EVENT(svcrdma_post_send,
TP_PROTO( TP_PROTO(
const struct ib_send_wr *wr const struct svc_rdma_send_ctxt *ctxt
), ),
TP_ARGS(wr), TP_ARGS(ctxt),
TP_STRUCT__entry( TP_STRUCT__entry(
__field(const void *, cqe) __field(u32, cq_id)
__field(int, completion_id)
__field(unsigned int, num_sge) __field(unsigned int, num_sge)
__field(u32, inv_rkey) __field(u32, inv_rkey)
), ),
TP_fast_assign( TP_fast_assign(
__entry->cqe = wr->wr_cqe; const struct ib_send_wr *wr = &ctxt->sc_send_wr;
__entry->cq_id = ctxt->sc_cid.ci_queue_id;
__entry->completion_id = ctxt->sc_cid.ci_completion_id;
__entry->num_sge = wr->num_sge; __entry->num_sge = wr->num_sge;
__entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ? __entry->inv_rkey = (wr->opcode == IB_WR_SEND_WITH_INV) ?
wr->ex.invalidate_rkey : 0; wr->ex.invalidate_rkey : 0;
), ),
TP_printk("cqe=%p num_sge=%u inv_rkey=0x%08x", TP_printk("cq_id=%u cid=%d num_sge=%u inv_rkey=0x%08x",
__entry->cqe, __entry->num_sge, __entry->cq_id, __entry->completion_id,
__entry->inv_rkey __entry->num_sge, __entry->inv_rkey
) )
); );
......
...@@ -87,7 +87,7 @@ static int svc_rdma_bc_sendto(struct svcxprt_rdma *rdma, ...@@ -87,7 +87,7 @@ static int svc_rdma_bc_sendto(struct svcxprt_rdma *rdma,
*/ */
get_page(virt_to_page(rqst->rq_buffer)); get_page(virt_to_page(rqst->rq_buffer));
ctxt->sc_send_wr.opcode = IB_WR_SEND; ctxt->sc_send_wr.opcode = IB_WR_SEND;
return svc_rdma_send(rdma, &ctxt->sc_send_wr); return svc_rdma_send(rdma, ctxt);
} }
/* Server-side transport endpoint wants a whole page for its send /* Server-side transport endpoint wants a whole page for its send
......
...@@ -298,13 +298,14 @@ static void svc_rdma_wc_send(struct ib_cq *cq, struct ib_wc *wc) ...@@ -298,13 +298,14 @@ static void svc_rdma_wc_send(struct ib_cq *cq, struct ib_wc *wc)
/** /**
* svc_rdma_send - Post a single Send WR * svc_rdma_send - Post a single Send WR
* @rdma: transport on which to post the WR * @rdma: transport on which to post the WR
* @wr: prepared Send WR to post * @ctxt: send ctxt with a Send WR ready to post
* *
* Returns zero the Send WR was posted successfully. Otherwise, a * Returns zero the Send WR was posted successfully. Otherwise, a
* negative errno is returned. * negative errno is returned.
*/ */
int svc_rdma_send(struct svcxprt_rdma *rdma, struct ib_send_wr *wr) int svc_rdma_send(struct svcxprt_rdma *rdma, struct svc_rdma_send_ctxt *ctxt)
{ {
struct ib_send_wr *wr = &ctxt->sc_send_wr;
int ret; int ret;
might_sleep(); might_sleep();
...@@ -330,7 +331,7 @@ int svc_rdma_send(struct svcxprt_rdma *rdma, struct ib_send_wr *wr) ...@@ -330,7 +331,7 @@ int svc_rdma_send(struct svcxprt_rdma *rdma, struct ib_send_wr *wr)
} }
svc_xprt_get(&rdma->sc_xprt); svc_xprt_get(&rdma->sc_xprt);
trace_svcrdma_post_send(wr); trace_svcrdma_post_send(ctxt);
ret = ib_post_send(rdma->sc_qp, wr, NULL); ret = ib_post_send(rdma->sc_qp, wr, NULL);
if (ret) if (ret)
break; break;
...@@ -805,7 +806,7 @@ static int svc_rdma_send_reply_msg(struct svcxprt_rdma *rdma, ...@@ -805,7 +806,7 @@ static int svc_rdma_send_reply_msg(struct svcxprt_rdma *rdma,
} else { } else {
sctxt->sc_send_wr.opcode = IB_WR_SEND; sctxt->sc_send_wr.opcode = IB_WR_SEND;
} }
return svc_rdma_send(rdma, &sctxt->sc_send_wr); return svc_rdma_send(rdma, sctxt);
} }
/** /**
...@@ -869,7 +870,7 @@ void svc_rdma_send_error_msg(struct svcxprt_rdma *rdma, ...@@ -869,7 +870,7 @@ void svc_rdma_send_error_msg(struct svcxprt_rdma *rdma,
sctxt->sc_send_wr.num_sge = 1; sctxt->sc_send_wr.num_sge = 1;
sctxt->sc_send_wr.opcode = IB_WR_SEND; sctxt->sc_send_wr.opcode = IB_WR_SEND;
sctxt->sc_sges[0].length = sctxt->sc_hdrbuf.len; sctxt->sc_sges[0].length = sctxt->sc_hdrbuf.len;
if (svc_rdma_send(rdma, &sctxt->sc_send_wr)) if (svc_rdma_send(rdma, sctxt))
goto put_ctxt; goto put_ctxt;
return; return;
......
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