mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-20 13:30:32 +07:00
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:
parent
7dafbab375
commit
228d2af1b7
@ -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_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 */
|
||||
|
@ -798,7 +798,8 @@ void hfi1_send_rc_ack(struct hfi1_ctxtdata *rcd, struct rvt_qp *qp,
|
||||
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 */
|
||||
ppd->dd->pio_inline_send(ppd->dd, pbuf, pbc, &hdr, hwords);
|
||||
|
@ -47,7 +47,7 @@
|
||||
#define CREATE_TRACE_POINTS
|
||||
#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;
|
||||
u8 opcode;
|
||||
@ -61,13 +61,18 @@ u8 ibhdr_exhdr_len(struct ib_header *hdr)
|
||||
0 : hdr_len_by_opcode[opcode] - (12 + 8);
|
||||
}
|
||||
|
||||
#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"
|
||||
#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"
|
||||
const char *hfi1_trace_get_packet_str(struct hfi1_packet *packet)
|
||||
{
|
||||
return "IB";
|
||||
}
|
||||
|
||||
#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"
|
||||
#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
|
||||
|
||||
@ -84,6 +89,43 @@ static const char *parse_syndrome(u8 syndrome)
|
||||
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(
|
||||
struct trace_seq *p,
|
||||
u8 opcode,
|
||||
|
@ -55,8 +55,57 @@
|
||||
#undef TRACE_SYSTEM
|
||||
#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);
|
||||
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)
|
||||
|
||||
@ -66,139 +115,198 @@ __print_symbolic(lrh, \
|
||||
lrh_name(LRH_BTH), \
|
||||
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 \
|
||||
"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"
|
||||
#define EHDR_PRN "%s"
|
||||
"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"
|
||||
#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,
|
||||
struct ib_header *hdr),
|
||||
TP_ARGS(dd, hdr),
|
||||
struct hfi1_packet *packet,
|
||||
bool sc5),
|
||||
TP_ARGS(dd, packet, sc5),
|
||||
TP_STRUCT__entry(
|
||||
DD_DEV_ENTRY(dd)
|
||||
/* LRH */
|
||||
__field(u8, vl)
|
||||
__field(u8, lnh)
|
||||
__field(u8, lver)
|
||||
__field(u8, sl)
|
||||
__field(u8, lnh)
|
||||
__field(u16, dlid)
|
||||
__field(u16, len)
|
||||
__field(u16, slid)
|
||||
/* BTH */
|
||||
__field(u32, dlid)
|
||||
__field(u8, sc)
|
||||
__field(u32, slid)
|
||||
__field(u8, opcode)
|
||||
__field(u8, se)
|
||||
__field(u8, m)
|
||||
__field(u8, mig)
|
||||
__field(u8, pad)
|
||||
__field(u8, tver)
|
||||
__field(u16, pkey)
|
||||
__field(u8, f)
|
||||
__field(u8, b)
|
||||
__field(u8, fecn)
|
||||
__field(u8, becn)
|
||||
__field(u32, qpn)
|
||||
__field(u8, a)
|
||||
__field(u8, ack)
|
||||
__field(u32, psn)
|
||||
/* 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;
|
||||
|
||||
DD_DEV_ASSIGN(dd);
|
||||
/* LRH */
|
||||
__entry->vl =
|
||||
(u8)(be16_to_cpu(hdr->lrh[0]) >> 12);
|
||||
__entry->lver =
|
||||
(u8)(be16_to_cpu(hdr->lrh[0]) >> 8) & 0xf;
|
||||
__entry->sl =
|
||||
(u8)(be16_to_cpu(hdr->lrh[0]) >> 4) & 0xf;
|
||||
__entry->lnh =
|
||||
(u8)(be16_to_cpu(hdr->lrh[0]) & 3);
|
||||
__entry->dlid =
|
||||
be16_to_cpu(hdr->lrh[1]);
|
||||
/* allow for larger len */
|
||||
__entry->len =
|
||||
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;
|
||||
|
||||
hfi1_trace_parse_9b_hdr(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,
|
||||
ibhdr_exhdr_len(hdr));
|
||||
),
|
||||
TP_printk("[%s] " LRH_PRN " " BTH_PRN " " EHDR_PRN,
|
||||
__get_str(dev),
|
||||
/* LRH */
|
||||
__entry->vl,
|
||||
__entry->lver,
|
||||
__entry->sl,
|
||||
__entry->lnh, show_lnh(__entry->lnh),
|
||||
__entry->dlid,
|
||||
__entry->len,
|
||||
__entry->slid,
|
||||
/* BTH */
|
||||
__entry->opcode, show_ib_opcode(__entry->opcode),
|
||||
__entry->se,
|
||||
__entry->m,
|
||||
__entry->pad,
|
||||
__entry->tver,
|
||||
__entry->pkey,
|
||||
__entry->f,
|
||||
__entry->b,
|
||||
__entry->qpn,
|
||||
__entry->a,
|
||||
__entry->psn,
|
||||
/* extended headers */
|
||||
__parse_ib_ehdrs(
|
||||
__entry->opcode,
|
||||
(void *)__get_dynamic_array(ehdrs))
|
||||
)
|
||||
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_ibhdr_template, input_ibhdr,
|
||||
TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr),
|
||||
TP_ARGS(dd, hdr));
|
||||
DEFINE_EVENT(hfi1_output_ibhdr_template, pio_output_ibhdr,
|
||||
TP_PROTO(struct hfi1_devdata *dd,
|
||||
struct ib_header *hdr, bool sc5),
|
||||
TP_ARGS(dd, hdr, sc5));
|
||||
|
||||
DEFINE_EVENT(hfi1_ibhdr_template, pio_output_ibhdr,
|
||||
TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr),
|
||||
TP_ARGS(dd, hdr));
|
||||
DEFINE_EVENT(hfi1_output_ibhdr_template, ack_output_ibhdr,
|
||||
TP_PROTO(struct hfi1_devdata *dd,
|
||||
struct ib_header *hdr, bool sc5),
|
||||
TP_ARGS(dd, hdr, sc5));
|
||||
|
||||
DEFINE_EVENT(hfi1_ibhdr_template, ack_output_ibhdr,
|
||||
TP_PROTO(struct hfi1_devdata *dd, struct ib_header *hdr),
|
||||
TP_ARGS(dd, hdr));
|
||||
DEFINE_EVENT(hfi1_output_ibhdr_template, sdma_output_ibhdr,
|
||||
TP_PROTO(struct hfi1_devdata *dd,
|
||||
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 */
|
||||
|
||||
|
@ -55,6 +55,15 @@
|
||||
#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,
|
||||
|
@ -589,8 +589,7 @@ void hfi1_ib_rcv(struct hfi1_packet *packet)
|
||||
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);
|
||||
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;
|
||||
}
|
||||
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;
|
||||
|
||||
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),
|
||||
&ps->s_txreq->phdr.hdr);
|
||||
&ps->s_txreq->phdr.hdr, ib_is_sc5(sc5));
|
||||
|
||||
pio_bail:
|
||||
if (qp->s_wqe) {
|
||||
|
Loading…
Reference in New Issue
Block a user