From: Jiri Pirko <[email protected]>

In preparation to dev-less devlinks, add devlink_dev_driver_name()
that safely returns the driver name or NULL, and use it in all trace
events. The trace __string() macro handles NULL via __string_src(),
recording "(null)".

Signed-off-by: Jiri Pirko <[email protected]>
---
v1->v2:
- added missing symbol export
---
 include/net/devlink.h          |  1 +
 include/trace/events/devlink.h | 12 ++++++------
 net/devlink/core.c             |  8 ++++++++
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/include/net/devlink.h b/include/net/devlink.h
index 0afb0958b910..45dec7067a8e 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -1613,6 +1613,7 @@ struct devlink *priv_to_devlink(void *priv);
 struct device *devlink_to_dev(const struct devlink *devlink);
 const char *devlink_bus_name(const struct devlink *devlink);
 const char *devlink_dev_name(const struct devlink *devlink);
+const char *devlink_dev_driver_name(const struct devlink *devlink);
 
 /* Devlink instance explicit locking */
 void devl_lock(struct devlink *devlink);
diff --git a/include/trace/events/devlink.h b/include/trace/events/devlink.h
index 32304ce9ad15..4f8edf77dfbe 100644
--- a/include/trace/events/devlink.h
+++ b/include/trace/events/devlink.h
@@ -23,7 +23,7 @@ TRACE_EVENT(devlink_hwmsg,
        TP_STRUCT__entry(
                __string(bus_name, devlink_bus_name(devlink))
                __string(dev_name, devlink_dev_name(devlink))
-               __string(driver_name, devlink_to_dev(devlink)->driver->name)
+               __string(driver_name, devlink_dev_driver_name(devlink))
                __field(bool, incoming)
                __field(unsigned long, type)
                __dynamic_array(u8, buf, len)
@@ -57,7 +57,7 @@ TRACE_EVENT(devlink_hwerr,
        TP_STRUCT__entry(
                __string(bus_name, devlink_bus_name(devlink))
                __string(dev_name, devlink_dev_name(devlink))
-               __string(driver_name, devlink_to_dev(devlink)->driver->name)
+               __string(driver_name, devlink_dev_driver_name(devlink))
                __field(int, err)
                __string(msg, msg)
                ),
@@ -87,7 +87,7 @@ TRACE_EVENT(devlink_health_report,
        TP_STRUCT__entry(
                __string(bus_name, devlink_bus_name(devlink))
                __string(dev_name, devlink_dev_name(devlink))
-               __string(driver_name, devlink_to_dev(devlink)->driver->name)
+               __string(driver_name, devlink_dev_driver_name(devlink))
                __string(reporter_name, reporter_name)
                __string(msg, msg)
        ),
@@ -118,7 +118,7 @@ TRACE_EVENT(devlink_health_recover_aborted,
        TP_STRUCT__entry(
                __string(bus_name, devlink_bus_name(devlink))
                __string(dev_name, devlink_dev_name(devlink))
-               __string(driver_name, devlink_to_dev(devlink)->driver->name)
+               __string(driver_name, devlink_dev_driver_name(devlink))
                __string(reporter_name, reporter_name)
                __field(bool, health_state)
                __field(u64, time_since_last_recover)
@@ -152,7 +152,7 @@ TRACE_EVENT(devlink_health_reporter_state_update,
        TP_STRUCT__entry(
                __string(bus_name, devlink_bus_name(devlink))
                __string(dev_name, devlink_dev_name(devlink))
-               __string(driver_name, devlink_to_dev(devlink)->driver->name)
+               __string(driver_name, devlink_dev_driver_name(devlink))
                __string(reporter_name, reporter_name)
                __field(u8, new_state)
        ),
@@ -183,7 +183,7 @@ TRACE_EVENT(devlink_trap_report,
        TP_STRUCT__entry(
                __string(bus_name, devlink_bus_name(devlink))
                __string(dev_name, devlink_dev_name(devlink))
-               __string(driver_name, devlink_to_dev(devlink)->driver->name)
+               __string(driver_name, devlink_dev_driver_name(devlink))
                __string(trap_name, metadata->trap_name)
                __string(trap_group_name, metadata->trap_group_name)
                __array(char, input_dev_name, IFNAMSIZ)
diff --git a/net/devlink/core.c b/net/devlink/core.c
index 2dd6d45bec18..85ea5856d523 100644
--- a/net/devlink/core.c
+++ b/net/devlink/core.c
@@ -260,6 +260,14 @@ const char *devlink_dev_name(const struct devlink *devlink)
 }
 EXPORT_SYMBOL_GPL(devlink_dev_name);
 
+const char *devlink_dev_driver_name(const struct devlink *devlink)
+{
+       struct device *dev = devlink->dev;
+
+       return dev ? dev->driver->name : NULL;
+}
+EXPORT_SYMBOL_GPL(devlink_dev_driver_name);
+
 struct net *devlink_net(const struct devlink *devlink)
 {
        return read_pnet(&devlink->_net);
-- 
2.51.1


Reply via email to