Commit 442e5566 authored by Mike Marciniszyn's avatar Mike Marciniszyn Committed by Doug Ledford

IB/hfi1: Extend input hdr tracing for packet type

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 863cf89d ("IB/hfi1: Add 16B trace support")
Reviewed-by: default avatarDon Hiatt <don.hiatt@intel.com>
Signed-off-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: default avatarDennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
parent 6fab2a88
/* /*
* 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 * This file is provided under a dual BSD/GPLv2 license. When using or
* redistributing this file, you may do so under either license. * 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) ...@@ -91,12 +91,17 @@ u8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opa_hdr)
return __get_16b_hdr_len(&opa_hdr->opah); 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) if (l4)
return "IB"; 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: case 0:
return "0"; return "0";
case 1: case 1:
...@@ -109,14 +114,6 @@ const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet) ...@@ -109,14 +114,6 @@ const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet)
return ""; return "";
} }
const char *hfi1_trace_get_packet_type_str(u8 l4)
{
if (l4)
return "16B";
else
return "9B";
}
#define IMM_PRN "imm:%d" #define IMM_PRN "imm:%d"
#define RETH_PRN "reth vaddr:0x%.16llx rkey:0x%.8x dlen:0x%.8x" #define RETH_PRN "reth vaddr:0x%.16llx rkey:0x%.8x dlen:0x%.8x"
#define AETH_PRN "aeth syn:0x%.2x %s msn:0x%.8x" #define AETH_PRN "aeth syn:0x%.2x %s msn:0x%.8x"
......
...@@ -44,6 +44,16 @@ ...@@ -44,6 +44,16 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * 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_dbg.h"
#include "trace_misc.h" #include "trace_misc.h"
#include "trace_ctxts.h" #include "trace_ctxts.h"
......
/* /*
* 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 * This file is provided under a dual BSD/GPLv2 license. When using or
* redistributing this file, you may do so under either license. * redistributing this file, you may do so under either license.
...@@ -99,8 +99,7 @@ u8 ibhdr_exhdr_len(struct ib_header *hdr); ...@@ -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); 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_opa_hdr_len(struct hfi1_opa_header *opah);
u8 hfi1_trace_packet_hdr_len(struct hfi1_packet *packet); 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_l4_str(u8 l4);
const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet);
void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr, void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr,
u8 *ack, u8 *becn, u8 *fecn, u8 *mig, u8 *ack, u8 *becn, u8 *fecn, u8 *mig,
u8 *se, u8 *pad, u8 *opcode, u8 *tver, u8 *se, u8 *pad, u8 *opcode, u8 *tver,
...@@ -129,6 +128,8 @@ const char *hfi1_trace_fmt_bth(struct trace_seq *p, bool bypass, ...@@ -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 se, u8 pad, u8 opcode, const char *opname,
u8 tver, u16 pkey, u32 psn, u32 qpn); 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 __parse_ib_ehdrs(op, ehdrs) parse_everbs_hdrs(p, op, ehdrs)
#define lrh_name(lrh) { HFI1_##lrh, #lrh } #define lrh_name(lrh) { HFI1_##lrh, #lrh }
...@@ -136,8 +137,6 @@ const char *hfi1_trace_fmt_bth(struct trace_seq *p, bool bypass, ...@@ -136,8 +137,6 @@ const char *hfi1_trace_fmt_bth(struct trace_seq *p, bool bypass,
__print_symbolic(lrh, \ __print_symbolic(lrh, \
lrh_name(LRH_BTH), \ lrh_name(LRH_BTH), \
lrh_name(LRH_GRH)) 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, DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
TP_PROTO(struct hfi1_devdata *dd, TP_PROTO(struct hfi1_devdata *dd,
...@@ -146,12 +145,12 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template, ...@@ -146,12 +145,12 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
TP_ARGS(dd, packet, sc5), TP_ARGS(dd, packet, sc5),
TP_STRUCT__entry( TP_STRUCT__entry(
DD_DEV_ENTRY(dd) DD_DEV_ENTRY(dd)
PKT_ENTRY(packet) __field(u8, etype)
__field(bool, bypass)
__field(u8, ack) __field(u8, ack)
__field(u8, age) __field(u8, age)
__field(u8, becn) __field(u8, becn)
__field(u8, fecn) __field(u8, fecn)
__field(u8, l2)
__field(u8, l4) __field(u8, l4)
__field(u8, lnh) __field(u8, lnh)
__field(u8, lver) __field(u8, lver)
...@@ -176,10 +175,10 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template, ...@@ -176,10 +175,10 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
), ),
TP_fast_assign( TP_fast_assign(
DD_DEV_ASSIGN(dd); DD_DEV_ASSIGN(dd);
PKT_ASSIGN(packet);
if (packet->etype == RHF_RCV_TYPE_BYPASS) { __entry->etype = packet->etype;
__entry->bypass = true; __entry->l2 = hfi1_16B_get_l2(packet->hdr);
if (__entry->etype == RHF_RCV_TYPE_BYPASS) {
hfi1_trace_parse_16b_hdr(packet->hdr, hfi1_trace_parse_16b_hdr(packet->hdr,
&__entry->age, &__entry->age,
&__entry->becn, &__entry->becn,
...@@ -203,7 +202,6 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template, ...@@ -203,7 +202,6 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
&__entry->psn, &__entry->psn,
&__entry->qpn); &__entry->qpn);
} else { } else {
__entry->bypass = false;
hfi1_trace_parse_9b_hdr(packet->hdr, sc5, hfi1_trace_parse_9b_hdr(packet->hdr, sc5,
&__entry->lnh, &__entry->lnh,
&__entry->lver, &__entry->lver,
...@@ -233,9 +231,13 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template, ...@@ -233,9 +231,13 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
), ),
TP_printk("[%s] (%s) %s %s hlen:%d %s", TP_printk("[%s] (%s) %s %s hlen:%d %s",
__get_str(dev), __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, hfi1_trace_fmt_lrh(p,
__entry->bypass, __entry->etype ==
RHF_RCV_TYPE_BYPASS,
__entry->age, __entry->age,
__entry->becn, __entry->becn,
__entry->fecn, __entry->fecn,
...@@ -252,7 +254,8 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template, ...@@ -252,7 +254,8 @@ DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
__entry->dlid, __entry->dlid,
__entry->slid), __entry->slid),
hfi1_trace_fmt_bth(p, hfi1_trace_fmt_bth(p,
__entry->bypass, __entry->etype ==
RHF_RCV_TYPE_BYPASS,
__entry->ack, __entry->ack,
__entry->becn, __entry->becn,
__entry->fecn, __entry->fecn,
...@@ -284,7 +287,7 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template, ...@@ -284,7 +287,7 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
TP_ARGS(dd, opah, sc5), TP_ARGS(dd, opah, sc5),
TP_STRUCT__entry( TP_STRUCT__entry(
DD_DEV_ENTRY(dd) DD_DEV_ENTRY(dd)
__field(bool, bypass) __field(u8, hdr_type)
__field(u8, ack) __field(u8, ack)
__field(u8, age) __field(u8, age)
__field(u8, becn) __field(u8, becn)
...@@ -316,8 +319,8 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template, ...@@ -316,8 +319,8 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
DD_DEV_ASSIGN(dd); DD_DEV_ASSIGN(dd);
if (opah->hdr_type) { __entry->hdr_type = opah->hdr_type;
__entry->bypass = true; if (__entry->hdr_type) {
hfi1_trace_parse_16b_hdr(&opah->opah, hfi1_trace_parse_16b_hdr(&opah->opah,
&__entry->age, &__entry->age,
&__entry->becn, &__entry->becn,
...@@ -345,7 +348,6 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template, ...@@ -345,7 +348,6 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
&__entry->psn, &__entry->psn,
&__entry->qpn); &__entry->qpn);
} else { } else {
__entry->bypass = false;
hfi1_trace_parse_9b_hdr(&opah->ibh, sc5, hfi1_trace_parse_9b_hdr(&opah->ibh, sc5,
&__entry->lnh, &__entry->lnh,
&__entry->lver, &__entry->lver,
...@@ -378,9 +380,9 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template, ...@@ -378,9 +380,9 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
), ),
TP_printk("[%s] (%s) %s %s hlen:%d %s", TP_printk("[%s] (%s) %s %s hlen:%d %s",
__get_str(dev), __get_str(dev),
hfi1_trace_get_packet_type_str(__entry->l4), hfi1_trace_get_packet_l4_str(__entry->l4),
hfi1_trace_fmt_lrh(p, hfi1_trace_fmt_lrh(p,
__entry->bypass, !!__entry->hdr_type,
__entry->age, __entry->age,
__entry->becn, __entry->becn,
__entry->fecn, __entry->fecn,
...@@ -397,7 +399,7 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template, ...@@ -397,7 +399,7 @@ DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
__entry->dlid, __entry->dlid,
__entry->slid), __entry->slid),
hfi1_trace_fmt_bth(p, hfi1_trace_fmt_bth(p,
__entry->bypass, !!__entry->hdr_type,
__entry->ack, __entry->ack,
__entry->becn, __entry->becn,
__entry->fecn, __entry->fecn,
......
/* /*
* 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 * This file is provided under a dual BSD/GPLv2 license. When using or
* redistributing this file, you may do so under either license. * redistributing this file, you may do so under either license.
...@@ -62,15 +62,6 @@ __print_symbolic(type, \ ...@@ -62,15 +62,6 @@ __print_symbolic(type, \
#undef TRACE_SYSTEM #undef TRACE_SYSTEM
#define TRACE_SYSTEM hfi1_rx #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, TRACE_EVENT(hfi1_rcvhdr,
TP_PROTO(struct hfi1_devdata *dd, TP_PROTO(struct hfi1_devdata *dd,
u32 ctxt, u32 ctxt,
......
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