Skip to content

Commit c53f59d

Browse files
committed
Merge branch 'mlxsw-core-Trace-EMAD-errors'
Ido Schimmel says: ==================== mlxsw: core: Trace EMAD errors Nir says: This patchset adds a trace for EMAD errors to the existing EMAD payload traces. This tracepoint is useful to track user or firmware errors during tests execution. Patch #1 defines the devlink tracepoint. Patch #2 uses it for reporting mlxsw EMAD errors. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 8ce5cd5 + d32d02a commit c53f59d

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

drivers/net/ethernet/mellanox/mlxsw/core.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1460,13 +1460,17 @@ static int mlxsw_reg_trans_wait(struct mlxsw_reg_trans *trans)
14601460
if (trans->retries)
14611461
dev_warn(mlxsw_core->bus_info->dev, "EMAD retries (%d/%d) (tid=%llx)\n",
14621462
trans->retries, MLXSW_EMAD_MAX_RETRY, trans->tid);
1463-
if (err)
1463+
if (err) {
14641464
dev_err(mlxsw_core->bus_info->dev, "EMAD reg access failed (tid=%llx,reg_id=%x(%s),type=%s,status=%x(%s))\n",
14651465
trans->tid, trans->reg->id,
14661466
mlxsw_reg_id_str(trans->reg->id),
14671467
mlxsw_core_reg_access_type_str(trans->type),
14681468
trans->emad_status,
14691469
mlxsw_emad_op_tlv_status_str(trans->emad_status));
1470+
trace_devlink_hwerr(priv_to_devlink(mlxsw_core),
1471+
trans->emad_status,
1472+
mlxsw_emad_op_tlv_status_str(trans->emad_status));
1473+
}
14701474

14711475
list_del(&trans->bulk_list);
14721476
kfree_rcu(trans, rcu);

include/trace/events/devlink.h

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,35 @@ TRACE_EVENT(devlink_hwmsg,
4646
(int) __entry->len, __get_dynamic_array(buf), __entry->len)
4747
);
4848

49+
/*
50+
* Tracepoint for devlink hardware error:
51+
*/
52+
TRACE_EVENT(devlink_hwerr,
53+
TP_PROTO(const struct devlink *devlink, int err, const char *msg),
54+
55+
TP_ARGS(devlink, err, msg),
56+
57+
TP_STRUCT__entry(
58+
__string(bus_name, devlink->dev->bus->name)
59+
__string(dev_name, dev_name(devlink->dev))
60+
__string(driver_name, devlink->dev->driver->name)
61+
__field(int, err)
62+
__string(msg, msg)
63+
),
64+
65+
TP_fast_assign(
66+
__assign_str(bus_name, devlink->dev->bus->name);
67+
__assign_str(dev_name, dev_name(devlink->dev));
68+
__assign_str(driver_name, devlink->dev->driver->name);
69+
__entry->err = err;
70+
__assign_str(msg, msg);
71+
),
72+
73+
TP_printk("bus_name=%s dev_name=%s driver_name=%s err=%d %s",
74+
__get_str(bus_name), __get_str(dev_name),
75+
__get_str(driver_name), __entry->err, __get_str(msg))
76+
);
77+
4978
#endif /* _TRACE_DEVLINK_H */
5079

5180
/* This part must be outside protection */
@@ -64,6 +93,10 @@ static inline void trace_devlink_hwmsg(const struct devlink *devlink,
6493
{
6594
}
6695

96+
static inline void trace_devlink_hwerr(const struct devlink *devlink,
97+
int err, const char *msg)
98+
{
99+
}
67100
#endif /* _TRACE_DEVLINK_H */
68101

69102
#endif

net/core/devlink.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ struct devlink_dpipe_header devlink_dpipe_header_ipv6 = {
8181
EXPORT_SYMBOL(devlink_dpipe_header_ipv6);
8282

8383
EXPORT_TRACEPOINT_SYMBOL_GPL(devlink_hwmsg);
84+
EXPORT_TRACEPOINT_SYMBOL_GPL(devlink_hwerr);
8485

8586
static LIST_HEAD(devlink_list);
8687

0 commit comments

Comments
 (0)