icm_mr 103 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c struct mlx5dr_icm_mr *icm_mr; icm_mr 107 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr = kvzalloc(sizeof(*icm_mr), GFP_KERNEL); icm_mr 108 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c if (!icm_mr) icm_mr 111 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr->pool = pool; icm_mr 112 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c INIT_LIST_HEAD(&icm_mr->mr_list); icm_mr 114 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr->dm.type = type; icm_mr 117 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr->dm.length = mlx5dr_icm_pool_chunk_size_to_byte(pool->max_log_chunk_sz, icm_mr 120 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c err = mlx5_dm_sw_icm_alloc(mdev, icm_mr->dm.type, icm_mr->dm.length, 0, icm_mr 121 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c &icm_mr->dm.addr, &icm_mr->dm.obj_id); icm_mr 129 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr->dm.length, icm_mr 130 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr->dm.addr, icm_mr 132 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c &icm_mr->mkey); icm_mr 138 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr->icm_start_addr = icm_mr->dm.addr; icm_mr 141 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c align_diff = icm_mr->icm_start_addr & (align_base - 1); icm_mr 143 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr->used_length = align_base - align_diff; icm_mr 145 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c list_add_tail(&icm_mr->mr_list, &pool->icm_mr_list); icm_mr 147 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c return icm_mr; icm_mr 150 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c mlx5_dm_sw_icm_dealloc(mdev, icm_mr->dm.type, icm_mr->dm.length, 0, icm_mr 151 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr->dm.addr, icm_mr->dm.obj_id); icm_mr 153 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c kvfree(icm_mr); icm_mr 157 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c static void dr_icm_pool_mr_destroy(struct mlx5dr_icm_mr *icm_mr) icm_mr 159 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c struct mlx5_core_dev *mdev = icm_mr->pool->dmn->mdev; icm_mr 160 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c struct mlx5dr_icm_dm *dm = &icm_mr->dm; icm_mr 162 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c list_del(&icm_mr->mr_list); icm_mr 163 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c mlx5_core_destroy_mkey(mdev, &icm_mr->mkey); icm_mr 166 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c kvfree(icm_mr); icm_mr 201 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c struct mlx5dr_icm_mr *icm_mr = NULL; icm_mr 223 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr = list_last_entry(&pool->icm_mr_list, icm_mr 226 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c if (icm_mr) icm_mr 227 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c mr_free_size = icm_mr->dm.length - icm_mr->used_length; icm_mr 230 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c if (!icm_mr || mr_free_size < mr_row_size) { icm_mr 231 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr = dr_icm_pool_mr_create(pool, dm_type, align_base); icm_mr 232 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c if (!icm_mr) { icm_mr 247 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c chunk->rkey = icm_mr->mkey.key; icm_mr 249 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c chunk->mr_addr = icm_mr->used_length; icm_mr 250 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c chunk->icm_addr = (uintptr_t)icm_mr->icm_start_addr + icm_mr->used_length; icm_mr 251 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c icm_mr->used_length += mr_req_size; icm_mr 558 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c struct mlx5dr_icm_mr *icm_mr, *next; icm_mr 563 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c list_for_each_entry_safe(icm_mr, next, &pool->icm_mr_list, mr_list) icm_mr 564 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_icm_pool.c dr_icm_pool_mr_destroy(icm_mr);