mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-01 10:43:43 +00:00
mlxsw: spectrum_acl_tcam: Position vchunk in a vregion list properly
Vregion helpers to get min and max priority depend on the correct
ordering of vchunks in the vregion list. However, the current code
always adds new chunk to the end of the list, no matter what the
priority is. Fix this by finding the correct place in the list and put
vchunk there.
Fixes: 22a677661f
("mlxsw: spectrum: Introduce ACL core with simple TCAM implementation")
Signed-off-by: Jiri Pirko <jiri@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b723748750
commit
6ef4889fc0
@ -986,8 +986,9 @@ mlxsw_sp_acl_tcam_vchunk_create(struct mlxsw_sp *mlxsw_sp,
|
||||
unsigned int priority,
|
||||
struct mlxsw_afk_element_usage *elusage)
|
||||
{
|
||||
struct mlxsw_sp_acl_tcam_vchunk *vchunk, *vchunk2;
|
||||
struct mlxsw_sp_acl_tcam_vregion *vregion;
|
||||
struct mlxsw_sp_acl_tcam_vchunk *vchunk;
|
||||
struct list_head *pos;
|
||||
int err;
|
||||
|
||||
if (priority == MLXSW_SP_ACL_TCAM_CATCHALL_PRIO)
|
||||
@ -1025,7 +1026,14 @@ mlxsw_sp_acl_tcam_vchunk_create(struct mlxsw_sp *mlxsw_sp,
|
||||
}
|
||||
|
||||
mlxsw_sp_acl_tcam_rehash_ctx_vregion_changed(vregion);
|
||||
list_add_tail(&vchunk->list, &vregion->vchunk_list);
|
||||
|
||||
/* Position the vchunk inside the list according to priority */
|
||||
list_for_each(pos, &vregion->vchunk_list) {
|
||||
vchunk2 = list_entry(pos, typeof(*vchunk2), list);
|
||||
if (vchunk2->priority > priority)
|
||||
break;
|
||||
}
|
||||
list_add_tail(&vchunk->list, pos);
|
||||
mutex_unlock(&vregion->lock);
|
||||
|
||||
return vchunk;
|
||||
|
Loading…
Reference in New Issue
Block a user