Thomas Bogendoerfer 5d3e02
From: Mike Marciniszyn <mike.marciniszyn@intel.com>
Thomas Bogendoerfer 5d3e02
Date: Tue, 26 Sep 2017 07:01:09 -0700
Thomas Bogendoerfer 5d3e02
Subject: IB/hfi1: Extend input hdr tracing for packet type
Thomas Bogendoerfer 5d3e02
Patch-mainline: v4.15-rc1
Thomas Bogendoerfer 5d3e02
Git-commit: 442e55661db1d5833b0eb5b85f78a845ace7a7cc
Thomas Bogendoerfer 5d3e02
References: bsc#1060463 FATE#323043
Thomas Bogendoerfer 5d3e02
Thomas Bogendoerfer 5d3e02
The etype field from the rhf can have more values than just
Thomas Bogendoerfer 5d3e02
IB and BYPASS.
Thomas Bogendoerfer 5d3e02
Thomas Bogendoerfer 5d3e02
Extend the current tracing to report a symbolic for the etype
Thomas Bogendoerfer 5d3e02
field for non-bypass packets.  Bypass packets will continue to
Thomas Bogendoerfer 5d3e02
report the l2.
Thomas Bogendoerfer 5d3e02
Thomas Bogendoerfer 5d3e02
As part of this fix the etype and the l2 are added to the tracing
Thomas Bogendoerfer 5d3e02
struct and are available for trigger and filter operations.
Thomas Bogendoerfer 5d3e02
Thomas Bogendoerfer 5d3e02
Fixes: Commit 863cf89d472f ("IB/hfi1: Add 16B trace support")
Thomas Bogendoerfer 5d3e02
Reviewed-by: Don Hiatt <don.hiatt@intel.com>
Thomas Bogendoerfer 5d3e02
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Thomas Bogendoerfer 5d3e02
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Thomas Bogendoerfer 5d3e02
Signed-off-by: Doug Ledford <dledford@redhat.com>
Thomas Bogendoerfer 5d3e02
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Thomas Bogendoerfer 5d3e02
---
Thomas Bogendoerfer 5d3e02
 drivers/infiniband/hw/hfi1/trace.c        |   23 ++++++---------
Thomas Bogendoerfer 5d3e02
 drivers/infiniband/hw/hfi1/trace.h        |   10 ++++++
Thomas Bogendoerfer 5d3e02
 drivers/infiniband/hw/hfi1/trace_ibhdrs.h |   44 +++++++++++++++---------------
Thomas Bogendoerfer 5d3e02
 drivers/infiniband/hw/hfi1/trace_rx.h     |   11 -------
Thomas Bogendoerfer 5d3e02
 4 files changed, 44 insertions(+), 44 deletions(-)
