devlink: add hardware errors tracing facility
authorNir Dotan <nird@mellanox.com>
Mon, 4 Feb 2019 18:47:45 +0000 (18:47 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 6 Feb 2019 19:05:57 +0000 (11:05 -0800)
Define a tracepoint and allow user to trace messages in case of an hardware
error code for hardware associated with devlink instance.

Signed-off-by: Nir Dotan <nird@mellanox.com>
Acked-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/trace/events/devlink.h
net/core/devlink.c

index 44acfbca12661d817a26ed6b2955ccdbbc60a9bf..40705364a50fd6d91e6987259db4a3a9121bd357 100644 (file)
@@ -46,6 +46,35 @@ TRACE_EVENT(devlink_hwmsg,
                  (int) __entry->len, __get_dynamic_array(buf), __entry->len)
 );
 
+/*
+ * Tracepoint for devlink hardware error:
+ */
+TRACE_EVENT(devlink_hwerr,
+       TP_PROTO(const struct devlink *devlink, int err, const char *msg),
+
+       TP_ARGS(devlink, err, msg),
+
+       TP_STRUCT__entry(
+               __string(bus_name, devlink->dev->bus->name)
+               __string(dev_name, dev_name(devlink->dev))
+               __string(driver_name, devlink->dev->driver->name)
+               __field(int, err)
+               __string(msg, msg)
+               ),
+
+       TP_fast_assign(
+               __assign_str(bus_name, devlink->dev->bus->name);
+               __assign_str(dev_name, dev_name(devlink->dev));
+               __assign_str(driver_name, devlink->dev->driver->name);
+               __entry->err = err;
+               __assign_str(msg, msg);
+               ),
+
+       TP_printk("bus_name=%s dev_name=%s driver_name=%s err=%d %s",
+                       __get_str(bus_name), __get_str(dev_name),
+                       __get_str(driver_name), __entry->err, __get_str(msg))
+);
+
 #endif /* _TRACE_DEVLINK_H */
 
 /* This part must be outside protection */
@@ -64,6 +93,10 @@ static inline void trace_devlink_hwmsg(const struct devlink *devlink,
 {
 }
 
+static inline void trace_devlink_hwerr(const struct devlink *devlink,
+                                      int err, const char *msg)
+{
+}
 #endif /* _TRACE_DEVLINK_H */
 
 #endif
index 52bf27491fb8b0928f7d4aa3a27f8b33f2561386..cd0d393bc62d89694c99625459607ea040546687 100644 (file)
@@ -81,6 +81,7 @@ struct devlink_dpipe_header devlink_dpipe_header_ipv6 = {
 EXPORT_SYMBOL(devlink_dpipe_header_ipv6);
 
 EXPORT_TRACEPOINT_SYMBOL_GPL(devlink_hwmsg);
+EXPORT_TRACEPOINT_SYMBOL_GPL(devlink_hwerr);
 
 static LIST_HEAD(devlink_list);