mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-27 03:10:12 +00:00
devlink: introduce the health reporter test command
Introduce a test command for health reporters. User might use this command to trigger test event on a reporter if the reporter supports it. Signed-off-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
191c0c22b5
commit
e2ce94dc1d
3 changed files with 35 additions and 0 deletions
|
@ -566,6 +566,7 @@ enum devlink_health_reporter_state {
|
|||
* @dump: callback to dump an object
|
||||
* if priv_ctx is NULL, run a full dump
|
||||
* @diagnose: callback to diagnose the current status
|
||||
* @test: callback to trigger a test event
|
||||
*/
|
||||
|
||||
struct devlink_health_reporter_ops {
|
||||
|
@ -578,6 +579,8 @@ struct devlink_health_reporter_ops {
|
|||
int (*diagnose)(struct devlink_health_reporter *reporter,
|
||||
struct devlink_fmsg *fmsg,
|
||||
struct netlink_ext_ack *extack);
|
||||
int (*test)(struct devlink_health_reporter *reporter,
|
||||
struct netlink_ext_ack *extack);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -122,6 +122,8 @@ enum devlink_command {
|
|||
DEVLINK_CMD_TRAP_POLICER_NEW,
|
||||
DEVLINK_CMD_TRAP_POLICER_DEL,
|
||||
|
||||
DEVLINK_CMD_HEALTH_REPORTER_TEST,
|
||||
|
||||
/* add new commands above here */
|
||||
__DEVLINK_CMD_MAX,
|
||||
DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1
|
||||
|
|
|
@ -6096,6 +6096,28 @@ devlink_nl_cmd_health_reporter_dump_clear_doit(struct sk_buff *skb,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int devlink_nl_cmd_health_reporter_test_doit(struct sk_buff *skb,
|
||||
struct genl_info *info)
|
||||
{
|
||||
struct devlink *devlink = info->user_ptr[0];
|
||||
struct devlink_health_reporter *reporter;
|
||||
int err;
|
||||
|
||||
reporter = devlink_health_reporter_get_from_info(devlink, info);
|
||||
if (!reporter)
|
||||
return -EINVAL;
|
||||
|
||||
if (!reporter->ops->test) {
|
||||
devlink_health_reporter_put(reporter);
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
err = reporter->ops->test(reporter, info->extack);
|
||||
|
||||
devlink_health_reporter_put(reporter);
|
||||
return err;
|
||||
}
|
||||
|
||||
struct devlink_stats {
|
||||
u64 rx_bytes;
|
||||
u64 rx_packets;
|
||||
|
@ -7316,6 +7338,14 @@ static const struct genl_ops devlink_nl_ops[] = {
|
|||
.internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT |
|
||||
DEVLINK_NL_FLAG_NO_LOCK,
|
||||
},
|
||||
{
|
||||
.cmd = DEVLINK_CMD_HEALTH_REPORTER_TEST,
|
||||
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
||||
.doit = devlink_nl_cmd_health_reporter_test_doit,
|
||||
.flags = GENL_ADMIN_PERM,
|
||||
.internal_flags = DEVLINK_NL_FLAG_NEED_DEVLINK_OR_PORT |
|
||||
DEVLINK_NL_FLAG_NO_LOCK,
|
||||
},
|
||||
{
|
||||
.cmd = DEVLINK_CMD_FLASH_UPDATE,
|
||||
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
|
||||
|
|
Loading…
Reference in a new issue