sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget /translations/zh_CN/core-api/idrmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/zh_TW/core-api/idrmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/it_IT/core-api/idrmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ja_JP/core-api/idrmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/ko_KR/core-api/idrmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hPortuguese (Brazilian)}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/pt_BR/core-api/idrmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget /translations/sp_SP/core-api/idrmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h!SPDX-License-Identifier: GPL-2.0+h]h!SPDX-License-Identifier: GPL-2.0+}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhh:/var/lib/git/docbuild/linux/Documentation/core-api/idr.rsthKubhsection)}(hhh](htitle)}(h ID Allocationh]h ID Allocation}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh field_list)}(hhh]hfield)}(hhh](h field_name)}(hAuthorh]hAuthor}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhKubh field_body)}(hMatthew Wilcox h]h paragraph)}(hMatthew Wilcoxh]hMatthew Wilcox}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhubah}(h]h ]h"]h$]h&]uh1hhhubeh}(h]h ]h"]h$]h&]uh1hhhhKhhhhubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hOverviewh]hOverview}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhK ubh)}(hXA common problem to solve is allocating identifiers (IDs); generally small numbers which identify a thing. Examples include file descriptors, process IDs, packet identifiers in networking protocols, SCSI tags and device instance numbers. The IDR and the IDA provide a reasonable solution to the problem to avoid everybody inventing their own. The IDR provides the ability to map an ID to a pointer, while the IDA provides only ID allocation, and as a result is much more memory-efficient.h]hXA common problem to solve is allocating identifiers (IDs); generally small numbers which identify a thing. Examples include file descriptors, process IDs, packet identifiers in networking protocols, SCSI tags and device instance numbers. The IDR and the IDA provide a reasonable solution to the problem to avoid everybody inventing their own. The IDR provides the ability to map an ID to a pointer, while the IDA provides only ID allocation, and as a result is much more memory-efficient.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hjhhubh)}(hOThe IDR interface is deprecated; please use the :doc:`XArray ` instead.h](h0The IDR interface is deprecated; please use the }(hj>hhhNhNubh)}(h:doc:`XArray `h]hinline)}(hjHh]hXArray}(hjLhhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1jJhjFubah}(h]h ]h"]h$]h&]refdoc core-api/idr refdomainjWreftypedoc refexplicitrefwarn reftargetxarrayuh1hhhhKhj>ubh instead.}(hj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]overviewah ]h"]overviewah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h IDR usageh]h IDR usage}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}hhhhhKubh)}(hStart by initialising an IDR, either with DEFINE_IDR() for statically allocated IDRs or idr_init() for dynamically allocated IDRs.h]hStart by initialising an IDR, either with DEFINE_IDR() for statically allocated IDRs or idr_init() for dynamically allocated IDRs.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj}hhubh)}(hYou can call idr_alloc() to allocate an unused ID. Look up the pointer you associated with the ID by calling idr_find() and free the ID by calling idr_remove().h]hYou can call idr_alloc() to allocate an unused ID. Look up the pointer you associated with the ID by calling idr_find() and free the ID by calling idr_remove().}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj}hhubh)}(hX#If you need to change the pointer associated with an ID, you can call idr_replace(). One common reason to do this is to reserve an ID by passing a ``NULL`` pointer to the allocation function; initialise the object with the reserved ID and finally insert the initialised object into the IDR.h](hIf you need to change the pointer associated with an ID, you can call idr_replace(). One common reason to do this is to reserve an ID by passing a }(hjhhhNhNubhliteral)}(h``NULL``h]hNULL}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh pointer to the allocation function; initialise the object with the reserved ID and finally insert the initialised object into the IDR.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK"hj}hhubh)}(hSome users need to allocate IDs larger than ``INT_MAX``. So far all of these users have been content with a ``UINT_MAX`` limit, and they use idr_alloc_u32(). If you need IDs that will not fit in a u32, we will work with you to address your needs.h](h,Some users need to allocate IDs larger than }(hjhhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh6. So far all of these users have been content with a }(hjhhhNhNubj)}(h ``UINT_MAX``h]hUINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh limit, and they use idr_alloc_u32(). If you need IDs that will not fit in a u32, we will work with you to address your needs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK(hj}hhubh)}(hIf you need to allocate IDs sequentially, you can use idr_alloc_cyclic(). The IDR becomes less efficient when dealing with larger IDs, so using this function comes at a slight cost.h]hIf you need to allocate IDs sequentially, you can use idr_alloc_cyclic(). The IDR becomes less efficient when dealing with larger IDs, so using this function comes at a slight cost.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK-hj}hhubh)}(hX,To perform an action on all pointers used by the IDR, you can either use the callback-based idr_for_each() or the iterator-style idr_for_each_entry(). You may need to use idr_for_each_entry_continue() to continue an iteration. You can also use idr_get_next() if the iterator doesn't fit your needs.h]hX.To perform an action on all pointers used by the IDR, you can either use the callback-based idr_for_each() or the iterator-style idr_for_each_entry(). You may need to use idr_for_each_entry_continue() to continue an iteration. You can also use idr_get_next() if the iterator doesn’t fit your needs.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hj}hhubh)}(hWhen you have finished using an IDR, you can call idr_destroy() to release the memory used by the IDR. This will not free the objects pointed to from the IDR; if you want to do that, use one of the iterators to do it.h]hWhen you have finished using an IDR, you can call idr_destroy() to release the memory used by the IDR. This will not free the objects pointed to from the IDR; if you want to do that, use one of the iterators to do it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK7hj}hhubh)}(hUYou can use idr_is_empty() to find out whether there are any IDs currently allocated.h]hUYou can use idr_is_empty() to find out whether there are any IDs currently allocated.}(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK` in a data structure, then initialise it using ida_init()). To allocate a new ID, call ida_alloc(), ida_alloc_min(), ida_alloc_max() or ida_alloc_range(). To free an ID, call ida_free().h](hThe IDA is an ID allocator which does not provide the ability to associate an ID with a pointer. As such, it only needs to store one bit per ID, and so is more space efficient than an IDR. To use an IDA, define it using DEFINE_IDA() (or embed a }(hjhhhNhNubh)}(h:c:type:`struct ida `h]j)}(hjh]h struct ida}(hjhhhNhNubah}(h]h ](jVcc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjc refdomainjreftypetype refexplicitrefwarnjiidauh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:75: ./lib/idr.chM7hjubh in a data structure, then initialise it using ida_init()). To allocate a new ID, call ida_alloc(), ida_alloc_min(), ida_alloc_max() or ida_alloc_range(). To free an ID, call ida_free().}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhM7hjhhubh)}(hida_destroy() can be used to dispose of an IDA without needing to free the individual IDs in it. You can use ida_is_empty() to find out whether the IDA has any IDs currently allocated.h]hida_destroy() can be used to dispose of an IDA without needing to free the individual IDs in it. You can use ida_is_empty() to find out whether the IDA has any IDs currently allocated.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:75: ./lib/idr.chM?hjhhubh)}(hsThe IDA handles its own locking. It is safe to call any of the IDA functions without synchronisation in your code.h]hsThe IDA handles its own locking. It is safe to call any of the IDA functions without synchronisation in your code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:75: ./lib/idr.chMChjhhubh)}(hIDs are currently limited to the range [0-INT_MAX]. If this is an awkward limitation, it should be quite straightforward to raise the maximum.h]hIDs are currently limited to the range [0-INT_MAX]. If this is an awkward limitation, it should be quite straightforward to raise the maximum.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:75: ./lib/idr.chMFhjhhubeh}(h] ida-usageah ]h"] ida usageah$]h&]uh1hhhhhhhhKIubh)}(hhh](h)}(hFunctions and structuresh]hFunctions and structures}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKOubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singleIDR_INIT (C macro) c.IDR_INIThNtauh1jhjhhhNhNubhdesc)}(hhh](hdesc_signature)}(hIDR_INITh]hdesc_signature_line)}(hIDR_INITh]h desc_name)}(hIDR_INITh]h desc_sig_name)}(hj1h]hIDR_INIT}(hjAhhhNhNubah}(h]h ]nah"]h$]h&]uh1j?hj;ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j9hj5hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK+ubah}(h]h ]h"]h$]h&]hhƌ add_permalinkuh1j3sphinx_line_type declaratorhj/hhhjWhK+ubah}(h]j&ah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1j-hjWhK+hj*hhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jlhj*hhhjWhK+ubeh}(h]h ](jmacroeh"]h$]h&]domainjobjtypejzdesctypejznoindex noindexentrynocontentsentryuh1j(hhhjhNhNubh)}(h``IDR_INIT (name)``h]j)}(hjh]hIDR_INIT (name)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK-hjhhubh block_quote)}(hInitialise an IDR. h]h)}(hInitialise an IDR.h]hInitialise an IDR.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK+hjubah}(h]h ]h"]h$]h&]uh1jhjhK+hjhhubh container)}(hd**Parameters** ``name`` Name of IDR. **Description** A freshly-initialised IDR contains no IDs.h](h)}(h**Parameters**h]hstrong)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK/hjubhdefinition_list)}(hhh]hdefinition_list_item)}(h``name`` Name of IDR. h](hterm)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK,hjubh definition)}(hhh]h)}(h Name of IDR.h]h Name of IDR.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK,hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj#h]h Description}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK.hjubh)}(h*A freshly-initialised IDR contains no IDs.h]h*A freshly-initialised IDR contains no IDs.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK-hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$DEFINE_IDR (C macro) c.DEFINE_IDRhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h DEFINE_IDRh]j4)}(h DEFINE_IDRh]j:)}(h DEFINE_IDRh]j@)}(hjbh]h DEFINE_IDR}(hjlhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjhubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hjdhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK3ubah}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj`hhhjhK3ubah}(h]j[ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjhK3hj]hhubjm)}(hhh]h}(h]h ]h"]h$]h&]uh1jlhj]hhhjhK3ubeh}(h]h ](jmacroeh"]h$]h&]j~jjjjjjjjuh1j(hhhjhNhNubh)}(h``DEFINE_IDR (name)``h]j)}(hjh]hDEFINE_IDR (name)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK5hjhhubj)}(h#Define a statically-allocated IDR. h]h)}(h"Define a statically-allocated IDR.h]h"Define a statically-allocated IDR.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK3hjubah}(h]h ]h"]h$]h&]uh1jhjhK3hjhhubj)}(h**Parameters** ``name`` Name of IDR. **Description** An IDR defined using this macro is ready for use with no additional initialisation required. It contains no IDs.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK7hjubj)}(hhh]j)}(h``name`` Name of IDR. h](j)}(h``name``h]j)}(hjh]hname}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK4hjubj)}(hhh]h)}(h Name of IDR.h]h Name of IDR.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhK4hjubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj-h]h Description}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK6hjubh)}(hqAn IDR defined using this macro is ready for use with no additional initialisation required. It contains no IDs.h]hqAn IDR defined using this macro is ready for use with no additional initialisation required. It contains no IDs.}(hjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK5hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_get_cursor (C function)c.idr_get_cursorhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h3unsigned int idr_get_cursor (const struct idr *idr)h]j4)}(h2unsigned int idr_get_cursor(const struct idr *idr)h](hdesc_sig_keyword_type)}(hunsignedh]hunsigned}(hjthhhNhNubah}(h]h ]ktah"]h$]h&]uh1jrhjnhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_set_cursor (C function)c.idr_set_cursorhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h7void idr_set_cursor (struct idr *idr, unsigned int val)h]j4)}(h6void idr_set_cursor(struct idr *idr, unsigned int val)h](js)}(hvoidh]hvoid}(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjAhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKIubj)}(h h]h }(hjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjAhhhjShKIubj:)}(hidr_set_cursorh]j@)}(hidr_set_cursorh]hidr_set_cursor}(hjfhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjbubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hjAhhhjShKIubj)}(h#(struct idr *idr, unsigned int val)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubh)}(hhh]j@)}(hidrh]hidr}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetjmodnameN classnameNj-j0)}j3]j6)}j)jhsbc.idr_set_cursorasbuh1hhj~ubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubjJ)}(hjMh]h*}(hjhhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj~ubj@)}(hidrh]hidr}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj~ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjzubj)}(hunsigned int valh](js)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjs)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj@)}(hvalh]hval}(hj,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjzubeh}(h]h ]h"]h$]h&]hhuh1jhjAhhhjShKIubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj=hhhjShKIubah}(h]j8ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjShKIhj:hhubjm)}(hhh]h)}(h0Set the current position of the cyclic allocatorh]h0Set the current position of the cyclic allocator}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKIhjShhubah}(h]h ]h"]h$]h&]uh1jlhj:hhhjShKIubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjnjjnjjjuh1j(hhhjhNhNubj)}(h**Parameters** ``struct idr *idr`` idr handle ``unsigned int val`` new position **Description** The next call to idr_alloc_cyclic() will return **val** if it is free (otherwise the search will start from this position).h](h)}(h**Parameters**h]j)}(hjxh]h Parameters}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKMhjrubj)}(hhh](j)}(h``struct idr *idr`` idr handle h](j)}(h``struct idr *idr``h]j)}(hjh]hstruct idr *idr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKJhjubj)}(hhh]h)}(h idr handleh]h idr handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKJhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKJhjubj)}(h"``unsigned int val`` new position h](j)}(h``unsigned int val``h]j)}(hjh]hunsigned int val}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKKhjubj)}(hhh]h)}(h new positionh]h new position}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKKhjubeh}(h]h ]h"]h$]h&]uh1jhjrubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKMhjrubh)}(h{The next call to idr_alloc_cyclic() will return **val** if it is free (otherwise the search will start from this position).h](h0The next call to idr_alloc_cyclic() will return }(hj! hhhNhNubj)}(h**val**h]hval}(hj) hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj! ubhD if it is free (otherwise the search will start from this position).}(hj! hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKLhjrubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_init_base (C function)c.idr_init_basehNtauh1jhjhhhNhNubj))}(hhh](j.)}(h.void idr_init_base (struct idr *idr, int base)h]j4)}(h-void idr_init_base(struct idr *idr, int base)h](js)}(hvoidh]hvoid}(hjb hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj^ hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubj)}(h h]h }(hjq hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ hhhjp hKubj:)}(h idr_init_baseh]j@)}(h idr_init_baseh]h idr_init_base}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj^ hhhjp hKubj)}(h(struct idr *idr, int base)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j@)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj modnameN classnameNj-j0)}j3]j6)}j)j sbc.idr_init_baseasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjJ)}(hjMh]h*}(hj hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj ubj@)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hint baseh](js)}(hinth]hint}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj@)}(hbaseh]hbase}(hj- hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhj^ hhhjp hKubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hjZ hhhjp hKubah}(h]jU ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjp hKhjW hhubjm)}(hhh]h)}(hInitialise an IDR.h]hInitialise an IDR.}(hjW hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjT hhubah}(h]h ]h"]h$]h&]uh1jlhjW hhhjp hKubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjo jjo jjjuh1j(hhhjhNhNubj)}(h**Parameters** ``struct idr *idr`` IDR handle. ``int base`` The base value for the IDR. **Description** This variation of idr_init() creates an IDR which will allocate IDs starting at ``base``.h](h)}(h**Parameters**h]j)}(hjy h]h Parameters}(hj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjw ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjs ubj)}(hhh](j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hj h]hstruct idr *idr}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubj)}(h)``int base`` The base value for the IDR. h](j)}(h ``int base``h]j)}(hj h]hint base}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj ubj)}(hhh]h)}(hThe base value for the IDR.h]hThe base value for the IDR.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj hKhj ubeh}(h]h ]h"]h$]h&]uh1jhjs ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjs ubh)}(hYThis variation of idr_init() creates an IDR which will allocate IDs starting at ``base``.h](hPThis variation of idr_init() creates an IDR which will allocate IDs starting at }(hj" hhhNhNubj)}(h``base``h]hbase}(hj* hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj" ubh.}(hj" hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjs ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_init (C function) c.idr_inithNtauh1jhjhhhNhNubj))}(hhh](j.)}(hvoid idr_init (struct idr *idr)h]j4)}(hvoid idr_init(struct idr *idr)h](js)}(hvoidh]hvoid}(hjc hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj_ hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubj)}(h h]h }(hjr hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ hhhjq hKubj:)}(hidr_inith]j@)}(hidr_inith]hidr_init}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj_ hhhjq hKubj)}(h(struct idr *idr)h]j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j@)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj modnameN classnameNj-j0)}j3]j6)}j)j sb c.idr_initasbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjJ)}(hjMh]h*}(hj hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj ubj@)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhj_ hhhjq hKubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj[ hhhjq hKubah}(h]jV ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjq hKhjX hhubjm)}(hhh]h)}(hInitialise an IDR.h]hInitialise an IDR.}(hj# hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jlhjX hhhjq hKubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj; jj; jjjuh1j(hhhjhNhNubj)}(h**Parameters** ``struct idr *idr`` IDR handle. **Description** Initialise a dynamically allocated IDR. To initialise a statically allocated IDR, use DEFINE_IDR().h](h)}(h**Parameters**h]j)}(hjE h]h Parameters}(hjG hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj? ubj)}(hhh]j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hjd h]hstruct idr *idr}(hjf hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjb ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj^ ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj} hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjy hKhjz ubah}(h]h ]h"]h$]h&]uh1jhj^ ubeh}(h]h ]h"]h$]h&]uh1jhjy hKhj[ ubah}(h]h ]h"]h$]h&]uh1jhj? ubh)}(h**Description**h]j)}(hj h]h Description}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj? ubh)}(hdInitialise a dynamically allocated IDR. To initialise a statically allocated IDR, use DEFINE_IDR().h]hdInitialise a dynamically allocated IDR. To initialise a statically allocated IDR, use DEFINE_IDR().}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj? ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_is_empty (C function)c.idr_is_emptyhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h)bool idr_is_empty (const struct idr *idr)h]j4)}(h(bool idr_is_empty(const struct idr *idr)h](js)}(hboolh]hbool}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj hhhj hKubj:)}(h idr_is_emptyh]j@)}(h idr_is_emptyh]h idr_is_empty}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj hhhj hKubj)}(h(const struct idr *idr)h]j)}(hconst struct idr *idrh](j)}(hjh]hconst}(hj! hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hj. hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(hjh]hstruct}(hj< hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj)}(h h]h }(hjI hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubh)}(hhh]j@)}(hidrh]hidr}(hjZ hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjW ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj\ modnameN classnameNj-j0)}j3]j6)}j)j sbc.idr_is_emptyasbuh1hhj ubj)}(h h]h }(hjz hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjJ)}(hjMh]h*}(hj hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj ubj@)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhj hhhj hKubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj hhhj hKubah}(h]j ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj hKhj hhubjm)}(hhh]h)}(hAre there any IDs allocated?h]hAre there any IDs allocated?}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj hhubah}(h]h ]h"]h$]h&]uh1jlhj hhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj jj jjjuh1j(hhhjhNhNubj)}(h{**Parameters** ``const struct idr *idr`` IDR handle. **Return** ``true`` if any IDs have been allocated from this IDR.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj ubj)}(hhh]j)}(h&``const struct idr *idr`` IDR handle. h](j)}(h``const struct idr *idr``h]j)}(hjh]hconst struct idr *idr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhjhKhj ubah}(h]h ]h"]h$]h&]uh1jhj ubh)}(h **Return**h]j)}(hj;h]hReturn}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj ubh)}(h6``true`` if any IDs have been allocated from this IDR.h](j)}(h``true``h]htrue}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubh. if any IDs have been allocated from this IDR.}(hjQhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_preload_end (C function)c.idr_preload_endhNtauh1jhjhhhNhNubj))}(hhh](j.)}(hvoid idr_preload_end (void)h]j4)}(hvoid idr_preload_end(void)h](js)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhKubj:)}(hidr_preload_endh]j@)}(hidr_preload_endh]hidr_preload_end}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hjhhhjhKubj)}(h(void)h]j)}(hvoidh]js)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubah}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hjhhhjhKubah}(h]jah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjhKhjhhubjm)}(hhh]h)}(h.end preload section started with idr_preload()h]h.end preload section started with idr_preload()}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jlhjhhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj jj jjjuh1j(hhhjhNhNubj)}(h**Parameters** ``void`` no arguments **Description** Each idr_preload() should be matched with an invocation of this function. See idr_preload() for details.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh]j)}(h``void`` no arguments h](j)}(h``void``h]j)}(hj6h]hvoid}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj0ubj)}(hhh]h)}(h no argumentsh]h no arguments}(hjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjKhKhjLubah}(h]h ]h"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]uh1jhjKhKhj-ubah}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjqh]h Description}(hjshhhNhNubah}(h]h ]h"]h$]h&]uh1jhjoubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubh)}(hiEach idr_preload() should be matched with an invocation of this function. See idr_preload() for details.h]hiEach idr_preload() should be matched with an invocation of this function. See idr_preload() for details.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_for_each_entry (C macro)c.idr_for_each_entryhNtauh1jhjhhhNhNubj))}(hhh](j.)}(hidr_for_each_entryh]j4)}(hidr_for_each_entryh]j:)}(hidr_for_each_entryh]j@)}(hjh]hidr_for_each_entry}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubah}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hjhhhjhKubah}(h]jah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjhKhjhhubjm)}(hhh]h}(h]h ]h"]h$]h&]uh1jlhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]j~jjjjjjjjuh1j(hhhjhNhNubh)}(h'``idr_for_each_entry (idr, entry, id)``h]j)}(hjh]h#idr_for_each_entry (idr, entry, id)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjhhubj)}(h0Iterate over an IDR's elements of a given type. h]h)}(h/Iterate over an IDR's elements of a given type.h]h1Iterate over an IDR’s elements of a given type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj)}(hX)**Parameters** ``idr`` IDR handle. ``entry`` The type * to use as cursor ``id`` Entry ID. **Description** **entry** and **id** do not need to be initialized before the loop, and after normal termination **entry** is left with the value NULL. This is convenient for a "not found" value.h](h)}(h**Parameters**h]j)}(hj!h]h Parameters}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh](j)}(h``idr`` IDR handle. h](j)}(h``idr``h]j)}(hj@h]hidr}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj:ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUhKhjVubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhjUhKhj7ubj)}(h&``entry`` The type * to use as cursor h](j)}(h ``entry``h]j)}(hjyh]hentry}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjwubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjsubj)}(hhh]h)}(hThe type * to use as cursorh]hThe type * to use as cursor}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]uh1jhjhKhj7ubj)}(h``id`` Entry ID. h](j)}(h``id``h]j)}(hjh]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh]h)}(h Entry ID.h]h Entry ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhj7ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubh)}(h**entry** and **id** do not need to be initialized before the loop, and after normal termination **entry** is left with the value NULL. This is convenient for a "not found" value.h](j)}(h **entry**h]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhM do not need to be initialized before the loop, and after normal termination }(hjhhhNhNubj)}(h **entry**h]hentry}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhN is left with the value NULL. This is convenient for a “not found” value.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_for_each_entry_ul (C macro)c.idr_for_each_entry_ulhNtauh1jhjhhhNhNubj))}(hhh](j.)}(hidr_for_each_entry_ulh]j4)}(hidr_for_each_entry_ulh]j:)}(hidr_for_each_entry_ulh]j@)}(hj^h]hidr_for_each_entry_ul}(hjhhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjdubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj`hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubah}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj\hhhj{hKubah}(h]jWah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj{hKhjYhhubjm)}(hhh]h}(h]h ]h"]h$]h&]uh1jlhjYhhhj{hKubeh}(h]h ](jmacroeh"]h$]h&]j~jjjjjjjjuh1j(hhhjhNhNubh)}(h/``idr_for_each_entry_ul (idr, entry, tmp, id)``h]j)}(hjh]h+idr_for_each_entry_ul (idr, entry, tmp, id)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjhhubj)}(h0Iterate over an IDR's elements of a given type. h]h)}(h/Iterate over an IDR's elements of a given type.h]h1Iterate over an IDR’s elements of a given type.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj)}(hXU**Parameters** ``idr`` IDR handle. ``entry`` The type * to use as cursor. ``tmp`` A temporary placeholder for ID. ``id`` Entry ID. **Description** **entry** and **id** do not need to be initialized before the loop, and after normal termination **entry** is left with the value NULL. This is convenient for a "not found" value.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh](j)}(h``idr`` IDR handle. h](j)}(h``idr``h]j)}(hjh]hidr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h'``entry`` The type * to use as cursor. h](j)}(h ``entry``h]j)}(hj'h]hentry}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj!ubj)}(hhh]h)}(hThe type * to use as cursor.h]hThe type * to use as cursor.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<hKhj=ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj<hKhjubj)}(h(``tmp`` A temporary placeholder for ID. h](j)}(h``tmp``h]j)}(hj`h]htmp}(hjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjZubj)}(hhh]h)}(hA temporary placeholder for ID.h]hA temporary placeholder for ID.}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjuhKhjvubah}(h]h ]h"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]uh1jhjuhKhjubj)}(h``id`` Entry ID. h](j)}(h``id``h]j)}(hjh]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh]h)}(h Entry ID.h]h Entry ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubh)}(h**entry** and **id** do not need to be initialized before the loop, and after normal termination **entry** is left with the value NULL. This is convenient for a "not found" value.h](j)}(h **entry**h]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh and }(hjhhhNhNubj)}(h**id**h]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhM do not need to be initialized before the loop, and after normal termination }(hjhhhNhNubj)}(h **entry**h]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhN is left with the value NULL. This is convenient for a “not found” value.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$%idr_for_each_entry_continue (C macro)c.idr_for_each_entry_continuehNtauh1jhjhhhNhNubj))}(hhh](j.)}(hidr_for_each_entry_continueh]j4)}(hidr_for_each_entry_continueh]j:)}(hidr_for_each_entry_continueh]j@)}(hjEh]hidr_for_each_entry_continue}(hjOhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjKubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hjGhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubah}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hjChhhjbhKubah}(h]j>ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjbhKhj@hhubjm)}(hhh]h}(h]h ]h"]h$]h&]uh1jlhj@hhhjbhKubeh}(h]h ](jmacroeh"]h$]h&]j~jjj{jj{jjjuh1j(hhhjhNhNubh)}(h0``idr_for_each_entry_continue (idr, entry, id)``h]j)}(hjh]h,idr_for_each_entry_continue (idr, entry, id)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjhhubj)}(h:Continue iteration over an IDR's elements of a given type h]h)}(h9Continue iteration over an IDR's elements of a given typeh]h;Continue iteration over an IDR’s elements of a given type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubah}(h]h ]h"]h$]h&]uh1jhjhKhjhhubj)}(h**Parameters** ``idr`` IDR handle. ``entry`` The type * to use as a cursor. ``id`` Entry ID. **Description** Continue to iterate over entries, continuing after the current position.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh](j)}(h``idr`` IDR handle. h](j)}(h``idr``h]j)}(hjh]hidr}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjubj)}(h)``entry`` The type * to use as a cursor. h](j)}(h ``entry``h]j)}(hjh]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh]h)}(hThe type * to use as a cursor.h]hThe type * to use as a cursor.}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hKhj$ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj#hKhjubj)}(h``id`` Entry ID. h](j)}(h``id``h]j)}(hjGh]hid}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjAubj)}(hhh]h)}(h Entry ID.h]h Entry ID.}(hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\hKhj]ubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhj\hKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubh)}(hHContinue to iterate over entries, continuing after the current position.h]hHContinue to iterate over entries, continuing after the current position.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$(idr_for_each_entry_continue_ul (C macro) c.idr_for_each_entry_continue_ulhNtauh1jhjhhhNhNubj))}(hhh](j.)}(hidr_for_each_entry_continue_ulh]j4)}(hidr_for_each_entry_continue_ulh]j:)}(hidr_for_each_entry_continue_ulh]j@)}(hjh]hidr_for_each_entry_continue_ul}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubah}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hjhhhjhKubah}(h]jah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjhKhjhhubjm)}(hhh]h}(h]h ]h"]h$]h&]uh1jlhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]j~jjjjjjjjuh1j(hhhjhNhNubh)}(h8``idr_for_each_entry_continue_ul (idr, entry, tmp, id)``h]j)}(hjh]h4idr_for_each_entry_continue_ul (idr, entry, tmp, id)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjhhubj)}(h:Continue iteration over an IDR's elements of a given type h]h)}(h9Continue iteration over an IDR's elements of a given typeh]h;Continue iteration over an IDR’s elements of a given type}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubah}(h]h ]h"]h$]h&]uh1jhj%hKhjhhubj)}(hXX**Parameters** ``idr`` IDR handle. ``entry`` The type * to use as a cursor. ``tmp`` A temporary placeholder for ID. ``id`` Entry ID. **Description** Continue to iterate over entries, continuing after the current position. After normal termination **entry** is left with the value NULL. This is convenient for a "not found" value.h](h)}(h**Parameters**h]j)}(hj2h]h Parameters}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj,ubj)}(hhh](j)}(h``idr`` IDR handle. h](j)}(h``idr``h]j)}(hjQh]hidr}(hjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjKubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhKhjgubah}(h]h ]h"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]uh1jhjfhKhjHubj)}(h)``entry`` The type * to use as a cursor. h](j)}(h ``entry``h]j)}(hjh]hentry}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh]h)}(hThe type * to use as a cursor.h]hThe type * to use as a cursor.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubj)}(h(``tmp`` A temporary placeholder for ID. h](j)}(h``tmp``h]j)}(hjh]htmp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh]h)}(hA temporary placeholder for ID.h]hA temporary placeholder for ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubj)}(h``id`` Entry ID. h](j)}(h``id``h]j)}(hjh]hid}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjubj)}(hhh]h)}(h Entry ID.h]h Entry ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhKhjHubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hj7h]h Description}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj,ubh)}(hContinue to iterate over entries, continuing after the current position. After normal termination **entry** is left with the value NULL. This is convenient for a "not found" value.h](hbContinue to iterate over entries, continuing after the current position. After normal termination }(hjMhhhNhNubj)}(h **entry**h]hentry}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubhN is left with the value NULL. This is convenient for a “not found” value.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ida_alloc (C function) c.ida_allochNtauh1jhjhhhNhNubj))}(hhh](j.)}(h*int ida_alloc (struct ida *ida, gfp_t gfp)h]j4)}(h)int ida_alloc(struct ida *ida, gfp_t gfp)h](js)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubj:)}(h ida_alloch]j@)}(h ida_alloch]h ida_alloc}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hjhhhjhMubj)}(h(struct ida *ida, gfp_t gfp)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j@)}(hidah]hida}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetjmodnameN classnameNj-j0)}j3]j6)}j)jsb c.ida_allocasbuh1hhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjJ)}(hjMh]h*}(hjhhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjubj@)}(hidah]hida}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubj)}(h gfp_t gfph](h)}(hhh]j@)}(hgfp_th]hgfp_t}(hj@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetjBmodnameN classnameNj-j0)}j3]j c.ida_allocasbuh1hhj9ubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj@)}(hgfph]hgfp}(hjlhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhMubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hjhhhjhMubah}(h]jah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjhMhjhhubjm)}(hhh]h)}(hAllocate an unused ID.h]hAllocate an unused ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMhjhhubah}(h]h ]h"]h$]h&]uh1jlhjhhhjhMubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjjjjjjuh1j(hhhjhNhNubj)}(hXu**Parameters** ``struct ida *ida`` IDA handle. ``gfp_t gfp`` Memory allocation flags. **Description** Allocate an ID between 0 and ``INT_MAX``, inclusive. **Context** Any context. It is safe to call this function without locking in your code. **Return** The allocated ID, or ``-ENOMEM`` if memory could not be allocated, or ``-ENOSPC`` if there are no free IDs.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMhjubj)}(hhh](j)}(h ``struct ida *ida`` IDA handle. h](j)}(h``struct ida *ida``h]j)}(hjh]hstruct ida *ida}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMhjubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hjh]h gfp_t gfp}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMhj ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj&ubah}(h]h ]h"]h$]h&]uh1jhj ubeh}(h]h ]h"]h$]h&]uh1jhj%hMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjKh]h Description}(hjMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMhjubh)}(h4Allocate an ID between 0 and ``INT_MAX``, inclusive.h](hAllocate an ID between 0 and }(hjahhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjihhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubh , inclusive.}(hjahhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMhjubh)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMhjubh)}(hKAny context. It is safe to call this function without locking in your code.h]hKAny context. It is safe to call this function without locking in your code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM!hjubh)}(hkThe allocated ID, or ``-ENOMEM`` if memory could not be allocated, or ``-ENOSPC`` if there are no free IDs.h](hThe allocated ID, or }(hjhhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& if memory could not be allocated, or }(hjhhhNhNubj)}(h ``-ENOSPC``h]h-ENOSPC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if there are no free IDs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ida_alloc_min (C function)c.ida_alloc_minhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h@int ida_alloc_min (struct ida *ida, unsigned int min, gfp_t gfp)h]j4)}(h?int ida_alloc_min(struct ida *ida, unsigned int min, gfp_t gfp)h](js)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM)ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hM)ubj:)}(h ida_alloc_minh]j@)}(h ida_alloc_minh]h ida_alloc_min}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj1ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hjhhhj"hM)ubj)}(h.(struct ida *ida, unsigned int min, gfp_t gfp)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hjQhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubj)}(h h]h }(hj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubh)}(hhh]j@)}(hidah]hida}(hjohhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjlubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetjqmodnameN classnameNj-j0)}j3]j6)}j)j7sbc.ida_alloc_minasbuh1hhjMubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjMubjJ)}(hjMh]h*}(hjhhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjMubj@)}(hidah]hida}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjMubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjIubj)}(hunsigned int minh](js)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjs)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj@)}(hminh]hmin}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjIubj)}(h gfp_t gfph](h)}(hhh]j@)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetjmodnameN classnameNj-j0)}j3]jc.ida_alloc_minasbuh1hhjubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj@)}(hgfph]hgfp}(hjChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjIubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj"hM)ubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj hhhj"hM)ubah}(h]jah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj"hM)hj hhubjm)}(hhh]h)}(hAllocate an unused ID.h]hAllocate an unused ID.}(hjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM)hjjhhubah}(h]h ]h"]h$]h&]uh1jlhj hhhj"hM)ubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjjjjjjuh1j(hhhjhNhNubj)}(hX**Parameters** ``struct ida *ida`` IDA handle. ``unsigned int min`` Lowest ID to allocate. ``gfp_t gfp`` Memory allocation flags. **Description** Allocate an ID between **min** and ``INT_MAX``, inclusive. **Context** Any context. It is safe to call this function without locking in your code. **Return** The allocated ID, or ``-ENOMEM`` if memory could not be allocated, or ``-ENOSPC`` if there are no free IDs.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM-hjubj)}(hhh](j)}(h ``struct ida *ida`` IDA handle. h](j)}(h``struct ida *ida``h]j)}(hjh]hstruct ida *ida}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM*hjubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM*hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM*hjubj)}(h,``unsigned int min`` Lowest ID to allocate. h](j)}(h``unsigned int min``h]j)}(hjh]hunsigned int min}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM+hjubj)}(hhh]h)}(hLowest ID to allocate.h]hLowest ID to allocate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM+hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM+hjubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hj h]h gfp_t gfp}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM,hjubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5hM,hj6ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj5hM,hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj[h]h Description}(hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM.hjubh)}(h:Allocate an ID between **min** and ``INT_MAX``, inclusive.h](hAllocate an ID between }(hjqhhhNhNubj)}(h**min**h]hmin}(hjyhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh and }(hjqhhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjqubh , inclusive.}(hjqhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM-hjubh)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM/hjubh)}(hKAny context. It is safe to call this function without locking in your code.h]hKAny context. It is safe to call this function without locking in your code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM0hjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM3hjubh)}(hkThe allocated ID, or ``-ENOMEM`` if memory could not be allocated, or ``-ENOSPC`` if there are no free IDs.h](hThe allocated ID, or }(hjhhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& if memory could not be allocated, or }(hjhhhNhNubj)}(h ``-ENOSPC``h]h-ENOSPC}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if there are no free IDs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM2hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ida_alloc_max (C function)c.ida_alloc_maxhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h@int ida_alloc_max (struct ida *ida, unsigned int max, gfp_t gfp)h]j4)}(h?int ida_alloc_max(struct ida *ida, unsigned int max, gfp_t gfp)h](js)}(hinth]hint}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj2hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM;ubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2hhhjDhM;ubj:)}(h ida_alloc_maxh]j@)}(h ida_alloc_maxh]h ida_alloc_max}(hjWhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjSubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj2hhhjDhM;ubj)}(h.(struct ida *ida, unsigned int max, gfp_t gfp)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubh)}(hhh]j@)}(hidah]hida}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetjmodnameN classnameNj-j0)}j3]j6)}j)jYsbc.ida_alloc_maxasbuh1hhjoubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjoubjJ)}(hjMh]h*}(hjhhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjoubj@)}(hidah]hida}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjoubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjkubj)}(hunsigned int maxh](js)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjs)}(hinth]hint}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj@)}(hmaxh]hmax}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjkubj)}(h gfp_t gfph](h)}(hhh]j@)}(hgfp_th]hgfp_t}(hj9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj6ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj;modnameN classnameNj-j0)}j3]jc.ida_alloc_maxasbuh1hhj2ubj)}(h h]h }(hjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubj@)}(hgfph]hgfp}(hjehhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjkubeh}(h]h ]h"]h$]h&]hhuh1jhj2hhhjDhM;ubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj.hhhjDhM;ubah}(h]j)ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjDhM;hj+hhubjm)}(hhh]h)}(hAllocate an unused ID.h]hAllocate an unused ID.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM;hjhhubah}(h]h ]h"]h$]h&]uh1jlhj+hhhjDhM;ubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjjjjjjuh1j(hhhjhNhNubj)}(hX**Parameters** ``struct ida *ida`` IDA handle. ``unsigned int max`` Highest ID to allocate. ``gfp_t gfp`` Memory allocation flags. **Description** Allocate an ID between 0 and **max**, inclusive. **Context** Any context. It is safe to call this function without locking in your code. **Return** The allocated ID, or ``-ENOMEM`` if memory could not be allocated, or ``-ENOSPC`` if there are no free IDs.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM?hjubj)}(hhh](j)}(h ``struct ida *ida`` IDA handle. h](j)}(h``struct ida *ida``h]j)}(hjh]hstruct ida *ida}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM<hjubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM<hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM<hjubj)}(h-``unsigned int max`` Highest ID to allocate. h](j)}(h``unsigned int max``h]j)}(hj h]hunsigned int max}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM=hjubj)}(hhh]h)}(hHighest ID to allocate.h]hHighest ID to allocate.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM=hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhM=hjubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hjBh]h gfp_t gfp}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM>hj<ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWhM>hjXubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ]h"]h$]h&]uh1jhjWhM>hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj}h]h Description}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM@hjubh)}(h0Allocate an ID between 0 and **max**, inclusive.h](hAllocate an ID between 0 and }(hjhhhNhNubj)}(h**max**h]hmax}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh , inclusive.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM?hjubh)}(h **Context**h]j)}(hjh]hContext}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMAhjubh)}(hKAny context. It is safe to call this function without locking in your code.h]hKAny context. It is safe to call this function without locking in your code.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMBhjubh)}(h **Return**h]j)}(hjh]hReturn}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMEhjubh)}(hkThe allocated ID, or ``-ENOMEM`` if memory could not be allocated, or ``-ENOSPC`` if there are no free IDs.h](hThe allocated ID, or }(hjhhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh& if memory could not be allocated, or }(hjhhhNhNubj)}(h ``-ENOSPC``h]h-ENOSPC}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh if there are no free IDs.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_alloc_u32 (C function)c.idr_alloc_u32hNtauh1jhjhhhNhNubj))}(hhh](j.)}(hYint idr_alloc_u32 (struct idr *idr, void *ptr, u32 *nextid, unsigned long max, gfp_t gfp)h]j4)}(hXint idr_alloc_u32(struct idr *idr, void *ptr, u32 *nextid, unsigned long max, gfp_t gfp)h](js)}(hinth]hint}(hjFhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjBhhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK ubj)}(h h]h }(hjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBhhhjThK ubj:)}(h idr_alloc_u32h]j@)}(h idr_alloc_u32h]h idr_alloc_u32}(hjghhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjcubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hjBhhhjThK ubj)}(hG(struct idr *idr, void *ptr, u32 *nextid, unsigned long max, gfp_t gfp)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubh)}(hhh]j@)}(hidrh]hidr}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetjmodnameN classnameNj-j0)}j3]j6)}j)jisbc.idr_alloc_u32asbuh1hhjubj)}(h h]h }(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjJ)}(hjMh]h*}(hjhhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjubj@)}(hidrh]hidr}(hjhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj{ubj)}(h void *ptrh](js)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjJ)}(hjMh]h*}(hj hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjubj@)}(hptrh]hptr}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj{ubj)}(h u32 *nextidh](h)}(hhh]j@)}(hu32h]hu32}(hj: hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj7 ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj< modnameN classnameNj-j0)}j3]jc.idr_alloc_u32asbuh1hhj3 ubj)}(h h]h }(hjX hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3 ubjJ)}(hjMh]h*}(hjf hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj3 ubj@)}(hnextidh]hnextid}(hjs hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj3 ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj{ubj)}(hunsigned long maxh](js)}(hunsignedh]hunsigned}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjs)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj@)}(hmaxh]hmax}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj{ubj)}(h gfp_t gfph](h)}(hhh]j@)}(hgfp_th]hgfp_t}(hj hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj modnameN classnameNj-j0)}j3]jc.idr_alloc_u32asbuh1hhj ubj)}(h h]h }(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubj@)}(hgfph]hgfp}(hj !hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj{ubeh}(h]h ]h"]h$]h&]hhuh1jhjBhhhjThK ubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj>hhhjThK ubah}(h]j9ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjThK hj;hhubjm)}(hhh]h)}(hAllocate an ID.h]hAllocate an ID.}(hj6!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK hj3!hhubah}(h]h ]h"]h$]h&]uh1jlhj;hhhjThK ubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjN!jjN!jjjuh1j(hhhjhNhNubj)}(hX**Parameters** ``struct idr *idr`` IDR handle. ``void *ptr`` Pointer to be associated with the new ID. ``u32 *nextid`` Pointer to an ID. ``unsigned long max`` The maximum ID to allocate (inclusive). ``gfp_t gfp`` Memory allocation flags. **Description** Allocates an unused ID in the range specified by **nextid** and **max**. Note that **max** is inclusive whereas the **end** parameter to idr_alloc() is exclusive. The new ID is assigned to **nextid** before the pointer is inserted into the IDR, so if **nextid** points into the object pointed to by **ptr**, a concurrent lookup will not find an uninitialised ID. The caller should provide their own locking to ensure that two concurrent modifications to the IDR are not possible. Read-only accesses to the IDR may be done under the RCU read lock or may exclude simultaneous writers. **Return** 0 if an ID was allocated, -ENOMEM if memory allocation failed, or -ENOSPC if no free IDs could be found. If an error occurred, **nextid** is unchanged.h](h)}(h**Parameters**h]j)}(hjX!h]h Parameters}(hjZ!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjV!ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjR!ubj)}(hhh](j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hjw!h]hstruct idr *idr}(hjy!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju!ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK hjq!ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hK hj!ubah}(h]h ]h"]h$]h&]uh1jhjq!ubeh}(h]h ]h"]h$]h&]uh1jhj!hK hjn!ubj)}(h8``void *ptr`` Pointer to be associated with the new ID. h](j)}(h ``void *ptr``h]j)}(hj!h]h void *ptr}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK hj!ubj)}(hhh]h)}(h)Pointer to be associated with the new ID.h]h)Pointer to be associated with the new ID.}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hK hj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hK hjn!ubj)}(h"``u32 *nextid`` Pointer to an ID. h](j)}(h``u32 *nextid``h]j)}(hj!h]h u32 *nextid}(hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj!ubj)}(hhh]h)}(hPointer to an ID.h]hPointer to an ID.}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hKhj!ubah}(h]h ]h"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]uh1jhj!hKhjn!ubj)}(h>``unsigned long max`` The maximum ID to allocate (inclusive). h](j)}(h``unsigned long max``h]j)}(hj""h]hunsigned long max}(hj$"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj "ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj"ubj)}(hhh]h)}(h'The maximum ID to allocate (inclusive).h]h'The maximum ID to allocate (inclusive).}(hj;"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7"hKhj8"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj7"hKhjn!ubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hj["h]h gfp_t gfp}(hj]"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY"ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjU"ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hjt"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp"hKhjq"ubah}(h]h ]h"]h$]h&]uh1jhjU"ubeh}(h]h ]h"]h$]h&]uh1jhjp"hKhjn!ubeh}(h]h ]h"]h$]h&]uh1jhjR!ubh)}(h**Description**h]j)}(hj"h]h Description}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjR!ubh)}(hXkAllocates an unused ID in the range specified by **nextid** and **max**. Note that **max** is inclusive whereas the **end** parameter to idr_alloc() is exclusive. The new ID is assigned to **nextid** before the pointer is inserted into the IDR, so if **nextid** points into the object pointed to by **ptr**, a concurrent lookup will not find an uninitialised ID.h](h1Allocates an unused ID in the range specified by }(hj"hhhNhNubj)}(h **nextid**h]hnextid}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh and }(hj"hhhNhNubj)}(h**max**h]hmax}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh . Note that }(hj"hhhNhNubj)}(h**max**h]hmax}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh is inclusive whereas the }(hj"hhhNhNubj)}(h**end**h]hend}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubhC parameter to idr_alloc() is exclusive. The new ID is assigned to }(hj"hhhNhNubj)}(h **nextid**h]hnextid}(hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh4 before the pointer is inserted into the IDR, so if }(hj"hhhNhNubj)}(h **nextid**h]hnextid}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh& points into the object pointed to by }(hj"hhhNhNubj)}(h**ptr**h]hptr}(hj #hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubh8, a concurrent lookup will not find an uninitialised ID.}(hj"hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjR!ubh)}(hThe caller should provide their own locking to ensure that two concurrent modifications to the IDR are not possible. Read-only accesses to the IDR may be done under the RCU read lock or may exclude simultaneous writers.h]hThe caller should provide their own locking to ensure that two concurrent modifications to the IDR are not possible. Read-only accesses to the IDR may be done under the RCU read lock or may exclude simultaneous writers.}(hj9#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjR!ubh)}(h **Return**h]j)}(hjJ#h]hReturn}(hjL#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH#ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjR!ubh)}(h0 if an ID was allocated, -ENOMEM if memory allocation failed, or -ENOSPC if no free IDs could be found. If an error occurred, **nextid** is unchanged.h](h0 if an ID was allocated, -ENOMEM if memory allocation failed, or -ENOSPC if no free IDs could be found. If an error occurred, }(hj`#hhhNhNubj)}(h **nextid**h]hnextid}(hjh#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj`#ubh is unchanged.}(hj`#hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjR!ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_alloc (C function) c.idr_allochNtauh1jhjhhhNhNubj))}(hhh](j.)}(hIint idr_alloc (struct idr *idr, void *ptr, int start, int end, gfp_t gfp)h]j4)}(hHint idr_alloc(struct idr *idr, void *ptr, int start, int end, gfp_t gfp)h](js)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj#hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK>ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#hhhj#hK>ubj:)}(h idr_alloch]j@)}(h idr_alloch]h idr_alloc}(hj#hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj#ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj#hhhj#hK>ubj)}(h;(struct idr *idr, void *ptr, int start, int end, gfp_t gfp)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubj)}(h h]h }(hj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubh)}(hhh]j@)}(hidrh]hidr}(hj#hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj#modnameN classnameNj-j0)}j3]j6)}j)j#sb c.idr_allocasbuh1hhj#ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#ubjJ)}(hjMh]h*}(hj*$hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj#ubj@)}(hidrh]hidr}(hj7$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(h void *ptrh](js)}(hvoidh]hvoid}(hjP$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjL$ubj)}(h h]h }(hj^$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL$ubjJ)}(hjMh]h*}(hjl$hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjL$ubj@)}(hptrh]hptr}(hjy$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjL$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(h int starth](js)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj@)}(hstarth]hstart}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(hint endh](js)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj$ubj)}(h h]h }(hj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj@)}(hendh]hend}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(h gfp_t gfph](h)}(hhh]j@)}(hgfp_th]hgfp_t}(hj$hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj%modnameN classnameNj-j0)}j3]j$ c.idr_allocasbuh1hhj$ubj)}(h h]h }(hj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj@)}(hgfph]hgfp}(hj+%hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubeh}(h]h ]h"]h$]h&]hhuh1jhj#hhhj#hK>ubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj#hhhj#hK>ubah}(h]j#ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj#hK>hj#hhubjm)}(hhh]h)}(hAllocate an ID.h]hAllocate an ID.}(hjU%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK>hjR%hhubah}(h]h ]h"]h$]h&]uh1jlhj#hhhj#hK>ubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjm%jjm%jjjuh1j(hhhjhNhNubj)}(hX8**Parameters** ``struct idr *idr`` IDR handle. ``void *ptr`` Pointer to be associated with the new ID. ``int start`` The minimum ID (inclusive). ``int end`` The maximum ID (exclusive). ``gfp_t gfp`` Memory allocation flags. **Description** Allocates an unused ID in the range specified by **start** and **end**. If **end** is <= 0, it is treated as one larger than ``INT_MAX``. This allows callers to use **start** + N as **end** as long as N is within integer range. The caller should provide their own locking to ensure that two concurrent modifications to the IDR are not possible. Read-only accesses to the IDR may be done under the RCU read lock or may exclude simultaneous writers. **Return** The newly allocated ID, -ENOMEM if memory allocation failed, or -ENOSPC if no free IDs could be found.h](h)}(h**Parameters**h]j)}(hjw%h]h Parameters}(hjy%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhju%ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKBhjq%ubj)}(hhh](j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hj%h]hstruct idr *idr}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK?hj%ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hK?hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hK?hj%ubj)}(h8``void *ptr`` Pointer to be associated with the new ID. h](j)}(h ``void *ptr``h]j)}(hj%h]h void *ptr}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK@hj%ubj)}(hhh]h)}(h)Pointer to be associated with the new ID.h]h)Pointer to be associated with the new ID.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hK@hj%ubah}(h]h ]h"]h$]h&]uh1jhj%ubeh}(h]h ]h"]h$]h&]uh1jhj%hK@hj%ubj)}(h*``int start`` The minimum ID (inclusive). h](j)}(h ``int start``h]j)}(hj&h]h int start}(hj &hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKAhj&ubj)}(hhh]h)}(hThe minimum ID (inclusive).h]hThe minimum ID (inclusive).}(hj!&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKAhj&ubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKAhj%ubj)}(h(``int end`` The maximum ID (exclusive). h](j)}(h ``int end``h]j)}(hjA&h]hint end}(hjC&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?&ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKBhj;&ubj)}(hhh]h)}(hThe maximum ID (exclusive).h]hThe maximum ID (exclusive).}(hjZ&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjV&hKBhjW&ubah}(h]h ]h"]h$]h&]uh1jhj;&ubeh}(h]h ]h"]h$]h&]uh1jhjV&hKBhj%ubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hjz&h]h gfp_t gfp}(hj|&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx&ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKChjt&ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&hKChj&ubah}(h]h ]h"]h$]h&]uh1jhjt&ubeh}(h]h ]h"]h$]h&]uh1jhj&hKChj%ubeh}(h]h ]h"]h$]h&]uh1jhjq%ubh)}(h**Description**h]j)}(hj&h]h Description}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKEhjq%ubh)}(hAllocates an unused ID in the range specified by **start** and **end**. If **end** is <= 0, it is treated as one larger than ``INT_MAX``. This allows callers to use **start** + N as **end** as long as N is within integer range.h](h1Allocates an unused ID in the range specified by }(hj&hhhNhNubj)}(h **start**h]hstart}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh and }(hj&hhhNhNubj)}(h**end**h]hend}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh. If }(hj&hhhNhNubj)}(h**end**h]hend}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh+ is <= 0, it is treated as one larger than }(hj&hhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hj 'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh. This allows callers to use }(hj&hhhNhNubj)}(h **start**h]hstart}(hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh + N as }(hj&hhhNhNubj)}(h**end**h]hend}(hj-'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&ubh& as long as N is within integer range.}(hj&hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKDhjq%ubh)}(hThe caller should provide their own locking to ensure that two concurrent modifications to the IDR are not possible. Read-only accesses to the IDR may be done under the RCU read lock or may exclude simultaneous writers.h]hThe caller should provide their own locking to ensure that two concurrent modifications to the IDR are not possible. Read-only accesses to the IDR may be done under the RCU read lock or may exclude simultaneous writers.}(hjF'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKHhjq%ubh)}(h **Return**h]j)}(hjW'h]hReturn}(hjY'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjU'ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKMhjq%ubh)}(hfThe newly allocated ID, -ENOMEM if memory allocation failed, or -ENOSPC if no free IDs could be found.h]hfThe newly allocated ID, -ENOMEM if memory allocation failed, or -ENOSPC if no free IDs could be found.}(hjm'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKNhjq%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_alloc_cyclic (C function)c.idr_alloc_cyclichNtauh1jhjhhhNhNubj))}(hhh](j.)}(hPint idr_alloc_cyclic (struct idr *idr, void *ptr, int start, int end, gfp_t gfp)h]j4)}(hOint idr_alloc_cyclic(struct idr *idr, void *ptr, int start, int end, gfp_t gfp)h](js)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj'hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKbubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hKbubj:)}(hidr_alloc_cyclich]j@)}(hidr_alloc_cyclich]hidr_alloc_cyclic}(hj'hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj'ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj'hhhj'hKbubj)}(h;(struct idr *idr, void *ptr, int start, int end, gfp_t gfp)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubj)}(h h]h }(hj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubh)}(hhh]j@)}(hidrh]hidr}(hj'hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj'modnameN classnameNj-j0)}j3]j6)}j)j'sbc.idr_alloc_cyclicasbuh1hhj'ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubjJ)}(hjMh]h*}(hj%(hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj'ubj@)}(hidrh]hidr}(hj2(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubj)}(h void *ptrh](js)}(hvoidh]hvoid}(hjK(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjG(ubj)}(h h]h }(hjY(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjG(ubjJ)}(hjMh]h*}(hjg(hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjG(ubj@)}(hptrh]hptr}(hjt(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjG(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubj)}(h int starth](js)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj@)}(hstarth]hstart}(hj(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubj)}(hint endh](js)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj(ubj)}(h h]h }(hj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj@)}(hendh]hend}(hj(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubj)}(h gfp_t gfph](h)}(hhh]j@)}(hgfp_th]hgfp_t}(hj(hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj(modnameN classnameNj-j0)}j3]j(c.idr_alloc_cyclicasbuh1hhj(ubj)}(h h]h }(hj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj@)}(hgfph]hgfp}(hj&)hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubeh}(h]h ]h"]h$]h&]hhuh1jhj'hhhj'hKbubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj'hhhj'hKbubah}(h]j'ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj'hKbhj'hhubjm)}(hhh]h)}(hAllocate an ID cyclically.h]hAllocate an ID cyclically.}(hjP)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKbhjM)hhubah}(h]h ]h"]h$]h&]uh1jlhj'hhhj'hKbubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjh)jjh)jjjuh1j(hhhjhNhNubj)}(hX**Parameters** ``struct idr *idr`` IDR handle. ``void *ptr`` Pointer to be associated with the new ID. ``int start`` The minimum ID (inclusive). ``int end`` The maximum ID (exclusive). ``gfp_t gfp`` Memory allocation flags. **Description** Allocates an unused ID in the range specified by **start** and **end**. If **end** is <= 0, it is treated as one larger than ``INT_MAX``. This allows callers to use **start** + N as **end** as long as N is within integer range. The search for an unused ID will start at the last ID allocated and will wrap around to **start** if no free IDs are found before reaching **end**. The caller should provide their own locking to ensure that two concurrent modifications to the IDR are not possible. Read-only accesses to the IDR may be done under the RCU read lock or may exclude simultaneous writers. **Return** The newly allocated ID, -ENOMEM if memory allocation failed, or -ENOSPC if no free IDs could be found.h](h)}(h**Parameters**h]j)}(hjr)h]h Parameters}(hjt)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjp)ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKfhjl)ubj)}(hhh](j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hj)h]hstruct idr *idr}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKchj)ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKchj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKchj)ubj)}(h8``void *ptr`` Pointer to be associated with the new ID. h](j)}(h ``void *ptr``h]j)}(hj)h]h void *ptr}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKdhj)ubj)}(hhh]h)}(h)Pointer to be associated with the new ID.h]h)Pointer to be associated with the new ID.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKdhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKdhj)ubj)}(h*``int start`` The minimum ID (inclusive). h](j)}(h ``int start``h]j)}(hj*h]h int start}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKehj)ubj)}(hhh]h)}(hThe minimum ID (inclusive).h]hThe minimum ID (inclusive).}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKehj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hKehj)ubj)}(h(``int end`` The maximum ID (exclusive). h](j)}(h ``int end``h]j)}(hj<*h]hint end}(hj>*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:*ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKfhj6*ubj)}(hhh]h)}(hThe maximum ID (exclusive).h]hThe maximum ID (exclusive).}(hjU*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjQ*hKfhjR*ubah}(h]h ]h"]h$]h&]uh1jhj6*ubeh}(h]h ]h"]h$]h&]uh1jhjQ*hKfhj)ubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hju*h]h gfp_t gfp}(hjw*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs*ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKghjo*ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKghj*ubah}(h]h ]h"]h$]h&]uh1jhjo*ubeh}(h]h ]h"]h$]h&]uh1jhj*hKghj)ubeh}(h]h ]h"]h$]h&]uh1jhjl)ubh)}(h**Description**h]j)}(hj*h]h Description}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKihjl)ubh)}(hXyAllocates an unused ID in the range specified by **start** and **end**. If **end** is <= 0, it is treated as one larger than ``INT_MAX``. This allows callers to use **start** + N as **end** as long as N is within integer range. The search for an unused ID will start at the last ID allocated and will wrap around to **start** if no free IDs are found before reaching **end**.h](h1Allocates an unused ID in the range specified by }(hj*hhhNhNubj)}(h **start**h]hstart}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh and }(hj*hhhNhNubj)}(h**end**h]hend}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh. If }(hj*hhhNhNubj)}(h**end**h]hend}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh+ is <= 0, it is treated as one larger than }(hj*hhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh. This allows callers to use }(hj*hhhNhNubj)}(h **start**h]hstart}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh + N as }(hj*hhhNhNubj)}(h**end**h]hend}(hj(+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh as long as N is within integer range. The search for an unused ID will start at the last ID allocated and will wrap around to }(hj*hhhNhNubj)}(h **start**h]hstart}(hj:+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh* if no free IDs are found before reaching }(hj*hhhNhNubj)}(h**end**h]hend}(hjL+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubh.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhhjl)ubh)}(hThe caller should provide their own locking to ensure that two concurrent modifications to the IDR are not possible. Read-only accesses to the IDR may be done under the RCU read lock or may exclude simultaneous writers.h]hThe caller should provide their own locking to ensure that two concurrent modifications to the IDR are not possible. Read-only accesses to the IDR may be done under the RCU read lock or may exclude simultaneous writers.}(hje+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKnhjl)ubh)}(h **Return**h]j)}(hjv+h]hReturn}(hjx+hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt+ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKshjl)ubh)}(hfThe newly allocated ID, -ENOMEM if memory allocation failed, or -ENOSPC if no free IDs could be found.h]hfThe newly allocated ID, -ENOMEM if memory allocation failed, or -ENOSPC if no free IDs could be found.}(hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKthjl)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_remove (C function) c.idr_removehNtauh1jhjhhhNhNubj))}(hhh](j.)}(h5void * idr_remove (struct idr *idr, unsigned long id)h]j4)}(h3void *idr_remove(struct idr *idr, unsigned long id)h](js)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj+hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKubj)}(h h]h }(hj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+hhhj+hKubjJ)}(hjMh]h*}(hj+hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj+hhhj+hKubj:)}(h idr_removeh]j@)}(h idr_removeh]h idr_remove}(hj+hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj+ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj+hhhj+hKubj)}(h#(struct idr *idr, unsigned long id)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j@)}(hidrh]hidr}(hj#,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj ,ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj%,modnameN classnameNj-j0)}j3]j6)}j)j+sb c.idr_removeasbuh1hhj,ubj)}(h h]h }(hjC,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubjJ)}(hjMh]h*}(hjQ,hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj,ubj@)}(hidrh]hidr}(hj^,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubj)}(hunsigned long idh](js)}(hunsignedh]hunsigned}(hjw,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjs,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs,ubjs)}(hlongh]hlong}(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjs,ubj)}(h h]h }(hj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs,ubj@)}(hidh]hid}(hj,hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjs,ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubeh}(h]h ]h"]h$]h&]hhuh1jhj+hhhj+hKubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj+hhhj+hKubah}(h]j+ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj+hKhj+hhubjm)}(hhh]h)}(hRemove an ID from the IDR.h]hRemove an ID from the IDR.}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj,hhubah}(h]h ]h"]h$]h&]uh1jlhj+hhhj+hKubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj,jj,jjjuh1j(hhhjhNhNubj)}(hX**Parameters** ``struct idr *idr`` IDR handle. ``unsigned long id`` Pointer ID. **Description** Removes this ID from the IDR. If the ID was not previously in the IDR, this function returns ``NULL``. Since this function modifies the IDR, the caller should provide their own locking to ensure that concurrent modification of the same IDR is not possible. **Return** The pointer formerly associated with this ID.h](h)}(h**Parameters**h]j)}(hj,h]h Parameters}(hj,hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj,ubj)}(hhh](j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hj-h]hstruct idr *idr}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj-ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj3-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/-hKhj0-ubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhj/-hKhj-ubj)}(h!``unsigned long id`` Pointer ID. h](j)}(h``unsigned long id``h]j)}(hjS-h]hunsigned long id}(hjU-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQ-ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjM-ubj)}(hhh]h)}(h Pointer ID.h]h Pointer ID.}(hjl-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjh-hKhji-ubah}(h]h ]h"]h$]h&]uh1jhjM-ubeh}(h]h ]h"]h$]h&]uh1jhjh-hKhj-ubeh}(h]h ]h"]h$]h&]uh1jhj,ubh)}(h**Description**h]j)}(hj-h]h Description}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj,ubh)}(hgRemoves this ID from the IDR. If the ID was not previously in the IDR, this function returns ``NULL``.h](h^Removes this ID from the IDR. If the ID was not previously in the IDR, this function returns }(hj-hhhNhNubj)}(h``NULL``h]hNULL}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubh.}(hj-hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj,ubh)}(hSince this function modifies the IDR, the caller should provide their own locking to ensure that concurrent modification of the same IDR is not possible.h]hSince this function modifies the IDR, the caller should provide their own locking to ensure that concurrent modification of the same IDR is not possible.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj,ubh)}(h **Return**h]j)}(hj-h]hReturn}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj,ubh)}(h-The pointer formerly associated with this ID.h]h-The pointer formerly associated with this ID.}(hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj,ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_find (C function) c.idr_findhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h9void * idr_find (const struct idr *idr, unsigned long id)h]j4)}(h7void *idr_find(const struct idr *idr, unsigned long id)h](js)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj.hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKubj)}(h h]h }(hj*.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.hhhj).hKubjJ)}(hjMh]h*}(hj8.hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj.hhhj).hKubj:)}(hidr_findh]j@)}(hidr_findh]hidr_find}(hjI.hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjE.ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj.hhhj).hKubj)}(h)(const struct idr *idr, unsigned long id)h](j)}(hconst struct idr *idrh](j)}(hjh]hconst}(hje.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja.ubj)}(h h]h }(hjr.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja.ubj)}(hjh]hstruct}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja.ubh)}(hhh]j@)}(hidrh]hidr}(hj.hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj.modnameN classnameNj-j0)}j3]j6)}j)jK.sb c.idr_findasbuh1hhja.ubj)}(h h]h }(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhja.ubjJ)}(hjMh]h*}(hj.hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhja.ubj@)}(hidrh]hidr}(hj.hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hja.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj].ubj)}(hunsigned long idh](js)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj.ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubjs)}(hlongh]hlong}(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj.ubj)}(h h]h }(hj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.ubj@)}(hidh]hid}(hj*/hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj].ubeh}(h]h ]h"]h$]h&]hhuh1jhj.hhhj).hKubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj.hhhj).hKubah}(h]j.ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj).hKhj.hhubjm)}(hhh]h)}(hReturn pointer for given ID.h]hReturn pointer for given ID.}(hjT/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjQ/hhubah}(h]h ]h"]h$]h&]uh1jlhj.hhhj).hKubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjl/jjl/jjjuh1j(hhhjhNhNubj)}(hX**Parameters** ``const struct idr *idr`` IDR handle. ``unsigned long id`` Pointer ID. **Description** Looks up the pointer associated with this ID. A ``NULL`` pointer may indicate that **id** is not allocated or that the ``NULL`` pointer was associated with this ID. This function can be called under rcu_read_lock(), given that the leaf pointers lifetimes are correctly managed. **Return** The pointer associated with this ID.h](h)}(h**Parameters**h]j)}(hjv/h]h Parameters}(hjx/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjt/ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjp/ubj)}(hhh](j)}(h&``const struct idr *idr`` IDR handle. h](j)}(h``const struct idr *idr``h]j)}(hj/h]hconst struct idr *idr}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj/ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj/ubj)}(h!``unsigned long id`` Pointer ID. h](j)}(h``unsigned long id``h]j)}(hj/h]hunsigned long id}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj/ubj)}(hhh]h)}(h Pointer ID.h]h Pointer ID.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]uh1jhj/hKhj/ubeh}(h]h ]h"]h$]h&]uh1jhjp/ubh)}(h**Description**h]j)}(hj 0h]h Description}(hj 0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjp/ubh)}(hLooks up the pointer associated with this ID. A ``NULL`` pointer may indicate that **id** is not allocated or that the ``NULL`` pointer was associated with this ID.h](h1Looks up the pointer associated with this ID. A }(hj0hhhNhNubj)}(h``NULL``h]hNULL}(hj'0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh pointer may indicate that }(hj0hhhNhNubj)}(h**id**h]hid}(hj90hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh is not allocated or that the }(hj0hhhNhNubj)}(h``NULL``h]hNULL}(hjK0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0ubh% pointer was associated with this ID.}(hj0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjp/ubh)}(hpThis function can be called under rcu_read_lock(), given that the leaf pointers lifetimes are correctly managed.h]hpThis function can be called under rcu_read_lock(), given that the leaf pointers lifetimes are correctly managed.}(hjd0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjp/ubh)}(h **Return**h]j)}(hju0h]hReturn}(hjw0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjs0ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjp/ubh)}(h$The pointer associated with this ID.h]h$The pointer associated with this ID.}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjp/ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_for_each (C function)c.idr_for_eachhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h\int idr_for_each (const struct idr *idr, int (*fn)(int id, void *p, void *data), void *data)h]j4)}(h[int idr_for_each(const struct idr *idr, int (*fn)(int id, void *p, void *data), void *data)h](js)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj0hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKubj)}(h h]h }(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0hhhj0hKubj:)}(h idr_for_eachh]j@)}(h idr_for_eachh]h idr_for_each}(hj0hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj0ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj0hhhj0hKubj)}(hK(const struct idr *idr, int (*fn)(int id, void *p, void *data), void *data)h](j)}(hconst struct idr *idrh](j)}(hjh]hconst}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hjh]hstruct}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubh)}(hhh]j@)}(hidrh]hidr}(hj01hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj-1ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj21modnameN classnameNj-j0)}j3]j6)}j)j0sbc.idr_for_eachasbuh1hhj0ubj)}(h h]h }(hjP1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjJ)}(hjMh]h*}(hj^1hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj0ubj@)}(hidrh]hidr}(hjk1hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(h&int (*fn)(int id, void *p, void *data)h](js)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjJ)}(h(h]h(}(hj1hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj1ubjJ)}(hjMh]h*}(hj1hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj1ubj@)}(hfnh]hfn}(hj1hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj1ubjJ)}(h)h]h)}(hj1hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj1ubjJ)}(hj1h]h(}(hj1hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj1ubjs)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj1ubj)}(h h]h }(hj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubj@)}(hidh]hid}(hj2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj1ubjJ)}(h,h]h,}(hj2hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj1ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjs)}(hvoidh]hvoid}(hj*2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj1ubj)}(h h]h }(hj82hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjJ)}(hjMh]h*}(hjF2hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj1ubj@)}(hjVh]hp}(hjS2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj1ubjJ)}(hj2h]h,}(hj`2hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj1ubj)}(h h]h }(hjm2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjs)}(hvoidh]hvoid}(hj{2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj1ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubjJ)}(hjMh]h*}(hj2hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj1ubj@)}(hdatah]hdata}(hj2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj1ubjJ)}(hj1h]h)}(hj2hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj1ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(h void *datah](js)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj2ubj)}(h h]h }(hj2hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj2ubjJ)}(hjMh]h*}(hj2hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj2ubj@)}(hdatah]hdata}(hj2hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubeh}(h]h ]h"]h$]h&]hhuh1jhj0hhhj0hKubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj0hhhj0hKubah}(h]j0ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj0hKhj0hhubjm)}(hhh]h)}(h$Iterate through all stored pointers.h]h$Iterate through all stored pointers.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj3hhubah}(h]h ]h"]h$]h&]uh1jlhj0hhhj0hKubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj53jj53jjjuh1j(hhhjhNhNubj)}(hX**Parameters** ``const struct idr *idr`` IDR handle. ``int (*fn)(int id, void *p, void *data)`` Function to be called for each pointer. ``void *data`` Data passed to callback function. **Description** The callback function will be called for each entry in **idr**, passing the ID, the entry and **data**. If **fn** returns anything other than ``0``, the iteration stops and that value is returned from this function. idr_for_each() can be called concurrently with idr_alloc() and idr_remove() if protected by RCU. Newly added entries may not be seen and deleted entries may be seen, but adding and removing entries will not cause other entries to be skipped, nor spurious ones to be seen.h](h)}(h**Parameters**h]j)}(hj?3h]h Parameters}(hjA3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=3ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj93ubj)}(hhh](j)}(h&``const struct idr *idr`` IDR handle. h](j)}(h``const struct idr *idr``h]j)}(hj^3h]hconst struct idr *idr}(hj`3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\3ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjX3ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjw3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjs3hKhjt3ubah}(h]h ]h"]h$]h&]uh1jhjX3ubeh}(h]h ]h"]h$]h&]uh1jhjs3hKhjU3ubj)}(hS``int (*fn)(int id, void *p, void *data)`` Function to be called for each pointer. h](j)}(h*``int (*fn)(int id, void *p, void *data)``h]j)}(hj3h]h&int (*fn)(int id, void *p, void *data)}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj3ubj)}(hhh]h)}(h'Function to be called for each pointer.h]h'Function to be called for each pointer.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjU3ubj)}(h1``void *data`` Data passed to callback function. h](j)}(h``void *data``h]j)}(hj3h]h void *data}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj3ubj)}(hhh]h)}(h!Data passed to callback function.h]h!Data passed to callback function.}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKhj3ubah}(h]h ]h"]h$]h&]uh1jhj3ubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjU3ubeh}(h]h ]h"]h$]h&]uh1jhj93ubh)}(h**Description**h]j)}(hj 4h]h Description}(hj 4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 4ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj93ubh)}(hgThe callback function will be called for each entry in **idr**, passing the ID, the entry and **data**.h](h7The callback function will be called for each entry in }(hj!4hhhNhNubj)}(h**idr**h]hidr}(hj)4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!4ubh , passing the ID, the entry and }(hj!4hhhNhNubj)}(h**data**h]hdata}(hj;4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!4ubh.}(hj!4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj93ubh)}(hoIf **fn** returns anything other than ``0``, the iteration stops and that value is returned from this function.h](hIf }(hjT4hhhNhNubj)}(h**fn**h]hfn}(hj\4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT4ubh returns anything other than }(hjT4hhhNhNubj)}(h``0``h]h0}(hjn4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjT4ubhD, the iteration stops and that value is returned from this function.}(hjT4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj93ubh)}(hXidr_for_each() can be called concurrently with idr_alloc() and idr_remove() if protected by RCU. Newly added entries may not be seen and deleted entries may be seen, but adding and removing entries will not cause other entries to be skipped, nor spurious ones to be seen.h]hXidr_for_each() can be called concurrently with idr_alloc() and idr_remove() if protected by RCU. Newly added entries may not be seen and deleted entries may be seen, but adding and removing entries will not cause other entries to be skipped, nor spurious ones to be seen.}(hj4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj93ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_get_next_ul (C function)c.idr_get_next_ulhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h?void * idr_get_next_ul (struct idr *idr, unsigned long *nextid)h]j4)}(h=void *idr_get_next_ul(struct idr *idr, unsigned long *nextid)h](js)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj4hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKubj)}(h h]h }(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj4hKubjJ)}(hjMh]h*}(hj4hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj4hhhj4hKubj:)}(hidr_get_next_ulh]j@)}(hidr_get_next_ulh]hidr_get_next_ul}(hj4hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj4ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj4hhhj4hKubj)}(h((struct idr *idr, unsigned long *nextid)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(h h]h }(hj 5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubh)}(hhh]j@)}(hidrh]hidr}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj 5modnameN classnameNj-j0)}j3]j6)}j)j4sbc.idr_get_next_ulasbuh1hhj4ubj)}(h h]h }(hj>5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjJ)}(hjMh]h*}(hjL5hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj4ubj@)}(hidrh]hidr}(hjY5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj4ubj)}(hunsigned long *nextidh](js)}(hunsignedh]hunsigned}(hjr5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjn5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn5ubjs)}(hlongh]hlong}(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjn5ubj)}(h h]h }(hj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjn5ubjJ)}(hjMh]h*}(hj5hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjn5ubj@)}(hnextidh]hnextid}(hj5hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjn5ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj4ubeh}(h]h ]h"]h$]h&]hhuh1jhj4hhhj4hKubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj4hhhj4hKubah}(h]j4ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj4hKhj4hhubjm)}(hhh]h)}(hFind next populated entry.h]hFind next populated entry.}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj5hhubah}(h]h ]h"]h$]h&]uh1jlhj4hhhj4hKubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj5jj5jjjuh1j(hhhjhNhNubj)}(hXx**Parameters** ``struct idr *idr`` IDR handle. ``unsigned long *nextid`` Pointer to an ID. **Description** Returns the next populated entry in the tree with an ID greater than or equal to the value pointed to by **nextid**. On exit, **nextid** is updated to the ID of the found value. To use in a loop, the value pointed to by nextid must be incremented by the user.h](h)}(h**Parameters**h]j)}(hj6h]h Parameters}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj5ubj)}(hhh](j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hj"6h]hstruct idr *idr}(hj$6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 6ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj6ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj;6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj76hKhj86ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj76hKhj6ubj)}(h,``unsigned long *nextid`` Pointer to an ID. h](j)}(h``unsigned long *nextid``h]j)}(hj[6h]hunsigned long *nextid}(hj]6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjY6ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjU6ubj)}(hhh]h)}(hPointer to an ID.h]hPointer to an ID.}(hjt6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjp6hKhjq6ubah}(h]h ]h"]h$]h&]uh1jhjU6ubeh}(h]h ]h"]h$]h&]uh1jhjp6hKhj6ubeh}(h]h ]h"]h$]h&]uh1jhj5ubh)}(h**Description**h]j)}(hj6h]h Description}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj5ubh)}(hXReturns the next populated entry in the tree with an ID greater than or equal to the value pointed to by **nextid**. On exit, **nextid** is updated to the ID of the found value. To use in a loop, the value pointed to by nextid must be incremented by the user.h](hiReturns the next populated entry in the tree with an ID greater than or equal to the value pointed to by }(hj6hhhNhNubj)}(h **nextid**h]hnextid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh . On exit, }(hj6hhhNhNubj)}(h **nextid**h]hnextid}(hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj6ubh| is updated to the ID of the found value. To use in a loop, the value pointed to by nextid must be incremented by the user.}(hj6hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj5ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_get_next (C function)c.idr_get_nexthNtauh1jhjhhhNhNubj))}(hhh](j.)}(h2void * idr_get_next (struct idr *idr, int *nextid)h]j4)}(h0void *idr_get_next(struct idr *idr, int *nextid)h](js)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj6hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6hhhj 7hMubjJ)}(hjMh]h*}(hj7hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj6hhhj 7hMubj:)}(h idr_get_nexth]j@)}(h idr_get_nexth]h idr_get_next}(hj-7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj)7ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj6hhhj 7hMubj)}(h(struct idr *idr, int *nextid)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hjI7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE7ubj)}(h h]h }(hjV7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE7ubh)}(hhh]j@)}(hidrh]hidr}(hjg7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjd7ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetji7modnameN classnameNj-j0)}j3]j6)}j)j/7sbc.idr_get_nextasbuh1hhjE7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjE7ubjJ)}(hjMh]h*}(hj7hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjE7ubj@)}(hidrh]hidr}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjE7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA7ubj)}(h int *nextidh](js)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj7ubj)}(h h]h }(hj7hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7ubjJ)}(hjMh]h*}(hj7hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj7ubj@)}(hnextidh]hnextid}(hj7hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjA7ubeh}(h]h ]h"]h$]h&]hhuh1jhj6hhhj 7hMubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj6hhhj 7hMubah}(h]j6ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj 7hMhj6hhubjm)}(hhh]h)}(hFind next populated entry.h]hFind next populated entry.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj 8hhubah}(h]h ]h"]h$]h&]uh1jlhj6hhhj 7hMubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj&8jj&8jjjuh1j(hhhjhNhNubj)}(hXn**Parameters** ``struct idr *idr`` IDR handle. ``int *nextid`` Pointer to an ID. **Description** Returns the next populated entry in the tree with an ID greater than or equal to the value pointed to by **nextid**. On exit, **nextid** is updated to the ID of the found value. To use in a loop, the value pointed to by nextid must be incremented by the user.h](h)}(h**Parameters**h]j)}(hj08h]h Parameters}(hj28hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj.8ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj*8ubj)}(hhh](j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hjO8h]hstruct idr *idr}(hjQ8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjM8ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhjI8ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjh8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjd8hMhje8ubah}(h]h ]h"]h$]h&]uh1jhjI8ubeh}(h]h ]h"]h$]h&]uh1jhjd8hMhjF8ubj)}(h"``int *nextid`` Pointer to an ID. h](j)}(h``int *nextid``h]j)}(hj8h]h int *nextid}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj8ubj)}(hhh]h)}(hPointer to an ID.h]hPointer to an ID.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhj8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhjF8ubeh}(h]h ]h"]h$]h&]uh1jhj*8ubh)}(h**Description**h]j)}(hj8h]h Description}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj*8ubh)}(hXReturns the next populated entry in the tree with an ID greater than or equal to the value pointed to by **nextid**. On exit, **nextid** is updated to the ID of the found value. To use in a loop, the value pointed to by nextid must be incremented by the user.h](hiReturns the next populated entry in the tree with an ID greater than or equal to the value pointed to by }(hj8hhhNhNubj)}(h **nextid**h]hnextid}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh . On exit, }(hj8hhhNhNubj)}(h **nextid**h]hnextid}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubh| is updated to the ID of the found value. To use in a loop, the value pointed to by nextid must be incremented by the user.}(hj8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj*8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$idr_replace (C function) c.idr_replacehNtauh1jhjhhhNhNubj))}(hhh](j.)}(hAvoid * idr_replace (struct idr *idr, void *ptr, unsigned long id)h]j4)}(h?void *idr_replace(struct idr *idr, void *ptr, unsigned long id)h](js)}(hvoidh]hvoid}(hj,9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj(9hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMubj)}(h h]h }(hj;9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(9hhhj:9hMubjJ)}(hjMh]h*}(hjI9hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj(9hhhj:9hMubj:)}(h idr_replaceh]j@)}(h idr_replaceh]h idr_replace}(hjZ9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjV9ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj(9hhhj:9hMubj)}(h.(struct idr *idr, void *ptr, unsigned long id)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hjv9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr9ubh)}(hhh]j@)}(hidrh]hidr}(hj9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj9ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj9modnameN classnameNj-j0)}j3]j6)}j)j\9sb c.idr_replaceasbuh1hhjr9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjr9ubjJ)}(hjMh]h*}(hj9hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjr9ubj@)}(hidrh]hidr}(hj9hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjr9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjn9ubj)}(h void *ptrh](js)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj9ubj)}(h h]h }(hj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjJ)}(hjMh]h*}(hj:hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj9ubj@)}(hptrh]hptr}(hj:hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjn9ubj)}(hunsigned long idh](js)}(hunsignedh]hunsigned}(hj*:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj&:ubj)}(h h]h }(hj8:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&:ubjs)}(hlongh]hlong}(hjF:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj&:ubj)}(h h]h }(hjT:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&:ubj@)}(hidh]hid}(hjb:hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj&:ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjn9ubeh}(h]h ]h"]h$]h&]hhuh1jhj(9hhhj:9hMubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj$9hhhj:9hMubah}(h]j9ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj:9hMhj!9hhubjm)}(hhh]h)}(hreplace pointer for given ID.h]hreplace pointer for given ID.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj:hhubah}(h]h ]h"]h$]h&]uh1jlhj!9hhhj:9hMubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj:jj:jjjuh1j(hhhjhNhNubj)}(hX**Parameters** ``struct idr *idr`` IDR handle. ``void *ptr`` New pointer to associate with the ID. ``unsigned long id`` ID to change. **Description** Replace the pointer registered with an ID and return the old value. This function can be called under the RCU read lock concurrently with idr_alloc() and idr_remove() (as long as the ID being removed is not the one being replaced!). **Return** the old value on success. ``-ENOENT`` indicates that **id** was not found. ``-EINVAL`` indicates that **ptr** was not valid.h](h)}(h**Parameters**h]j)}(hj:h]h Parameters}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj:ubj)}(hhh](j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hj:h]hstruct idr *idr}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj:ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hMhj:ubah}(h]h ]h"]h$]h&]uh1jhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:hMhj:ubj)}(h4``void *ptr`` New pointer to associate with the ID. h](j)}(h ``void *ptr``h]j)}(hj;h]h void *ptr}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj;ubj)}(hhh]h)}(h%New pointer to associate with the ID.h]h%New pointer to associate with the ID.}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj;ubah}(h]h ]h"]h$]h&]uh1jhj;ubeh}(h]h ]h"]h$]h&]uh1jhj;hMhj:ubj)}(h#``unsigned long id`` ID to change. h](j)}(h``unsigned long id``h]j)}(hj?;h]hunsigned long id}(hjA;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=;ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj9;ubj)}(hhh]h)}(h ID to change.h]h ID to change.}(hjX;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT;hMhjU;ubah}(h]h ]h"]h$]h&]uh1jhj9;ubeh}(h]h ]h"]h$]h&]uh1jhjT;hMhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hjz;h]h Description}(hj|;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjx;ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj:ubh)}(hReplace the pointer registered with an ID and return the old value. This function can be called under the RCU read lock concurrently with idr_alloc() and idr_remove() (as long as the ID being removed is not the one being replaced!).h]hReplace the pointer registered with an ID and return the old value. This function can be called under the RCU read lock concurrently with idr_alloc() and idr_remove() (as long as the ID being removed is not the one being replaced!).}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj:ubh)}(h **Return**h]j)}(hj;h]hReturn}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM hj:ubh)}(h~the old value on success. ``-ENOENT`` indicates that **id** was not found. ``-EINVAL`` indicates that **ptr** was not valid.h](hthe old value on success. }(hj;hhhNhNubj)}(h ``-ENOENT``h]h-ENOENT}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh indicates that }(hj;hhhNhNubj)}(h**id**h]hid}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh was not found. }(hj;hhhNhNubj)}(h ``-EINVAL``h]h-EINVAL}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh indicates that }hj;sbj)}(h**ptr**h]hptr}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh was not valid.}(hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM!hj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ida_alloc_range (C function)c.ida_alloc_rangehNtauh1jhjhhhNhNubj))}(hhh](j.)}(hTint ida_alloc_range (struct ida *ida, unsigned int min, unsigned int max, gfp_t gfp)h]j4)}(hSint ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max, gfp_t gfp)h](js)}(hinth]hint}(hj.<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj*<hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMpubj)}(h h]h }(hj=<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*<hhhj<<hMpubj:)}(hida_alloc_rangeh]j@)}(hida_alloc_rangeh]hida_alloc_range}(hjO<hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjK<ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj*<hhhj<<hMpubj)}(h@(struct ida *ida, unsigned int min, unsigned int max, gfp_t gfp)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hjk<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg<ubj)}(h h]h }(hjx<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg<ubh)}(hhh]j@)}(hidah]hida}(hj<hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj<ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj<modnameN classnameNj-j0)}j3]j6)}j)jQ<sbc.ida_alloc_rangeasbuh1hhjg<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjg<ubjJ)}(hjMh]h*}(hj<hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjg<ubj@)}(hidah]hida}(hj<hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjg<ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjc<ubj)}(hunsigned int minh](js)}(hunsignedh]hunsigned}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj<ubj)}(h h]h }(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubjs)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj<ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<ubj@)}(hminh]hmin}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjc<ubj)}(hunsigned int maxh](js)}(hunsignedh]hunsigned}(hj.=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj*=ubj)}(h h]h }(hj<=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*=ubjs)}(hinth]hint}(hjJ=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj*=ubj)}(h h]h }(hjX=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*=ubj@)}(hmaxh]hmax}(hjf=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj*=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjc<ubj)}(h gfp_t gfph](h)}(hhh]j@)}(hgfp_th]hgfp_t}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj=ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj=modnameN classnameNj-j0)}j3]j<c.ida_alloc_rangeasbuh1hhj{=ubj)}(h h]h }(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{=ubj@)}(hgfph]hgfp}(hj=hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj{=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjc<ubeh}(h]h ]h"]h$]h&]hhuh1jhj*<hhhj<<hMpubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj&<hhhj<<hMpubah}(h]j!<ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj<<hMphj#<hhubjm)}(hhh]h)}(hAllocate an unused ID.h]hAllocate an unused ID.}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMphj=hhubah}(h]h ]h"]h$]h&]uh1jlhj#<hhhj<<hMpubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj=jj=jjjuh1j(hhhjhNhNubj)}(hX **Parameters** ``struct ida *ida`` IDA handle. ``unsigned int min`` Lowest ID to allocate. ``unsigned int max`` Highest ID to allocate. ``gfp_t gfp`` Memory allocation flags. **Description** Allocate an ID between **min** and **max**, inclusive. The allocated ID will not exceed ``INT_MAX``, even if **max** is larger. **Context** Any context. It is safe to call this function without locking in your code. **Return** The allocated ID, or ``-ENOMEM`` if memory could not be allocated, or ``-ENOSPC`` if there are no free IDs.h](h)}(h**Parameters**h]j)}(hj=h]h Parameters}(hj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMthj=ubj)}(hhh](j)}(h ``struct ida *ida`` IDA handle. h](j)}(h``struct ida *ida``h]j)}(hj>h]hstruct ida *ida}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMqhj>ubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hj2>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.>hMqhj/>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj.>hMqhj>ubj)}(h,``unsigned int min`` Lowest ID to allocate. h](j)}(h``unsigned int min``h]j)}(hjR>h]hunsigned int min}(hjT>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjP>ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMrhjL>ubj)}(hhh]h)}(hLowest ID to allocate.h]hLowest ID to allocate.}(hjk>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjg>hMrhjh>ubah}(h]h ]h"]h$]h&]uh1jhjL>ubeh}(h]h ]h"]h$]h&]uh1jhjg>hMrhj>ubj)}(h-``unsigned int max`` Highest ID to allocate. h](j)}(h``unsigned int max``h]j)}(hj>h]hunsigned int max}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMshj>ubj)}(hhh]h)}(hHighest ID to allocate.h]hHighest ID to allocate.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMshj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMshj>ubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hj>h]h gfp_t gfp}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMthj>ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMthj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMthj>ubeh}(h]h ]h"]h$]h&]uh1jhj=ubh)}(h**Description**h]j)}(hj>h]h Description}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMvhj=ubh)}(hAllocate an ID between **min** and **max**, inclusive. The allocated ID will not exceed ``INT_MAX``, even if **max** is larger.h](hAllocate an ID between }(hj?hhhNhNubj)}(h**min**h]hmin}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh and }(hj?hhhNhNubj)}(h**max**h]hmax}(hj/?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh/, inclusive. The allocated ID will not exceed }(hj?hhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjA?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh , even if }(hj?hhhNhNubj)}(h**max**h]hmax}(hjS?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh is larger.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMuhj=ubh)}(h **Context**h]j)}(hjn?h]hContext}(hjp?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjl?ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMxhj=ubh)}(hKAny context. It is safe to call this function without locking in your code.h]hKAny context. It is safe to call this function without locking in your code.}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMyhj=ubh)}(h **Return**h]j)}(hj?h]hReturn}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM|hj=ubh)}(hkThe allocated ID, or ``-ENOMEM`` if memory could not be allocated, or ``-ENOSPC`` if there are no free IDs.h](hThe allocated ID, or }(hj?hhhNhNubj)}(h ``-ENOMEM``h]h-ENOMEM}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh& if memory could not be allocated, or }(hj?hhhNhNubj)}(h ``-ENOSPC``h]h-ENOSPC}(hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh if there are no free IDs.}(hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM{hj=ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$!ida_find_first_range (C function)c.ida_find_first_rangehNtauh1jhjhhhNhNubj))}(hhh](j.)}(hNint ida_find_first_range (struct ida *ida, unsigned int min, unsigned int max)h]j4)}(hMint ida_find_first_range(struct ida *ida, unsigned int min, unsigned int max)h](js)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj?hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMubj)}(h h]h }(hj @hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?hhhj @hMubj:)}(hida_find_first_rangeh]j@)}(hida_find_first_rangeh]hida_find_first_range}(hj@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj@ubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj?hhhj @hMubj)}(h5(struct ida *ida, unsigned int min, unsigned int max)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hj;@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7@ubj)}(h h]h }(hjH@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7@ubh)}(hhh]j@)}(hidah]hida}(hjY@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjV@ubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetj[@modnameN classnameNj-j0)}j3]j6)}j)j!@sbc.ida_find_first_rangeasbuh1hhj7@ubj)}(h h]h }(hjy@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7@ubjJ)}(hjMh]h*}(hj@hhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhj7@ubj@)}(hidah]hida}(hj@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj7@ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj3@ubj)}(hunsigned int minh](js)}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjs)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj@ubj)}(h h]h }(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj@)}(hminh]hmin}(hj@hhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj3@ubj)}(hunsigned int maxh](js)}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj@ubj)}(h h]h }(hj AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjs)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj@ubj)}(h h]h }(hj(AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj@)}(hmaxh]hmax}(hj6AhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj3@ubeh}(h]h ]h"]h$]h&]hhuh1jhj?hhhj @hMubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj?hhhj @hMubah}(h]j?ah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj @hMhj?hhubjm)}(hhh]h)}(hGet the lowest used ID.h]hGet the lowest used ID.}(hj`AhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj]Ahhubah}(h]h ]h"]h$]h&]uh1jlhj?hhhj @hMubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjxAjjxAjjjuh1j(hhhjhNhNubj)}(hX**Parameters** ``struct ida *ida`` IDA handle. ``unsigned int min`` Lowest ID to get. ``unsigned int max`` Highest ID to get. **Description** Get the lowest used ID between **min** and **max**, inclusive. The returned ID will not exceed ``INT_MAX``, even if **max** is larger. **Context** Any context. Takes and releases the xa_lock. **Return** The lowest used ID, or errno if no used ID is found.h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj|Aubj)}(hhh](j)}(h ``struct ida *ida`` IDA handle. h](j)}(h``struct ida *ida``h]j)}(hjAh]hstruct ida *ida}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhjAubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h'``unsigned int min`` Lowest ID to get. h](j)}(h``unsigned int min``h]j)}(hjAh]hunsigned int min}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhjAubj)}(hhh]h)}(hLowest ID to get.h]hLowest ID to get.}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjAhMhjAubj)}(h(``unsigned int max`` Highest ID to get. h](j)}(h``unsigned int max``h]j)}(hjBh]hunsigned int max}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj Bubj)}(hhh]h)}(hHighest ID to get.h]hHighest ID to get.}(hj,BhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(BhMhj)Bubah}(h]h ]h"]h$]h&]uh1jhj Bubeh}(h]h ]h"]h$]h&]uh1jhj(BhMhjAubeh}(h]h ]h"]h$]h&]uh1jhj|Aubh)}(h**Description**h]j)}(hjNBh]h Description}(hjPBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLBubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj|Aubh)}(hGet the lowest used ID between **min** and **max**, inclusive. The returned ID will not exceed ``INT_MAX``, even if **max** is larger.h](hGet the lowest used ID between }(hjdBhhhNhNubj)}(h**min**h]hmin}(hjlBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdBubh and }(hjdBhhhNhNub9j)}(h**max**h]hmax}(hj~BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdBubh., inclusive. The returned ID will not exceed }(hjdBhhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdBubh , even if }(hjdBhhhNhNubj)}(h**max**h]hmax}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdBubh is larger.}(hjdBhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj|Aubh)}(h **Context**h]j)}(hjBh]hContext}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj|Aubh)}(h,Any context. Takes and releases the xa_lock.h]h,Any context. Takes and releases the xa_lock.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj|Aubh)}(h **Return**h]j)}(hjBh]hReturn}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjBubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj|Aubh)}(h4The lowest used ID, or errno if no used ID is found.h]h4The lowest used ID, or errno if no used ID is found.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj|Aubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ida_free (C function) c.ida_freehNtauh1jhjhhhNhNubj))}(hhh](j.)}(h0void ida_free (struct ida *ida, unsigned int id)h]j4)}(h/void ida_free(struct ida *ida, unsigned int id)h](js)}(hvoidh]hvoid}(hj)ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj%ChhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM%ubj)}(h h]h }(hj8ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj%Chhhj7ChM%ubj:)}(hida_freeh]j@)}(hida_freeh]hida_free}(hjJChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjFCubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj%Chhhj7ChM%ubj)}(h"(struct ida *ida, unsigned int id)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hjfChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbCubj)}(h h]h }(hjsChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbCubh)}(hhh]j@)}(hidah]hida}(hjChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjCubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetjCmodnameN classnameNj-j0)}j3]j6)}j)jLCsb c.ida_freeasbuh1hhjbCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbCubjJ)}(hjMh]h*}(hjChhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjbCubj@)}(hidah]hida}(hjChhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjbCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj^Cubj)}(hunsigned int idh](js)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjCubj)}(h h]h }(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubjs)}(hinth]hint}(hjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhjCubj)}(h h]h }(hjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj@)}(hidh]hid}(hjDhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj^Cubeh}(h]h ]h"]h$]h&]hhuh1jhj%Chhhj7ChM%ubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj!Chhhj7ChM%ubah}(h]jCah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hj7ChM%hjChhubjm)}(hhh]h)}(hRelease an allocated ID.h]hRelease an allocated ID.}(hj:DhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM%hj7Dhhubah}(h]h ]h"]h$]h&]uh1jlhjChhhj7ChM%ubeh}(h]h ](jfunctioneh"]h$]h&]j~jjjRDjjRDjjjuh1j(hhhjhNhNubj)}(h**Parameters** ``struct ida *ida`` IDA handle. ``unsigned int id`` Previously allocated ID. **Context** Any context. It is safe to call this function without locking in your code.h](h)}(h**Parameters**h]j)}(hj\Dh]h Parameters}(hj^DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZDubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM)hjVDubj)}(hhh](j)}(h ``struct ida *ida`` IDA handle. h](j)}(h``struct ida *ida``h]j)}(hj{Dh]hstruct ida *ida}(hj}DhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjyDubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM&hjuDubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM&hjDubah}(h]h ]h"]h$]h&]uh1jhjuDubeh}(h]h ]h"]h$]h&]uh1jhjDhM&hjrDubj)}(h-``unsigned int id`` Previously allocated ID. h](j)}(h``unsigned int id``h]j)}(hjDh]hunsigned int id}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM'hjDubj)}(hhh]h)}(hPreviously allocated ID.h]hPreviously allocated ID.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhM'hjDubah}(h]h ]h"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]uh1jhjDhM'hjrDubeh}(h]h ]h"]h$]h&]uh1jhjVDubh)}(h **Context**h]j)}(hjDh]hContext}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM)hjVDubh)}(hKAny context. It is safe to call this function without locking in your code.h]hKAny context. It is safe to call this function without locking in your code.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM)hjVDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](j$ida_destroy (C function) c.ida_destroyhNtauh1jhjhhhNhNubj))}(hhh](j.)}(h"void ida_destroy (struct ida *ida)h]j4)}(h!void ida_destroy(struct ida *ida)h](js)}(hvoidh]hvoid}(hj4EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jrhj0EhhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMWubj)}(h h]h }(hjCEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0EhhhjBEhMWubj:)}(h ida_destroyh]j@)}(h ida_destroyh]h ida_destroy}(hjUEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjQEubah}(h]h ](jRjSeh"]h$]h&]hhuh1j9hj0EhhhjBEhMWubj)}(h(struct ida *ida)h]j)}(hstruct ida *idah](j)}(hjh]hstruct}(hjqEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmEubj)}(h h]h }(hj~EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmEubh)}(hhh]j@)}(hidah]hida}(hjEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjEubah}(h]h ]h"]h$]h&] refdomainjreftypej) reftargetjEmodnameN classnameNj-j0)}j3]j6)}j)jWEsb c.ida_destroyasbuh1hhjmEubj)}(h h]h }(hjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmEubjJ)}(hjMh]h*}(hjEhhhNhNubah}(h]h ]jVah"]h$]h&]uh1jIhjmEubj@)}(hidah]hida}(hjEhhhNhNubah}(h]h ]jKah"]h$]h&]uh1j?hjmEubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjiEubah}(h]h ]h"]h$]h&]hhuh1jhj0EhhhjBEhMWubeh}(h]h ]h"]h$]h&]hhj^uh1j3j_j`hj,EhhhjBEhMWubah}(h]j'Eah ](jdjeeh"]h$]h&]jijj)jkhuh1j-hjBEhMWhj)Ehhubjm)}(hhh]h)}(h Free all IDs.h]h Free all IDs.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMWhjEhhubah}(h]h ]h"]h$]h&]uh1jlhj)EhhhjBEhMWubeh}(h]h ](jfunctioneh"]h$]h&]j~jjj Fjj Fjjjuh1j(hhhjhNhNubj)}(hXx**Parameters** ``struct ida *ida`` IDA handle. **Description** Calling this function frees all IDs and releases all resources used by an IDA. When this call returns, the IDA is empty and can be reused or freed. If the IDA is already empty, there is no need to call this function. **Context** Any context. It is safe to call this function without locking in your code.h](h)}(h**Parameters**h]j)}(hjFh]h Parameters}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM[hjFubj)}(hhh]j)}(h ``struct ida *ida`` IDA handle. h](j)}(h``struct ida *ida``h]j)}(hj5Fh]hstruct ida *ida}(hj7FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3Fubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMXhj/Fubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hjNFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJFhMXhjKFubah}(h]h ]h"]h$]h&]uh1jhj/Fubeh}(h]h ]h"]h$]h&]uh1jhjJFhMXhj,Fubah}(h]h ]h"]h$]h&]uh1jhjFubh)}(h**Description**h]j)}(hjpFh]h Description}(hjrFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnFubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMZhjFubh)}(hCalling this function frees all IDs and releases all resources used by an IDA. When this call returns, the IDA is empty and can be reused or freed. If the IDA is already empty, there is no need to call this function.h]hCalling this function frees all IDs and releases all resources used by an IDA. When this call returns, the IDA is empty and can be reused or freed. If the IDA is already empty, there is no need to call this function.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMYhjFubh)}(h **Context**h]j)}(hjFh]hContext}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM^hjFubh)}(hKAny context. It is safe to call this function without locking in your code.h]hKAny context. It is safe to call this function without locking in your code.}(hjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM_hjFubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubeh}(h]functions-and-structuresah ]h"]functions and structuresah$]h&]uh1hhhhhhhhKOubeh}(h] id-allocationah ]h"] id allocationah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjFerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourcehnj _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jFjFjzjwjjjjjFjFu nametypes}(jFjzjjjFuh}(jFhjwjjj}jjjFjj&j/j[j`jejjj8j=jU jZ jV j[ j j jjjjjWj\j>jCjjjjjj j)j.j9j>j#j#j'j'j+j+j.j.j0j0j4j4j6j6j9j$9j!<j&<j?j?jCj!Cj'Ej,Eu footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.