IB/hfi1: Separate input/output header tracing

Calls to trace incoming packets will now receive the packet
context as parameter. This enables trace support for future
packet types.

Header trace output is in the format <field>:<value>
which makes parsing easier.

input_ibhdr trace before change:
<idle>-0     [001] d.h.  5904.250925: input_ibhdr: [0000:05:00.0] vl 0
lver 0 sl 0 lnh 2,LRH_BTH dlid 0002 len 18 slid 0001 op
0x64,UD_SEND_ONLY se 0 m 0 pad 0 tver 0 pkey 0xffff f 0 b 0 qpn 0x000001
a 0 psn 0x000001b2 deth qkey 0x80010000 sqpn 0x000001

input_ibhdr trace after change:
<idle>-0     [001] d.h.  6655.714488: input_ibhdr: [0000:05:00.0] (IB)
len:124 sc:0 dlid:0x0001 slid:0x0002 lnh:2,LRH_BTH lver:0 sl:0  age:0
becn:0 fecn:0 l4:0 rc:0 entropy:0 op:0x64,UD_SEND_ONLY se:0 m:0 pad:0
tver:0 pkey:0x7fff f:0 b:0 qpn:0x000001 a:0 psn:0x00000036 hlen:8 deth
qkey:0x80010000 sqpn:0x000001

Reviewed-by: Dasaratharaman Chandramouli <dasaratharaman.chandramouli@intel.com>
Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Don Hiatt <don.hiatt@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
This commit is contained in:
Don Hiatt 2017-05-12 09:20:08 -07:00 committed by Doug Ledford
parent 7dafbab375
commit 228d2af1b7
6 changed files with 280 additions and 170 deletions

View File

