• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-12-stable/sys/compat/linuxkpi/common/src/

Lines Matching defs:idr

46 #include <linux/idr.h>
67 static MALLOC_DEFINE(M_IDR, "idr", "Linux IDR compat");
160 idr_max(struct idr *idr)
162 return (1 << (idr->layers * IDR_BITS)) - 1;
172 idr_init(struct idr *idr)
174 bzero(idr, sizeof(*idr));
175 mtx_init(&idr->lock, "idr", NULL, MTX_DEF);
180 idr_destroy(struct idr *idr)
184 idr_remove_all(idr);
185 mtx_lock(&idr->lock);
186 for (il = idr->free; il != NULL; il = iln) {
190 mtx_unlock(&idr->lock);
191 mtx_destroy(&idr->lock);
211 idr_remove_all(struct idr *idr)
214 mtx_lock(&idr->lock);
215 idr_remove_layer(idr->top, idr->layers - 1);
216 idr->top = NULL;
217 idr->layers = 0;
218 mtx_unlock(&idr->lock);
222 idr_remove_locked(struct idr *idr, int id)
230 il = idr->top;
231 layer = idr->layers - 1;
232 if (il == NULL || id > idr_max(idr))
252 id, idr, il);
261 idr_remove(struct idr *idr, int id)
265 mtx_lock(&idr->lock);
266 res = idr_remove_locked(idr, id);
267 mtx_unlock(&idr->lock);
274 idr_find_layer_locked(struct idr *idr, int id)
280 il = idr->top;
281 layer = idr->layers - 1;
282 if (il == NULL || id > idr_max(idr))
292 idr_replace(struct idr *idr, void *ptr, int id)
298 mtx_lock(&idr->lock);
299 il = idr_find_layer_locked(idr, id);
309 mtx_unlock(&idr->lock);
314 idr_find_locked(struct idr *idr, int id)
319 mtx_assert(&idr->lock, MA_OWNED);
320 il = idr_find_layer_locked(idr, id);
329 idr_find(struct idr *idr, int id)
333 mtx_lock(&idr->lock);
334 res = idr_find_locked(idr, id);
335 mtx_unlock(&idr->lock);
340 idr_get_next(struct idr *idr, int *nextidp)
345 mtx_lock(&idr->lock);
346 for (; id <= idr_max(idr); id++) {
347 res = idr_find_locked(idr, id);
353 mtx_unlock(&idr->lock);
358 idr_pre_get(struct idr *idr, gfp_t gfp_mask)
364 mtx_lock(&idr->lock);
366 need = idr->layers + 1;
367 for (il = idr->free; il != NULL; il = il->ary[0])
369 mtx_unlock(&idr->lock);
385 mtx_lock(&idr->lock);
386 il->ary[0] = idr->free;
387 idr->free = head;
393 idr_free_list_get(struct idr *idp)
405 idr_get(struct idr *idp)
422 * Could be implemented as get_new_above(idr, ptr, 0, idp) but written
426 idr_get_new_locked(struct idr *idr, void *ptr, int *idp)
435 mtx_assert(&idr->lock, MA_OWNED);
441 if (idr->top == NULL || idr->top->bitmap == 0) {
442 if (idr->layers == MAX_LEVEL + 1) {
446 il = idr_get(idr);
449 il->ary[0] = idr->top;
450 if (idr->top)
452 idr->top = il;
453 idr->layers++;
455 il = idr->top;
460 for (layer = idr->layers - 1;; layer--) {
465 idr, il);
471 il->ary[idx] = idr_get(idr);
486 while (il->bitmap == 0 && ++layer < idr->layers) {
493 if (error == 0 && idr_find_locked(idr, id) != ptr) {
494 panic("idr_get_new: Failed for idr %p, id %d, ptr %p\n",
495 idr, id, ptr);
502 idr_get_new(struct idr *idr, void *ptr, int *idp)
506 mtx_lock(&idr->lock);
507 retval = idr_get_new_locked(idr, ptr, idp);
508 mtx_unlock(&idr->lock);
513 idr_get_new_above_locked(struct idr *idr, void *ptr, int starting_id, int *idp)
522 mtx_assert(&idr->lock, MA_OWNED);
543 while (idr->layers <= layer ||
544 idr->top->bitmap < (1 << idr_pos(starting_id, idr->layers - 1))) {
545 if (idr->layers == MAX_LEVEL + 1) {
549 il = idr_get(idr);
552 il->ary[0] = idr->top;
553 if (idr->top && idr->top->bitmap == 0)
555 idr->top = il;
556 idr->layers++;
558 il = idr->top;
563 for (layer = idr->layers - 1;; layer--) {
570 idr, il);
589 il->ary[idx] = idr_get(idr);
604 while (il->bitmap == 0 && ++layer < idr->layers) {
611 if (error == 0 && idr_find_locked(idr, id) != ptr) {
612 panic("idr_get_new_above: Failed for idr %p, id %d, ptr %p\n",
613 idr, id, ptr);
620 idr_get_new_above(struct idr *idr, void *ptr, int starting_id, int *idp)
624 mtx_lock(&idr->lock);
625 retval = idr_get_new_above_locked(idr, ptr, starting_id, idp);
626 mtx_unlock(&idr->lock);
633 return (idr_get_new_above(&ida->idr, NULL, starting_id, p_id));
637 idr_alloc_locked(struct idr *idr, void *ptr, int start, int end)
643 mtx_assert(&idr->lock, MA_OWNED);
651 error = idr_get_new_locked(idr, ptr, &id);
653 error = idr_get_new_above_locked(idr, ptr, start, &id);
658 idr_remove_locked(idr, id);
665 idr_alloc(struct idr *idr, void *ptr, int start, int end, gfp_t gfp_mask)
669 mtx_lock(&idr->lock);
670 retval = idr_alloc_locked(idr, ptr, start, end);
671 mtx_unlock(&idr->lock);
676 idr_alloc_cyclic(struct idr *idr, void *ptr, int start, int end, gfp_t gfp_mask)
680 mtx_lock(&idr->lock);
681 retval = idr_alloc_locked(idr, ptr, max(start, idr->next_cyclic_id), end);
683 retval = idr_alloc_locked(idr, ptr, start, end);
685 idr->next_cyclic_id = retval + 1;
686 mtx_unlock(&idr->lock);
721 idr_for_each(struct idr *idp, int (*f)(int id, void *p, void *data), void *data)
734 idr_is_empty(struct idr *idp)
743 if (idr_pre_get(&ida->idr, flags) == 0)
790 idr_remove(&ida->idr, id);
796 idr_remove(&ida->idr, id);
802 idr_init(&ida->idr);
808 idr_destroy(&ida->idr);