Lines Matching defs:id_tbl
656 static int cnic_init_id_tbl(struct cnic_id_tbl *id_tbl, u32 size, u32 start_id,
659 id_tbl->start = start_id;
660 id_tbl->max = size;
661 id_tbl->next = next;
662 spin_lock_init(&id_tbl->lock);
663 id_tbl->table = bitmap_zalloc(size, GFP_KERNEL);
664 if (!id_tbl->table)
670 static void cnic_free_id_tbl(struct cnic_id_tbl *id_tbl)
672 bitmap_free(id_tbl->table);
673 id_tbl->table = NULL;
676 static int cnic_alloc_id(struct cnic_id_tbl *id_tbl, u32 id)
680 id -= id_tbl->start;
681 if (id >= id_tbl->max)
684 spin_lock(&id_tbl->lock);
685 if (!test_bit(id, id_tbl->table)) {
686 set_bit(id, id_tbl->table);
689 spin_unlock(&id_tbl->lock);
694 static u32 cnic_alloc_new_id(struct cnic_id_tbl *id_tbl)
698 spin_lock(&id_tbl->lock);
699 id = find_next_zero_bit(id_tbl->table, id_tbl->max, id_tbl->next);
700 if (id >= id_tbl->max) {
702 if (id_tbl->next != 0) {
703 id = find_first_zero_bit(id_tbl->table, id_tbl->next);
704 if (id >= id_tbl->next)
709 if (id < id_tbl->max) {
710 set_bit(id, id_tbl->table);
711 id_tbl->next = (id + 1) & (id_tbl->max - 1);
712 id += id_tbl->start;
715 spin_unlock(&id_tbl->lock);
720 static void cnic_free_id(struct cnic_id_tbl *id_tbl, u32 id)
725 id -= id_tbl->start;
726 if (id >= id_tbl->max)
729 clear_bit(id, id_tbl->table);