mlx4_core: Keep free count for MTT buddy allocator
authorRoland Dreier <rolandd@cisco.com>
Tue, 22 Jul 2008 21:19:40 +0000 (14:19 -0700)
committerRoland Dreier <rolandd@cisco.com>
Tue, 22 Jul 2008 21:19:40 +0000 (14:19 -0700)
commite4044cfc493338cd09870bd45dc646336bb66e9f
tree2385c18ee6a79393b4e1c5c25ee1f0f980d7da93
parent899698dad72340b562478b8b770317f2f0fe0c09
mlx4_core: Keep free count for MTT buddy allocator

MTT entries are allocated with a buddy allocator, which just keeps
bitmaps for each level of the buddy table.  However, all free space
starts out at the highest order, and small allocations start scanning
from the lowest order.  When the lowest order tables have no free
space, this can lead to scanning potentially millions of bits before
finding a free entry at a higher order.

We can avoid this by just keeping a count of how many free entries
each order has, and skipping the bitmap scan when an order is
completely empty.  This provides a nice performance boost for a
negligible increase in memory usage.

Signed-off-by: Roland Dreier <rolandd@cisco.com>
drivers/net/mlx4/mlx4.h
drivers/net/mlx4/mr.c