1 /* 2 * 2002-10-18 written by Jim Houston jim.houston@ccur.com 3 * Copyright (C) 2002 by Concurrent Computer Corporation 4 * Distributed under the GNU GPL license version 2. 5 * 6 * Modified by George Anzinger to reuse immediately and to use 7 * find bit instructions. Also removed _irq on spinlocks. 8 * 9 * Modified by Nadia Derbey to make it RCU safe. 10 * 11 * Small id to pointer translation service. 12 * 13 * It uses a radix tree like structure as a sparse array indexed 14 * by the id to obtain the pointer. The bitmap makes allocating 15 * a new id quick. 16 * 17 * You call it to allocate an id (an int) an associate with that id a 18 * pointer or what ever, we treat it as a (void *). You can pass this 19 * id to a user for him to pass back at a later time. You then pass 20 * that id to this code and it returns your pointer. 21 22 * You can release ids at any time. When all ids are released, most of 23 * the memory is returned (we keep IDR_FREE_MAX) in a local pool so we 24 * don't need to go to the memory "store" during an id allocate, just 25 * so you don't need to be too concerned about locking and conflicts 26 * with the slab allocator. 27 */ 28 29 #ifndef TEST // to test in user space... 30 #include <linux/slab.h> 31 #include <linux/init.h> 32 #include <linux/module.h> 33 #endif 34 #include <linux/err.h> 35 #include <linux/string.h> 36 #include <linux/idr.h> 37 38 static struct kmem_cache *idr_layer_cache; 39 40 static struct idr_layer *get_from_free_list(struct idr *idp) 41 { 42 struct idr_layer *p; 43 unsigned long flags; 44 45 spin_lock_irqsave(&idp->lock, flags); 46 if ((p = idp->id_free)) { 47 idp->id_free = p->ary[0]; 48 idp->id_free_cnt--; 49 p->ary[0] = NULL; 50 } 51 spin_unlock_irqrestore(&idp->lock, flags); 52 return(p); 53 } 54 55 static void idr_layer_rcu_free(struct rcu_head *head) 56 { 57 struct idr_layer *layer; 58 59 layer = container_of(head, struct idr_layer, rcu_head); 60 kmem_cache_free(idr_layer_cache, layer); 61 } 62 63 static inline void free_layer(struct idr_layer *p) 64 { 65 call_rcu(&p->rcu_head, idr_layer_rcu_free); 66 } 67 68 /* only called when idp->lock is held */ 69 static void __move_to_free_list(struct idr *idp, struct idr_layer *p) 70 { 71 p->ary[0] = idp->id_free; 72 idp->id_free = p; 73 idp->id_free_cnt++; 74 } 75 76 static void move_to_free_list(struct idr *idp, struct idr_layer *p) 77 { 78 unsigned long flags; 79 80 /* 81 * Depends on the return element being zeroed. 82 */ 83 spin_lock_irqsave(&idp->lock, flags); 84 __move_to_free_list(idp, p); 85 spin_unlock_irqrestore(&idp->lock, flags); 86 } 87 88 static void idr_mark_full(struct idr_layer **pa, int id) 89 { 90 struct idr_layer *p = pa[0]; 91 int l = 0; 92 93 __set_bit(id & IDR_MASK, &p->bitmap); 94 /* 95 * If this layer is full mark the bit in the layer above to 96 * show that this part of the radix tree is full. This may 97 * complete the layer above and require walking up the radix 98 * tree. 99 */ 100 while (p->bitmap == IDR_FULL) { 101 if (!(p = pa[++l])) 102 break; 103 id = id >> IDR_BITS; 104 __set_bit((id & IDR_MASK), &p->bitmap); 105 } 106 } 107 108 /** 109 * idr_pre_get - reserver resources for idr allocation 110 * @idp: idr handle 111 * @gfp_mask: memory allocation flags 112 * 113 * This function should be called prior to locking and calling the 114 * idr_get_new* functions. It preallocates enough memory to satisfy 115 * the worst possible allocation. 116 * 117 * If the system is REALLY out of memory this function returns 0, 118 * otherwise 1. 119 */ 120 int idr_pre_get(struct idr *idp, gfp_t gfp_mask) 121 { 122 while (idp->id_free_cnt < IDR_FREE_MAX) { 123 struct idr_layer *new; 124 new = kmem_cache_zalloc(idr_layer_cache, gfp_mask); 125 if (new == NULL) 126 return (0); 127 move_to_free_list(idp, new); 128 } 129 return 1; 130 } 131 EXPORT_SYMBOL(idr_pre_get); 132 133 static int sub_alloc(struct idr *idp, int *starting_id, struct idr_layer **pa) 134 { 135 int n, m, sh; 136 struct idr_layer *p, *new; 137 int l, id, oid; 138 unsigned long bm; 139 140 id = *starting_id; 141 restart: 142 p = idp->top; 143 l = idp->layers; 144 pa[l--] = NULL; 145 while (1) { 146 /* 147 * We run around this while until we reach the leaf node... 148 */ 149 n = (id >> (IDR_BITS*l)) & IDR_MASK; 150 bm = ~p->bitmap; 151 m = find_next_bit(&bm, IDR_SIZE, n); 152 if (m == IDR_SIZE) { 153 /* no space available go back to previous layer. */ 154 l++; 155 oid = id; 156 id = (id | ((1 << (IDR_BITS * l)) - 1)) + 1; 157 158 /* if already at the top layer, we need to grow */ 159 if (id >= 1 << (idp->layers * IDR_BITS)) { 160 *starting_id = id; 161 return IDR_NEED_TO_GROW; 162 } 163 p = pa[l]; 164 BUG_ON(!p); 165 166 /* If we need to go up one layer, continue the 167 * loop; otherwise, restart from the top. 168 */ 169 sh = IDR_BITS * (l + 1); 170 if (oid >> sh == id >> sh) 171 continue; 172 else 173 goto restart; 174 } 175 if (m != n) { 176 sh = IDR_BITS*l; 177 id = ((id >> sh) ^ n ^ m) << sh; 178 } 179 if ((id >= MAX_ID_BIT) || (id < 0)) 180 return IDR_NOMORE_SPACE; 181 if (l == 0) 182 break; 183 /* 184 * Create the layer below if it is missing. 185 */ 186 if (!p->ary[m]) { 187 new = get_from_free_list(idp); 188 if (!new) 189 return -1; 190 new->layer = l-1; 191 rcu_assign_pointer(p->ary[m], new); 192 p->count++; 193 } 194 pa[l--] = p; 195 p = p->ary[m]; 196 } 197 198 pa[l] = p; 199 return id; 200 } 201 202 static int idr_get_empty_slot(struct idr *idp, int starting_id, 203 struct idr_layer **pa) 204 { 205 struct idr_layer *p, *new; 206 int layers, v, id; 207 unsigned long flags; 208 209 id = starting_id; 210 build_up: 211 p = idp->top; 212 layers = idp->layers; 213 if (unlikely(!p)) { 214 if (!(p = get_from_free_list(idp))) 215 return -1; 216 p->layer = 0; 217 layers = 1; 218 } 219 /* 220 * Add a new layer to the top of the tree if the requested 221 * id is larger than the currently allocated space. 222 */ 223 while ((layers < (MAX_LEVEL - 1)) && (id >= (1 << (layers*IDR_BITS)))) { 224 layers++; 225 if (!p->count) { 226 /* special case: if the tree is currently empty, 227 * then we grow the tree by moving the top node 228 * upwards. 229 */ 230 p->layer++; 231 continue; 232 } 233 if (!(new = get_from_free_list(idp))) { 234 /* 235 * The allocation failed. If we built part of 236 * the structure tear it down. 237 */ 238 spin_lock_irqsave(&idp->lock, flags); 239 for (new = p; p && p != idp->top; new = p) { 240 p = p->ary[0]; 241 new->ary[0] = NULL; 242 new->bitmap = new->count = 0; 243 __move_to_free_list(idp, new); 244 } 245 spin_unlock_irqrestore(&idp->lock, flags); 246 return -1; 247 } 248 new->ary[0] = p; 249 new->count = 1; 250 new->layer = layers-1; 251 if (p->bitmap == IDR_FULL) 252 __set_bit(0, &new->bitmap); 253 p = new; 254 } 255 rcu_assign_pointer(idp->top, p); 256 idp->layers = layers; 257 v = sub_alloc(idp, &id, pa); 258 if (v == IDR_NEED_TO_GROW) 259 goto build_up; 260 return(v); 261 } 262 263 static int idr_get_new_above_int(struct idr *idp, void *ptr, int starting_id) 264 { 265 struct idr_layer *pa[MAX_LEVEL]; 266 int id; 267 268 id = idr_get_empty_slot(idp, starting_id, pa); 269 if (id >= 0) { 270 /* 271 * Successfully found an empty slot. Install the user 272 * pointer and mark the slot full. 273 */ 274 rcu_assign_pointer(pa[0]->ary[id & IDR_MASK], 275 (struct idr_layer *)ptr); 276 pa[0]->count++; 277 idr_mark_full(pa, id); 278 } 279 280 return id; 281 } 282 283 /** 284 * idr_get_new_above - allocate new idr entry above or equal to a start id 285 * @idp: idr handle 286 * @ptr: pointer you want associated with the id 287 * @starting_id: id to start search at 288 * @id: pointer to the allocated handle 289 * 290 * This is the allocate id function. It should be called with any 291 * required locks. 292 * 293 * If memory is required, it will return -EAGAIN, you should unlock 294 * and go back to the idr_pre_get() call. If the idr is full, it will 295 * return -ENOSPC. 296 * 297 * @id returns a value in the range @starting_id ... 0x7fffffff 298 */ 299 int idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id) 300 { 301 int rv; 302 303 rv = idr_get_new_above_int(idp, ptr, starting_id); 304 /* 305 * This is a cheap hack until the IDR code can be fixed to 306 * return proper error values. 307 */ 308 if (rv < 0) 309 return _idr_rc_to_errno(rv); 310 *id = rv; 311 return 0; 312 } 313 EXPORT_SYMBOL(idr_get_new_above); 314 315 /** 316 * idr_get_new - allocate new idr entry 317 * @idp: idr handle 318 * @ptr: pointer you want associated with the id 319 * @id: pointer to the allocated handle 320 * 321 * This is the allocate id function. It should be called with any 322 * required locks. 323 * 324 * If memory is required, it will return -EAGAIN, you should unlock 325 * and go back to the idr_pre_get() call. If the idr is full, it will 326 * return -ENOSPC. 327 * 328 * @id returns a value in the range 0 ... 0x7fffffff 329 */ 330 int idr_get_new(struct idr *idp, void *ptr, int *id) 331 { 332 int rv; 333 334 rv = idr_get_new_above_int(idp, ptr, 0); 335 /* 336 * This is a cheap hack until the IDR code can be fixed to 337 * return proper error values. 338 */ 339 if (rv < 0) 340 return _idr_rc_to_errno(rv); 341 *id = rv; 342 return 0; 343 } 344 EXPORT_SYMBOL(idr_get_new); 345 346 static void idr_remove_warning(int id) 347 { 348 printk(KERN_WARNING 349 "idr_remove called for id=%d which is not allocated.\n", id); 350 dump_stack(); 351 } 352 353 static void sub_remove(struct idr *idp, int shift, int id) 354 { 355 struct idr_layer *p = idp->top; 356 struct idr_layer **pa[MAX_LEVEL]; 357 struct idr_layer ***paa = &pa[0]; 358 struct idr_layer *to_free; 359 int n; 360 361 *paa = NULL; 362 *++paa = &idp->top; 363 364 while ((shift > 0) && p) { 365 n = (id >> shift) & IDR_MASK; 366 __clear_bit(n, &p->bitmap); 367 *++paa = &p->ary[n]; 368 p = p->ary[n]; 369 shift -= IDR_BITS; 370 } 371 n = id & IDR_MASK; 372 if (likely(p != NULL && test_bit(n, &p->bitmap))){ 373 __clear_bit(n, &p->bitmap); 374 rcu_assign_pointer(p->ary[n], NULL); 375 to_free = NULL; 376 while(*paa && ! --((**paa)->count)){ 377 if (to_free) 378 free_layer(to_free); 379 to_free = **paa; 380 **paa-- = NULL; 381 } 382 if (!*paa) 383 idp->layers = 0; 384 if (to_free) 385 free_layer(to_free); 386 } else 387 idr_remove_warning(id); 388 } 389 390 /** 391 * idr_remove - remove the given id and free it's slot 392 * @idp: idr handle 393 * @id: unique key 394 */ 395 void idr_remove(struct idr *idp, int id) 396 { 397 struct idr_layer *p; 398 struct idr_layer *to_free; 399 400 /* Mask off upper bits we don't use for the search. */ 401 id &= MAX_ID_MASK; 402 403 sub_remove(idp, (idp->layers - 1) * IDR_BITS, id); 404 if (idp->top && idp->top->count == 1 && (idp->layers > 1) && 405 idp->top->ary[0]) { 406 /* 407 * Single child at leftmost slot: we can shrink the tree. 408 * This level is not needed anymore since when layers are 409 * inserted, they are inserted at the top of the existing 410 * tree. 411 */ 412 to_free = idp->top; 413 p = idp->top->ary[0]; 414 rcu_assign_pointer(idp->top, p); 415 --idp->layers; 416 to_free->bitmap = to_free->count = 0; 417 free_layer(to_free); 418 } 419 while (idp->id_free_cnt >= IDR_FREE_MAX) { 420 p = get_from_free_list(idp); 421 /* 422 * Note: we don't call the rcu callback here, since the only 423 * layers that fall into the freelist are those that have been 424 * preallocated. 425 */ 426 kmem_cache_free(idr_layer_cache, p); 427 } 428 return; 429 } 430 EXPORT_SYMBOL(idr_remove); 431 432 /** 433 * idr_remove_all - remove all ids from the given idr tree 434 * @idp: idr handle 435 * 436 * idr_destroy() only frees up unused, cached idp_layers, but this 437 * function will remove all id mappings and leave all idp_layers 438 * unused. 439 * 440 * A typical clean-up sequence for objects stored in an idr tree, will 441 * use idr_for_each() to free all objects, if necessay, then 442 * idr_remove_all() to remove all ids, and idr_destroy() to free 443 * up the cached idr_layers. 444 */ 445 void idr_remove_all(struct idr *idp) 446 { 447 int n, id, max; 448 int bt_mask; 449 struct idr_layer *p; 450 struct idr_layer *pa[MAX_LEVEL]; 451 struct idr_layer **paa = &pa[0]; 452 453 n = idp->layers * IDR_BITS; 454 p = idp->top; 455 rcu_assign_pointer(idp->top, NULL); 456 max = 1 << n; 457 458 id = 0; 459 while (id < max) { 460 while (n > IDR_BITS && p) { 461 n -= IDR_BITS; 462 *paa++ = p; 463 p = p->ary[(id >> n) & IDR_MASK]; 464 } 465 466 bt_mask = id; 467 id += 1 << n; 468 /* Get the highest bit that the above add changed from 0->1. */ 469 while (n < fls(id ^ bt_mask)) { 470 if (p) 471 free_layer(p); 472 n += IDR_BITS; 473 p = *--paa; 474 } 475 } 476 idp->layers = 0; 477 } 478 EXPORT_SYMBOL(idr_remove_all); 479 480 /** 481 * idr_destroy - release all cached layers within an idr tree 482 * @idp: idr handle 483 */ 484 void idr_destroy(struct idr *idp) 485 { 486 while (idp->id_free_cnt) { 487 struct idr_layer *p = get_from_free_list(idp); 488 kmem_cache_free(idr_layer_cache, p); 489 } 490 } 491 EXPORT_SYMBOL(idr_destroy); 492 493 /** 494 * idr_find - return pointer for given id 495 * @idp: idr handle 496 * @id: lookup key 497 * 498 * Return the pointer given the id it has been registered with. A %NULL 499 * return indicates that @id is not valid or you passed %NULL in 500 * idr_get_new(). 501 * 502 * This function can be called under rcu_read_lock(), given that the leaf 503 * pointers lifetimes are correctly managed. 504 */ 505 void *idr_find(struct idr *idp, int id) 506 { 507 int n; 508 struct idr_layer *p; 509 510 p = rcu_dereference_raw(idp->top); 511 if (!p) 512 return NULL; 513 n = (p->layer+1) * IDR_BITS; 514 515 /* Mask off upper bits we don't use for the search. */ 516 id &= MAX_ID_MASK; 517 518 if (id >= (1 << n)) 519 return NULL; 520 BUG_ON(n == 0); 521 522 while (n > 0 && p) { 523 n -= IDR_BITS; 524 BUG_ON(n != p->layer*IDR_BITS); 525 p = rcu_dereference_raw(p->ary[(id >> n) & IDR_MASK]); 526 } 527 return((void *)p); 528 } 529 EXPORT_SYMBOL(idr_find); 530 531 /** 532 * idr_for_each - iterate through all stored pointers 533 * @idp: idr handle 534 * @fn: function to be called for each pointer 535 * @data: data passed back to callback function 536 * 537 * Iterate over the pointers registered with the given idr. The 538 * callback function will be called for each pointer currently 539 * registered, passing the id, the pointer and the data pointer passed 540 * to this function. It is not safe to modify the idr tree while in 541 * the callback, so functions such as idr_get_new and idr_remove are 542 * not allowed. 543 * 544 * We check the return of @fn each time. If it returns anything other 545 * than 0, we break out and return that value. 546 * 547 * The caller must serialize idr_for_each() vs idr_get_new() and idr_remove(). 548 */ 549 int idr_for_each(struct idr *idp, 550 int (*fn)(int id, void *p, void *data), void *data) 551 { 552 int n, id, max, error = 0; 553 struct idr_layer *p; 554 struct idr_layer *pa[MAX_LEVEL]; 555 struct idr_layer **paa = &pa[0]; 556 557 n = idp->layers * IDR_BITS; 558 p = rcu_dereference_raw(idp->top); 559 max = 1 << n; 560 561 id = 0; 562 while (id < max) { 563 while (n > 0 && p) { 564 n -= IDR_BITS; 565 *paa++ = p; 566 p = rcu_dereference_raw(p->ary[(id >> n) & IDR_MASK]); 567 } 568 569 if (p) { 570 error = fn(id, (void *)p, data); 571 if (error) 572 break; 573 } 574 575 id += 1 << n; 576 while (n < fls(id)) { 577 n += IDR_BITS; 578 p = *--paa; 579 } 580 } 581 582 return error; 583 } 584 EXPORT_SYMBOL(idr_for_each); 585 586 /** 587 * idr_get_next - lookup next object of id to given id. 588 * @idp: idr handle 589 * @nextidp: pointer to lookup key 590 * 591 * Returns pointer to registered object with id, which is next number to 592 * given id. After being looked up, *@nextidp will be updated for the next 593 * iteration. 594 */ 595 596 void *idr_get_next(struct idr *idp, int *nextidp) 597 { 598 struct idr_layer *p, *pa[MAX_LEVEL]; 599 struct idr_layer **paa = &pa[0]; 600 int id = *nextidp; 601 int n, max; 602 603 /* find first ent */ 604 n = idp->layers * IDR_BITS; 605 max = 1 << n; 606 p = rcu_dereference_raw(idp->top); 607 if (!p) 608 return NULL; 609 610 while (id < max) { 611 while (n > 0 && p) { 612 n -= IDR_BITS; 613 *paa++ = p; 614 p = rcu_dereference_raw(p->ary[(id >> n) & IDR_MASK]); 615 } 616 617 if (p) { 618 *nextidp = id; 619 return p; 620 } 621 622 id += 1 << n; 623 while (n < fls(id)) { 624 n += IDR_BITS; 625 p = *--paa; 626 } 627 } 628 return NULL; 629 } 630 EXPORT_SYMBOL(idr_get_next); 631 632 633 /** 634 * idr_replace - replace pointer for given id 635 * @idp: idr handle 636 * @ptr: pointer you want associated with the id 637 * @id: lookup key 638 * 639 * Replace the pointer registered with an id and return the old value. 640 * A -ENOENT return indicates that @id was not found. 641 * A -EINVAL return indicates that @id was not within valid constraints. 642 * 643 * The caller must serialize with writers. 644 */ 645 void *idr_replace(struct idr *idp, void *ptr, int id) 646 { 647 int n; 648 struct idr_layer *p, *old_p; 649 650 p = idp->top; 651 if (!p) 652 return ERR_PTR(-EINVAL); 653 654 n = (p->layer+1) * IDR_BITS; 655 656 id &= MAX_ID_MASK; 657 658 if (id >= (1 << n)) 659 return ERR_PTR(-EINVAL); 660 661 n -= IDR_BITS; 662 while ((n > 0) && p) { 663 p = p->ary[(id >> n) & IDR_MASK]; 664 n -= IDR_BITS; 665 } 666 667 n = id & IDR_MASK; 668 if (unlikely(p == NULL || !test_bit(n, &p->bitmap))) 669 return ERR_PTR(-ENOENT); 670 671 old_p = p->ary[n]; 672 rcu_assign_pointer(p->ary[n], ptr); 673 674 return old_p; 675 } 676 EXPORT_SYMBOL(idr_replace); 677 678 void __init idr_init_cache(void) 679 { 680 idr_layer_cache = kmem_cache_create("idr_layer_cache", 681 sizeof(struct idr_layer), 0, SLAB_PANIC, NULL); 682 } 683 684 /** 685 * idr_init - initialize idr handle 686 * @idp: idr handle 687 * 688 * This function is use to set up the handle (@idp) that you will pass 689 * to the rest of the functions. 690 */ 691 void idr_init(struct idr *idp) 692 { 693 memset(idp, 0, sizeof(struct idr)); 694 spin_lock_init(&idp->lock); 695 } 696 EXPORT_SYMBOL(idr_init); 697 698 699 /* 700 * IDA - IDR based ID allocator 701 * 702 * this is id allocator without id -> pointer translation. Memory 703 * usage is much lower than full blown idr because each id only 704 * occupies a bit. ida uses a custom leaf node which contains 705 * IDA_BITMAP_BITS slots. 706 * 707 * 2007-04-25 written by Tejun Heo <htejun@gmail.com> 708 */ 709 710 static void free_bitmap(struct ida *ida, struct ida_bitmap *bitmap) 711 { 712 unsigned long flags; 713 714 if (!ida->free_bitmap) { 715 spin_lock_irqsave(&ida->idr.lock, flags); 716 if (!ida->free_bitmap) { 717 ida->free_bitmap = bitmap; 718 bitmap = NULL; 719 } 720 spin_unlock_irqrestore(&ida->idr.lock, flags); 721 } 722 723 kfree(bitmap); 724 } 725 726 /** 727 * ida_pre_get - reserve resources for ida allocation 728 * @ida: ida handle 729 * @gfp_mask: memory allocation flag 730 * 731 * This function should be called prior to locking and calling the 732 * following function. It preallocates enough memory to satisfy the 733 * worst possible allocation. 734 * 735 * If the system is REALLY out of memory this function returns 0, 736 * otherwise 1. 737 */ 738 int ida_pre_get(struct ida *ida, gfp_t gfp_mask) 739 { 740 /* allocate idr_layers */ 741 if (!idr_pre_get(&ida->idr, gfp_mask)) 742 return 0; 743 744 /* allocate free_bitmap */ 745 if (!ida->free_bitmap) { 746 struct ida_bitmap *bitmap; 747 748 bitmap = kmalloc(sizeof(struct ida_bitmap), gfp_mask); 749 if (!bitmap) 750 return 0; 751 752 free_bitmap(ida, bitmap); 753 } 754 755 return 1; 756 } 757 EXPORT_SYMBOL(ida_pre_get); 758 759 /** 760 * ida_get_new_above - allocate new ID above or equal to a start id 761 * @ida: ida handle 762 * @starting_id: id to start search at 763 * @p_id: pointer to the allocated handle 764 * 765 * Allocate new ID above or equal to @ida. It should be called with 766 * any required locks. 767 * 768 * If memory is required, it will return -EAGAIN, you should unlock 769 * and go back to the ida_pre_get() call. If the ida is full, it will 770 * return -ENOSPC. 771 * 772 * @p_id returns a value in the range @starting_id ... 0x7fffffff. 773 */ 774 int ida_get_new_above(struct ida *ida, int starting_id, int *p_id) 775 { 776 struct idr_layer *pa[MAX_LEVEL]; 777 struct ida_bitmap *bitmap; 778 unsigned long flags; 779 int idr_id = starting_id / IDA_BITMAP_BITS; 780 int offset = starting_id % IDA_BITMAP_BITS; 781 int t, id; 782 783 restart: 784 /* get vacant slot */ 785 t = idr_get_empty_slot(&ida->idr, idr_id, pa); 786 if (t < 0) 787 return _idr_rc_to_errno(t); 788 789 if (t * IDA_BITMAP_BITS >= MAX_ID_BIT) 790 return -ENOSPC; 791 792 if (t != idr_id) 793 offset = 0; 794 idr_id = t; 795 796 /* if bitmap isn't there, create a new one */ 797 bitmap = (void *)pa[0]->ary[idr_id & IDR_MASK]; 798 if (!bitmap) { 799 spin_lock_irqsave(&ida->idr.lock, flags); 800 bitmap = ida->free_bitmap; 801 ida->free_bitmap = NULL; 802 spin_unlock_irqrestore(&ida->idr.lock, flags); 803 804 if (!bitmap) 805 return -EAGAIN; 806 807 memset(bitmap, 0, sizeof(struct ida_bitmap)); 808 rcu_assign_pointer(pa[0]->ary[idr_id & IDR_MASK], 809 (void *)bitmap); 810 pa[0]->count++; 811 } 812 813 /* lookup for empty slot */ 814 t = find_next_zero_bit(bitmap->bitmap, IDA_BITMAP_BITS, offset); 815 if (t == IDA_BITMAP_BITS) { 816 /* no empty slot after offset, continue to the next chunk */ 817 idr_id++; 818 offset = 0; 819 goto restart; 820 } 821 822 id = idr_id * IDA_BITMAP_BITS + t; 823 if (id >= MAX_ID_BIT) 824 return -ENOSPC; 825 826 __set_bit(t, bitmap->bitmap); 827 if (++bitmap->nr_busy == IDA_BITMAP_BITS) 828 idr_mark_full(pa, idr_id); 829 830 *p_id = id; 831 832 /* Each leaf node can handle nearly a thousand slots and the 833 * whole idea of ida is to have small memory foot print. 834 * Throw away extra resources one by one after each successful 835 * allocation. 836 */ 837 if (ida->idr.id_free_cnt || ida->free_bitmap) { 838 struct idr_layer *p = get_from_free_list(&ida->idr); 839 if (p) 840 kmem_cache_free(idr_layer_cache, p); 841 } 842 843 return 0; 844 } 845 EXPORT_SYMBOL(ida_get_new_above); 846 847 /** 848 * ida_get_new - allocate new ID 849 * @ida: idr handle 850 * @p_id: pointer to the allocated handle 851 * 852 * Allocate new ID. It should be called with any required locks. 853 * 854 * If memory is required, it will return -EAGAIN, you should unlock 855 * and go back to the idr_pre_get() call. If the idr is full, it will 856 * return -ENOSPC. 857 * 858 * @id returns a value in the range 0 ... 0x7fffffff. 859 */ 860 int ida_get_new(struct ida *ida, int *p_id) 861 { 862 return ida_get_new_above(ida, 0, p_id); 863 } 864 EXPORT_SYMBOL(ida_get_new); 865 866 /** 867 * ida_remove - remove the given ID 868 * @ida: ida handle 869 * @id: ID to free 870 */ 871 void ida_remove(struct ida *ida, int id) 872 { 873 struct idr_layer *p = ida->idr.top; 874 int shift = (ida->idr.layers - 1) * IDR_BITS; 875 int idr_id = id / IDA_BITMAP_BITS; 876 int offset = id % IDA_BITMAP_BITS; 877 int n; 878 struct ida_bitmap *bitmap; 879 880 /* clear full bits while looking up the leaf idr_layer */ 881 while ((shift > 0) && p) { 882 n = (idr_id >> shift) & IDR_MASK; 883 __clear_bit(n, &p->bitmap); 884 p = p->ary[n]; 885 shift -= IDR_BITS; 886 } 887 888 if (p == NULL) 889 goto err; 890 891 n = idr_id & IDR_MASK; 892 __clear_bit(n, &p->bitmap); 893 894 bitmap = (void *)p->ary[n]; 895 if (!test_bit(offset, bitmap->bitmap)) 896 goto err; 897 898 /* update bitmap and remove it if empty */ 899 __clear_bit(offset, bitmap->bitmap); 900 if (--bitmap->nr_busy == 0) { 901 __set_bit(n, &p->bitmap); /* to please idr_remove() */ 902 idr_remove(&ida->idr, idr_id); 903 free_bitmap(ida, bitmap); 904 } 905 906 return; 907 908 err: 909 printk(KERN_WARNING 910 "ida_remove called for id=%d which is not allocated.\n", id); 911 } 912 EXPORT_SYMBOL(ida_remove); 913 914 /** 915 * ida_destroy - release all cached layers within an ida tree 916 * @ida: ida handle 917 */ 918 void ida_destroy(struct ida *ida) 919 { 920 idr_destroy(&ida->idr); 921 kfree(ida->free_bitmap); 922 } 923 EXPORT_SYMBOL(ida_destroy); 924 925 /** 926 * ida_init - initialize ida handle 927 * @ida: ida handle 928 * 929 * This function is use to set up the handle (@ida) that you will pass 930 * to the rest of the functions. 931 */ 932 void ida_init(struct ida *ida) 933 { 934 memset(ida, 0, sizeof(struct ida)); 935 idr_init(&ida->idr); 936 937 } 938 EXPORT_SYMBOL(ida_init); 939