mlx4: use bitmap_find_next_zero_area

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
Reviewed-by: Roland Dreier <rolandd@cisco.com>
Cc: Yevgeny Petrilin <yevgenyp@mellanox.co.il>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Akinobu Mita 2009-12-15 16:48:29 -08:00 committed by Linus Torvalds
parent 735e1b9ade
commit 43ff8b6085
1 changed files with 4 additions and 33 deletions

View File

@ -72,35 +72,6 @@ void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj)
mlx4_bitmap_free_range(bitmap, obj, 1); mlx4_bitmap_free_range(bitmap, obj, 1);
} }
static unsigned long find_aligned_range(unsigned long *bitmap,
u32 start, u32 nbits,
int len, int align)
{
unsigned long end, i;
again:
start = ALIGN(start, align);
while ((start < nbits) && test_bit(start, bitmap))
start += align;
if (start >= nbits)
return -1;
end = start+len;
if (end > nbits)
return -1;
for (i = start + 1; i < end; i++) {
if (test_bit(i, bitmap)) {
start = i + 1;
goto again;
}
}
return start;
}
u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align) u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align)
{ {
u32 obj, i; u32 obj, i;
@ -110,13 +81,13 @@ u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align)
spin_lock(&bitmap->lock); spin_lock(&bitmap->lock);
obj = find_aligned_range(bitmap->table, bitmap->last, obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max,
bitmap->max, cnt, align); bitmap->last, cnt, align - 1);
if (obj >= bitmap->max) { if (obj >= bitmap->max) {
bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top) bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top)
& bitmap->mask; & bitmap->mask;
obj = find_aligned_range(bitmap->table, 0, bitmap->max, obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max,
cnt, align); 0, cnt, align - 1);
} }
if (obj < bitmap->max) { if (obj < bitmap->max) {