Commit 19be51a9 authored by Jiri Pirko's avatar Jiri Pirko Committed by Jakub Kicinski

devlink: convert reporters dump to devlink_nl_instance_iter_dump()

Benefit from recently introduced instance iteration and convert
reporters .dumpit generic netlink callback to use it.
Signed-off-by: default avatarJiri Pirko <jiri@nvidia.com>
Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 25573968
...@@ -164,6 +164,7 @@ extern const struct devlink_gen_cmd devl_gen_selftests; ...@@ -164,6 +164,7 @@ extern const struct devlink_gen_cmd devl_gen_selftests;
extern const struct devlink_gen_cmd devl_gen_param; extern const struct devlink_gen_cmd devl_gen_param;
extern const struct devlink_gen_cmd devl_gen_region; extern const struct devlink_gen_cmd devl_gen_region;
extern const struct devlink_gen_cmd devl_gen_info; extern const struct devlink_gen_cmd devl_gen_info;
extern const struct devlink_gen_cmd devl_gen_health_reporter;
extern const struct devlink_gen_cmd devl_gen_trap; extern const struct devlink_gen_cmd devl_gen_trap;
extern const struct devlink_gen_cmd devl_gen_trap_group; extern const struct devlink_gen_cmd devl_gen_trap_group;
extern const struct devlink_gen_cmd devl_gen_trap_policer; extern const struct devlink_gen_cmd devl_gen_trap_policer;
......
...@@ -7768,70 +7768,59 @@ static int devlink_nl_cmd_health_reporter_get_doit(struct sk_buff *skb, ...@@ -7768,70 +7768,59 @@ static int devlink_nl_cmd_health_reporter_get_doit(struct sk_buff *skb,
} }
static int static int
devlink_nl_cmd_health_reporter_get_dumpit(struct sk_buff *msg, devlink_nl_cmd_health_reporter_get_dump_one(struct sk_buff *msg,
struct netlink_callback *cb) struct devlink *devlink,
struct netlink_callback *cb)
{ {
struct devlink_nl_dump_state *state = devlink_dump_state(cb); struct devlink_nl_dump_state *state = devlink_dump_state(cb);
struct devlink *devlink; struct devlink_health_reporter *reporter;
struct devlink_port *port;
unsigned long port_index;
int idx = 0;
int err; int err;
devlink_dump_for_each_instance_get(msg, state, devlink) { list_for_each_entry(reporter, &devlink->reporter_list, list) {
struct devlink_health_reporter *reporter; if (idx < state->idx) {
struct devlink_port *port; idx++;
unsigned long port_index; continue;
int idx = 0; }
err = devlink_nl_health_reporter_fill(msg, reporter,
devl_lock(devlink); DEVLINK_CMD_HEALTH_REPORTER_GET,
if (!devl_is_registered(devlink)) NETLINK_CB(cb->skb).portid,
goto next_devlink; cb->nlh->nlmsg_seq,
NLM_F_MULTI);
list_for_each_entry(reporter, &devlink->reporter_list, if (err) {
list) { state->idx = idx;
return err;
}
idx++;
}
xa_for_each(&devlink->ports, port_index, port) {
list_for_each_entry(reporter, &port->reporter_list, list) {
if (idx < state->idx) { if (idx < state->idx) {
idx++; idx++;
continue; continue;
} }
err = devlink_nl_health_reporter_fill( err = devlink_nl_health_reporter_fill(msg, reporter,
msg, reporter, DEVLINK_CMD_HEALTH_REPORTER_GET, DEVLINK_CMD_HEALTH_REPORTER_GET,
NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, NETLINK_CB(cb->skb).portid,
NLM_F_MULTI); cb->nlh->nlmsg_seq,
NLM_F_MULTI);
if (err) { if (err) {
devl_unlock(devlink);
devlink_put(devlink);
state->idx = idx; state->idx = idx;
goto out; return err;
} }
idx++; idx++;
} }
xa_for_each(&devlink->ports, port_index, port) {
list_for_each_entry(reporter, &port->reporter_list, list) {
if (idx < state->idx) {
idx++;
continue;
}
err = devlink_nl_health_reporter_fill(
msg, reporter,
DEVLINK_CMD_HEALTH_REPORTER_GET,
NETLINK_CB(cb->skb).portid,
cb->nlh->nlmsg_seq, NLM_F_MULTI);
if (err) {
devl_unlock(devlink);
devlink_put(devlink);
state->idx = idx;
goto out;
}
idx++;
}
}
next_devlink:
devl_unlock(devlink);
devlink_put(devlink);
} }
out:
return msg->len; return 0;
} }
const struct devlink_gen_cmd devl_gen_health_reporter = {
.dump_one = devlink_nl_cmd_health_reporter_get_dump_one,
};
static int static int
devlink_nl_cmd_health_reporter_set_doit(struct sk_buff *skb, devlink_nl_cmd_health_reporter_set_doit(struct sk_buff *skb,
struct genl_info *info) struct genl_info *info)
...@@ -9193,7 +9182,7 @@ const struct genl_small_ops devlink_nl_ops[56] = { ...@@ -9193,7 +9182,7 @@ const struct genl_small_ops devlink_nl_ops[56] = {
.cmd = DEVLINK_CMD_HEALTH_REPORTER_GET, .cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP, .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
.doit = devlink_nl_cmd_health_reporter_get_doit, .doit = devlink_nl_cmd_health_reporter_get_doit,
.dumpit = devlink_nl_cmd_health_reporter_get_dumpit, .dumpit = devlink_nl_instance_iter_dump,
.internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT, .internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT,
/* can be retrieved by unprivileged users */ /* can be retrieved by unprivileged users */
}, },
......
...@@ -187,6 +187,7 @@ static const struct devlink_gen_cmd *devl_gen_cmds[] = { ...@@ -187,6 +187,7 @@ static const struct devlink_gen_cmd *devl_gen_cmds[] = {
[DEVLINK_CMD_PARAM_GET] = &devl_gen_param, [DEVLINK_CMD_PARAM_GET] = &devl_gen_param,
[DEVLINK_CMD_REGION_GET] = &devl_gen_region, [DEVLINK_CMD_REGION_GET] = &devl_gen_region,
[DEVLINK_CMD_INFO_GET] = &devl_gen_info, [DEVLINK_CMD_INFO_GET] = &devl_gen_info,
[DEVLINK_CMD_HEALTH_REPORTER_GET] = &devl_gen_health_reporter,
[DEVLINK_CMD_RATE_GET] = &devl_gen_rate_get, [DEVLINK_CMD_RATE_GET] = &devl_gen_rate_get,
[DEVLINK_CMD_TRAP_GET] = &devl_gen_trap, [DEVLINK_CMD_TRAP_GET] = &devl_gen_trap,
[DEVLINK_CMD_TRAP_GROUP_GET] = &devl_gen_trap_group, [DEVLINK_CMD_TRAP_GROUP_GET] = &devl_gen_trap_group,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment