IB/hfi1: Extend input hdr tracing for packet type
authorMike Marciniszyn <mike.marciniszyn@intel.com>
Tue, 26 Sep 2017 14:01:09 +0000 (07:01 -0700)
committerDoug Ledford <dledford@redhat.com>
Wed, 27 Sep 2017 15:34:13 +0000 (11:34 -0400)
The etype field from the rhf can have more values than just
IB and BYPASS.

Extend the current tracing to report a symbolic for the etype
field for non-bypass packets.  Bypass packets will continue to
report the l2.

As part of this fix the etype and the l2 are added to the tracing
struct and are available for trigger and filter operations.

Fixes: Commit 863cf89d472f ("IB/hfi1: Add 16B trace support")
Reviewed-by: Don Hiatt <don.hiatt@intel.com>
Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/hw/hfi1/trace.c
drivers/infiniband/hw/hfi1/trace.h
drivers/infiniband/hw/hfi1/trace_ibhdrs.h
drivers/infiniband/hw/hfi1/trace_rx.h

index 9938bb983ce6f18f16c13999264dfea4c6bcbd74..ce5a43f1da77b886666442f8b7ee793e20a7db93 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2015, 2016 Intel Corporation.
+ * Copyright(c) 2015 - 2017 Intel Corporation.
  *
  * This file is provided under a dual BSD/GPLv2 license.  When using or
  * redistributing this file, you may do so under either license.
@@ -91,12 +91,17 @@ u8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opa_hdr)
                return __get_16b_hdr_len(&opa_hdr->opah);
 }
 
-const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet)
+const char *hfi1_trace_get_packet_l4_str(u8 l4)
 {
-       if (packet->etype != RHF_RCV_TYPE_BYPASS)
-               return "IB";
+       if (l4)
+               return "16B";
+       else
+               return "9B";
+}
 
-       switch (hfi1_16B_get_l2(packet->hdr)) {
+const char *hfi1_trace_get_packet_l2_str(u8 l2)
+{
+       switch (l2) {
        case 0:
                return "0";
        case 1:
@@ -109,14 +114,6 @@ const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet)
        return "";
 }
 
-const char *hfi1_trace_get_packet_type_str(u8 l4)
-{
-       if (l4)
-               return "16B";
-       else
-               return "9B";
-}
-
 #define IMM_PRN  "imm:%d"
 #define RETH_PRN "reth vaddr:0x%.16llx rkey:0x%.8x dlen:0x%.8x"
 #define AETH_PRN "aeth syn:0x%.2x %s msn:0x%.8x"
index af50c0793450f0eb1e22729a189f4b8daf6549f9..8540463ef3f720a680fecff1f6e323046e5bbdbd 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  */
+
+#define packettype_name(etype) { RHF_RCV_TYPE_##etype, #etype }
+#define show_packettype(etype)                  \
+__print_symbolic(etype,                         \
+       packettype_name(EXPECTED),              \
+       packettype_name(EAGER),                 \
+       packettype_name(IB),                    \
+       packettype_name(ERROR),                 \
+       packettype_name(BYPASS))
+
 #include "trace_dbg.h"
 #include "trace_misc.h"
 #include "trace_ctxts.h"
index 6721f84dafa5c2baad15a2fa8b8e7fa0f6c9a299..6dd0d639f27ded9b8a265d164dbafa9044b67730 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2015, 2016 Intel Corporation.
+ * Copyright(c) 2015 - 2017 Intel Corporation.
  *
  * This file is provided under a dual BSD/GPLv2 license.  When using or
  * redistributing this file, you may do so under either license.
@@ -99,8 +99,7 @@ u8 ibhdr_exhdr_len(struct ib_header *hdr);
 const char *parse_everbs_hdrs(struct trace_seq *p, u8 opcode, void *ehdrs);
 u8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opah);
 u8 hfi1_trace_packet_hdr_len(struct hfi1_packet *packet);
-const char *hfi1_trace_get_packet_type_str(u8 l4);
-const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet);
+const char *hfi1_trace_get_packet_l4_str(u8 l4);
 void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr,
                             u8 *ack, u8 *becn, u8 *fecn, u8 *mig,
                             u8 *se, u8 *pad, u8 *opcode, u8 *tver,
@@ -129,6 +128,8 @@ const char *hfi1_trace_fmt_bth(struct trace_seq *p, bool bypass,
                               u8 se, u8 pad, u8 opcode, const char *opname,
                               u8 tver, u16 pkey, u32 psn, u32 qpn);
 
+const char *hfi1_trace_get_packet_l2_str(u8 l2);
+
 #define __parse_ib_ehdrs(op, ehdrs) parse_everbs_hdrs(p, op, ehdrs)
 
 #define lrh_name(lrh) { HFI1_##lrh, #lrh }
