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:
parent
735e1b9ade
commit
43ff8b6085
@ -72,35 +72,6 @@ void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj)
|
||||
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 obj, i;
|
||||
@ -110,13 +81,13 @@ u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align)
|
||||
|
||||
spin_lock(&bitmap->lock);
|
||||
|
||||
obj = find_aligned_range(bitmap->table, bitmap->last,
|
||||
bitmap->max, cnt, align);
|
||||
obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max,
|
||||
bitmap->last, cnt, align - 1);
|
||||
if (obj >= bitmap->max) {
|
||||
bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top)
|
||||
& bitmap->mask;
|
||||
obj = find_aligned_range(bitmap->table, 0, bitmap->max,
|
||||
cnt, align);
|
||||
obj = bitmap_find_next_zero_area(bitmap->table, bitmap->max,
|
||||
0, cnt, align - 1);
|
||||
}
|
||||
|
||||
if (obj < bitmap->max) {
|
||||
|
Loading…
Reference in New Issue
Block a user