Thomas Bogendoerfer 5d3e02
Thomas Bogendoerfer 5d3e02
--- a/drivers/infiniband/hw/hfi1/trace.c
Thomas Bogendoerfer 5d3e02
+++ b/drivers/infiniband/hw/hfi1/trace.c
Thomas Bogendoerfer 5d3e02
@@ -1,5 +1,5 @@
Thomas Bogendoerfer 5d3e02
 /*
Thomas Bogendoerfer 5d3e02
- * Copyright(c) 2015, 2016 Intel Corporation.
Thomas Bogendoerfer 5d3e02
+ * Copyright(c) 2015 - 2017 Intel Corporation.
Thomas Bogendoerfer 5d3e02
  *
Thomas Bogendoerfer 5d3e02
  * This file is provided under a dual BSD/GPLv2 license.  When using or
Thomas Bogendoerfer 5d3e02
  * redistributing this file, you may do so under either license.
Thomas Bogendoerfer 5d3e02
@@ -91,12 +91,17 @@ u8 hfi1_trace_opa_hdr_len(struct hfi1_op
Thomas Bogendoerfer 5d3e02
 		return __get_16b_hdr_len(&opa_hdr->opah);
Thomas Bogendoerfer 5d3e02
 }
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
-const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet)
Thomas Bogendoerfer 5d3e02
+const char *hfi1_trace_get_packet_l4_str(u8 l4)
Thomas Bogendoerfer 5d3e02
 {
Thomas Bogendoerfer 5d3e02
-	if (packet->etype != RHF_RCV_TYPE_BYPASS)
Thomas Bogendoerfer 5d3e02
-		return "IB";
Thomas Bogendoerfer 5d3e02
+	if (l4)
Thomas Bogendoerfer 5d3e02
+		return "16B";
Thomas Bogendoerfer 5d3e02
+	else
Thomas Bogendoerfer 5d3e02
+		return "9B";
Thomas Bogendoerfer 5d3e02
+}
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
-	switch (hfi1_16B_get_l2(packet->hdr)) {
Thomas Bogendoerfer 5d3e02
+const char *hfi1_trace_get_packet_l2_str(u8 l2)
Thomas Bogendoerfer 5d3e02
+{
Thomas Bogendoerfer 5d3e02
+	switch (l2) {
Thomas Bogendoerfer 5d3e02
 	case 0:
Thomas Bogendoerfer 5d3e02
 		return "0";
Thomas Bogendoerfer 5d3e02
 	case 1:
Thomas Bogendoerfer 5d3e02
@@ -109,14 +114,6 @@ const char *hfi1_trace_get_packet_str(st
Thomas Bogendoerfer 5d3e02
 	return "";
Thomas Bogendoerfer 5d3e02
 }
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
-const char *hfi1_trace_get_packet_type_str(u8 l4)
Thomas Bogendoerfer 5d3e02
-{
Thomas Bogendoerfer 5d3e02
-	if (l4)
Thomas Bogendoerfer 5d3e02
-		return "16B";
Thomas Bogendoerfer 5d3e02
-	else
Thomas Bogendoerfer 5d3e02
-		return "9B";
Thomas Bogendoerfer 5d3e02
-}
Thomas Bogendoerfer 5d3e02
-
Thomas Bogendoerfer 5d3e02
 #define IMM_PRN  "imm:%d"
Thomas Bogendoerfer 5d3e02
 #define RETH_PRN "reth vaddr:0x%.16llx rkey:0x%.8x dlen:0x%.8x"
Thomas Bogendoerfer 5d3e02
 #define AETH_PRN "aeth syn:0x%.2x %s msn:0x%.8x"
Thomas Bogendoerfer 5d3e02
--- a/drivers/infiniband/hw/hfi1/trace.h
Thomas Bogendoerfer 5d3e02
+++ b/drivers/infiniband/hw/hfi1/trace.h
Thomas Bogendoerfer 5d3e02
@@ -44,6 +44,16 @@
Thomas Bogendoerfer 5d3e02
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Thomas Bogendoerfer 5d3e02
  *
Thomas Bogendoerfer 5d3e02
  */
Thomas Bogendoerfer 5d3e02
+
Thomas Bogendoerfer 5d3e02
+#define packettype_name(etype) { RHF_RCV_TYPE_##etype, #etype }
Thomas Bogendoerfer 5d3e02
+#define show_packettype(etype)                  \
Thomas Bogendoerfer 5d3e02
+__print_symbolic(etype,                         \
Thomas Bogendoerfer 5d3e02
+	packettype_name(EXPECTED),              \
Thomas Bogendoerfer 5d3e02
+	packettype_name(EAGER),                 \
Thomas Bogendoerfer 5d3e02
+	packettype_name(IB),                    \
Thomas Bogendoerfer 5d3e02
+	packettype_name(ERROR),                 \
Thomas Bogendoerfer 5d3e02
+	packettype_name(BYPASS))
Thomas Bogendoerfer 5d3e02
+
Thomas Bogendoerfer 5d3e02
 #include "trace_dbg.h"
