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);
|
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) {
|
||||||
|
|
Loading…
Reference in New Issue