@ -2086,53 +2086,4 @@ int hfi1_tempsense_rd(struct hfi1_devdata *dd, struct hfi1_temp *temp);
#define DD_DEV_ENTRY(dd) __string(dev, dev_name(&(dd)->pcidev->dev)) #define DD_DEV_ENTRY(dd) __string(dev, dev_name(&(dd)->pcidev->dev))
#define DD_DEV_ASSIGN(dd) __assign_str(dev, dev_name(&(dd)->pcidev->dev)) #define DD_DEV_ASSIGN(dd) __assign_str(dev, dev_name(&(dd)->pcidev->dev))
#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))
#define ib_opcode_name(opcode) { IB_OPCODE_##opcode, #opcode }
#define show_ib_opcode(opcode) \
__print_symbolic(opcode, \
ib_opcode_name(RC_SEND_FIRST), \
ib_opcode_name(RC_SEND_MIDDLE), \
ib_opcode_name(RC_SEND_LAST), \
ib_opcode_name(RC_SEND_LAST_WITH_IMMEDIATE), \
ib_opcode_name(RC_SEND_ONLY), \
ib_opcode_name(RC_SEND_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(RC_RDMA_WRITE_FIRST), \
ib_opcode_name(RC_RDMA_WRITE_MIDDLE), \
ib_opcode_name(RC_RDMA_WRITE_LAST), \
ib_opcode_name(RC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \
ib_opcode_name(RC_RDMA_WRITE_ONLY), \
ib_opcode_name(RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(RC_RDMA_READ_REQUEST), \
ib_opcode_name(RC_RDMA_READ_RESPONSE_FIRST), \
ib_opcode_name(RC_RDMA_READ_RESPONSE_MIDDLE), \
ib_opcode_name(RC_RDMA_READ_RESPONSE_LAST), \
ib_opcode_name(RC_RDMA_READ_RESPONSE_ONLY), \
ib_opcode_name(RC_ACKNOWLEDGE), \
ib_opcode_name(RC_ATOMIC_ACKNOWLEDGE), \
ib_opcode_name(RC_COMPARE_SWAP), \
ib_opcode_name(RC_FETCH_ADD), \
ib_opcode_name(UC_SEND_FIRST), \
ib_opcode_name(UC_SEND_MIDDLE), \
ib_opcode_name(UC_SEND_LAST), \
ib_opcode_name(UC_SEND_LAST_WITH_IMMEDIATE), \
ib_opcode_name(UC_SEND_ONLY), \
ib_opcode_name(UC_SEND_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(UC_RDMA_WRITE_FIRST), \
ib_opcode_name(UC_RDMA_WRITE_MIDDLE), \
ib_opcode_name(UC_RDMA_WRITE_LAST), \
ib_opcode_name(UC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \
ib_opcode_name(UC_RDMA_WRITE_ONLY), \
ib_opcode_name(UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(UD_SEND_ONLY), \
ib_opcode_name(UD_SEND_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(CNP))
#endif /* _HFI1_KERNEL_H */ #endif /* _HFI1_KERNEL_H */

View File

@ -798,7 +798,8 @@ void hfi1_send_rc_ack(struct hfi1_ctxtdata *rcd, struct rvt_qp *qp,
goto queue_ack; goto queue_ack;
} }
trace_ack_output_ibhdr(dd_from_ibdev(qp->ibqp.device), &hdr); trace_ack_output_ibhdr(dd_from_ibdev(qp->ibqp.device),
&hdr, ib_is_sc5(sc5));
/* write the pbc and data */ /* write the pbc and data */
ppd->dd->pio_inline_send(ppd->dd, pbuf, pbc, &hdr, hwords); ppd->dd->pio_inline_send(ppd->dd, pbuf, pbc, &hdr, hwords);

View File

@ -47,7 +47,7 @@
#define CREATE_TRACE_POINTS #define CREATE_TRACE_POINTS
#include "trace.h" #include "trace.h"
u8 ibhdr_exhdr_len(struct ib_header *hdr) u8 hfi1_trace_ib_hdr_len(struct ib_header *hdr)
{ {
struct ib_other_headers *ohdr; struct ib_other_headers *ohdr;
u8 opcode; u8 opcode;
@ -61,13 +61,18 @@ u8 ibhdr_exhdr_len(struct ib_header *hdr)
0 : hdr_len_by_opcode[opcode] - (12 + 8); 0 : hdr_len_by_opcode[opcode] - (12 + 8);
} }
#define IMM_PRN "imm %d" const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet)
#define RETH_PRN "reth vaddr 0x%.16llx rkey 0x%.8x dlen 0x%.8x" {
#define AETH_PRN "aeth syn 0x%.2x %s msn 0x%.8x" return "IB";
#define DETH_PRN "deth qkey 0x%.8x sqpn 0x%.6x" }
#define IETH_PRN "ieth rkey 0x%.8x"
#define ATOMICACKETH_PRN "origdata %llx" #define IMM_PRN "imm:%d"
#define ATOMICETH_PRN "vaddr 0x%llx rkey 0x%.8x sdata %llx cdata %llx" #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 DETH_PRN "deth qkey:0x%.8x sqpn:0x%.6x"
#define IETH_PRN "ieth rkey:0x%.8x"
#define ATOMICACKETH_PRN "origdata:%llx"
#define ATOMICETH_PRN "vaddr:0x%llx rkey:0x%.8x sdata:%llx cdata:%llx"
#define OP(transport, op) IB_OPCODE_## transport ## _ ## op #define OP(transport, op) IB_OPCODE_## transport ## _ ## op
@ -84,6 +89,43 @@ static const char *parse_syndrome(u8 syndrome)
return ""; return "";
} }
void hfi1_trace_parse_bth(struct ib_other_headers *ohdr,
u8 *ack, u8 *becn, u8 *fecn, u8 *mig,
u8 *se, u8 *pad, u8 *opcode, u8 *tver,
u16 *pkey, u32 *psn, u32 *qpn)
{
*ack = ib_bth_get_ackreq(ohdr);
*becn = ib_bth_get_becn(ohdr);
*fecn = ib_bth_get_fecn(ohdr);
*mig = ib_bth_get_migreq(ohdr);
*se = ib_bth_get_se(ohdr);
*pad = ib_bth_get_pad(ohdr);
*opcode = ib_bth_get_opcode(ohdr);
*tver = ib_bth_get_tver(ohdr);
*pkey = ib_bth_get_pkey(ohdr);
*psn = ib_bth_get_psn(ohdr);
*qpn = ib_bth_get_qpn(ohdr);
}
void hfi1_trace_parse_9b_hdr(struct ib_header *hdr, bool sc5,
struct ib_other_headers **ohdr,
u8 *lnh, u8 *lver, u8 *sl, u8 *sc,
u16 *len, u32 *dlid, u32 *slid)
{
*lnh = ib_get_lnh(hdr);
*lver = ib_get_lver(hdr);
*sl = ib_get_sl(hdr);
*sc = ib_get_sc(hdr) | (sc5 << 4);
*len = ib_get_len(hdr);
*dlid = ib_get_dlid(hdr);
*slid = ib_get_slid(hdr);
if (*lnh == HFI1_LRH_BTH)
*ohdr = &hdr->u.oth;
else
*ohdr = &hdr->u.l.oth;
}
const char *parse_everbs_hdrs( const char *parse_everbs_hdrs(
struct trace_seq *p, struct trace_seq *p,
u8 opcode, u8 opcode,

View File

@ -55,8 +55,57 @@
#undef TRACE_SYSTEM #undef TRACE_SYSTEM
#define TRACE_SYSTEM hfi1_ibhdrs #define TRACE_SYSTEM hfi1_ibhdrs
u8 ibhdr_exhdr_len(struct ib_header *hdr); #define ib_opcode_name(opcode) { IB_OPCODE_##opcode, #opcode }
#define show_ib_opcode(opcode) \
__print_symbolic(opcode, \
ib_opcode_name(RC_SEND_FIRST), \
ib_opcode_name(RC_SEND_MIDDLE), \
ib_opcode_name(RC_SEND_LAST), \
ib_opcode_name(RC_SEND_LAST_WITH_IMMEDIATE), \
ib_opcode_name(RC_SEND_ONLY), \
ib_opcode_name(RC_SEND_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(RC_RDMA_WRITE_FIRST), \
ib_opcode_name(RC_RDMA_WRITE_MIDDLE), \
ib_opcode_name(RC_RDMA_WRITE_LAST), \
ib_opcode_name(RC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \
ib_opcode_name(RC_RDMA_WRITE_ONLY), \
ib_opcode_name(RC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(RC_RDMA_READ_REQUEST), \
ib_opcode_name(RC_RDMA_READ_RESPONSE_FIRST), \
ib_opcode_name(RC_RDMA_READ_RESPONSE_MIDDLE), \
ib_opcode_name(RC_RDMA_READ_RESPONSE_LAST), \
ib_opcode_name(RC_RDMA_READ_RESPONSE_ONLY), \
ib_opcode_name(RC_ACKNOWLEDGE), \
ib_opcode_name(RC_ATOMIC_ACKNOWLEDGE), \
ib_opcode_name(RC_COMPARE_SWAP), \
ib_opcode_name(RC_FETCH_ADD), \
ib_opcode_name(UC_SEND_FIRST), \
ib_opcode_name(UC_SEND_MIDDLE), \
ib_opcode_name(UC_SEND_LAST), \
ib_opcode_name(UC_SEND_LAST_WITH_IMMEDIATE), \
ib_opcode_name(UC_SEND_ONLY), \
ib_opcode_name(UC_SEND_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(UC_RDMA_WRITE_FIRST), \
ib_opcode_name(UC_RDMA_WRITE_MIDDLE), \
ib_opcode_name(UC_RDMA_WRITE_LAST), \
ib_opcode_name(UC_RDMA_WRITE_LAST_WITH_IMMEDIATE), \
ib_opcode_name(UC_RDMA_WRITE_ONLY), \
ib_opcode_name(UC_RDMA_WRITE_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(UD_SEND_ONLY), \
ib_opcode_name(UD_SEND_ONLY_WITH_IMMEDIATE), \
ib_opcode_name(CNP))
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_ib_hdr_len(struct ib_header *hdr);
const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet);
void hfi1_trace_parse_bth(struct ib_other_headers *ohdr,
u8 *ack, u8 *becn, u8 *fecn, u8 *mig,
u8 *se, u8 *pad, u8 *opcode, u8 *tver,
u16 *pkey, u32 *psn, u32 *qpn);
void hfi1_trace_parse_9b_hdr(struct ib_header *hdr, bool sc5,
struct ib_other_headers **ohdr,
u8 *lnh, u8 *lver, u8 *sl, u8 *sc,
u16 *len, u32 *dlid, u32 *slid);
#define __parse_ib_ehdrs(op, ehdrs) parse_everbs_hdrs(p, op, ehdrs) #define __parse_ib_ehdrs(op, ehdrs) parse_everbs_hdrs(p, op, ehdrs)
@ -66,139 +115,198 @@ __print_symbolic(lrh, \
lrh_name(LRH_BTH), \ lrh_name(LRH_BTH), \
lrh_name(LRH_GRH)) lrh_name(LRH_GRH))
#define LRH_PRN "vl %d lver %d sl %d lnh %d,%s dlid %.4x len %d slid %.4x" #define LRH_PRN "len:%d sc:%d dlid:0x%.4x slid:0x%.4x"
#define LRH_9B_PRN "lnh:%d,%s lver:%d sl:%d "
#define BTH_PRN \ #define BTH_PRN \
"op 0x%.2x,%s se %d m %d pad %d tver %d pkey 0x%.4x " \ "op:0x%.2x,%s se:%d m:%d pad:%d tver:%d pkey:0x%.4x " \
"f %d b %d qpn 0x%.6x a %d psn 0x%.8x" "f:%d b:%d qpn:0x%.6x a:%d psn:0x%.8x"
#define EHDR_PRN "%s" #define EHDR_PRN "hlen:%d %s"
DECLARE_EVENT_CLASS(hfi1_ibhdr_template, DECLARE_EVENT_CLASS(hfi1_input_ibhdr_template,
TP_PROTO(struct hfi1_devdata *dd, TP_PROTO(struct hfi1_devdata *dd,
struct ib_header *hdr), struct hfi1_packet *packet,
TP_ARGS(dd, hdr), bool sc5),
TP_ARGS(dd, packet, sc5),
TP_STRUCT__entry( TP_STRUCT__entry(
DD_DEV_ENTRY(dd) DD_DEV_ENTRY(dd)
/* LRH */ __field(u8, lnh)
__field(u8, vl)
__field(u8, lver) __field(u8, lver)
__field(u8, sl) __field(u8, sl)
__field(u8, lnh)
__field(u16, dlid)
__field(u16, len) __field(u16, len)
__field(u16, slid) __field(u32, dlid)
/* BTH */ __field(u8, sc)
__field(u32, slid)
__field(u8, opcode) __field(u8, opcode)
__field(u8, se) __field(u8, se)
__field(u8, m) __field(u8, mig)
__field(u8, pad) __field(u8, pad)
__field(u8, tver) __field(u8, tver)
__field(u16, pkey) __field(u16, pkey)
__field(u8, f) __field(u8, fecn)
__field(u8, b) __field(u8, becn)
__field(u32, qpn) __field(u32, qpn)
__field(u8, a) __field(u8, ack)
__field(u32, psn) __field(u32, psn)
/* extended headers */ /* extended headers */
__dynamic_array(u8, ehdrs, ibhdr_exhdr_len(hdr)) __dynamic_array(u8, ehdrs,
hfi1_trace_ib_hdr_len(packet->hdr))
), ),
TP_fast_assign( TP_fast_assign(
struct ib_other_headers *ohdr;
DD_DEV_ASSIGN(dd);
hfi1_trace_parse_9b_hdr(packet->hdr, sc5,
&ohdr,
&__entry->lnh,
&__entry->lver,
&__entry->sl,
&__entry->sc,
&__entry->len,
&__entry->dlid,
&__entry->slid);
hfi1_trace_parse_bth(ohdr, &__entry->ack,
&__entry->becn, &__entry->fecn,
&__entry->mig, &__entry->se,
&__entry->pad, &__entry->opcode,
&__entry->tver, &__entry->pkey,
&__entry->psn, &__entry->qpn);
/* extended headers */
memcpy(__get_dynamic_array(ehdrs), &ohdr->u,
__get_dynamic_array_len(ehdrs));
),
TP_printk("[%s] (IB) " LRH_PRN " " LRH_9B_PRN " "
BTH_PRN " " EHDR_PRN,
__get_str(dev),
__entry->len,
__entry->sc,
__entry->dlid,
__entry->slid,
__entry->lnh, show_lnh(__entry->lnh),
__entry->lver,
__entry->sl,
/* BTH */
__entry->opcode, show_ib_opcode(__entry->opcode),
__entry->se,
__entry->mig,
__entry->pad,
__entry->tver,
__entry->pkey,
__entry->fecn,
__entry->becn,
__entry->qpn,
__entry->ack,
__entry->psn,
/* extended headers */
__get_dynamic_array_len(ehdrs),
__parse_ib_ehdrs(
__entry->opcode,
(void *)__get_dynamic_array(ehdrs))
)
);
DEFINE_EVENT(hfi1_input_ibhdr_template, input_ibhdr,
TP_PROTO(struct hfi1_devdata *dd,
struct hfi1_packet *packet, bool sc5),
TP_ARGS(dd, packet, sc5));
DECLARE_EVENT_CLASS(hfi1_output_ibhdr_template,
TP_PROTO(struct hfi1_devdata *dd,
struct ib_header *hdr,
bool sc5),
TP_ARGS(dd, hdr, sc5),
TP_STRUCT__entry(
DD_DEV_ENTRY(dd)
__field(u8, lnh)
__field(u8, lver)
__field(u8, sl)
__field(u16, len)
__field(u32, dlid)
__field(u8, sc)
__field(u32, slid)
__field(u8, opcode)
__field(u8, se)
__field(u8, mig)
__field(u8, pad)
__field(u8, tver)
__field(u16, pkey)
__field(u8, fecn)
__field(u8, becn)
__field(u32, qpn)
__field(u8, ack)
__field(u32, psn)
/* extended headers */
__dynamic_array(u8, ehdrs,
hfi1_trace_ib_hdr_len(hdr))
),
TP_fast_assign(
struct ib_other_headers *ohdr; struct ib_other_headers *ohdr;
DD_DEV_ASSIGN(dd); DD_DEV_ASSIGN(dd);
/* LRH */
__entry->vl = hfi1_trace_parse_9b_hdr(hdr, sc5,
(u8)(be16_to_cpu(hdr->lrh[0]) >> 12); &ohdr, &__entry->lnh,
__entry->lver = &__entry->lver, &__entry->sl,
(u8)(be16_to_cpu(hdr->lrh[0]) >> 8) & 0xf; &__entry->sc, &__entry->len,
__entry->sl = &__entry->dlid, &__entry->slid);
(u8)(be16_to_cpu(hdr->lrh[0]) >> 4) & 0xf;
__entry->lnh = hfi1_trace_parse_bth(ohdr, &__entry->ack,
(u8)(be16_to_cpu(hdr->lrh[0]) & 3); &__entry->becn, &__entry->fecn,
__entry->dlid = &__entry->mig, &__entry->se,
be16_to_cpu(hdr->lrh[1]); &__entry->pad, &__entry->opcode,
/* allow for larger len */ &__entry->tver, &__entry->pkey,
__entry->len = &__entry->psn, &__entry->qpn);
be16_to_cpu(hdr->lrh[2]);
__entry->slid =
be16_to_cpu(hdr->lrh[3]);
/* BTH */
if (__entry->lnh == HFI1_LRH_BTH)
ohdr = &hdr->u.oth;
else
ohdr = &hdr->u.l.oth;
__entry->opcode =
(be32_to_cpu(ohdr->bth[0]) >> 24) & 0xff;
__entry->se =
(be32_to_cpu(ohdr->bth[0]) >> 23) & 1;
__entry->m =
(be32_to_cpu(ohdr->bth[0]) >> 22) & 1;
__entry->pad =
(be32_to_cpu(ohdr->bth[0]) >> 20) & 3;
__entry->tver =
(be32_to_cpu(ohdr->bth[0]) >> 16) & 0xf;
__entry->pkey =
be32_to_cpu(ohdr->bth[0]) & 0xffff;
__entry->f =
(be32_to_cpu(ohdr->bth[1]) >> IB_FECN_SHIFT) &
IB_FECN_MASK;
__entry->b =
(be32_to_cpu(ohdr->bth[1]) >> IB_BECN_SHIFT) &
IB_BECN_MASK;
__entry->qpn =
be32_to_cpu(ohdr->bth[1]) & RVT_QPN_MASK;
__entry->a =
(be32_to_cpu(ohdr->bth[2]) >> 31) & 1;
/* allow for larger PSN */
__entry->psn =
be32_to_cpu(ohdr->bth[2]) & 0x7fffffff;
/* extended headers */ /* extended headers */
memcpy(__get_dynamic_array(ehdrs), &ohdr->u, memcpy(__get_dynamic_array(ehdrs),
ibhdr_exhdr_len(hdr)); &ohdr->u, __get_dynamic_array_len(ehdrs));
), ),
TP_printk("[%s] " LRH_PRN " " BTH_PRN " " EHDR_PRN, TP_printk("[%s] (IB) " LRH_PRN " " LRH_9B_PRN " "
__get_str(dev), BTH_PRN " " EHDR_PRN,
/* LRH */ __get_str(dev),
__entry->vl, __entry->len,
__entry->lver, __entry->sc,
__entry->sl, __entry->dlid,
__entry->lnh, show_lnh(__entry->lnh), __entry->slid,
__entry->dlid, __entry->lnh, show_lnh(__entry->lnh),
__entry->len, __entry->lver,
__entry->slid, __entry->sl,
/* BTH */ /* BTH */
__entry->opcode, show_ib_opcode(__entry->opcode), __entry->opcode, show_ib_opcode(__entry->opcode),
__entry->se, __entry->se,
__entry->m, __entry->mig,
__entry->pad, __entry->pad,
__entry->tver, __entry->tver,
__entry->pkey, __entry->pkey,
__entry->f, __entry->fecn,
__entry->b, __entry->becn,
__entry->qpn, __entry->qpn,
__entry->a, __entry->ack,
__entry->psn, __entry->psn,
/* extended headers */ /* extended headers */
__parse_ib_ehdrs( __get_dynamic_array_len(ehdrs),
__entry->opcode, __parse_ib_ehdrs(
(void *)__get_dynamic_array(ehdrs)) __entry->opcode,
) (void *)__get_dynamic_array(ehdrs))
)
); );
DEFINE_EVENT(hfi1_ibhdr_template, input_ibhdr, DEFINE_EVENT(hfi1_output_ibhdr_template, pio_output_ibhdr,
TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr), TP_PROTO(struct hfi1_devdata *dd,
TP_ARGS(dd, hdr)); struct ib_header *hdr, bool sc5),
TP_ARGS(dd, hdr, sc5));
DEFINE_EVENT(hfi1_ibhdr_template, pio_output_ibhdr, DEFINE_EVENT(hfi1_output_ibhdr_template, ack_output_ibhdr,
TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr), TP_PROTO(struct hfi1_devdata *dd,
TP_ARGS(dd, hdr)); struct ib_header *hdr, bool sc5),
TP_ARGS(dd, hdr, sc5));
DEFINE_EVENT(hfi1_ibhdr_template, ack_output_ibhdr, DEFINE_EVENT(hfi1_output_ibhdr_template, sdma_output_ibhdr,
TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr), TP_PROTO(struct hfi1_devdata *dd,
TP_ARGS(dd, hdr)); struct ib_header *hdr, bool sc5),
TP_ARGS(dd, hdr, sc5));
DEFINE_EVENT(hfi1_ibhdr_template, sdma_output_ibhdr,
TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr),
TP_ARGS(dd, hdr));
#endif /* __HFI1_TRACE_IBHDRS_H */ #endif /* __HFI1_TRACE_IBHDRS_H */

View File

@ -55,6 +55,15 @@
#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,

View File

@ -589,8 +589,7 @@ void hfi1_ib_rcv(struct hfi1_packet *packet)
goto drop; goto drop;
} }
trace_input_ibhdr(rcd->dd, hdr); trace_input_ibhdr(rcd->dd, packet, !!(packet->rhf & RHF_DC_INFO_SMASK));
opcode = ib_bth_get_opcode(packet->ohdr); opcode = ib_bth_get_opcode(packet->ohdr);
inc_opstats(tlen, &rcd->opstats->stats[opcode]); inc_opstats(tlen, &rcd->opstats->stats[opcode]);
@ -885,7 +884,7 @@ int hfi1_verbs_send_dma(struct rvt_qp *qp, struct hfi1_pkt_state *ps,
return ret; return ret;
} }
trace_sdma_output_ibhdr(dd_from_ibdev(qp->ibqp.device), trace_sdma_output_ibhdr(dd_from_ibdev(qp->ibqp.device),
&ps->s_txreq->phdr.hdr); &ps->s_txreq->phdr.hdr, ib_is_sc5(sc5));
return ret; return ret;
bail_ecomm: bail_ecomm:
@ -1058,7 +1057,7 @@ int hfi1_verbs_send_pio(struct rvt_qp *qp, struct hfi1_pkt_state *ps,
} }
trace_pio_output_ibhdr(dd_from_ibdev(qp->ibqp.device), trace_pio_output_ibhdr(dd_from_ibdev(qp->ibqp.device),
&ps->s_txreq->phdr.hdr); &ps->s_txreq->phdr.hdr, ib_is_sc5(sc5));
pio_bail: pio_bail:
if (qp->s_wqe) { if (qp->s_wqe) {