xprtrdma: Reduce context switching due to Local Invalidation
[linux-2.6-block.git] / include / trace / events / rpcrdma.h
index df9851cb82b2c61d743f32fdd63a90b99b82d286..98023d91a72df0f70429aafd5f42c0a038854546 100644 (file)
@@ -181,18 +181,6 @@ DECLARE_EVENT_CLASS(xprtrdma_wrch_event,
                                ),                                      \
                                TP_ARGS(task, mr, nsegs))
 
-TRACE_DEFINE_ENUM(FRWR_IS_INVALID);
-TRACE_DEFINE_ENUM(FRWR_IS_VALID);
-TRACE_DEFINE_ENUM(FRWR_FLUSHED_FR);
-TRACE_DEFINE_ENUM(FRWR_FLUSHED_LI);
-
-#define xprtrdma_show_frwr_state(x)                                    \
-               __print_symbolic(x,                                     \
-                               { FRWR_IS_INVALID, "INVALID" },         \
-                               { FRWR_IS_VALID, "VALID" },             \
-                               { FRWR_FLUSHED_FR, "FLUSHED_FR" },      \
-                               { FRWR_FLUSHED_LI, "FLUSHED_LI" })
-
 DECLARE_EVENT_CLASS(xprtrdma_frwr_done,
        TP_PROTO(
                const struct ib_wc *wc,
@@ -203,22 +191,19 @@ DECLARE_EVENT_CLASS(xprtrdma_frwr_done,
 
        TP_STRUCT__entry(
                __field(const void *, mr)
-               __field(unsigned int, state)
                __field(unsigned int, status)
                __field(unsigned int, vendor_err)
        ),
 
        TP_fast_assign(
                __entry->mr = container_of(frwr, struct rpcrdma_mr, frwr);
-               __entry->state = frwr->fr_state;
                __entry->status = wc->status;
                __entry->vendor_err = __entry->status ? wc->vendor_err : 0;
        ),
 
        TP_printk(
-               "mr=%p state=%s: %s (%u/0x%x)",
-               __entry->mr, xprtrdma_show_frwr_state(__entry->state),
-               rdma_show_wc_status(__entry->status),
+               "mr=%p: %s (%u/0x%x)",
+               __entry->mr, rdma_show_wc_status(__entry->status),
                __entry->status, __entry->vendor_err
        )
 );
@@ -470,13 +455,12 @@ TRACE_DEFINE_ENUM(rpcrdma_replych);
 
 TRACE_EVENT(xprtrdma_marshal,
        TP_PROTO(
-               const struct rpc_rqst *rqst,
-               unsigned int hdrlen,
+               const struct rpcrdma_req *req,
                unsigned int rtype,
                unsigned int wtype
        ),
 
-       TP_ARGS(rqst, hdrlen, rtype, wtype),
+       TP_ARGS(req, rtype, wtype),
 
        TP_STRUCT__entry(
                __field(unsigned int, task_id)
@@ -491,10 +475,12 @@ TRACE_EVENT(xprtrdma_marshal,
        ),
 
        TP_fast_assign(
+               const struct rpc_rqst *rqst = &req->rl_slot;
+
                __entry->task_id = rqst->rq_task->tk_pid;
                __entry->client_id = rqst->rq_task->tk_client->cl_clid;
                __entry->xid = be32_to_cpu(rqst->rq_xid);
-               __entry->hdrlen = hdrlen;
+               __entry->hdrlen = req->rl_hdrbuf.len;
                __entry->headlen = rqst->rq_snd_buf.head[0].iov_len;
                __entry->pagelen = rqst->rq_snd_buf.page_len;
                __entry->taillen = rqst->rq_snd_buf.tail[0].iov_len;
@@ -538,6 +524,33 @@ TRACE_EVENT(xprtrdma_marshal_failed,
        )
 );
 
+TRACE_EVENT(xprtrdma_prepsend_failed,
+       TP_PROTO(const struct rpc_rqst *rqst,
+                int ret
+       ),
+
+       TP_ARGS(rqst, ret),
+
+       TP_STRUCT__entry(
+               __field(unsigned int, task_id)
+               __field(unsigned int, client_id)
+               __field(u32, xid)
+               __field(int, ret)
+       ),
+
+       TP_fast_assign(
+               __entry->task_id = rqst->rq_task->tk_pid;
+               __entry->client_id = rqst->rq_task->tk_client->cl_clid;
+               __entry->xid = be32_to_cpu(rqst->rq_xid);
+               __entry->ret = ret;
+       ),
+
+       TP_printk("task:%u@%u xid=0x%08x: ret=%d",
+               __entry->task_id, __entry->client_id, __entry->xid,
+               __entry->ret
+       )
+);
+
 TRACE_EVENT(xprtrdma_post_send,
        TP_PROTO(
                const struct rpcrdma_req *req,
@@ -559,7 +572,8 @@ TRACE_EVENT(xprtrdma_post_send,
                const struct rpc_rqst *rqst = &req->rl_slot;
 
                __entry->task_id = rqst->rq_task->tk_pid;
-               __entry->client_id = rqst->rq_task->tk_client->cl_clid;
+               __entry->client_id = rqst->rq_task->tk_client ?
+                                    rqst->rq_task->tk_client->cl_clid : -1;
                __entry->req = req;
                __entry->num_sge = req->rl_sendctx->sc_wr.num_sge;
                __entry->signaled = req->rl_sendctx->sc_wr.send_flags &
@@ -698,6 +712,7 @@ TRACE_EVENT(xprtrdma_wc_receive,
 DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_fastreg);
 DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li);
 DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_wake);
+DEFINE_FRWR_DONE_EVENT(xprtrdma_wc_li_done);
 
 TRACE_EVENT(xprtrdma_frwr_alloc,
        TP_PROTO(