Commit c50bf2be authored by Ioana Ciornei's avatar Ioana Ciornei Committed by David S. Miller

devlink: add .trap_group_action_set() callback

Add a new devlink callback, .trap_group_action_set(), which can be used
by device drivers which do not support controlling the action (drop,
trap) on each trap but rather on the entire group trap.
If this new callback is populated, it will take precedence over the
.trap_action_set() callback when the user requests a change of all the
traps in a group.
Signed-off-by: default avatarIoana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 10c24eb2
...@@ -1242,6 +1242,16 @@ struct devlink_ops { ...@@ -1242,6 +1242,16 @@ struct devlink_ops {
const struct devlink_trap_group *group, const struct devlink_trap_group *group,
const struct devlink_trap_policer *policer, const struct devlink_trap_policer *policer,
struct netlink_ext_ack *extack); struct netlink_ext_ack *extack);
/**
* @trap_group_action_set: Trap group action set function.
*
* If this callback is populated, it will take precedence over looping
* over all traps in a group and calling .trap_action_set().
*/
int (*trap_group_action_set)(struct devlink *devlink,
const struct devlink_trap_group *group,
enum devlink_trap_action action,
struct netlink_ext_ack *extack);
/** /**
* @trap_policer_init: Trap policer initialization function. * @trap_policer_init: Trap policer initialization function.
* *
......
...@@ -6720,6 +6720,24 @@ __devlink_trap_group_action_set(struct devlink *devlink, ...@@ -6720,6 +6720,24 @@ __devlink_trap_group_action_set(struct devlink *devlink,
struct devlink_trap_item *trap_item; struct devlink_trap_item *trap_item;
int err; int err;
if (devlink->ops->trap_group_action_set) {
err = devlink->ops->trap_group_action_set(devlink, group_item->group,
trap_action, extack);
if (err)
return err;
list_for_each_entry(trap_item, &devlink->trap_list, list) {
if (strcmp(trap_item->group_item->group->name, group_name))
continue;
if (trap_item->action != trap_action &&
trap_item->trap->type != DEVLINK_TRAP_TYPE_DROP)
continue;
trap_item->action = trap_action;
}
return 0;
}
list_for_each_entry(trap_item, &devlink->trap_list, list) { list_for_each_entry(trap_item, &devlink->trap_list, list) {
if (strcmp(trap_item->group_item->group->name, group_name)) if (strcmp(trap_item->group_item->group->name, group_name))
continue; continue;
......
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