Thomas Bogendoerfer 5d3e02
 #include "trace_misc.h"
Thomas Bogendoerfer 5d3e02
 #include "trace_ctxts.h"
Thomas Bogendoerfer 5d3e02
--- a/drivers/infiniband/hw/hfi1/trace_ibhdrs.h
Thomas Bogendoerfer 5d3e02
+++ b/drivers/infiniband/hw/hfi1/trace_ibhdrs.h
Thomas Bogendoerfer 5d3e02
@@ -1,5 +1,5 @@
Thomas Bogendoerfer 5d3e02
 /*
Thomas Bogendoerfer 5d3e02
- * Copyright(c) 2015, 2016 Intel Corporation.
Thomas Bogendoerfer 5d3e02
+ * Copyright(c) 2015 - 2017 Intel Corporation.
Thomas Bogendoerfer 5d3e02
  *
Thomas Bogendoerfer 5d3e02
  * This file is provided under a dual BSD/GPLv2 license.  When using or
Thomas Bogendoerfer 5d3e02
  * redistributing this file, you may do so under either license.
Thomas Bogendoerfer 5d3e02
@@ -99,8 +99,7 @@ u8 ibhdr_exhdr_len(struct ib_header *hdr
Thomas Bogendoerfer 5d3e02
 const char *parse_everbs_hdrs(struct trace_seq *p, u8 opcode, void *ehdrs);
Thomas Bogendoerfer 5d3e02
 u8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opah);
Thomas Bogendoerfer 5d3e02
 u8 hfi1_trace_packet_hdr_len(struct hfi1_packet *packet);
Thomas Bogendoerfer 5d3e02
-const char *hfi1_trace_get_packet_type_str(u8 l4);
Thomas Bogendoerfer 5d3e02
-const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet);
Thomas Bogendoerfer 5d3e02
+const char *hfi1_trace_get_packet_l4_str(u8 l4);
Thomas Bogendoerfer 5d3e02
 void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr,
Thomas Bogendoerfer 5d3e02
 			     u8 *ack, u8 *becn, u8 *fecn, u8 *mig,
Thomas Bogendoerfer 5d3e02
 			     u8 *se, u8 *pad, u8 *opcode, u8 *tver,
Thomas Bogendoerfer 5d3e02
@@ -129,6 +128,8 @@ const char *hfi1_trace_fmt_bth(struct tr
Thomas Bogendoerfer 5d3e02
 			       u8 se, u8 pad, u8 opcode, const char *opname,
Thomas Bogendoerfer 5d3e02
 			       u8 tver, u16 pkey, u32 psn, u32 qpn);
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
+const char *hfi1_trace_get_packet_l2_str(u8 l2);
Thomas Bogendoerfer 5d3e02
+
Thomas Bogendoerfer 5d3e02
 #define __parse_ib_ehdrs(op, ehdrs) parse_everbs_hdrs(p, op, ehdrs)
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
 #define lrh_name(lrh) { HFI1_##lrh, #lrh }
Thomas Bogendoerfer 5d3e02
@@ -136,8 +137,6 @@ const char *hfi1_trace_fmt_bth(struct tr
Thomas Bogendoerfer 5d3e02
 __print_symbolic(lrh,                    \
Thomas Bogendoerfer 5d3e02
 	lrh_name(LRH_BTH),               \
Thomas Bogendoerfer 5d3e02
 	lrh_name(LRH_GRH))
Thomas Bogendoerfer 5d3e02
-#define PKT_ENTRY(pkt)	__string(ptype,  hfi1_trace_get_packet_str(packet))
Thomas Bogendoerfer 5d3e02
-#define PKT_ASSIGN(pkt) __assign_str(ptype, hfi1_trace_get_packet_str(packet))
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
 DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
Thomas Bogendoerfer 5d3e02
 		    TP_PROTO(struct hfi1_devdata *dd,
Thomas Bogendoerfer 5d3e02
@@ -146,12 +145,12 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_tem
Thomas Bogendoerfer 5d3e02
 		    TP_ARGS(dd, packet, sc5),
Thomas Bogendoerfer 5d3e02
 		    TP_STRUCT__entry(
Thomas Bogendoerfer 5d3e02
 			DD_DEV_ENTRY(dd)
Thomas Bogendoerfer 5d3e02
-			PKT_ENTRY(packet)
Thomas Bogendoerfer 5d3e02
-			__field(bool, bypass)
Thomas Bogendoerfer 5d3e02
+			__field(u8, etype)
Thomas Bogendoerfer 5d3e02
 			__field(u8, ack)
Thomas Bogendoerfer 5d3e02
 			__field(u8, age)
Thomas Bogendoerfer 5d3e02
 			__field(u8, becn)
Thomas Bogendoerfer 5d3e02
 			__field(u8, fecn)
Thomas Bogendoerfer 5d3e02
+			__field(u8, l2)
Thomas Bogendoerfer 5d3e02
 			__field(u8, l4)
Thomas Bogendoerfer 5d3e02
 			__field(u8, lnh)
Thomas Bogendoerfer 5d3e02
 			__field(u8, lver)
Thomas Bogendoerfer 5d3e02
@@ -176,10 +175,10 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_tem
Thomas Bogendoerfer 5d3e02
 			),
Thomas Bogendoerfer 5d3e02
 		    TP_fast_assign(
Thomas Bogendoerfer 5d3e02
 			DD_DEV_ASSIGN(dd);
Thomas Bogendoerfer 5d3e02
-			PKT_ASSIGN(packet);
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
-			if (packet->etype == RHF_RCV_TYPE_BYPASS) {
Thomas Bogendoerfer 5d3e02
-				__entry->bypass = true;
Thomas Bogendoerfer 5d3e02
+			__entry->etype = packet->etype;
Thomas Bogendoerfer 5d3e02
+			__entry->l2 = hfi1_16B_get_l2(packet->hdr);
Thomas Bogendoerfer 5d3e02
+			if (__entry->etype == RHF_RCV_TYPE_BYPASS) {
Thomas Bogendoerfer 5d3e02
 				hfi1_trace_parse_16b_hdr(packet->hdr,
Thomas Bogendoerfer 5d3e02
 							 &__entry->age,
Thomas Bogendoerfer 5d3e02
 							 &__entry->becn,
Thomas Bogendoerfer 5d3e02
@@ -203,7 +202,6 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_tem
Thomas Bogendoerfer 5d3e02
 							   &__entry->psn,
Thomas Bogendoerfer 5d3e02
 							   &__entry->qpn);
Thomas Bogendoerfer 5d3e02
 			} else {
Thomas Bogendoerfer 5d3e02
-				__entry->bypass = false;
Thomas Bogendoerfer 5d3e02
 				hfi1_trace_parse_9b_hdr(packet->hdr, sc5,
Thomas Bogendoerfer 5d3e02
 							&__entry->lnh,
Thomas Bogendoerfer 5d3e02
 							&__entry->lver,
Thomas Bogendoerfer 5d3e02
@@ -233,9 +231,13 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_tem
Thomas Bogendoerfer 5d3e02
 			 ),
Thomas Bogendoerfer 5d3e02
 		    TP_printk("[%s] (%s) %s %s hlen:%d %s",
Thomas Bogendoerfer 5d3e02
 			      __get_str(dev),
Thomas Bogendoerfer 5d3e02
-			      __get_str(ptype),
Thomas Bogendoerfer 5d3e02
+			      __entry->etype != RHF_RCV_TYPE_BYPASS ?
Thomas Bogendoerfer 5d3e02
+					show_packettype(__entry->etype) :
Thomas Bogendoerfer 5d3e02
+					hfi1_trace_get_packet_l2_str(
Thomas Bogendoerfer 5d3e02
+						__entry->l2),
Thomas Bogendoerfer 5d3e02
 			      hfi1_trace_fmt_lrh(p,
Thomas Bogendoerfer 5d3e02
-						 __entry->bypass,
Thomas Bogendoerfer 5d3e02
+						 __entry->etype ==
Thomas Bogendoerfer 5d3e02
+							RHF_RCV_TYPE_BYPASS,
Thomas Bogendoerfer 5d3e02
 						 __entry->age,
Thomas Bogendoerfer 5d3e02
 						 __entry->becn,
Thomas Bogendoerfer 5d3e02
 						 __entry->fecn,
Thomas Bogendoerfer 5d3e02
@@ -252,7 +254,8 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_tem
Thomas Bogendoerfer 5d3e02
 						 __entry->dlid,
Thomas Bogendoerfer 5d3e02
 						 __entry->slid),
Thomas Bogendoerfer 5d3e02
 			      hfi1_trace_fmt_bth(p,
Thomas Bogendoerfer 5d3e02
-						 __entry->bypass,
Thomas Bogendoerfer 5d3e02
+						 __entry->etype ==
Thomas Bogendoerfer 5d3e02
+							RHF_RCV_TYPE_BYPASS,
Thomas Bogendoerfer 5d3e02
 						 __entry->ack,
Thomas Bogendoerfer 5d3e02
 						 __entry->becn,
Thomas Bogendoerfer 5d3e02
 						 __entry->fecn,
Thomas Bogendoerfer 5d3e02
@@ -284,7 +287,7 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_te
Thomas Bogendoerfer 5d3e02
 		    TP_ARGS(dd, opah, sc5),
Thomas Bogendoerfer 5d3e02
 		    TP_STRUCT__entry(
Thomas Bogendoerfer 5d3e02
 			DD_DEV_ENTRY(dd)
Thomas Bogendoerfer 5d3e02
-			__field(bool, bypass)
Thomas Bogendoerfer 5d3e02
+			__field(u8, hdr_type)
Thomas Bogendoerfer 5d3e02
 			__field(u8, ack)
Thomas Bogendoerfer 5d3e02
 			__field(u8, age)
Thomas Bogendoerfer 5d3e02
 			__field(u8, becn)
Thomas Bogendoerfer 5d3e02
@@ -316,8 +319,8 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_te
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
 			DD_DEV_ASSIGN(dd);
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
-			if (opah->hdr_type)  {
Thomas Bogendoerfer 5d3e02
-				__entry->bypass = true;
Thomas Bogendoerfer 5d3e02
+			__entry->hdr_type = opah->hdr_type;
Thomas Bogendoerfer 5d3e02
+			if (__entry->hdr_type)  {
Thomas Bogendoerfer 5d3e02
 				hfi1_trace_parse_16b_hdr(&opah->opah,
Thomas Bogendoerfer 5d3e02
 							 &__entry->age,
Thomas Bogendoerfer 5d3e02
 							 &__entry->becn,
Thomas Bogendoerfer 5d3e02
@@ -345,7 +348,6 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_te
Thomas Bogendoerfer 5d3e02
 							 &__entry->psn,
Thomas Bogendoerfer 5d3e02
 							 &__entry->qpn);
Thomas Bogendoerfer 5d3e02
 			} else {
Thomas Bogendoerfer 5d3e02
-				__entry->bypass = false;
Thomas Bogendoerfer 5d3e02
 				hfi1_trace_parse_9b_hdr(&opah->ibh, sc5,
Thomas Bogendoerfer 5d3e02
 							&__entry->lnh,
Thomas Bogendoerfer 5d3e02
 							&__entry->lver,
Thomas Bogendoerfer 5d3e02
@@ -378,9 +380,9 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_te
Thomas Bogendoerfer 5d3e02
 		    ),
Thomas Bogendoerfer 5d3e02
 		    TP_printk("[%s] (%s) %s %s hlen:%d %s",
Thomas Bogendoerfer 5d3e02
 			      __get_str(dev),
Thomas Bogendoerfer 5d3e02
-			      hfi1_trace_get_packet_type_str(__entry->l4),
Thomas Bogendoerfer 5d3e02
+			      hfi1_trace_get_packet_l4_str(__entry->l4),
Thomas Bogendoerfer 5d3e02
 			      hfi1_trace_fmt_lrh(p,
Thomas Bogendoerfer 5d3e02
-						 __entry->bypass,
Thomas Bogendoerfer 5d3e02
+						 !!__entry->hdr_type,
Thomas Bogendoerfer 5d3e02
 						 __entry->age,
Thomas Bogendoerfer 5d3e02
 						 __entry->becn,
Thomas Bogendoerfer 5d3e02
 						 __entry->fecn,
Thomas Bogendoerfer 5d3e02
@@ -397,7 +399,7 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_te
Thomas Bogendoerfer 5d3e02
 						 __entry->dlid,
Thomas Bogendoerfer 5d3e02
 						 __entry->slid),
Thomas Bogendoerfer 5d3e02
 			      hfi1_trace_fmt_bth(p,
Thomas Bogendoerfer 5d3e02
-						 __entry->bypass,
Thomas Bogendoerfer 5d3e02
+						 !!__entry->hdr_type,
Thomas Bogendoerfer 5d3e02
 						 __entry->ack,
Thomas Bogendoerfer 5d3e02
 						 __entry->becn,
Thomas Bogendoerfer 5d3e02
 						 __entry->fecn,
Thomas Bogendoerfer 5d3e02
--- a/drivers/infiniband/hw/hfi1/trace_rx.h
Thomas Bogendoerfer 5d3e02
+++ b/drivers/infiniband/hw/hfi1/trace_rx.h
Thomas Bogendoerfer 5d3e02
@@ -1,5 +1,5 @@
Thomas Bogendoerfer 5d3e02
 /*
Thomas Bogendoerfer 5d3e02
- * Copyright(c) 2015, 2016 Intel Corporation.
Thomas Bogendoerfer 5d3e02
+ * Copyright(c) 2015 - 2017 Intel Corporation.
Thomas Bogendoerfer 5d3e02
  *
Thomas Bogendoerfer 5d3e02
  * This file is provided under a dual BSD/GPLv2 license.  When using or
Thomas Bogendoerfer 5d3e02
  * redistributing this file, you may do so under either license.
Thomas Bogendoerfer 5d3e02
@@ -62,15 +62,6 @@ __print_symbolic(type,
Thomas Bogendoerfer 5d3e02
 #undef TRACE_SYSTEM
Thomas Bogendoerfer 5d3e02
 #define TRACE_SYSTEM hfi1_rx
Thomas Bogendoerfer 5d3e02
 
Thomas Bogendoerfer 5d3e02
-#define packettype_name(etype) { RHF_RCV_TYPE_##etype, #etype }
Thomas Bogendoerfer 5d3e02
-#define show_packettype(etype)                  \
Thomas Bogendoerfer 5d3e02
-__print_symbolic(etype,                         \
Thomas Bogendoerfer 5d3e02
-	packettype_name(EXPECTED),              \
Thomas Bogendoerfer 5d3e02
-	packettype_name(EAGER),                 \
Thomas Bogendoerfer 5d3e02
-	packettype_name(IB),                    \
Thomas Bogendoerfer 5d3e02
-	packettype_name(ERROR),                 \
Thomas Bogendoerfer 5d3e02
-	packettype_name(BYPASS))
Thomas Bogendoerfer 5d3e02
-
Thomas Bogendoerfer 5d3e02
 TRACE_EVENT(hfi1_rcvhdr,
Thomas Bogendoerfer 5d3e02
 	    TP_PROTO(struct hfi1_devdata *dd,
Thomas Bogendoerfer 5d3e02
 		     u32 ctxt,