Lines Matching refs:ida
366 static int ida_get_new_above(struct ida *ida, int start) in ida_get_new_above() argument
368 struct radix_tree_root *root = &ida->ida_rt; in ida_get_new_above()
450 static void ida_remove(struct ida *ida, int id) in ida_remove() argument
459 slot = radix_tree_iter_lookup(&ida->ida_rt, &iter, index); in ida_remove()
476 radix_tree_iter_tag_set(&ida->ida_rt, &iter, IDR_FREE); in ida_remove()
480 radix_tree_iter_delete(&ida->ida_rt, &iter, slot); in ida_remove()
483 radix_tree_iter_delete(&ida->ida_rt, &iter, slot); in ida_remove()
501 void ida_destroy(struct ida *ida) in ida_destroy() argument
507 xa_lock_irqsave(&ida->ida_rt, flags); in ida_destroy()
508 radix_tree_for_each_slot(slot, &ida->ida_rt, &iter, 0) { in ida_destroy()
512 radix_tree_iter_delete(&ida->ida_rt, &iter, slot); in ida_destroy()
514 xa_unlock_irqrestore(&ida->ida_rt, flags); in ida_destroy()
532 int ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max, in ida_alloc_range() argument
545 xa_lock_irqsave(&ida->ida_rt, flags); in ida_alloc_range()
546 id = ida_get_new_above(ida, min); in ida_alloc_range()
548 ida_remove(ida, id); in ida_alloc_range()
551 xa_unlock_irqrestore(&ida->ida_rt, flags); in ida_alloc_range()
554 if (!ida_pre_get(ida, gfp)) in ida_alloc_range()
570 void ida_free(struct ida *ida, unsigned int id) in ida_free() argument
575 xa_lock_irqsave(&ida->ida_rt, flags); in ida_free()
576 ida_remove(ida, id); in ida_free()
577 xa_unlock_irqrestore(&ida->ida_rt, flags); in ida_free()