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

devlink: convert linecards dump to devlink_nl_instance_iter_dump()



Benefit from recently introduced instance iteration and convert
linecards .dumpit generic netlink callback to use it.

Signed-off-by: default avatarJiri Pirko <jiri@nvidia.com>
Reviewed-by: default avatarIdo Schimmel <idosch@nvidia.com>
Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent e994a75f
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -167,6 +167,7 @@ extern const struct devlink_gen_cmd devl_gen_info;
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;
extern const struct devlink_gen_cmd devl_gen_linecard;

/* Ports */
int devlink_port_netdevice_event(struct notifier_block *nb,
+28 −36
Original line number Diff line number Diff line
@@ -2105,20 +2105,14 @@ static int devlink_nl_cmd_linecard_get_doit(struct sk_buff *skb,
	return genlmsg_reply(msg, info);
}

static int devlink_nl_cmd_linecard_get_dumpit(struct sk_buff *msg,
static int devlink_nl_cmd_linecard_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_linecard *linecard;
	struct devlink *devlink;
	int err;

	devlink_dump_for_each_instance_get(msg, state, devlink) {
	int idx = 0;

		devl_lock(devlink);
		if (!devl_is_registered(devlink))
			goto next_devlink;
	int err = 0;

	list_for_each_entry(linecard, &devlink->linecard_list, list) {
		if (idx < state->idx) {
@@ -2134,21 +2128,19 @@ static int devlink_nl_cmd_linecard_get_dumpit(struct sk_buff *msg,
					       cb->extack);
		mutex_unlock(&linecard->state_lock);
		if (err) {
				devl_unlock(devlink);
				devlink_put(devlink);
			state->idx = idx;
				goto out;
			break;
		}
		idx++;
	}
next_devlink:
		devl_unlock(devlink);
		devlink_put(devlink);
	}
out:
	return msg->len;

	return err;
}

const struct devlink_gen_cmd devl_gen_linecard = {
	.dump_one		= devlink_nl_cmd_linecard_get_dump_one,
};

static struct devlink_linecard_type *
devlink_linecard_type_lookup(struct devlink_linecard *linecard,
			     const char *type)
@@ -9010,7 +9002,7 @@ const struct genl_small_ops devlink_nl_ops[56] = {
	{
		.cmd = DEVLINK_CMD_LINECARD_GET,
		.doit = devlink_nl_cmd_linecard_get_doit,
		.dumpit = devlink_nl_cmd_linecard_get_dumpit,
		.dumpit = devlink_nl_instance_iter_dump,
		.internal_flags = DEVLINK_NL_FLAG_NEED_LINECARD,
		/* can be retrieved by unprivileged users */
	},
+1 −0
Original line number Diff line number Diff line
@@ -191,6 +191,7 @@ static const struct devlink_gen_cmd *devl_gen_cmds[] = {
	[DEVLINK_CMD_TRAP_GET]		= &devl_gen_trap,
	[DEVLINK_CMD_TRAP_GROUP_GET]	= &devl_gen_trap_group,
	[DEVLINK_CMD_TRAP_POLICER_GET]	= &devl_gen_trap_policer,
	[DEVLINK_CMD_LINECARD_GET]	= &devl_gen_linecard,
	[DEVLINK_CMD_SELFTESTS_GET]	= &devl_gen_selftests,
};