Commit 6d135d9e authored by Christophe JAILLET's avatar Christophe JAILLET Committed by Jakub Kicinski

octeontx2-af: Fix the size of memory allocated for the 'id_bmap' bitmap

This allocation is really spurious.
The size of the bitmap is 'tot_ids' and it is used as such in the driver.

So we could expect something like:
   table->id_bmap = devm_kcalloc(rvu->dev, BITS_TO_LONGS(table->tot_ids),
			         sizeof(long), GFP_KERNEL);

However, when the bitmap is allocated, we allocate:
   BITS_TO_LONGS(table->tot_ids) * table->tot_ids ~=
   table->tot_ids / 32 * table->tot_ids ~=
   table->tot_ids^2 / 32

It is proportional to the square of 'table->tot_ids' which seems to
potentially be big.

Allocate the expected amount of memory, and switch to the bitmap API to
have it more straightforward.
Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/ce2710771939065d68f95d86a27cf7cea7966365.1669378798.git.christophe.jaillet@wanadoo.frSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 05a7b52e
...@@ -1914,8 +1914,8 @@ int rvu_npc_exact_init(struct rvu *rvu) ...@@ -1914,8 +1914,8 @@ int rvu_npc_exact_init(struct rvu *rvu)
dev_dbg(rvu->dev, "%s: Allocated bitmap for 32 entry cam\n", __func__); dev_dbg(rvu->dev, "%s: Allocated bitmap for 32 entry cam\n", __func__);
table->tot_ids = (table->mem_table.depth * table->mem_table.ways) + table->cam_table.depth; table->tot_ids = (table->mem_table.depth * table->mem_table.ways) + table->cam_table.depth;
table->id_bmap = devm_kcalloc(rvu->dev, BITS_TO_LONGS(table->tot_ids), table->id_bmap = devm_bitmap_zalloc(rvu->dev, table->tot_ids,
table->tot_ids, GFP_KERNEL); GFP_KERNEL);
if (!table->id_bmap) if (!table->id_bmap)
return -ENOMEM; return -ENOMEM;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment