summaryrefslogtreecommitdiff
path: root/net/core/devlink.c
diff options
context:
space:
mode:
authorVincent Mailhol <mailhol.vincent@wanadoo.fr>2022-11-29 18:51:39 +0900
committerJakub Kicinski <kuba@kernel.org>2022-11-30 21:49:39 -0800
commitc5cd7c86847cda0fdd44956561c0f3d9adea032b (patch)
tree08acd70c5edfbc6b471b6c61c500cb5a67d2e166 /net/core/devlink.c
parent226bf980550627c88549b112ac6c8fb40873afb4 (diff)
downloadlwn-c5cd7c86847cda0fdd44956561c0f3d9adea032b.tar.gz
lwn-c5cd7c86847cda0fdd44956561c0f3d9adea032b.zip
net: devlink: make the devlink_ops::info_get() callback optional
Some drivers only reported the driver name in their devlink_ops::info_get() callback. Now that the core provides this information, the callback became empty. For such drivers, just removing the callback would prevent the core from executing devlink_nl_info_fill() meaning that "devlink dev info" would not return anything. Make the callback function optional by executing devlink_nl_info_fill() even if devlink_ops::info_get() is NULL. N.B.: the drivers with devlink support which previously did not implement devlink_ops::info_get() will now also be able to report the driver name. Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'net/core/devlink.c')
-rw-r--r--net/core/devlink.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 60eb0f46520f..fca3ebee97b0 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -6847,9 +6847,11 @@ devlink_nl_info_fill(struct sk_buff *msg, struct devlink *devlink,
goto err_cancel_msg;
req.msg = msg;
- err = devlink->ops->info_get(devlink, &req, extack);
- if (err)
- goto err_cancel_msg;
+ if (devlink->ops->info_get) {
+ err = devlink->ops->info_get(devlink, &req, extack);
+ if (err)
+ goto err_cancel_msg;
+ }
err = devlink_nl_driver_info_get(dev->driver, &req);
if (err)
@@ -6870,9 +6872,6 @@ static int devlink_nl_cmd_info_get_doit(struct sk_buff *skb,
struct sk_buff *msg;
int err;
- if (!devlink->ops->info_get)
- return -EOPNOTSUPP;
-
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
@@ -6898,7 +6897,7 @@ static int devlink_nl_cmd_info_get_dumpit(struct sk_buff *msg,
int err = 0;
devlinks_xa_for_each_registered_get(sock_net(msg->sk), index, devlink) {
- if (idx < start || !devlink->ops->info_get)
+ if (idx < start)
goto inc;
devl_lock(devlink);