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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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_region;
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_group;
extern const struct devlink_gen_cmd devl_gen_trap_policer;
+38 −49
Original line number Diff line number Diff line
@@ -7768,70 +7768,59 @@ static int devlink_nl_cmd_health_reporter_get_doit(struct sk_buff *skb,
}

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 devlink *devlink,
					    struct netlink_callback *cb)
{
	struct devlink_nl_dump_state *state = devlink_dump_state(cb);
	struct devlink *devlink;
	int err;

	devlink_dump_for_each_instance_get(msg, state, devlink) {
	struct devlink_health_reporter *reporter;
	struct devlink_port *port;
	unsigned long port_index;
	int idx = 0;
	int err;

		devl_lock(devlink);
		if (!devl_is_registered(devlink))
			goto next_devlink;

		list_for_each_entry(reporter, &devlink->reporter_list,
				    list) {
	list_for_each_entry(reporter, &devlink->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,
		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;
			return err;
		}
		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,
			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);
							      cb->nlh->nlmsg_seq,
							      NLM_F_MULTI);
			if (err) {
					devl_unlock(devlink);
					devlink_put(devlink);
				state->idx = idx;
					goto out;
				return err;
			}
			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
devlink_nl_cmd_health_reporter_set_doit(struct sk_buff *skb,
					struct genl_info *info)
@@ -9193,7 +9182,7 @@ const struct genl_small_ops devlink_nl_ops[56] = {
		.cmd = DEVLINK_CMD_HEALTH_REPORTER_GET,
		.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
		.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,
		/* can be retrieved by unprivileged users */
	},
+1 −0
Original line number Diff line number Diff line
@@ -187,6 +187,7 @@ static const struct devlink_gen_cmd *devl_gen_cmds[] = {
	[DEVLINK_CMD_PARAM_GET]		= &devl_gen_param,
	[DEVLINK_CMD_REGION_GET]	= &devl_gen_region,
	[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_TRAP_GET]		= &devl_gen_trap,
	[DEVLINK_CMD_TRAP_GROUP_GET]	= &devl_gen_trap_group,