|
@@ -71,9 +71,9 @@ u32 mlx4_bitmap_alloc(struct mlx4_bitmap *bitmap)
|
|
|
return obj;
|
|
|
}
|
|
|
|
|
|
-void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj)
|
|
|
+void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj, int use_rr)
|
|
|
{
|
|
|
- mlx4_bitmap_free_range(bitmap, obj, 1);
|
|
|
+ mlx4_bitmap_free_range(bitmap, obj, 1, use_rr);
|
|
|
}
|
|
|
|
|
|
u32 mlx4_bitmap_alloc_range(struct mlx4_bitmap *bitmap, int cnt, int align)
|
|
@@ -118,11 +118,17 @@ u32 mlx4_bitmap_avail(struct mlx4_bitmap *bitmap)
|
|
|
return bitmap->avail;
|
|
|
}
|
|
|
|
|
|
-void mlx4_bitmap_free_range(struct mlx4_bitmap *bitmap, u32 obj, int cnt)
|
|
|
+void mlx4_bitmap_free_range(struct mlx4_bitmap *bitmap, u32 obj, int cnt,
|
|
|
+ int use_rr)
|
|
|
{
|
|
|
obj &= bitmap->max + bitmap->reserved_top - 1;
|
|
|
|
|
|
spin_lock(&bitmap->lock);
|
|
|
+ if (!use_rr) {
|
|
|
+ bitmap->last = min(bitmap->last, obj);
|
|
|
+ bitmap->top = (bitmap->top + bitmap->max + bitmap->reserved_top)
|
|
|
+ & bitmap->mask;
|
|
|
+ }
|
|
|
bitmap_clear(bitmap->table, obj, cnt);
|
|
|
bitmap->avail += cnt;
|
|
|
spin_unlock(&bitmap->lock);
|