@@ -136,8 +137,6 @@ const char *hfi1_trace_fmt_bth(struct trace_seq *p, bool bypass,
 __print_symbolic(lrh,                    \
        lrh_name(LRH_BTH),               \
        lrh_name(LRH_GRH))
-#define PKT_ENTRY(pkt) __string(ptype,  hfi1_trace_get_packet_str(packet))
-#define PKT_ASSIGN(pkt) __assign_str(ptype, hfi1_trace_get_packet_str(packet))
 
 DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
                    TP_PROTO(struct hfi1_devdata *dd,
@@ -146,12 +145,12 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
                    TP_ARGS(dd, packet, sc5),
                    TP_STRUCT__entry(
                        DD_DEV_ENTRY(dd)
-                       PKT_ENTRY(packet)
-                       __field(bool, bypass)
+                       __field(u8, etype)
                        __field(u8, ack)
                        __field(u8, age)
                        __field(u8, becn)
                        __field(u8, fecn)
+                       __field(u8, l2)
                        __field(u8, l4)
                        __field(u8, lnh)
                        __field(u8, lver)
@@ -176,10 +175,10 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
                        ),
                    TP_fast_assign(
                        DD_DEV_ASSIGN(dd);
-                       PKT_ASSIGN(packet);
 
-                       if (packet->etype == RHF_RCV_TYPE_BYPASS) {
-                               __entry->bypass = true;
+                       __entry->etype = packet->etype;
+                       __entry->l2 = hfi1_16B_get_l2(packet->hdr);
+                       if (__entry->etype == RHF_RCV_TYPE_BYPASS) {
                                hfi1_trace_parse_16b_hdr(packet->hdr,
                                                         &__entry->age,
                                                         &__entry->becn,
@@ -203,7 +202,6 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
                                                           &__entry->psn,
                                                           &__entry->qpn);
                        } else {
-                               __entry->bypass = false;
                                hfi1_trace_parse_9b_hdr(packet->hdr, sc5,
                                                        &__entry->lnh,
                                                        &__entry->lver,
@@ -233,9 +231,13 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
                         ),
                    TP_printk("[%s] (%s) %s %s hlen:%d %s",
                              __get_str(dev),
-                             __get_str(ptype),
+                             __entry->etype != RHF_RCV_TYPE_BYPASS ?
+                                       show_packettype(__entry->etype) :
+                                       hfi1_trace_get_packet_l2_str(
+                                               __entry->l2),
                              hfi1_trace_fmt_lrh(p,
-                                                __entry->bypass,
+                                                __entry->etype ==
+                                                       RHF_RCV_TYPE_BYPASS,
                                                 __entry->age,
                                                 __entry->becn,
                                                 __entry->fecn,
@@ -252,7 +254,8 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
                                                 __entry->dlid,
                                                 __entry->slid),
                              hfi1_trace_fmt_bth(p,
-                                                __entry->bypass,
+                                                __entry->etype ==
+                                                       RHF_RCV_TYPE_BYPASS,
                                                 __entry->ack,
                                                 __entry->becn,
                                                 __entry->fecn,
@@ -284,7 +287,7 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
                    TP_ARGS(dd, opah, sc5),
                    TP_STRUCT__entry(
                        DD_DEV_ENTRY(dd)
-                       __field(bool, bypass)
+                       __field(u8, hdr_type)
                        __field(u8, ack)
                        __field(u8, age)
                        __field(u8, becn)
@@ -316,8 +319,8 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
 
                        DD_DEV_ASSIGN(dd);
 
-                       if (opah->hdr_type)  {
-                               __entry->bypass = true;
+                       __entry->hdr_type = opah->hdr_type;
+                       if (__entry->hdr_type)  {
                                hfi1_trace_parse_16b_hdr(&opah->opah,
                                                         &__entry->age,
                                                         &__entry->becn,
@@ -345,7 +348,6 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
                                                         &__entry->psn,
                                                         &__entry->qpn);
                        } else {
-                               __entry->bypass = false;
                                hfi1_trace_parse_9b_hdr(&opah->ibh, sc5,
                                                        &__entry->lnh,
                                                        &__entry->lver,
@@ -378,9 +380,9 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
                    ),
                    TP_printk("[%s] (%s) %s %s hlen:%d %s",
                              __get_str(dev),
-                             hfi1_trace_get_packet_type_str(__entry->l4),
+                             hfi1_trace_get_packet_l4_str(__entry->l4),
                              hfi1_trace_fmt_lrh(p,
-                                                __entry->bypass,
+                                                !!__entry->hdr_type,
                                                 __entry->age,
                                                 __entry->becn,
                                                 __entry->fecn,
@@ -397,7 +399,7 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
                                                 __entry->dlid,
                                                 __entry->slid),
                              hfi1_trace_fmt_bth(p,
-                                                __entry->bypass,
+                                                !!__entry->hdr_type,
                                                 __entry->ack,
                                                 __entry->becn,
                                                 __entry->fecn,
index f9909d240dcc6de8b5ebad935f2e50cfa0ab55d5..4d487fee105da1c6a30db17afdd984ae76967f57 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright(c) 2015, 2016 Intel Corporation.
+ * Copyright(c) 2015 - 2017 Intel Corporation.
  *
  * This file is provided under a dual BSD/GPLv2 license.  When using or
  * redistributing this file, you may do so under either license.
@@ -62,15 +62,6 @@ __print_symbolic(type,                       \
 #undef TRACE_SYSTEM
 #define TRACE_SYSTEM hfi1_rx
 
-#define packettype_name(etype) { RHF_RCV_TYPE_##etype, #etype }
-#define show_packettype(etype)                  \
-__print_symbolic(etype,                         \
-       packettype_name(EXPECTED),              \
-       packettype_name(EAGER),                 \
-       packettype_name(IB),                    \
-       packettype_name(ERROR),                 \
-       packettype_name(BYPASS))
-
 TRACE_EVENT(hfi1_rcvhdr,
            TP_PROTO(struct hfi1_devdata *dd,
                     u32 ctxt,