Skip to content

Commit

Permalink
IB/MAD: Add SMP details to MAD tracing
Browse files Browse the repository at this point in the history
Decode more information from the packet and include it in the trace.

Reviewed-by: "Ruhl, Michael J" <[email protected]>
Signed-off-by: Ira Weiny <[email protected]>
Signed-off-by: Jason Gunthorpe <[email protected]>
  • Loading branch information
weiny2 authored and jgunthorpe committed Mar 27, 2019
1 parent 0565331 commit 2ccfbb7
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 0 deletions.
8 changes: 8 additions & 0 deletions drivers/infiniband/core/mad.c
Original file line number Diff line number Diff line change
Expand Up @@ -841,6 +841,8 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
if (opa && smp->class_version == OPA_SM_CLASS_VERSION) {
u32 opa_drslid;

trace_ib_mad_handle_out_opa_smi(opa_smp);

if ((opa_get_smp_direction(opa_smp)
? opa_smp->route.dr.dr_dlid : opa_smp->route.dr.dr_slid) ==
OPA_LID_PERMISSIVE &&
Expand All @@ -866,6 +868,8 @@ static int handle_outgoing_dr_smp(struct ib_mad_agent_private *mad_agent_priv,
opa_smi_check_local_returning_smp(opa_smp, device) == IB_SMI_DISCARD)
goto out;
} else {
trace_ib_mad_handle_out_ib_smi(smp);

if ((ib_get_smp_direction(smp) ? smp->dr_dlid : smp->dr_slid) ==
IB_LID_PERMISSIVE &&
smi_handle_dr_smp_send(smp, rdma_cap_ib_switch(device), port_num) ==
Expand Down Expand Up @@ -2098,6 +2102,8 @@ static enum smi_action handle_ib_smi(const struct ib_mad_port_private *port_priv
enum smi_forward_action retsmi;
struct ib_smp *smp = (struct ib_smp *)recv->mad;

trace_ib_mad_handle_ib_smi(smp);

if (smi_handle_dr_smp_recv(smp,
rdma_cap_ib_switch(port_priv->device),
port_num,
Expand Down Expand Up @@ -2183,6 +2189,8 @@ handle_opa_smi(struct ib_mad_port_private *port_priv,
enum smi_forward_action retsmi;
struct opa_smp *smp = (struct opa_smp *)recv->mad;

trace_ib_mad_handle_opa_smi(smp);

if (opa_smi_handle_dr_smp_recv(smp,
rdma_cap_ib_switch(port_priv->device),
port_num,
Expand Down
90 changes: 90 additions & 0 deletions include/trace/events/ib_mad.h
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,96 @@ DEFINE_EVENT(ib_mad_agent_template, ib_mad_unregister_agent,
TP_ARGS(agent));



DECLARE_EVENT_CLASS(ib_mad_opa_smi_template,
TP_PROTO(struct opa_smp *smp),
TP_ARGS(smp),

TP_STRUCT__entry(
__field(u64, mkey)
__field(u32, dr_slid)
__field(u32, dr_dlid)
__field(u8, hop_ptr)
__field(u8, hop_cnt)
__array(u8, initial_path, OPA_SMP_MAX_PATH_HOPS)
__array(u8, return_path, OPA_SMP_MAX_PATH_HOPS)
),

TP_fast_assign(
__entry->hop_ptr = smp->hop_ptr;
__entry->hop_cnt = smp->hop_cnt;
__entry->mkey = smp->mkey;
__entry->dr_slid = smp->route.dr.dr_slid;
__entry->dr_dlid = smp->route.dr.dr_dlid;
memcpy(__entry->initial_path, smp->route.dr.initial_path,
OPA_SMP_MAX_PATH_HOPS);
memcpy(__entry->return_path, smp->route.dr.return_path,
OPA_SMP_MAX_PATH_HOPS);
),

TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
"mkey 0x%016llx dr_slid 0x%08x dr_dlid 0x%08x " \
"initial_path %*ph return_path %*ph ",
__entry->hop_ptr, __entry->hop_cnt,
be64_to_cpu(__entry->mkey), be32_to_cpu(__entry->dr_slid),
be32_to_cpu(__entry->dr_dlid),
OPA_SMP_MAX_PATH_HOPS, __entry->initial_path,
OPA_SMP_MAX_PATH_HOPS, __entry->return_path
)
);

DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_opa_smi,
TP_PROTO(struct opa_smp *smp),
TP_ARGS(smp));
DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_out_opa_smi,
TP_PROTO(struct opa_smp *smp),
TP_ARGS(smp));


DECLARE_EVENT_CLASS(ib_mad_opa_ib_template,
TP_PROTO(struct ib_smp *smp),
TP_ARGS(smp),

TP_STRUCT__entry(
__field(u64, mkey)
__field(u32, dr_slid)
__field(u32, dr_dlid)
__field(u8, hop_ptr)
__field(u8, hop_cnt)
__array(u8, initial_path, IB_SMP_MAX_PATH_HOPS)
__array(u8, return_path, IB_SMP_MAX_PATH_HOPS)
),

TP_fast_assign(
__entry->hop_ptr = smp->hop_ptr;
__entry->hop_cnt = smp->hop_cnt;
__entry->mkey = smp->mkey;
__entry->dr_slid = smp->dr_slid;
__entry->dr_dlid = smp->dr_dlid;
memcpy(__entry->initial_path, smp->initial_path,
IB_SMP_MAX_PATH_HOPS);
memcpy(__entry->return_path, smp->return_path,
IB_SMP_MAX_PATH_HOPS);
),

TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
"mkey 0x%016llx dr_slid 0x%04x dr_dlid 0x%04x " \
"initial_path %*ph return_path %*ph ",
__entry->hop_ptr, __entry->hop_cnt,
be64_to_cpu(__entry->mkey), be16_to_cpu(__entry->dr_slid),
be16_to_cpu(__entry->dr_dlid),
IB_SMP_MAX_PATH_HOPS, __entry->initial_path,
IB_SMP_MAX_PATH_HOPS, __entry->return_path
)
);

DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_ib_smi,
TP_PROTO(struct ib_smp *smp),
TP_ARGS(smp));
DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_out_ib_smi,
TP_PROTO(struct ib_smp *smp),
TP_ARGS(smp));

#endif /* _TRACE_IB_MAD_H */

#include <trace/define_trace.h>

0 comments on commit 2ccfbb7

Please sign in to comment.