]> git.itanic.dy.fi Git - linux-stable/commitdiff
net/mlx5: DR, Initialize chunk's ste_arrays at chunk creation
authorYevgeny Kliteynik <kliteyn@nvidia.com>
Wed, 25 May 2022 22:31:27 +0000 (01:31 +0300)
committerSaeed Mahameed <saeedm@nvidia.com>
Thu, 27 Oct 2022 14:50:38 +0000 (15:50 +0100)
Rather than cleaning the corresponding chunk's section of ste_arrays on
chunk deletion, initialize these areas upon chunk creation.

Chunk destruction tend to come in large batches (during pool syncing).
To reduce the "hiccup" in such cases, moving ste_arrays init from chunk
destruction to initialization.

Signed-off-by: Yevgeny Kliteynik <kliteyn@nvidia.com>
Reviewed-by: Alex Vesker <valex@nvidia.com>
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c

index 4cdc9e9a54e13f3061f40cb776373baa9217d406..7ca1ef073f550d2225204d761e4198d7ef943032 100644 (file)
@@ -177,42 +177,25 @@ static int dr_icm_buddy_get_ste_size(struct mlx5dr_icm_buddy_mem *buddy)
 
 static void dr_icm_chunk_ste_init(struct mlx5dr_icm_chunk *chunk, int offset)
 {
+       int num_of_entries = mlx5dr_icm_pool_get_chunk_num_of_entries(chunk);
        struct mlx5dr_icm_buddy_mem *buddy = chunk->buddy_mem;
+       int ste_size = dr_icm_buddy_get_ste_size(buddy);
        int index = offset / DR_STE_SIZE;
 
        chunk->ste_arr = &buddy->ste_arr[index];
        chunk->miss_list = &buddy->miss_list[index];
-       chunk->hw_ste_arr = buddy->hw_ste_arr +
-                           index * dr_icm_buddy_get_ste_size(buddy);
-}
-
-static void dr_icm_chunk_ste_cleanup(struct mlx5dr_icm_chunk *chunk)
-{
-       int num_of_entries = mlx5dr_icm_pool_get_chunk_num_of_entries(chunk);
-       struct mlx5dr_icm_buddy_mem *buddy = chunk->buddy_mem;
+       chunk->hw_ste_arr = buddy->hw_ste_arr + index * ste_size;
 
-       memset(chunk->hw_ste_arr, 0,
-              num_of_entries * dr_icm_buddy_get_ste_size(buddy));
+       memset(chunk->hw_ste_arr, 0, num_of_entries * ste_size);
        memset(chunk->ste_arr, 0,
               num_of_entries * sizeof(chunk->ste_arr[0]));
 }
 
-static enum mlx5dr_icm_type
-get_chunk_icm_type(struct mlx5dr_icm_chunk *chunk)
-{
-       return chunk->buddy_mem->pool->icm_type;
-}
-
 static void dr_icm_chunk_destroy(struct mlx5dr_icm_chunk *chunk)
 {
-       enum mlx5dr_icm_type icm_type = get_chunk_icm_type(chunk);
-
        chunk->buddy_mem->used_memory -= mlx5dr_icm_pool_get_chunk_byte_size(chunk);
        list_del(&chunk->chunk_list);
 
-       if (icm_type == DR_ICM_TYPE_STE)
-               dr_icm_chunk_ste_cleanup(chunk);
-
        kvfree(chunk);
 }