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