MLX5_LOG_SW_ICM_BLOCK_SIZE(dev));
 
                dm->steering_sw_icm_alloc_blocks =
-                       kcalloc(BITS_TO_LONGS(steering_icm_blocks),
-                               sizeof(unsigned long), GFP_KERNEL);
+                       bitmap_zalloc(steering_icm_blocks, GFP_KERNEL);
                if (!dm->steering_sw_icm_alloc_blocks)
                        goto err_steering;
        }
                            MLX5_LOG_SW_ICM_BLOCK_SIZE(dev));
 
                dm->header_modify_sw_icm_alloc_blocks =
-                       kcalloc(BITS_TO_LONGS(header_modify_icm_blocks),
-                               sizeof(unsigned long), GFP_KERNEL);
+                       bitmap_zalloc(header_modify_icm_blocks, GFP_KERNEL);
                if (!dm->header_modify_sw_icm_alloc_blocks)
                        goto err_modify_hdr;
        }
                            MLX5_LOG_SW_ICM_BLOCK_SIZE(dev));
 
                dm->header_modify_pattern_sw_icm_alloc_blocks =
-                       kcalloc(BITS_TO_LONGS(header_modify_pattern_icm_blocks),
-                               sizeof(unsigned long), GFP_KERNEL);
+                       bitmap_zalloc(header_modify_pattern_icm_blocks, GFP_KERNEL);
                if (!dm->header_modify_pattern_sw_icm_alloc_blocks)
                        goto err_pattern;
        }
        return dm;
 
 err_pattern:
-       kfree(dm->header_modify_sw_icm_alloc_blocks);
+       bitmap_free(dm->header_modify_sw_icm_alloc_blocks);
 
 err_modify_hdr:
-       kfree(dm->steering_sw_icm_alloc_blocks);
+       bitmap_free(dm->steering_sw_icm_alloc_blocks);
 
 err_steering:
        kfree(dm);
                WARN_ON(!bitmap_empty(dm->steering_sw_icm_alloc_blocks,
                                      BIT(MLX5_CAP_DEV_MEM(dev, log_steering_sw_icm_size) -
                                          MLX5_LOG_SW_ICM_BLOCK_SIZE(dev))));
-               kfree(dm->steering_sw_icm_alloc_blocks);
+               bitmap_free(dm->steering_sw_icm_alloc_blocks);
        }
 
        if (dm->header_modify_sw_icm_alloc_blocks) {
                                      BIT(MLX5_CAP_DEV_MEM(dev,
                                                           log_header_modify_sw_icm_size) -
                                      MLX5_LOG_SW_ICM_BLOCK_SIZE(dev))));
-               kfree(dm->header_modify_sw_icm_alloc_blocks);
+               bitmap_free(dm->header_modify_sw_icm_alloc_blocks);
        }
 
        if (dm->header_modify_pattern_sw_icm_alloc_blocks) {
                                      BIT(MLX5_CAP_DEV_MEM(dev,
                                                           log_header_modify_pattern_sw_icm_size) -
                                          MLX5_LOG_SW_ICM_BLOCK_SIZE(dev))));
-               kfree(dm->header_modify_pattern_sw_icm_alloc_blocks);
+               bitmap_free(dm->header_modify_pattern_sw_icm_alloc_blocks);
        }
 
        kfree(dm);