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: Jiri Pirko <jiri@nvidia.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e994a75fb7
commit
2557396808
@ -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;
|
||||||
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;
|
||||||
|
extern const struct devlink_gen_cmd devl_gen_linecard;
|
||||||
|
|
||||||
/* Ports */
|
/* Ports */
|
||||||
int devlink_port_netdevice_event(struct notifier_block *nb,
|
int devlink_port_netdevice_event(struct notifier_block *nb,
|
||||||
|
@ -2105,50 +2105,42 @@ static int devlink_nl_cmd_linecard_get_doit(struct sk_buff *skb,
|
|||||||
return genlmsg_reply(msg, info);
|
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 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_linecard *linecard;
|
struct devlink_linecard *linecard;
|
||||||
struct devlink *devlink;
|
int idx = 0;
|
||||||
int err;
|
int err = 0;
|
||||||
|
|
||||||
devlink_dump_for_each_instance_get(msg, state, devlink) {
|
list_for_each_entry(linecard, &devlink->linecard_list, list) {
|
||||||
int idx = 0;
|
if (idx < state->idx) {
|
||||||
|
|
||||||
devl_lock(devlink);
|
|
||||||
if (!devl_is_registered(devlink))
|
|
||||||
goto next_devlink;
|
|
||||||
|
|
||||||
list_for_each_entry(linecard, &devlink->linecard_list, list) {
|
|
||||||
if (idx < state->idx) {
|
|
||||||
idx++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
mutex_lock(&linecard->state_lock);
|
|
||||||
err = devlink_nl_linecard_fill(msg, devlink, linecard,
|
|
||||||
DEVLINK_CMD_LINECARD_NEW,
|
|
||||||
NETLINK_CB(cb->skb).portid,
|
|
||||||
cb->nlh->nlmsg_seq,
|
|
||||||
NLM_F_MULTI,
|
|
||||||
cb->extack);
|
|
||||||
mutex_unlock(&linecard->state_lock);
|
|
||||||
if (err) {
|
|
||||||
devl_unlock(devlink);
|
|
||||||
devlink_put(devlink);
|
|
||||||
state->idx = idx;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
idx++;
|
idx++;
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
next_devlink:
|
mutex_lock(&linecard->state_lock);
|
||||||
devl_unlock(devlink);
|
err = devlink_nl_linecard_fill(msg, devlink, linecard,
|
||||||
devlink_put(devlink);
|
DEVLINK_CMD_LINECARD_NEW,
|
||||||
|
NETLINK_CB(cb->skb).portid,
|
||||||
|
cb->nlh->nlmsg_seq,
|
||||||
|
NLM_F_MULTI,
|
||||||
|
cb->extack);
|
||||||
|
mutex_unlock(&linecard->state_lock);
|
||||||
|
if (err) {
|
||||||
|
state->idx = idx;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
idx++;
|
||||||
}
|
}
|
||||||
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 *
|
static struct devlink_linecard_type *
|
||||||
devlink_linecard_type_lookup(struct devlink_linecard *linecard,
|
devlink_linecard_type_lookup(struct devlink_linecard *linecard,
|
||||||
const char *type)
|
const char *type)
|
||||||
@ -9010,7 +9002,7 @@ const struct genl_small_ops devlink_nl_ops[56] = {
|
|||||||
{
|
{
|
||||||
.cmd = DEVLINK_CMD_LINECARD_GET,
|
.cmd = DEVLINK_CMD_LINECARD_GET,
|
||||||
.doit = devlink_nl_cmd_linecard_get_doit,
|
.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,
|
.internal_flags = DEVLINK_NL_FLAG_NEED_LINECARD,
|
||||||
/* can be retrieved by unprivileged users */
|
/* can be retrieved by unprivileged users */
|
||||||
},
|
},
|
||||||
|
@ -191,6 +191,7 @@ static const struct devlink_gen_cmd *devl_gen_cmds[] = {
|
|||||||
[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,
|
||||||
[DEVLINK_CMD_TRAP_POLICER_GET] = &devl_gen_trap_policer,
|
[DEVLINK_CMD_TRAP_POLICER_GET] = &devl_gen_trap_policer,
|
||||||
|
[DEVLINK_CMD_LINECARD_GET] = &devl_gen_linecard,
|
||||||
[DEVLINK_CMD_SELFTESTS_GET] = &devl_gen_selftests,
|
[DEVLINK_CMD_SELFTESTS_GET] = &devl_gen_selftests,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user