The Spectrum-2 ASIC allows multiple rules to use the same mask provided that the difference between their masks is small enough (up to 8 consecutive delta bits). A more detailed explanation is provided in merge commit 756cd36626f7 ("Merge branch 'mlxsw-Introduce-algorithmic-TCAM-support'").
These delta bits are part of the rule's key and therefore rules that only differ in their delta bits can be inserted with the same A-TCAM mask. In case two rules share the same key and only differ in their priority, then the second will spill to the C-TCAM. Current code does not take the delta bits into account when checking for duplicate rules, which leads to unnecessary spillage to the C-TCAM. This may result in reduced scale and performance. Patch #1 includes the delta bits in the rule's key to avoid the above mentioned problem. Patch #2 adds a tracepoint when a rule is inserted into the C-TCAM. Patches #3-#5 add test cases to make sure unnecessary spillage into the C-TCAM does not occur. Jiri Pirko (5): mlxsw: spectrum_acl: Include delta bits into hashtable key mlxsw: spectrum_acl: Add C-TCAM spill tracepoint selftests: spectrum-2: Extend and move trace helpers selftests: spectrum-2: Fix multiple_masks_test selftests: spectrum-2: Add delta two masks one key test .../mellanox/mlxsw/spectrum_acl_atcam.c | 24 +-- .../mlxsw/spectrum_acl_bloom_filter.c | 2 +- .../mellanox/mlxsw/spectrum_acl_tcam.h | 10 +- include/trace/events/mlxsw.h | 38 +++++ .../drivers/net/mlxsw/spectrum-2/tc_flower.sh | 143 ++++++++++++++---- 5 files changed, 174 insertions(+), 43 deletions(-) create mode 100644 include/trace/events/mlxsw.h -- 2.20.1