Lines Matching refs:alloc
44 u32 c4iw_id_alloc(struct c4iw_id_table *alloc)
49 spin_lock_irqsave(&alloc->lock, flags);
51 obj = find_next_zero_bit(alloc->table, alloc->max, alloc->last);
52 if (obj >= alloc->max)
53 obj = find_first_zero_bit(alloc->table, alloc->max);
55 if (obj < alloc->max) {
56 if (alloc->flags & C4IW_ID_TABLE_F_RANDOM)
57 alloc->last += prandom_u32() % RANDOM_SKIP;
59 alloc->last = obj + 1;
60 if (alloc->last >= alloc->max)
61 alloc->last = 0;
62 set_bit(obj, alloc->table);
63 obj += alloc->start;
67 spin_unlock_irqrestore(&alloc->lock, flags);
71 void c4iw_id_free(struct c4iw_id_table *alloc, u32 obj)
75 obj -= alloc->start;
77 spin_lock_irqsave(&alloc->lock, flags);
78 clear_bit(obj, alloc->table);
79 spin_unlock_irqrestore(&alloc->lock, flags);
82 int c4iw_id_table_alloc(struct c4iw_id_table *alloc, u32 start, u32 num,
87 alloc->start = start;
88 alloc->flags = flags;
90 alloc->last = prandom_u32() % RANDOM_SKIP;
92 alloc->last = 0;
93 alloc->max = num;
94 spin_lock_init(&alloc->lock);
95 alloc->table = kmalloc_array(BITS_TO_LONGS(num), sizeof(long),
97 if (!alloc->table)
100 bitmap_zero(alloc->table, num);
101 if (!(alloc->flags & C4IW_ID_TABLE_F_EMPTY))
103 set_bit(i, alloc->table);
108 void c4iw_id_table_free(struct c4iw_id_table *alloc)
110 kfree(alloc->table);