From 83525b61c3a03603ef4b7f7ee0e420ee534bee42 Mon Sep 17 00:00:00 2001 From: Mike Marciniszyn Date: Mon, 26 Oct 2015 10:28:48 -0400 Subject: [PATCH] staging/rdma/hfi1: add additional rc traces Add additional rc traces to aid in debugging rc retry logic. Reviewed-by: Dennis Dalessandro Signed-off-by: Mike Marciniszyn Signed-off-by: Ira Weiny Signed-off-by: Greg Kroah-Hartman --- drivers/staging/rdma/hfi1/rc.c | 4 +++ drivers/staging/rdma/hfi1/trace.c | 4 +-- drivers/staging/rdma/hfi1/trace.h | 48 +++++++++++++++++++++++-------- 3 files changed, 42 insertions(+), 14 deletions(-) diff --git a/drivers/staging/rdma/hfi1/rc.c b/drivers/staging/rdma/hfi1/rc.c index 72d442143b1c..0b19206ff33e 100644 --- a/drivers/staging/rdma/hfi1/rc.c +++ b/drivers/staging/rdma/hfi1/rc.c @@ -927,6 +927,7 @@ static void rc_timeout(unsigned long arg) ibp->n_rc_timeouts++; qp->s_flags &= ~HFI1_S_TIMER; del_timer(&qp->s_timer); + trace_hfi1_rc_timeout(qp, qp->s_last_psn + 1); restart_rc(qp, qp->s_last_psn + 1, 1); hfi1_schedule_send(qp); } @@ -1442,6 +1443,8 @@ static void rc_rcv_resp(struct hfi1_ibport *ibp, spin_lock_irqsave(&qp->s_lock, flags); + trace_hfi1_rc_ack(qp, psn); + /* Ignore invalid responses. */ if (cmp_psn(psn, qp->s_next_psn) >= 0) goto ack_done; @@ -1630,6 +1633,7 @@ static noinline int rc_rcv_error(struct hfi1_other_headers *ohdr, void *data, u8 i, prev; int old_req; + trace_hfi1_rc_rcv_error(qp, psn); if (diff > 0) { /* * Packet sequence error. diff --git a/drivers/staging/rdma/hfi1/trace.c b/drivers/staging/rdma/hfi1/trace.c index 70ad7b9fc1ce..f55b75194847 100644 --- a/drivers/staging/rdma/hfi1/trace.c +++ b/drivers/staging/rdma/hfi1/trace.c @@ -126,13 +126,13 @@ const char *parse_everbs_hdrs( case OP(RC, ACKNOWLEDGE): trace_seq_printf(p, AETH_PRN, be32_to_cpu(eh->aeth) >> 24, - be32_to_cpu(eh->aeth) & HFI1_QPN_MASK); + be32_to_cpu(eh->aeth) & HFI1_MSN_MASK); break; /* aeth + atomicacketh */ case OP(RC, ATOMIC_ACKNOWLEDGE): trace_seq_printf(p, AETH_PRN " " ATOMICACKETH_PRN, (be32_to_cpu(eh->at.aeth) >> 24) & 0xff, - be32_to_cpu(eh->at.aeth) & HFI1_QPN_MASK, + be32_to_cpu(eh->at.aeth) & HFI1_MSN_MASK, (unsigned long long)ib_u64_get(eh->at.atomic_ack_eth)); break; /* atomiceth */ diff --git a/drivers/staging/rdma/hfi1/trace.h b/drivers/staging/rdma/hfi1/trace.h index d7851c0a0171..57430295c404 100644 --- a/drivers/staging/rdma/hfi1/trace.h +++ b/drivers/staging/rdma/hfi1/trace.h @@ -1252,37 +1252,61 @@ TRACE_EVENT(hfi1_sdma_state, #undef TRACE_SYSTEM #define TRACE_SYSTEM hfi1_rc -DECLARE_EVENT_CLASS(hfi1_sdma_rc, +DECLARE_EVENT_CLASS(hfi1_rc_template, TP_PROTO(struct hfi1_qp *qp, u32 psn), TP_ARGS(qp, psn), TP_STRUCT__entry( DD_DEV_ENTRY(dd_from_ibdev(qp->ibqp.device)) __field(u32, qpn) - __field(u32, flags) + __field(u32, s_flags) __field(u32, psn) - __field(u32, sending_psn) - __field(u32, sending_hpsn) + __field(u32, s_psn) + __field(u32, s_next_psn) + __field(u32, s_sending_psn) + __field(u32, s_sending_hpsn) + __field(u32, r_psn) ), TP_fast_assign( DD_DEV_ASSIGN(dd_from_ibdev(qp->ibqp.device)) __entry->qpn = qp->ibqp.qp_num; - __entry->flags = qp->s_flags; + __entry->s_flags = qp->s_flags; __entry->psn = psn; - __entry->sending_psn = qp->s_sending_psn; - __entry->sending_hpsn = qp->s_sending_hpsn; + __entry->s_psn = qp->s_psn; + __entry->s_next_psn = qp->s_next_psn; + __entry->s_sending_psn = qp->s_sending_psn; + __entry->s_sending_hpsn = qp->s_sending_hpsn; + __entry->r_psn = qp->r_psn; ), TP_printk( - "[%s] qpn 0x%x flags 0x%x psn 0x%x sending_psn 0x%x sending_hpsn 0x%x", + "[%s] qpn 0x%x s_flags 0x%x psn 0x%x s_psn 0x%x s_next_psn 0x%x s_sending_psn 0x%x sending_hpsn 0x%x r_psn 0x%x", __get_str(dev), __entry->qpn, - __entry->flags, + __entry->s_flags, __entry->psn, - __entry->sending_psn, - __entry->sending_psn + __entry->s_psn, + __entry->s_next_psn, + __entry->s_sending_psn, + __entry->s_sending_hpsn, + __entry->r_psn ) ); -DEFINE_EVENT(hfi1_sdma_rc, hfi1_rc_sendcomplete, +DEFINE_EVENT(hfi1_rc_template, hfi1_rc_sendcomplete, + TP_PROTO(struct hfi1_qp *qp, u32 psn), + TP_ARGS(qp, psn) +); + +DEFINE_EVENT(hfi1_rc_template, hfi1_rc_ack, + TP_PROTO(struct hfi1_qp *qp, u32 psn), + TP_ARGS(qp, psn) +); + +DEFINE_EVENT(hfi1_rc_template, hfi1_rc_timeout, + TP_PROTO(struct hfi1_qp *qp, u32 psn), + TP_ARGS(qp, psn) +); + +DEFINE_EVENT(hfi1_rc_template, hfi1_rc_rcv_error, TP_PROTO(struct hfi1_qp *qp, u32 psn), TP_ARGS(qp, psn) ); -- 2.20.1