Jiri says: When rehash happens on a vregion with many rules and they are being migrated, it might take significant time to finish the job. During that time vregion->lock is taken which prevents rules from being added/deleted from the vregion.
Aim of this patchset is to allow to interrupt migration of rules during rehash, reschedule and give chance for rules to be added/deleted. Then continue migration in another execution of scheduled work. Jiri Pirko (14): mlxsw: spectrum_acl: Push rehash dw struct into rehash sub-struct mlxsw: spectrum_acl: Don't migrate already migrated entry mlxsw: spectrum_acl: Introduce new rehash context struct and save hint_priv there mlxsw: spectrum_acl: Push rehash start/end code into separate functions mlxsw: spectrum_acl: Push code start/end from mlxsw_sp_acl_tcam_vregion_migrate() mlxsw: spectrum_acl: assign vregion->region by the newly created region mlxsw: spectrum_acl: assign vchunk->chunk by the newly created chunk mlxsw: spectrum_acl: Rename variables in mlxsw_sp_acl_tcam_ventry_migrate() mlxsw: spectrum_acl: Put this_is_rollback to rehash context struct mlxsw: spectrum_acl: Put vchunk migrate start/end code into separate functions mlxsw: spectrum_acl: Do rollback as another call to mlxsw_sp_acl_tcam_vchunk_migrate_all() mlxsw: spectrum_acl: Allow to interrupt/continue rehash work mlxsw: spectrum_acl: Remember where to continue rehash migration mlxsw: spectrum_acl: Make mlxsw_sp_acl_tcam_vregion_rehash() return void .../mellanox/mlxsw/spectrum_acl_tcam.c | 411 ++++++++++++------ 1 file changed, 286 insertions(+), 125 deletions(-) -- 2.20.1