Commit 107f1678941151ccccec67d230a48069aa27527e
Committed by
David S. Miller
1 parent
a09b37fc8b
devlink: Only pass packet trap group identifier in trap structure
Packet trap groups are now explicitly registered by drivers and not implicitly registered when the packet traps are registered. Therefore, there is no need to encode entire group structure the trap is associated with inside the trap structure. Instead, only pass the group identifier. Refer to it as initial group identifier, as future patches will allow user space to move traps between groups. Signed-off-by: Ido Schimmel <idosch@mellanox.com> Reviewed-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 4 changed files with 32 additions and 18 deletions Side-by-side Diff
drivers/net/ethernet/mellanox/mlxsw/spectrum_trap.c
... | ... | @@ -132,23 +132,23 @@ |
132 | 132 | |
133 | 133 | #define MLXSW_SP_TRAP_DROP(_id, _group_id) \ |
134 | 134 | DEVLINK_TRAP_GENERIC(DROP, DROP, _id, \ |
135 | - DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ | |
135 | + DEVLINK_TRAP_GROUP_GENERIC_ID_##_group_id, \ | |
136 | 136 | MLXSW_SP_TRAP_METADATA) |
137 | 137 | |
138 | 138 | #define MLXSW_SP_TRAP_DROP_EXT(_id, _group_id, _metadata) \ |
139 | 139 | DEVLINK_TRAP_GENERIC(DROP, DROP, _id, \ |
140 | - DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ | |
140 | + DEVLINK_TRAP_GROUP_GENERIC_ID_##_group_id, \ | |
141 | 141 | MLXSW_SP_TRAP_METADATA | (_metadata)) |
142 | 142 | |
143 | 143 | #define MLXSW_SP_TRAP_DRIVER_DROP(_id, _group_id) \ |
144 | 144 | DEVLINK_TRAP_DRIVER(DROP, DROP, DEVLINK_MLXSW_TRAP_ID_##_id, \ |
145 | 145 | DEVLINK_MLXSW_TRAP_NAME_##_id, \ |
146 | - DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ | |
146 | + DEVLINK_TRAP_GROUP_GENERIC_ID_##_group_id, \ | |
147 | 147 | MLXSW_SP_TRAP_METADATA) |
148 | 148 | |
149 | 149 | #define MLXSW_SP_TRAP_EXCEPTION(_id, _group_id) \ |
150 | 150 | DEVLINK_TRAP_GENERIC(EXCEPTION, TRAP, _id, \ |
151 | - DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ | |
151 | + DEVLINK_TRAP_GROUP_GENERIC_ID_##_group_id, \ | |
152 | 152 | MLXSW_SP_TRAP_METADATA) |
153 | 153 | |
154 | 154 | #define MLXSW_SP_RXL_DISCARD(_id, _group_id) \ |
drivers/net/netdevsim/dev.c
... | ... | @@ -381,20 +381,20 @@ |
381 | 381 | |
382 | 382 | #define NSIM_TRAP_DROP(_id, _group_id) \ |
383 | 383 | DEVLINK_TRAP_GENERIC(DROP, DROP, _id, \ |
384 | - DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ | |
384 | + DEVLINK_TRAP_GROUP_GENERIC_ID_##_group_id, \ | |
385 | 385 | NSIM_TRAP_METADATA) |
386 | 386 | #define NSIM_TRAP_DROP_EXT(_id, _group_id, _metadata) \ |
387 | 387 | DEVLINK_TRAP_GENERIC(DROP, DROP, _id, \ |
388 | - DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ | |
388 | + DEVLINK_TRAP_GROUP_GENERIC_ID_##_group_id, \ | |
389 | 389 | NSIM_TRAP_METADATA | (_metadata)) |
390 | 390 | #define NSIM_TRAP_EXCEPTION(_id, _group_id) \ |
391 | 391 | DEVLINK_TRAP_GENERIC(EXCEPTION, TRAP, _id, \ |
392 | - DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ | |
392 | + DEVLINK_TRAP_GROUP_GENERIC_ID_##_group_id, \ | |
393 | 393 | NSIM_TRAP_METADATA) |
394 | 394 | #define NSIM_TRAP_DRIVER_EXCEPTION(_id, _group_id) \ |
395 | 395 | DEVLINK_TRAP_DRIVER(EXCEPTION, TRAP, NSIM_TRAP_ID_##_id, \ |
396 | 396 | NSIM_TRAP_NAME_##_id, \ |
397 | - DEVLINK_TRAP_GROUP_GENERIC(_group_id), \ | |
397 | + DEVLINK_TRAP_GROUP_GENERIC_ID_##_group_id, \ | |
398 | 398 | NSIM_TRAP_METADATA) |
399 | 399 | |
400 | 400 | static const struct devlink_trap_group nsim_trap_groups_arr[] = { |
include/net/devlink.h
... | ... | @@ -553,7 +553,7 @@ |
553 | 553 | * @generic: Whether the trap is generic or not. |
554 | 554 | * @id: Trap identifier. |
555 | 555 | * @name: Trap name. |
556 | - * @group: Immutable packet trap group attributes. | |
556 | + * @init_group_id: Initial group identifier. | |
557 | 557 | * @metadata_cap: Metadata types that can be provided by the trap. |
558 | 558 | * |
559 | 559 | * Describes immutable attributes of packet traps that drivers register with |
... | ... | @@ -565,7 +565,7 @@ |
565 | 565 | bool generic; |
566 | 566 | u16 id; |
567 | 567 | const char *name; |
568 | - struct devlink_trap_group group; | |
568 | + u16 init_group_id; | |
569 | 569 | u32 metadata_cap; |
570 | 570 | }; |
571 | 571 | |
572 | 572 | |
573 | 573 | |
... | ... | @@ -694,18 +694,19 @@ |
694 | 694 | #define DEVLINK_TRAP_GROUP_GENERIC_NAME_ACL_DROPS \ |
695 | 695 | "acl_drops" |
696 | 696 | |
697 | -#define DEVLINK_TRAP_GENERIC(_type, _init_action, _id, _group, _metadata_cap) \ | |
697 | +#define DEVLINK_TRAP_GENERIC(_type, _init_action, _id, _group_id, \ | |
698 | + _metadata_cap) \ | |
698 | 699 | { \ |
699 | 700 | .type = DEVLINK_TRAP_TYPE_##_type, \ |
700 | 701 | .init_action = DEVLINK_TRAP_ACTION_##_init_action, \ |
701 | 702 | .generic = true, \ |
702 | 703 | .id = DEVLINK_TRAP_GENERIC_ID_##_id, \ |
703 | 704 | .name = DEVLINK_TRAP_GENERIC_NAME_##_id, \ |
704 | - .group = _group, \ | |
705 | + .init_group_id = _group_id, \ | |
705 | 706 | .metadata_cap = _metadata_cap, \ |
706 | 707 | } |
707 | 708 | |
708 | -#define DEVLINK_TRAP_DRIVER(_type, _init_action, _id, _name, _group, \ | |
709 | +#define DEVLINK_TRAP_DRIVER(_type, _init_action, _id, _name, _group_id, \ | |
709 | 710 | _metadata_cap) \ |
710 | 711 | { \ |
711 | 712 | .type = DEVLINK_TRAP_TYPE_##_type, \ |
... | ... | @@ -713,7 +714,7 @@ |
713 | 714 | .generic = false, \ |
714 | 715 | .id = _id, \ |
715 | 716 | .name = _name, \ |
716 | - .group = _group, \ | |
717 | + .init_group_id = _group_id, \ | |
717 | 718 | .metadata_cap = _metadata_cap, \ |
718 | 719 | } |
719 | 720 |
net/core/devlink.c
... | ... | @@ -5816,6 +5816,19 @@ |
5816 | 5816 | } |
5817 | 5817 | |
5818 | 5818 | static struct devlink_trap_group_item * |
5819 | +devlink_trap_group_item_lookup_by_id(struct devlink *devlink, u16 id) | |
5820 | +{ | |
5821 | + struct devlink_trap_group_item *group_item; | |
5822 | + | |
5823 | + list_for_each_entry(group_item, &devlink->trap_group_list, list) { | |
5824 | + if (group_item->group->id == id) | |
5825 | + return group_item; | |
5826 | + } | |
5827 | + | |
5828 | + return NULL; | |
5829 | +} | |
5830 | + | |
5831 | +static struct devlink_trap_group_item * | |
5819 | 5832 | devlink_trap_group_item_get_from_info(struct devlink *devlink, |
5820 | 5833 | struct genl_info *info) |
5821 | 5834 | { |
... | ... | @@ -5953,7 +5966,7 @@ |
5953 | 5966 | int err; |
5954 | 5967 | |
5955 | 5968 | list_for_each_entry(trap_item, &devlink->trap_list, list) { |
5956 | - if (strcmp(trap_item->trap->group.name, group_name)) | |
5969 | + if (strcmp(trap_item->group_item->group->name, group_name)) | |
5957 | 5970 | continue; |
5958 | 5971 | err = __devlink_trap_action_set(devlink, trap_item, |
5959 | 5972 | trap_action, extack); |
... | ... | @@ -7864,7 +7877,7 @@ |
7864 | 7877 | |
7865 | 7878 | static int devlink_trap_verify(const struct devlink_trap *trap) |
7866 | 7879 | { |
7867 | - if (!trap || !trap->name || !trap->group.name) | |
7880 | + if (!trap || !trap->name) | |
7868 | 7881 | return -EINVAL; |
7869 | 7882 | |
7870 | 7883 | if (trap->generic) |
7871 | 7884 | |
... | ... | @@ -7939,10 +7952,10 @@ |
7939 | 7952 | devlink_trap_item_group_link(struct devlink *devlink, |
7940 | 7953 | struct devlink_trap_item *trap_item) |
7941 | 7954 | { |
7942 | - const struct devlink_trap *trap = trap_item->trap; | |
7955 | + u16 group_id = trap_item->trap->init_group_id; | |
7943 | 7956 | struct devlink_trap_group_item *group_item; |
7944 | 7957 | |
7945 | - group_item = devlink_trap_group_item_lookup(devlink, trap->group.name); | |
7958 | + group_item = devlink_trap_group_item_lookup_by_id(devlink, group_id); | |
7946 | 7959 | if (WARN_ON_ONCE(!group_item)) |
7947 | 7960 | return -EINVAL; |
7948 | 7961 |