1 .\" Copyright (c) 2012 Vishesh Yadav
2 .\" All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
12 .\" 3. The name of the author may not be used to endorse or promote products
13 .\" derived from this software without specific prior written permission.
15 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 .\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 .Nm idr_get_new_above ,
43 .Nd Integer ID management library
47 .Fn idr_destroy "struct idr *idp"
49 .Fn idr_find "struct idr *idp" "int id"
51 .Fn idr_for_each "struct idr *idp" "int (*fn)(int id, void *p, void *data)" "void *data"
53 .Fn idr_get_new "struct idr *idp" "void *ptr" "int *id"
55 .Fn idr_get_new_above "struct idr *idp" "void *ptr" "int sid" "int *id"
57 .Fn idr_init "struct idr *idp"
59 .Fn idr_init1 "struct idr *idp" "int size"
61 .Fn idr_pre_get "struct idr *idp"
63 .Fn idr_remove "struct idr *idp" "int id"
65 .Fn idr_remove_all "struct idr *idp"
67 .Fn idr_replace "struct idr *idp" "void *ptr" "int id"
71 .Fn idr_destroy "struct idr *idp"
73 Free all resources taken by given idr handle.
76 .Fn idr_find "struct idr *idp" "int id"
78 Return data pointer mapped with given id.
81 .Fn idr_for_each "struct idr *idp" "int (*fn)(int id, void *p, void *data)" "void *data"
83 Iterate through all pointers registered with given idr handle and call the
84 callback function 'fn' for each pointer. It is not safe to modify the idr tree
85 through the callback function.
87 If the callback function returns a non-zero integer, we stop and return the
91 .Fn idr_get_new "struct idr *idp" "void *ptr" "int *id",
92 .Fn idr_get_new_above "struct idr *idp" "void *ptr" "int sid" "int *id"
94 Allocates a new integer mapped with pointer 'ptr'. The new id will be stored
95 in 'id'. If the tree get full, function will return EAGAIN.
97 should be called to grow the tree.
100 .Fn idr_init "struct idr *idp",
101 .Fn idr_init1 "struct idr *idp" "int size"
103 Initialize idr handle that will be used by other functions of the API.
105 initializes tree with hard coded default initial capacity (32).
107 takes additional parameter 'size' to set the initial capacity manually.
110 .Fn idr_pre_get "struct idr *idp"
112 This function should be called prior to calling the idr_get_new* functions. It
113 preallocates enough memory for subsequent calls to idr_get_new* functions. This
114 function should be called without any locks held.
116 This function returns 0 if enough memory couldn't be allocated, otherwise 1.
118 This function lacks 'gfp_t gfp_mask' parameter that is found in Linux version of
122 .Fn idr_remove "struct idr *idp" "int id",
124 Remove the given id from tree.
127 .Fn idr_remove_all "struct idr *idp"
129 Remove all entries in the idr tree.
132 .Fn idr_replace "struct idr *idp" "void *ptr" "int id"
134 Replace pointer for given id with new pointer.
136 NULL is returned if pointer is not found. This behavior is different from the