Commit 107f1678941151ccccec67d230a48069aa27527e

Authored by Ido Schimmel
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  
... ... @@ -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