Jiri says: The Spectrum-2 hardware has limitation number of ERPs per-region. In order to accommodate more masks than number of ERPs, the hardware supports to insert rules with delta bits. By that, the rules with masks that differ in up-to 8 consecutive bits can share the same ERP.
Patches 1 and 2 fix couple of issues that would appear in existing selftests after adding delta support Patch 3 introduces a generic object aggregation library. Now it is static, but it will get extended for recalculation of aggregations in the future in order to reach more optimal aggregation. Patch 4 just simply converts existing ERP code to use the objagg library instead of a rhashtable. Patches 5-9 do more or less small changes to prepare ground for the last patch. Patch 10 fills-up delta callbacks of objagg library and utilizes the delta bits for rule insertion. The last patch adds selftest to test the mlxsw Spectrum-2 delta flows. Jiri Pirko (11): selftests: Adjust spectrum-2 two_mask_test selftests: Adjust spectrum-2 ctcam_two_atcam_masks_test lib: introduce initial implementation of object aggregation manager mlxsw: spectrum: acl_erp: Convert to use objagg for tracking ERPs mlxsw: spectrum: acl: Pass key pointer to master_mask_set/clear mlxsw: core_acl: Change order of args of ops->encode_block() mlxsw: spectrum: acl: Don't encode the key again in mlxsw_sp_acl_atcam_12kb_lkey_id_get() mlxsw: spectrum: acl: Remove mlxsw_afk_encode() block range args and key/mask check mlxsw: spectrum: acl: Push code related to num_ctcam_erps inc/dec into separate helpers mlxsw: spectrum: acl: Implement delta for ERP selftests: mlxsw: spectrum-2: Add simple delta test MAINTAINERS | 8 + drivers/net/ethernet/mellanox/mlxsw/Kconfig | 1 + .../mellanox/mlxsw/core_acl_flex_keys.c | 22 +- .../mellanox/mlxsw/core_acl_flex_keys.h | 7 +- drivers/net/ethernet/mellanox/mlxsw/reg.h | 8 +- .../mellanox/mlxsw/spectrum2_acl_tcam.c | 12 +- .../mellanox/mlxsw/spectrum_acl_atcam.c | 75 +- .../mellanox/mlxsw/spectrum_acl_ctcam.c | 5 +- .../mellanox/mlxsw/spectrum_acl_erp.c | 454 +++++++--- .../mellanox/mlxsw/spectrum_acl_flex_keys.c | 32 +- .../mellanox/mlxsw/spectrum_acl_tcam.h | 42 +- include/linux/objagg.h | 46 + include/trace/events/objagg.h | 228 +++++ lib/Kconfig | 3 + lib/Kconfig.debug | 10 + lib/Makefile | 2 + lib/objagg.c | 501 +++++++++++ lib/test_objagg.c | 835 ++++++++++++++++++ .../drivers/net/mlxsw/spectrum-2/tc_flower.sh | 86 +- 19 files changed, 2184 insertions(+), 193 deletions(-) create mode 100644 include/linux/objagg.h create mode 100644 include/trace/events/objagg.h create mode 100644 lib/objagg.c create mode 100644 lib/test_objagg.c -- 2.19.1