-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
devlink: Split out dev get and dump code
Move devlink dev get and dump callbacks and related dev code to new file dev.c. This file shall include all callbacks that are specific on devlink dev object. No functional change in this patch. Signed-off-by: Moshe Shemesh <moshe@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
- Loading branch information
Moshe Shemesh
authored and
Jakub Kicinski
committed
Feb 4, 2023
1 parent
d795527
commit dbeeca8
Showing
4 changed files
with
118 additions
and
102 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
# SPDX-License-Identifier: GPL-2.0 | ||
|
||
obj-y := leftover.o core.o netlink.o | ||
obj-y := leftover.o core.o netlink.o dev.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
// SPDX-License-Identifier: GPL-2.0-or-later | ||
/* | ||
* Copyright (c) 2016 Mellanox Technologies. All rights reserved. | ||
* Copyright (c) 2016 Jiri Pirko <jiri@mellanox.com> | ||
*/ | ||
|
||
#include <net/genetlink.h> | ||
#include "devl_internal.h" | ||
|
||
static int devlink_nl_fill(struct sk_buff *msg, struct devlink *devlink, | ||
enum devlink_command cmd, u32 portid, | ||
u32 seq, int flags) | ||
{ | ||
struct nlattr *dev_stats; | ||
void *hdr; | ||
|
||
hdr = genlmsg_put(msg, portid, seq, &devlink_nl_family, flags, cmd); | ||
if (!hdr) | ||
return -EMSGSIZE; | ||
|
||
if (devlink_nl_put_handle(msg, devlink)) | ||
goto nla_put_failure; | ||
if (nla_put_u8(msg, DEVLINK_ATTR_RELOAD_FAILED, devlink->reload_failed)) | ||
goto nla_put_failure; | ||
|
||
dev_stats = nla_nest_start(msg, DEVLINK_ATTR_DEV_STATS); | ||
if (!dev_stats) | ||
goto nla_put_failure; | ||
|
||
if (devlink_reload_stats_put(msg, devlink, false)) | ||
goto dev_stats_nest_cancel; | ||
if (devlink_reload_stats_put(msg, devlink, true)) | ||
goto dev_stats_nest_cancel; | ||
|
||
nla_nest_end(msg, dev_stats); | ||
genlmsg_end(msg, hdr); | ||
return 0; | ||
|
||
dev_stats_nest_cancel: | ||
nla_nest_cancel(msg, dev_stats); | ||
nla_put_failure: | ||
genlmsg_cancel(msg, hdr); | ||
return -EMSGSIZE; | ||
} | ||
|
||
void devlink_notify(struct devlink *devlink, enum devlink_command cmd) | ||
{ | ||
struct sk_buff *msg; | ||
int err; | ||
|
||
WARN_ON(cmd != DEVLINK_CMD_NEW && cmd != DEVLINK_CMD_DEL); | ||
WARN_ON(!xa_get_mark(&devlinks, devlink->index, DEVLINK_REGISTERED)); | ||
|
||
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); | ||
if (!msg) | ||
return; | ||
|
||
err = devlink_nl_fill(msg, devlink, cmd, 0, 0, 0); | ||
if (err) { | ||
nlmsg_free(msg); | ||
return; | ||
} | ||
|
||
genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink), | ||
msg, 0, DEVLINK_MCGRP_CONFIG, GFP_KERNEL); | ||
} | ||
|
||
int devlink_nl_cmd_get_doit(struct sk_buff *skb, struct genl_info *info) | ||
{ | ||
struct devlink *devlink = info->user_ptr[0]; | ||
struct sk_buff *msg; | ||
int err; | ||
|
||
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); | ||
if (!msg) | ||
return -ENOMEM; | ||
|
||
err = devlink_nl_fill(msg, devlink, DEVLINK_CMD_NEW, | ||
info->snd_portid, info->snd_seq, 0); | ||
if (err) { | ||
nlmsg_free(msg); | ||
return err; | ||
} | ||
|
||
return genlmsg_reply(msg, info); | ||
} | ||
|
||
static int | ||
devlink_nl_cmd_get_dump_one(struct sk_buff *msg, struct devlink *devlink, | ||
struct netlink_callback *cb) | ||
{ | ||
return devlink_nl_fill(msg, devlink, DEVLINK_CMD_NEW, | ||
NETLINK_CB(cb->skb).portid, | ||
cb->nlh->nlmsg_seq, NLM_F_MULTI); | ||
} | ||
|
||
const struct devlink_cmd devl_cmd_get = { | ||
.dump_one = devlink_nl_cmd_get_dump_one, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters