net/mlx5: DR, ICM pool memory allocator
authorAlex Vesker <valex@mellanox.com>
Mon, 19 Aug 2019 10:46:40 +0000 (13:46 +0300)
committerSaeed Mahameed <saeedm@mellanox.com>
Tue, 3 Sep 2019 19:54:20 +0000 (12:54 -0700)
commit29cf8febd1857d07de3bc62858e6311de2fb116d
treee758a8c3d624487bafbdd7ba4972806ad960192c
parent1d9186476e12c85dc81a0f01f5c614a9683af7f2
net/mlx5: DR, ICM pool memory allocator

ICM device memory is used for writing steering rules (STEs) to the NIC.
An ICM memory pool allocator was implemented to manage the required
memory. The pool consists of buckets, a bucket per chunk size.
Once a bucket is empty we will cut a row of memory from the latest
allocated MR, if the MR size is not sufficient we will allocate a new MR.
HW design requires that chunks memory address should be aligned to the
chunk size, this is the reason for managing the MR with row size that
insures memory alignment.
Current design is greedy in memory but provides quick allocation times
in steady state.

Signed-off-by: Alex Vesker <valex@mellanox.com>
Reviewed-by: Erez Shitrit <erezsh@mellanox.com>
Reviewed-by: Mark Bloch <markb@mellanox.com>
Signed-off-by: Saeed Mahameed <saeedm@mellanox.com>
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c [new file with mode: 0644]