Lines Matching refs:bitmap
35 #include <linux/bitmap.h>
40 u32 mlx4_bitmap_alloc(struct mlx4_bitmap *bitmap)
44 spin_lock(&bitmap->lock);
46 obj = find_next_zero_bit(bitmap->table, bitmap->max, bitmap->last);
47 if (obj >= bitmap->max) {
48 bitmap->top = (bitmap->top + bitmap->max) & bitmap->mask;
49 obj = find_first_zero_bit(bitmap->table, bitmap->max);
52 if (obj < bitmap->max) {
53 set_bit(obj, bitmap->table);
54 bitmap->last = (obj + 1) & (bitmap->max - 1);
55 obj |= bitmap->top;
59 spin_unlock(&bitmap->lock);
64 void mlx4_bitmap_free(struct mlx4_bitmap *bitmap, u32 obj)
66 obj &= bitmap->max - 1;
68 spin_lock(&bitmap->lock);
69 clear_bit(obj, bitmap->table);
70 bitmap->last = min(bitmap->last, obj);
71 bitmap->top = (bitmap->top + bitmap->max) & bitmap->mask;
72 spin_unlock(&bitmap->lock);
75 int mlx4_bitmap_init(struct mlx4_bitmap *bitmap, u32 num, u32 mask, u32 reserved)
83 bitmap->last = 0;
84 bitmap->top = 0;
85 bitmap->max = num;
86 bitmap->mask = mask;
87 spin_lock_init(&bitmap->lock);
88 bitmap->table = kzalloc(BITS_TO_LONGS(num) * sizeof (long), GFP_KERNEL);
89 if (!bitmap->table)
93 set_bit(i, bitmap->table);
98 void mlx4_bitmap_cleanup(struct mlx4_bitmap *bitmap)
100 kfree(bitmap->table);