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]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}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhK 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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hj hhubh)}(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)}(hj4h]hXArray}(hj8hhhNhNubah}(h]h ](xrefstdstd-doceh"]h$]h&]uh1j6hj2ubah}(h]h ]h"]h$]h&]refdoc core-api/idr refdomainjCreftypedoc refexplicitrefwarn reftargetxarrayuh1hhhhKhj*ubh instead.}(hj*hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj hhubeh}(h]overviewah ]h"]overviewah$]h&]uh1hhhhhhhhK ubh)}(hhh](h)}(h IDR usageh]h IDR usage}(hjlhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjihhhhhKubh)}(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.}(hjzhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjihhubh)}(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&]uh1hhhhKhjihhubh)}(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"hjihhubh)}(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(hjihhubh)}(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-hjihhubh)}(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.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK1hjihhubh)}(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&]uh1hhhhK7hjihhubh)}(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.}(hjhhhNhNubah}(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 ](jBcc-typeeh"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]refdocjO refdomainjreftypetype refexplicitrefwarnjUidauh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:75: ./lib/idr.chM5hjubh 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&]uh1hhjhM5hjyhhubh)}(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=hjyhhubh)}(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.chMAhjyhhubh)}(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.chMDhjyhhubeh}(h] ida-usageah ]h"] ida usageah$]h&]uh1hhhhhhhhKIubh)}(hhh](h)}(hFunctions and structuresh]hFunctions and structures}(hjhhhNhNubah}(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)}(hjh]hIDR_INIT}(hj-hhhNhNubah}(h]h ]nah"]h$]h&]uh1j+hj'ubah}(h]h ](sig-namedescnameeh"]h$]h&]hhuh1j%hj!hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK0ubah}(h]h ]h"]h$]h&]hh add_permalinkuh1jsphinx_line_type declaratorhjhhhjChK0ubah}(h]jah ](sig sig-objecteh"]h$]h&] is_multiline _toc_parts) _toc_namehuh1jhjChK0hjhhubh desc_content)}(hhh]h}(h]h ]h"]h$]h&]uh1jXhjhhhjChK0ubeh}(h]h ](jmacroeh"]h$]h&]domainjobjtypejfdesctypejfnoindex noindexentrynocontentsentryuh1jhhhjhNhNubh)}(h``IDR_INIT (name)``h]j)}(hjrh]hIDR_INIT (name)}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1jhjpubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK2hjhhubh 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)}(hjh]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.hhK.hjubh)}(h*A freshly-initialised IDR contains no IDs.h]h*A freshly-initialised IDR contains no IDs.}(hj%hhhNhNubah}(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](jDEFINE_IDR (C macro) c.DEFINE_IDRhNtauh1jhjhhhNhNubj)}(hhh](j)}(h DEFINE_IDRh]j )}(h DEFINE_IDRh]j&)}(h DEFINE_IDRh]j,)}(hjNh]h DEFINE_IDR}(hjXhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjTubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjPhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK9ubah}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjLhhhjkhK9ubah}(h]jGah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhjkhK9hjIhhubjY)}(hhh]h}(h]h ]h"]h$]h&]uh1jXhjIhhhjkhK9ubeh}(h]h ](jmacroeh"]h$]h&]jjjjkjjljjmjnjouh1jhhhjhNhNubh)}(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.hhK;hjhhubj)}(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.}(hjhhhNhNubah}(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)}(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.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.}(hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhK6hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jidr_get_cursor (C function)c.idr_get_cursorhNtauh1jhjhhhNhNubj)}(hhh](j)}(h3unsigned int idr_get_cursor (const struct idr *idr)h]j )}(h2unsigned int idr_get_cursor(const struct idr *idr)h](hdesc_sig_keyword_type)}(hunsignedh]hunsigned}(hj`hhhNhNubah}(h]h ]ktah"]h$]h&]uh1j^hjZhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKCubhdesc_sig_space)}(h h]h }(hjrhhhNhNubah}(h]h ]wah"]h$]h&]uh1jphjZhhhjohKCubj_)}(hinth]hint}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjZhhhjohKCubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjZhhhjohKCubj&)}(hidr_get_cursorh]j,)}(hidr_get_cursorh]hidr_get_cursor}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjZhhhjohKCubhdesc_parameterlist)}(h(const struct idr *idr)h]hdesc_parameter)}(hconst struct idr *idrh](hdesc_sig_keyword)}(hconsth]hconst}(hjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj)}(hstructh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubh)}(hhh]j,)}(hidrh]hidr}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&] refdomainjreftype identifier reftargetjmodnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j ASTIdentifier)}jjsbc.idr_get_cursorasbuh1hhjubjq)}(h h]h }(hj'hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubhdesc_sig_punctuation)}(h*h]h*}(hj7hhhNhNubah}(h]h ]pah"]h$]h&]uh1j5hjubj,)}(hidrh]hidr}(hjFhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjZhhhjohKCubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjVhhhjohKCubah}(h]jQah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhjohKChjShhubjY)}(hhh]h)}(h3Return the current position of the cyclic allocatorh]h3Return the current position of the cyclic allocator}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKj?eh"]h$]h&]hhuh1j%hj-hhhj?hKPubj)}(h#(struct idr *idr, unsigned int val)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hjnhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubjq)}(h h]h }(hj{hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjjubh)}(hhh]j,)}(hidrh]hidr}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j")}jjTsbc.idr_set_cursorasbuh1hhjjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjjubj6)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjjubj,)}(hidrh]hidr}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjfubj)}(hunsigned int valh](j_)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj_)}(hinth]hint}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj,)}(hvalh]hval}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjfubeh}(h]h ]h"]h$]h&]hhuh1jhj-hhhj?hKPubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj)hhhj?hKPubah}(h]j$ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj?hKPhj&hhubjY)}(hhh]h)}(h0Set the current position of the cyclic allocatorh]h0Set the current position of the cyclic allocator}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKIhj?hhubah}(h]h ]h"]h$]h&]uh1jXhj&hhhj?hKPubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjZjljZjmjnjouh1jhhhjhNhNubj)}(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)}(hjdh]h Parameters}(hjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKMhj^ubj)}(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.hhKJhj}ubj)}(hhh]h)}(h idr handleh]h idr handle}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhKJhjubah}(h]h ]h"]h$]h&]uh1jhj}ubeh}(h]h ]h"]h$]h&]uh1jhjhKJhjzubj)}(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&]uh1jhjhKKhjzubeh}(h]h ]h"]h$]h&]uh1jhj^ubh)}(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.hhKMhj^ubh)}(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.hhKMhj^ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jidr_init_base (C function)c.idr_init_basehNtauh1jhjhhhNhNubj)}(hhh](j)}(h.void idr_init_base (struct idr *idr, int base)h]j )}(h-void idr_init_base(struct idr *idr, int base)h](j_)}(hvoidh]hvoid}(hjN hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjJ hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubjq)}(h h]h }(hj] hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjJ hhhj\ hKubj&)}(h idr_init_baseh]j,)}(h idr_init_baseh]h idr_init_base}(hjo hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjk ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjJ hhhj\ hKubj)}(h(struct idr *idr, int base)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubh)}(hhh]j,)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j")}jjq sbc.idr_init_baseasbuh1hhj ubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubj6)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj ubj,)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubj)}(hint baseh](j_)}(hinth]hint}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj ubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubj,)}(hbaseh]hbase}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubeh}(h]h ]h"]h$]h&]hhuh1jhjJ hhhj\ hKubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjF hhhj\ hKubah}(h]jA ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj\ hKhjC hhubjY)}(hhh]h)}(hInitialise an IDR.h]hInitialise an IDR.}(hjC 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&]uh1jXhjC hhhj\ hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj[ jlj[ jmjnjouh1jhhhjhNhNubj)}(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)}(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)}(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&]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)}(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.hhKhj_ ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jidr_init (C function) c.idr_inithNtauh1jhjhhhNhNubj)}(hhh](j)}(hvoid idr_init (struct idr *idr)h]j )}(hvoid idr_init(struct idr *idr)h](j_)}(hvoidh]hvoid}(hjO hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjK hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubjq)}(h h]h }(hj^ hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjK hhhj] hKubj&)}(hidr_inith]j,)}(hidr_inith]hidr_init}(hjp hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjl ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjK hhhj] hKubj)}(h(struct idr *idr)h]j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubh)}(hhh]j,)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]j")}jjr sb c.idr_initasbuh1hhj ubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubj6)}(hj9h]h*}(hj hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj ubj,)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj ubah}(h]h ]h"]h$]h&]hhuh1jhjK hhhj] hKubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjG hhhj] hKubah}(h]jB ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj] hKhjD hhubjY)}(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&]uh1jXhjD hhhj] hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj' jlj' jmjnjouh1jhhhjhNhNubj)}(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)}(hj1 h]h Parameters}(hj3 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 ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hjP h]hstruct idr *idr}(hjR hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjN ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjJ ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hji hhhNhNubah}(h]h ]h"]h$]h&]uh1hhje hKhjf ubah}(h]h ]h"]h$]h&]uh1jhjJ ubeh}(h]h ]h"]h$]h&]uh1jhje hKhjG 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](jidr_is_empty (C function)c.idr_is_emptyhNtauh1jhjhhhNhNubj)}(hhh](j)}(h)bool idr_is_empty (const struct idr *idr)h]j )}(h(bool idr_is_empty(const struct idr *idr)h](j_)}(hboolh]hbool}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj hhhj hKubj&)}(h idr_is_emptyh]j,)}(h idr_is_emptyh]h idr_is_empty}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj hhhj hKubj)}(h(const struct idr *idr)h]j)}(hconst struct idr *idrh](j)}(hjh]hconst}(hj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubj)}(hjh]hstruct}(hj( hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubjq)}(h h]h }(hj5 hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubh)}(hhh]j,)}(hidrh]hidr}(hjF hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjC ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjH modnameN classnameNjj)}j]j")}jj sbc.idr_is_emptyasbuh1hhj ubjq)}(h h]h }(hjf hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubj6)}(hj9h]h*}(hjt hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj ubj,)}(hidrh]hidr}(hj hhhNhNubah}(h]h ]j7ah"]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&]hhjJuh1jjKjLhj hhhj hKubah}(h]j ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj hKhj hhubjY)}(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&]uh1jXhj hhhj hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj jlj jmjnjouh1jhhhjhNhNubj)}(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)}(hj h]hconst struct 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.}(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&]uh1jhj%ubah}(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}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj=ubh. if any IDs have been allocated from this IDR.}(hj=hhhNhNubeh}(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](jidr_preload_end (C function)c.idr_preload_endhNtauh1jhjhhhNhNubj)}(hhh](j)}(hvoid idr_preload_end (void)h]j )}(hvoid idr_preload_end(void)h](j_)}(hvoidh]hvoid}(hjzhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjvhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjvhhhjhKubj&)}(hidr_preload_endh]j,)}(hidr_preload_endh]hidr_preload_end}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjvhhhjhKubj)}(h(void)h]j)}(hvoidh]j_)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjubah}(h]h ]h"]h$]h&]noemphhhuh1jhjubah}(h]h ]h"]h$]h&]hhuh1jhjvhhhjhKubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjrhhhjhKubah}(h]jmah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhjhKhjohhubjY)}(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&]uh1jXhjohhhjhKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjljjmjnjouh1jhhhjhNhNubj)}(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)}(hj"h]hvoid}(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.hhKhjubj)}(hhh]h)}(h no argumentsh]h no arguments}(hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hKhj8ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj7hKhjubah}(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.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.}(hjshhhNhNubah}(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](jidr_for_each_entry (C macro)c.idr_for_each_entryhNtauh1jhjhhhNhNubj)}(hhh](j)}(hidr_for_each_entryh]j )}(hidr_for_each_entryh]j&)}(hidr_for_each_entryh]j,)}(hjh]hidr_for_each_entry}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubah}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjhhhjhKubah}(h]jah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhjhKhjhhubjY)}(hhh]h}(h]h ]h"]h$]h&]uh1jXhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjkjjljjmjnjouh1jhhhjhNhNubh)}(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}(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.hhKhjubj)}(hhh](j)}(h``idr`` IDR handle. h](j)}(h``idr``h]j)}(hj,h]hidr}(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.}(hjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhKhjBubah}(h]h ]h"]h$]h&]uh1jhj&ubeh}(h]h ]h"]h$]h&]uh1jhjAhKhj#ubj)}(h&``entry`` The type * to use as cursor h](j)}(h ``entry``h]j)}(hjeh]hentry}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(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 cursorh]hThe type * to use as cursor}(hj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjzhKhj{ubah}(h]h ]h"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]uh1jhjzhKhj#ubj)}(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&]uh1jhjhKhj#ubeh}(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](jidr_for_each_entry_ul (C macro)c.idr_for_each_entry_ulhNtauh1jhjhhhNhNubj)}(hhh](j)}(hidr_for_each_entry_ulh]j )}(hidr_for_each_entry_ulh]j&)}(hidr_for_each_entry_ulh]j,)}(hjJh]hidr_for_each_entry_ul}(hjThhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjPubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjLhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubah}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjHhhhjghKubah}(h]jCah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhjghKhjEhhubjY)}(hhh]h}(h]h ]h"]h$]h&]uh1jXhjEhhhjghKubeh}(h]h ](jmacroeh"]h$]h&]jjjjkjjljjmjnjouh1jhhhjhNhNubh)}(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)}(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.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)}(hjLh]htmp}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjFubj)}(hhh]h)}(hA temporary placeholder for ID.h]hA temporary placeholder for ID.}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjahKhjbubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhjahKhjubj)}(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]j )}(hidr_for_each_entry_continueh]j&)}(hidr_for_each_entry_continueh]j,)}(hj1h]hidr_for_each_entry_continue}(hj;hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj7ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj3hhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubah}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj/hhhjNhKubah}(h]j*ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhjNhKhj,hhubjY)}(hhh]h}(h]h ]h"]h$]h&]uh1jXhj,hhhjNhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjkjgjljgjmjnjouh1jhhhjhNhNubh)}(h0``idr_for_each_entry_continue (idr, entry, id)``h]j)}(hjmh]h,idr_for_each_entry_continue (idr, entry, id)}(hjohhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkubah}(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&]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&]uh1jhjhKhjubj)}(h``id`` Entry ID. h](j)}(h``id``h]j)}(hj3h]hid}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhj-ubj)}(hhh]h)}(h Entry ID.h]h Entry ID.}(hjLhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjHhKhjIubah}(h]h ]h"]h$]h&]uh1jhj-ubeh}(h]h ]h"]h$]h&]uh1jhjHhKhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjnh]h Description}(hjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlubah}(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]j )}(hidr_for_each_entry_continue_ulh]j&)}(hidr_for_each_entry_continue_ulh]j,)}(hjh]hidr_for_each_entry_continue_ul}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKubah}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjhhhjhKubah}(h]jah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhjhKhjhhubjY)}(hhh]h}(h]h ]h"]h$]h&]uh1jXhjhhhjhKubeh}(h]h ](jmacroeh"]h$]h&]jjjjkjjljjmjnjouh1jhhhjhNhNubh)}(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&]uh1jhjhKhjhhubj)}(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)}(hjh]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}(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.hhKhj7ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRhKhjSubah}(h]h ]h"]h$]h&]uh1jhj7ubeh}(h]h ]h"]h$]h&]uh1jhjRhKhj4ubj)}(h)``entry`` The type * to use as a cursor. h](j)}(h ``entry``h]j)}(hjvh]hentry}(hjxhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjtubah}(h]h ]h"]h$]h&]uh1jhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhKhjpubj)}(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&]uh1jhjpubeh}(h]h ]h"]h$]h&]uh1jhjhKhj4ubj)}(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&]uh1jhjhKhj4ubj)}(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&]uh1jhjhKhj4ubeh}(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.hhKhjubh)}(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 }(hj9hhhNhNubj)}(h **entry**h]hentry}(hjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubhN is left with the value NULL. This is convenient for a “not found” value.}(hj9hhhNhNubeh}(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](jida_alloc (C function) c.ida_allochNtauh1jhjhhhNhNubj)}(hhh](j)}(h*int ida_alloc (struct ida *ida, gfp_t gfp)h]j )}(h)int ida_alloc(struct ida *ida, gfp_t gfp)h](j_)}(hinth]hint}(hjzhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjvhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM#ubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjvhhhjhM#ubj&)}(h ida_alloch]j,)}(h ida_alloch]h ida_alloc}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjvhhhjhM#ubj)}(h(struct ida *ida, gfp_t gfp)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubh)}(hhh]j,)}(hidah]hida}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j")}jjsb c.ida_allocasbuh1hhjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj6)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjubj,)}(hidah]hida}(hjhhhNhNubah}(h]h ]j7ah"]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 ]j7ah"]h$]h&]uh1j+hj)ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j c.ida_allocasbuh1hhj%ubjq)}(h h]h }(hjJhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj%ubj,)}(hgfph]hgfp}(hjXhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj%ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjubeh}(h]h ]h"]h$]h&]hhuh1jhjvhhhjhM#ubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjrhhhjhM#ubah}(h]jmah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhjhM#hjohhubjY)}(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&]uh1jXhjohhhjhM#ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjljjmjnjouh1jhhhjhNhNubj)}(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.hhMhjubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(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.hhMhjubh)}(h4Allocate an ID between 0 and ``INT_MAX``, inclusive.h](hAllocate an ID between 0 and }(hjMhhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjMubh , inclusive.}(hjMhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMhjubh)}(h **Context**h]j)}(hjph]hContext}(hjrhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjnubah}(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](jida_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]j )}(h?int ida_alloc_min(struct ida *ida, unsigned int min, gfp_t gfp)h](j_)}(hinth]hint}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM5ubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjhhhjhM5ubj&)}(h ida_alloc_minh]j,)}(h ida_alloc_minh]h ida_alloc_min}(hj!hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjhhhjhM5ubj)}(h.(struct ida *ida, unsigned int min, gfp_t gfp)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubjq)}(h h]h }(hjJhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj9ubh)}(hhh]j,)}(hidah]hida}(hj[hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjXubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj]modnameN classnameNjj)}j]j")}jj#sbc.ida_alloc_minasbuh1hhj9ubjq)}(h h]h }(hj{hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj9ubj6)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj9ubj,)}(hidah]hida}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj5ubj)}(hunsigned int minh](j_)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj_)}(hinth]hint}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj,)}(hminh]hmin}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj5ubj)}(h gfp_t gfph](h)}(hhh]j,)}(hgfp_th]hgfp_t}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]jwc.ida_alloc_minasbuh1hhjubjq)}(h h]h }(hj!hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj,)}(hgfph]hgfp}(hj/hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj5ubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhjhM5ubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjhhhjhM5ubah}(h]jah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhjhM5hjhhubjY)}(hhh]h)}(hAllocate an unused ID.h]hAllocate an unused ID.}(hjYhhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM)hjVhhubah}(h]h ]h"]h$]h&]uh1jXhjhhhjhM5ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjqjljqjmjnjouh1jhhhjhNhNubj)}(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)}(hj{h]h Parameters}(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-hjuubj)}(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}(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.hhM,hjubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!hM,hj"ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj!hM,hjubeh}(h]h ]h"]h$]h&]uh1jhjuubh)}(h**Description**h]j)}(hjGh]h Description}(hjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM.hjuubh)}(h:Allocate an ID between **min** and ``INT_MAX``, inclusive.h](hAllocate an ID between }(hj]hhhNhNubj)}(h**min**h]hmin}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh and }(hj]hhhNhNubj)}(h ``INT_MAX``h]hINT_MAX}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]ubh , inclusive.}(hj]hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM.hjuubh)}(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.hhM0hjuubh)}(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.hhM0hjuubh)}(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.hhM3hjuubh)}(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.hhM2hjuubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jida_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]j )}(h?int ida_alloc_max(struct ida *ida, unsigned int max, gfp_t gfp)h](j_)}(hinth]hint}(hj"hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjhhhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhMGubjq)}(h h]h }(hj1hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjhhhj0hMGubj&)}(h ida_alloc_maxh]j,)}(h ida_alloc_maxh]h ida_alloc_max}(hjChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj?ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjhhhj0hMGubj)}(h.(struct ida *ida, unsigned int max, gfp_t gfp)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubjq)}(h h]h }(hjlhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj[ubh)}(hhh]j,)}(hidah]hida}(hj}hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjzubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j")}jjEsbc.ida_alloc_maxasbuh1hhj[ubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj[ubj6)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj[ubj,)}(hidah]hida}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj[ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjWubj)}(hunsigned int maxh](j_)}(hunsignedh]hunsigned}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj_)}(hinth]hint}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj,)}(hmaxh]hmax}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjWubj)}(h gfp_t gfph](h)}(hhh]j,)}(hgfp_th]hgfp_t}(hj%hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj"ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]jc.ida_alloc_maxasbuh1hhjubjq)}(h h]h }(hjChhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj,)}(hgfph]hgfp}(hjQhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjWubeh}(h]h ]h"]h$]h&]hhuh1jhjhhhj0hMGubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjhhhj0hMGubah}(h]jah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj0hMGhjhhubjY)}(hhh]h)}(hAllocate an unused ID.h]hAllocate an unused ID.}(hj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhP/var/lib/git/docbuild/linux/Documentation/core-api/idr:81: ./include/linux/idr.hhM;hjxhhubah}(h]h ]h"]h$]h&]uh1jXhjhhhj0hMGubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjjljjmjnjouh1jhhhjhNhNubj)}(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)}(hjh]hunsigned int max}(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)}(hHighest ID to allocate.h]hHighest ID to allocate.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hM=hj ubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]uh1jhj hM=hjubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hj.h]h gfp_t gfp}(hj0hhhNhNubah}(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.}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChM>hjDubah}(h]h ]h"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]uh1jhjChM>hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjih]h Description}(hjkhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjgubah}(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.hhMBhjubh)}(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}(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.hhMDhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jidr_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]j )}(hXint idr_alloc_u32(struct idr *idr, void *ptr, u32 *nextid, unsigned long max, gfp_t gfp)h](j_)}(hinth]hint}(hj2hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj.hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK!ubjq)}(h h]h }(hjAhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj.hhhj@hK!ubj&)}(h idr_alloc_u32h]j,)}(h idr_alloc_u32h]h idr_alloc_u32}(hjShhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjOubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj.hhhj@hK!ubj)}(hG(struct idr *idr, void *ptr, u32 *nextid, unsigned long max, gfp_t gfp)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hjohhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubjq)}(h h]h }(hj|hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjkubh)}(hhh]j,)}(hidrh]hidr}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjmodnameN classnameNjj)}j]j")}jjUsbc.idr_alloc_u32asbuh1hhjkubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjkubj6)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjkubj,)}(hidrh]hidr}(hjhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjkubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjgubj)}(h void *ptrh](j_)}(hvoidh]hvoid}(hjhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjubjq)}(h h]h }(hjhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjubj6)}(hj9h]h*}(hjhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjubj,)}(hptrh]hptr}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjgubj)}(h u32 *nextidh](h)}(hhh]j,)}(hu32h]hu32}(hj& hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj# ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj( modnameN classnameNjj)}j]jc.idr_alloc_u32asbuh1hhj ubjq)}(h h]h }(hjD hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubj6)}(hj9h]h*}(hjR hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj ubj,)}(hnextidh]hnextid}(hj_ hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjgubj)}(hunsigned long maxh](j_)}(hunsignedh]hunsigned}(hjx hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjt ubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjt ubj_)}(hlongh]hlong}(hj hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjt ubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjt ubj,)}(hmaxh]hmax}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjt ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjgubj)}(h gfp_t gfph](h)}(hhh]j,)}(hgfp_th]hgfp_t}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj modnameN classnameNjj)}j]jc.idr_alloc_u32asbuh1hhj ubjq)}(h h]h }(hj hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj ubj,)}(hgfph]hgfp}(hj hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjgubeh}(h]h ]h"]h$]h&]hhuh1jhj.hhhj@hK!ubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj*hhhj@hK!ubah}(h]j%ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj@hK!hj'hhubjY)}(hhh]h)}(hAllocate an ID.h]hAllocate an ID.}(hj"!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK hj!hhubah}(h]h ]h"]h$]h&]uh1jXhj'hhhj@hK!ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj:!jlj:!jmjnjouh1jhhhjhNhNubj)}(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)}(hjD!h]h Parameters}(hjF!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjB!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)}(hjc!h]hstruct idr *idr}(hje!hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja!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&]uh1hhjx!hK hjy!ubah}(h]h ]h"]h$]h&]uh1jhj]!ubeh}(h]h ]h"]h$]h&]uh1jhjx!hK hjZ!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 hjZ!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!hKhjZ!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&]uh1hhj#"hKhj$"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]uh1jhj#"hKhjZ!ubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hjG"h]h gfp_t gfp}(hjI"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE"ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjA"ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj`"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\"hKhj]"ubah}(h]h ]h"]h$]h&]uh1jhjA"ubeh}(h]h ]h"]h$]h&]uh1jhj\"hKhjZ!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)}(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.chKhj>!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.}(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)}(hj6#h]hReturn}(hj8#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4#ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj>!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, }(hjL#hhhNhNubj)}(h **nextid**h]hnextid}(hjT#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjL#ubh is unchanged.}(hjL#hhhNhNubeh}(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](jidr_alloc (C function) c.idr_allochNtauh1jhjhhhNhNubj)}(hhh](j)}(hIint idr_alloc (struct idr *idr, void *ptr, int start, int end, gfp_t gfp)h]j )}(hHint idr_alloc(struct idr *idr, void *ptr, int start, int end, gfp_t gfp)h](j_)}(hinth]hint}(hj#hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj#hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKOubjq)}(h h]h }(hj#hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj#hhhj#hKOubj&)}(h idr_alloch]j,)}(h idr_alloch]h idr_alloc}(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj#ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj#hhhj#hKOubj)}(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#ubjq)}(h h]h }(hj#hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj#ubh)}(hhh]j,)}(hidrh]hidr}(hj#hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj#ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj#modnameN classnameNjj)}j]j")}jj#sb c.idr_allocasbuh1hhj#ubjq)}(h h]h }(hj$hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj#ubj6)}(hj9h]h*}(hj$hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj#ubj,)}(hidrh]hidr}(hj#$hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj#ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(h void *ptrh](j_)}(hvoidh]hvoid}(hj<$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj8$ubjq)}(h h]h }(hjJ$hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj8$ubj6)}(hj9h]h*}(hjX$hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj8$ubj,)}(hptrh]hptr}(hje$hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj8$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(h int starth](j_)}(hinth]hint}(hj~$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjz$ubjq)}(h h]h }(hj$hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjz$ubj,)}(hstarth]hstart}(hj$hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjz$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubj)}(hint endh](j_)}(hinth]hint}(hj$hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj$ubjq)}(h h]h }(hj$hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj$ubj,)}(hendh]hend}(hj$hhhNhNubah}(h]h ]j7ah"]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 ]j7ah"]h$]h&]uh1j+hj$ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj$modnameN classnameNjj)}j]j$ c.idr_allocasbuh1hhj$ubjq)}(h h]h }(hj %hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj$ubj,)}(hgfph]hgfp}(hj%hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj$ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj#ubeh}(h]h ]h"]h$]h&]hhuh1jhj#hhhj#hKOubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj#hhhj#hKOubah}(h]j#ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj#hKOhj#hhubjY)}(hhh]h)}(hAllocate an ID.h]hAllocate an ID.}(hjA%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK%hhubah}(h]h ]h"]h$]h&]uh1jXhj#hhhj#hKOubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjY%jljY%jmjnjouh1jhhhjhNhNubj)}(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)}(hjc%h]h Parameters}(hje%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja%ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK@hj]%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=hjy%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>hjy%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.chK?hj%ubj)}(hhh]h)}(hThe minimum ID (inclusive).h]hThe minimum ID (inclusive).}(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?hjy%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.chK@hj'&ubj)}(hhh]h)}(hThe maximum ID (exclusive).h]hThe maximum ID (exclusive).}(hjF&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjB&hK@hjC&ubah}(h]h ]h"]h$]h&]uh1jhj'&ubeh}(h]h ]h"]h$]h&]uh1jhjB&hK@hjy%ubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hjf&h]h gfp_t gfp}(hjh&hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd&ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKAhj`&ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj&hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{&hKAhj|&ubah}(h]h ]h"]h$]h&]uh1jhj`&ubeh}(h]h ]h"]h$]h&]uh1jhj{&hKAhjy%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.chKChj]%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.chKChj]%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.}(hj2'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKGhj]%ubh)}(h **Return**h]j)}(hjC'h]hReturn}(hjE'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjA'ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKLhj]%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.}(hjY'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKLhj]%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jidr_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]j )}(hOint idr_alloc_cyclic(struct idr *idr, void *ptr, int start, int end, gfp_t gfp)h](j_)}(hinth]hint}(hj'hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj'hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKuubjq)}(h h]h }(hj'hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj'hhhj'hKuubj&)}(hidr_alloc_cyclich]j,)}(hidr_alloc_cyclich]hidr_alloc_cyclic}(hj'hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj'ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj'hhhj'hKuubj)}(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'ubjq)}(h h]h }(hj'hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj'ubh)}(hhh]j,)}(hidrh]hidr}(hj'hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj'ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj'modnameN classnameNjj)}j]j")}jj'sbc.idr_alloc_cyclicasbuh1hhj'ubjq)}(h h]h }(hj(hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj'ubj6)}(hj9h]h*}(hj(hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj'ubj,)}(hidrh]hidr}(hj(hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj'ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubj)}(h void *ptrh](j_)}(hvoidh]hvoid}(hj7(hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj3(ubjq)}(h h]h }(hjE(hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj3(ubj6)}(hj9h]h*}(hjS(hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj3(ubj,)}(hptrh]hptr}(hj`(hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj3(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubj)}(h int starth](j_)}(hinth]hint}(hjy(hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hju(ubjq)}(h h]h }(hj(hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphju(ubj,)}(hstarth]hstart}(hj(hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hju(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubj)}(hint endh](j_)}(hinth]hint}(hj(hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj(ubjq)}(h h]h }(hj(hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj(ubj,)}(hendh]hend}(hj(hhhNhNubah}(h]h ]j7ah"]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 ]j7ah"]h$]h&]uh1j+hj(ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj(modnameN classnameNjj)}j]j'c.idr_alloc_cyclicasbuh1hhj(ubjq)}(h h]h }(hj)hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj(ubj,)}(hgfph]hgfp}(hj)hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj(ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj'ubeh}(h]h ]h"]h$]h&]hhuh1jhj'hhhj'hKuubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj'hhhj'hKuubah}(h]j{'ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj'hKuhj}'hhubjY)}(hhh]h)}(hAllocate an ID cyclically.h]hAllocate an ID cyclically.}(hj<)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chK`hj9)hhubah}(h]h ]h"]h$]h&]uh1jXhj}'hhhj'hKuubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjT)jljT)jmjnjouh1jhhhjhNhNubj)}(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)}(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.chKdhjX)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.chKahjw)ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hKahj)ubah}(h]h ]h"]h$]h&]uh1jhjw)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKahjt)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.chKbhj)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)hKbhj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj)hKbhjt)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.chKchj)ubj)}(hhh]h)}(hThe minimum ID (inclusive).h]hThe minimum ID (inclusive).}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*hKchj*ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]uh1jhj*hKchjt)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.chKdhj"*ubj)}(hhh]h)}(hThe maximum ID (exclusive).h]hThe maximum ID (exclusive).}(hjA*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj=*hKdhj>*ubah}(h]h ]h"]h$]h&]uh1jhj"*ubeh}(h]h ]h"]h$]h&]uh1jhj=*hKdhjt)ubj)}(h'``gfp_t gfp`` Memory allocation flags. h](j)}(h ``gfp_t gfp``h]j)}(hja*h]h gfp_t gfp}(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.chKehj[*ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hjz*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjv*hKehjw*ubah}(h]h ]h"]h$]h&]uh1jhj[*ubeh}(h]h ]h"]h$]h&]uh1jhjv*hKehjt)ubeh}(h]h ]h"]h$]h&]uh1jhjX)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.chKghjX)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}(hj8+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.chKghjX)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.}(hjQ+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKmhjX)ubh)}(h **Return**h]j)}(hjb+h]hReturn}(hjd+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.chKrhjX)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.}(hjx+hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKrhjX)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jidr_remove (C function) c.idr_removehNtauh1jhjhhhNhNubj)}(hhh](j)}(h5void * idr_remove (struct idr *idr, unsigned long id)h]j )}(h3void *idr_remove(struct idr *idr, unsigned long id)h](j_)}(hvoidh]hvoid}(hj+hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj+hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKubjq)}(h h]h }(hj+hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj+hhhj+hKubj6)}(hj9h]h*}(hj+hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj+hhhj+hKubj&)}(h idr_removeh]j,)}(h idr_removeh]h idr_remove}(hj+hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj+ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj+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+ubjq)}(h h]h }(hj+hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj+ubh)}(hhh]j,)}(hidrh]hidr}(hj,hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj ,ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj,modnameN classnameNjj)}j]j")}jj+sb c.idr_removeasbuh1hhj+ubjq)}(h h]h }(hj/,hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj+ubj6)}(hj9h]h*}(hj=,hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj+ubj,)}(hidrh]hidr}(hjJ,hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj+ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj+ubj)}(hunsigned long idh](j_)}(hunsignedh]hunsigned}(hjc,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj_,ubjq)}(h h]h }(hjq,hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj_,ubj_)}(hlongh]hlong}(hj,hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj_,ubjq)}(h h]h }(hj,hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj_,ubj,)}(hidh]hid}(hj,hhhNhNubah}(h]h ]j7ah"]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&]hhjJuh1jjKjLhj+hhhj+hKubah}(h]j+ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj+hKhj+hhubjY)}(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&]uh1jXhj+hhhj+hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj,jlj,jmjnjouh1jhhhjhNhNubj)}(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.}(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}(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.chKhj9-ubj)}(hhh]h)}(h Pointer ID.h]h Pointer ID.}(hjX-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjT-hKhjU-ubah}(h]h ]h"]h$]h&]uh1jhj9-ubeh}(h]h ]h"]h$]h&]uh1jhjT-hKhj,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.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](jidr_find (C function) c.idr_findhNtauh1jhjhhhNhNubj)}(hhh](j)}(h9void * idr_find (const struct idr *idr, unsigned long id)h]j )}(h7void *idr_find(const struct idr *idr, unsigned long id)h](j_)}(hvoidh]hvoid}(hj.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj.hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKubjq)}(h h]h }(hj.hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj.hhhj.hKubj6)}(hj9h]h*}(hj$.hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj.hhhj.hKubj&)}(hidr_findh]j,)}(hidr_findh]hidr_find}(hj5.hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj1.ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj.hhhj.hKubj)}(h)(const struct idr *idr, unsigned long id)h](j)}(hconst struct idr *idrh](j)}(hjh]hconst}(hjQ.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM.ubjq)}(h h]h }(hj^.hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjM.ubj)}(hjh]hstruct}(hjl.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM.ubjq)}(h h]h }(hjy.hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjM.ubh)}(hhh]j,)}(hidrh]hidr}(hj.hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj.ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj.modnameN classnameNjj)}j]j")}jj7.sb c.idr_findasbuh1hhjM.ubjq)}(h h]h }(hj.hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjM.ubj6)}(hj9h]h*}(hj.hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjM.ubj,)}(hidrh]hidr}(hj.hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjM.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjI.ubj)}(hunsigned long idh](j_)}(hunsignedh]hunsigned}(hj.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj.ubjq)}(h h]h }(hj.hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj.ubj_)}(hlongh]hlong}(hj.hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj.ubjq)}(h h]h }(hj/hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj.ubj,)}(hidh]hid}(hj/hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj.ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjI.ubeh}(h]h ]h"]h$]h&]hhuh1jhj.hhhj.hKubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj-hhhj.hKubah}(h]j-ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj.hKhj-hhubjY)}(hhh]h)}(hReturn pointer for given ID.h]hReturn pointer for given ID.}(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&]uh1jXhj-hhhj.hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjX/jljX/jmjnjouh1jhhhjhNhNubj)}(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)}(hjb/h]h Parameters}(hjd/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&``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/hKhjx/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/hKhjx/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)}(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 }(hj 0hhhNhNubj)}(h``NULL``h]hNULL}(hj0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 0ubh pointer may indicate that }(hj 0hhhNhNubj)}(h**id**h]hid}(hj%0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 0ubh is not allocated or that the }(hj 0hhhNhNubj)}(h``NULL``h]hNULL}(hj70hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj 0ubh% pointer was associated with this ID.}(hj 0hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj\/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.}(hjP0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj\/ubh)}(h **Return**h]j)}(hja0h]hReturn}(hjc0hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_0ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj\/ubh)}(h$The pointer associated with this ID.h]h$The pointer associated with this ID.}(hjw0hhhNhNubah}(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](jidr_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]j )}(h[int idr_for_each(const struct idr *idr, int (*fn)(int id, void *p, void *data), void *data)h](j_)}(hinth]hint}(hj0hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj0hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKubjq)}(h h]h }(hj0hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj0hhhj0hKubj&)}(h idr_for_eachh]j,)}(h idr_for_eachh]h idr_for_each}(hj0hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj0ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj0hhhj0hKubj)}(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&]uh1jhj0ubjq)}(h h]h }(hj0hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj0ubj)}(hjh]hstruct}(hj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubjq)}(h h]h }(hj 1hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj0ubh)}(hhh]j,)}(hidrh]hidr}(hj1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj1ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj1modnameN classnameNjj)}j]j")}jj0sbc.idr_for_eachasbuh1hhj0ubjq)}(h h]h }(hj<1hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj0ubj6)}(hj9h]h*}(hjJ1hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj0ubj,)}(hidrh]hidr}(hjW1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj0ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(h&int (*fn)(int id, void *p, void *data)h](j_)}(hinth]hint}(hjp1hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjl1ubjq)}(h h]h }(hj~1hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjl1ubj6)}(h(h]h(}(hj1hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjl1ubj6)}(hj9h]h*}(hj1hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjl1ubj,)}(hfnh]hfn}(hj1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjl1ubj6)}(h)h]h)}(hj1hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjl1ubj6)}(hj1h]h(}(hj1hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjl1ubj_)}(hinth]hint}(hj1hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjl1ubjq)}(h h]h }(hj1hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjl1ubj,)}(hidh]hid}(hj1hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjl1ubj6)}(h,h]h,}(hj1hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjl1ubjq)}(h h]h }(hj2hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjl1ubj_)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjl1ubjq)}(h h]h }(hj$2hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjl1ubj6)}(hj9h]h*}(hj22hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjl1ubj,)}(hjBh]hp}(hj?2hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjl1ubj6)}(hj1h]h,}(hjL2hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjl1ubjq)}(h h]h }(hjY2hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjl1ubj_)}(hvoidh]hvoid}(hjg2hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjl1ubjq)}(h h]h }(hju2hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjl1ubj6)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjl1ubj,)}(hdatah]hdata}(hj2hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjl1ubj6)}(hj1h]h)}(hj2hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjl1ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubj)}(h void *datah](j_)}(hvoidh]hvoid}(hj2hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj2ubjq)}(h h]h }(hj2hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj2ubj6)}(hj9h]h*}(hj2hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj2ubj,)}(hdatah]hdata}(hj2hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj2ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj0ubeh}(h]h ]h"]h$]h&]hhuh1jhj0hhhj0hKubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj0hhhj0hKubah}(h]j0ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj0hKhj0hhubjY)}(hhh]h)}(h$Iterate through all stored pointers.h]h$Iterate through all stored pointers.}(hj 3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj3hhubah}(h]h ]h"]h$]h&]uh1jXhj0hhhj0hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj!3jlj!3jmjnjouh1jhhhjhNhNubj)}(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}(hj-3hhhNhNubah}(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.chKhj%3ubj)}(hhh](j)}(h&``const struct idr *idr`` IDR handle. h](j)}(h``const struct idr *idr``h]j)}(hjJ3h]hconst struct idr *idr}(hjL3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjH3ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjD3ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjc3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj_3hKhj`3ubah}(h]h ]h"]h$]h&]uh1jhjD3ubeh}(h]h ]h"]h$]h&]uh1jhj_3hKhjA3ubj)}(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.chKhj}3ubj)}(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&]uh1jhj}3ubeh}(h]h ]h"]h$]h&]uh1jhj3hKhjA3ubj)}(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&]uh1jhj3hKhjA3ubeh}(h]h ]h"]h$]h&]uh1jhj%3ubh)}(h**Description**h]j)}(hj3h]h Description}(hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj%3ubh)}(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}(hj4hhhNhNubah}(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.chKhj%3ubh)}(hoIf **fn** returns anything other than ``0``, the iteration stops and that value is returned from this function.h](hIf }(hj@4hhhNhNubj)}(h**fn**h]hfn}(hjH4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@4ubh returns anything other than }(hj@4hhhNhNubj)}(h``0``h]h0}(hjZ4hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@4ubhD, the iteration stops and that value is returned from this function.}(hj@4hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj%3ubh)}(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.}(hjs4hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj%3ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jidr_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]j )}(h=void *idr_get_next_ul(struct idr *idr, unsigned long *nextid)h](j_)}(hvoidh]hvoid}(hj4hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj4hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKubjq)}(h h]h }(hj4hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj4hhhj4hKubj6)}(hj9h]h*}(hj4hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj4hhhj4hKubj&)}(hidr_get_next_ulh]j,)}(hidr_get_next_ulh]hidr_get_next_ul}(hj4hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj4ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj4hhhj4hKubj)}(h((struct idr *idr, unsigned long *nextid)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubjq)}(h h]h }(hj4hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj4ubh)}(hhh]j,)}(hidrh]hidr}(hj 5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj5ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj 5modnameN classnameNjj)}j]j")}jj4sbc.idr_get_next_ulasbuh1hhj4ubjq)}(h h]h }(hj*5hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj4ubj6)}(hj9h]h*}(hj85hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj4ubj,)}(hidrh]hidr}(hjE5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj4ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj4ubj)}(hunsigned long *nextidh](j_)}(hunsignedh]hunsigned}(hj^5hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjZ5ubjq)}(h h]h }(hjl5hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjZ5ubj_)}(hlongh]hlong}(hjz5hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjZ5ubjq)}(h h]h }(hj5hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjZ5ubj6)}(hj9h]h*}(hj5hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjZ5ubj,)}(hnextidh]hnextid}(hj5hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjZ5ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj4ubeh}(h]h ]h"]h$]h&]hhuh1jhj4hhhj4hKubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj4hhhj4hKubah}(h]j4ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj4hKhj4hhubjY)}(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&]uh1jXhj4hhhj4hKubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj5jlj5jmjnjouh1jhhhjhNhNubj)}(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)}(hj5h]h Parameters}(hj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj5ubah}(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)}(hj6h]hstruct idr *idr}(hj6hhhNhNubah}(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&]uh1hhj#6hKhj$6ubah}(h]h ]h"]h$]h&]uh1jhj6ubeh}(h]h ]h"]h$]h&]uh1jhj#6hKhj6ubj)}(h,``unsigned long *nextid`` Pointer to an ID. h](j)}(h``unsigned long *nextid``h]j)}(hjG6h]hunsigned long *nextid}(hjI6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjE6ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhjA6ubj)}(hhh]h)}(hPointer to an ID.h]hPointer to an ID.}(hj`6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\6hKhj]6ubah}(h]h ]h"]h$]h&]uh1jhjA6ubeh}(h]h ]h"]h$]h&]uh1jhj\6hKhj6ubeh}(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](jidr_get_next (C function)c.idr_get_nexthNtauh1jhjhhhNhNubj)}(hhh](j)}(h2void * idr_get_next (struct idr *idr, int *nextid)h]j )}(h0void *idr_get_next(struct idr *idr, int *nextid)h](j_)}(hvoidh]hvoid}(hj6hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj6hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMubjq)}(h h]h }(hj6hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj6hhhj6hMubj6)}(hj9h]h*}(hj7hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj6hhhj6hMubj&)}(h idr_get_nexth]j,)}(h idr_get_nexth]h idr_get_next}(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj7ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj6hhhj6hMubj)}(h(struct idr *idr, int *nextid)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hj57hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj17ubjq)}(h h]h }(hjB7hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj17ubh)}(hhh]j,)}(hidrh]hidr}(hjS7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjP7ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjU7modnameN classnameNjj)}j]j")}jj7sbc.idr_get_nextasbuh1hhj17ubjq)}(h h]h }(hjs7hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj17ubj6)}(hj9h]h*}(hj7hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj17ubj,)}(hidrh]hidr}(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj17ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj-7ubj)}(h int *nextidh](j_)}(hinth]hint}(hj7hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj7ubjq)}(h h]h }(hj7hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj7ubj6)}(hj9h]h*}(hj7hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj7ubj,)}(hnextidh]hnextid}(hj7hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj7ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj-7ubeh}(h]h ]h"]h$]h&]hhuh1jhj6hhhj6hMubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj6hhhj6hMubah}(h]j6ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj6hMhj6hhubjY)}(hhh]h)}(hFind next populated entry.h]hFind next populated entry.}(hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chKhj7hhubah}(h]h ]h"]h$]h&]uh1jXhj6hhhj6hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj8jlj8jmjnjouh1jhhhjhNhNubj)}(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)}(hj8h]h Parameters}(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.chMhj8ubj)}(hhh](j)}(h ``struct idr *idr`` IDR handle. h](j)}(h``struct idr *idr``h]j)}(hj;8h]hstruct idr *idr}(hj=8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj98ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhj58ubj)}(hhh]h)}(h IDR handle.h]h IDR handle.}(hjT8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjP8hMhjQ8ubah}(h]h ]h"]h$]h&]uh1jhj58ubeh}(h]h ]h"]h$]h&]uh1jhjP8hMhj28ubj)}(h"``int *nextid`` Pointer to an ID. h](j)}(h``int *nextid``h]j)}(hjt8h]h int *nextid}(hjv8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjr8ubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhjn8ubj)}(hhh]h)}(hPointer to an ID.h]hPointer to an ID.}(hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj8hMhj8ubah}(h]h ]h"]h$]h&]uh1jhjn8ubeh}(h]h ]h"]h$]h&]uh1jhj8hMhj28ubeh}(h]h ]h"]h$]h&]uh1jhj8ubh)}(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.chMhj8ubh)}(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.chMhj8ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jidr_replace (C function) c.idr_replacehNtauh1jhjhhhNhNubj)}(hhh](j)}(hAvoid * idr_replace (struct idr *idr, void *ptr, unsigned long id)h]j )}(h?void *idr_replace(struct idr *idr, void *ptr, unsigned long id)h](j_)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj9hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM"ubjq)}(h h]h }(hj'9hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj9hhhj&9hM"ubj6)}(hj9h]h*}(hj59hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj9hhhj&9hM"ubj&)}(h idr_replaceh]j,)}(h idr_replaceh]h idr_replace}(hjF9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjB9ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj9hhhj&9hM"ubj)}(h.(struct idr *idr, void *ptr, unsigned long id)h](j)}(hstruct idr *idrh](j)}(hjh]hstruct}(hjb9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^9ubjq)}(h h]h }(hjo9hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj^9ubh)}(hhh]j,)}(hidrh]hidr}(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj}9ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj9modnameN classnameNjj)}j]j")}jjH9sb c.idr_replaceasbuh1hhj^9ubjq)}(h h]h }(hj9hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj^9ubj6)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj^9ubj,)}(hidrh]hidr}(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj^9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZ9ubj)}(h void *ptrh](j_)}(hvoidh]hvoid}(hj9hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj9ubjq)}(h h]h }(hj9hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj9ubj6)}(hj9h]h*}(hj9hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj9ubj,)}(hptrh]hptr}(hj9hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj9ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZ9ubj)}(hunsigned long idh](j_)}(hunsignedh]hunsigned}(hj:hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj:ubjq)}(h h]h }(hj$:hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj:ubj_)}(hlongh]hlong}(hj2:hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj:ubjq)}(h h]h }(hj@:hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj:ubj,)}(hidh]hid}(hjN:hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj:ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjZ9ubeh}(h]h ]h"]h$]h&]hhuh1jhj9hhhj&9hM"ubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj9hhhj&9hM"ubah}(h]j 9ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj&9hM"hj 9hhubjY)}(hhh]h)}(hreplace pointer for given ID.h]hreplace pointer for given ID.}(hjx:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhju:hhubah}(h]h ]h"]h$]h&]uh1jXhj 9hhhj&9hM"ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj:jlj:jmjnjouh1jhhhjhNhNubj)}(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}(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 ID to change.h]h ID to change.}(hjD;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@;hMhjA;ubah}(h]h ]h"]h$]h&]uh1jhj%;ubeh}(h]h ]h"]h$]h&]uh1jhj@;hMhj:ubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hjf;h]h Description}(hjh;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjd;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.chMhj: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.chMhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jida_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]j )}(hSint ida_alloc_range(struct ida *ida, unsigned int min, unsigned int max, gfp_t gfp)h](j_)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj<hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM|ubjq)}(h h]h }(hj)<hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj<hhhj(<hM|ubj&)}(hida_alloc_rangeh]j,)}(hida_alloc_rangeh]hida_alloc_range}(hj;<hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj7<ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj<hhhj(<hM|ubj)}(h@(struct ida *ida, unsigned int min, unsigned int max, gfp_t gfp)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hjW<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS<ubjq)}(h h]h }(hjd<hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjS<ubh)}(hhh]j,)}(hidah]hida}(hju<hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjr<ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjw<modnameN classnameNjj)}j]j")}jj=<sbc.ida_alloc_rangeasbuh1hhjS<ubjq)}(h h]h }(hj<hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjS<ubj6)}(hj9h]h*}(hj<hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjS<ubj,)}(hidah]hida}(hj<hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjS<ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjO<ubj)}(hunsigned int minh](j_)}(hunsignedh]hunsigned}(hj<hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj<ubjq)}(h h]h }(hj<hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj<ubj_)}(hinth]hint}(hj<hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj<ubjq)}(h h]h }(hj<hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj<ubj,)}(hminh]hmin}(hj=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj<ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjO<ubj)}(hunsigned int maxh](j_)}(hunsignedh]hunsigned}(hj=hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj=ubjq)}(h h]h }(hj(=hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj=ubj_)}(hinth]hint}(hj6=hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj=ubjq)}(h h]h }(hjD=hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj=ubj,)}(hmaxh]hmax}(hjR=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjO<ubj)}(h gfp_t gfph](h)}(hhh]j,)}(hgfp_th]hgfp_t}(hjn=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjk=ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjp=modnameN classnameNjj)}j]j<c.ida_alloc_rangeasbuh1hhjg=ubjq)}(h h]h }(hj=hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjg=ubj,)}(hgfph]hgfp}(hj=hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjg=ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjO<ubeh}(h]h ]h"]h$]h&]hhuh1jhj<hhhj(<hM|ubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj<hhhj(<hM|ubah}(h]j <ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj(<hM|hj<hhubjY)}(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.chMnhj=hhubah}(h]h ]h"]h$]h&]uh1jXhj<hhhj(<hM|ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj=jlj=jmjnjouh1jhhhjhNhNubj)}(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.chMrhj=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.chMohj=ubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMohj>ubah}(h]h ]h"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]uh1jhj>hMohj=ubj)}(h,``unsigned int min`` Lowest ID to allocate. h](j)}(h``unsigned int min``h]j)}(hj>>h]hunsigned int min}(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.chMphj8>ubj)}(hhh]h)}(hLowest ID to allocate.h]hLowest ID to allocate.}(hjW>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS>hMphjT>ubah}(h]h ]h"]h$]h&]uh1jhj8>ubeh}(h]h ]h"]h$]h&]uh1jhjS>hMphj=ubj)}(h-``unsigned int max`` Highest ID to allocate. h](j)}(h``unsigned int max``h]j)}(hjw>h]hunsigned int max}(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.chMqhjq>ubj)}(hhh]h)}(hHighest ID to allocate.h]hHighest ID to allocate.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMqhj>ubah}(h]h ]h"]h$]h&]uh1jhjq>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMqhj=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.chMrhj>ubj)}(hhh]h)}(hMemory allocation flags.h]hMemory allocation flags.}(hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMrhj>ubah}(h]h ]h"]h$]h&]uh1jhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>hMrhj=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.chMthj=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}(hj-?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh , even if }(hj?hhhNhNubj)}(h**max**h]hmax}(hj??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.chMthj=ubh)}(h **Context**h]j)}(hjZ?h]hContext}(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.chMwhj=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.}(hjp?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMwhj=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.chMzhj=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.chMyhj=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]j )}(hMint ida_find_first_range(struct ida *ida, unsigned int min, unsigned int max)h](j_)}(hinth]hint}(hj?hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj?hhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMubjq)}(h h]h }(hj?hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj?hhhj?hMubj&)}(hida_find_first_rangeh]j,)}(hida_find_first_rangeh]hida_find_first_range}(hj @hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj@ubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hj?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&]uh1jhj#@ubjq)}(h h]h }(hj4@hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj#@ubh)}(hhh]j,)}(hidah]hida}(hjE@hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjB@ubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjG@modnameN classnameNjj)}j]j")}jj @sbc.ida_find_first_rangeasbuh1hhj#@ubjq)}(h h]h }(hje@hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj#@ubj6)}(hj9h]h*}(hjs@hhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hj#@ubj,)}(hidah]hida}(hj@hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj#@ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@ubj)}(hunsigned int minh](j_)}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj@ubjq)}(h h]h }(hj@hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj@ubj_)}(hinth]hint}(hj@hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj@ubjq)}(h h]h }(hj@hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj@ubj,)}(hminh]hmin}(hj@hhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@ubj)}(hunsigned int maxh](j_)}(hunsignedh]hunsigned}(hj@hhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj@ubjq)}(h h]h }(hj@hhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj@ubj_)}(hinth]hint}(hjAhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hj@ubjq)}(h h]h }(hjAhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphj@ubj,)}(hmaxh]hmax}(hj"AhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj@ubeh}(h]h ]h"]h$]h&]noemphhhuh1jhj@ubeh}(h]h ]h"]h$]h&]hhuh1jhj?hhhj?hMubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj?hhhj?hMubah}(h]j?ah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj?hMhj?hhubjY)}(hhh]h)}(hGet the lowest used ID.h]hGet the lowest used ID.}(hjLAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhjIAhhubah}(h]h ]h"]h$]h&]uh1jXhj?hhhj?hMubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjdAjljdAjmjnjouh1jhhhjhNhNubj)}(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)}(hjnAh]h Parameters}(hjpAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjlAubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMhjhAubj)}(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)}(hjAh]hunsigned int max}(hjBhhhNhNubah}(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)}(hHighest ID to get.h]hHighest ID to get.}(hjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBhMhjBubah}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ]h"]h$]h&]uh1jhjBhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjhAubh)}(h**Description**h]j)}(hj:Bh]h Description}(hjj?eh"]h$]h&]hhuh1j%hjChhhj#ChM*ubj)}(h"(struct ida *ida, unsigned int id)h](j)}(hstruct ida *idah](j)}(hjh]hstruct}(hjRChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNCubjq)}(h h]h }(hj_ChhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjNCubh)}(hhh]j,)}(hidah]hida}(hjpChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjmCubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetjrCmodnameN classnameNjj)}j]j")}jj8Csb c.ida_freeasbuh1hhjNCubjq)}(h h]h }(hjChhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjNCubj6)}(hj9h]h*}(hjChhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjNCubj,)}(hidah]hida}(hjChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjNCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjJCubj)}(hunsigned int idh](j_)}(hunsignedh]hunsigned}(hjChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjCubjq)}(h h]h }(hjChhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjCubj_)}(hinth]hint}(hjChhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjCubjq)}(h h]h }(hjChhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjCubj,)}(hidh]hid}(hjChhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjCubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjJCubeh}(h]h ]h"]h$]h&]hhuh1jhjChhhj#ChM*ubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhj Chhhj#ChM*ubah}(h]jCah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj#ChM*hj ChhubjY)}(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#hj#Dhhubah}(h]h ]h"]h$]h&]uh1jXhj Chhhj#ChM*ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkj>Djlj>Djmjnjouh1jhhhjhNhNubj)}(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)}(hjHDh]h Parameters}(hjJDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFDubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM'hjBDubj)}(hhh](j)}(h ``struct ida *ida`` IDA handle. h](j)}(h``struct ida *ida``h]j)}(hjgDh]hstruct ida *ida}(hjiDhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeDubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM$hjaDubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|DhM$hj}Dubah}(h]h ]h"]h$]h&]uh1jhjaDubeh}(h]h ]h"]h$]h&]uh1jhj|DhM$hj^Dubj)}(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%hj^Dubeh}(h]h ]h"]h$]h&]uh1jhjBDubh)}(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'hjBDubh)}(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.}(hjDhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM'hjBDubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjhhhNhNubj)}(hhh]h}(h]h ]h"]h$]h&]entries](jida_destroy (C function) c.ida_destroyhNtauh1jhjhhhNhNubj)}(hhh](j)}(h"void ida_destroy (struct ida *ida)h]j )}(h!void ida_destroy(struct ida *ida)h](j_)}(hvoidh]hvoid}(hj EhhhNhNubah}(h]h ]jkah"]h$]h&]uh1j^hjEhhhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chM`ubjq)}(h h]h }(hj/EhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjEhhhj.EhM`ubj&)}(h ida_destroyh]j,)}(h ida_destroyh]h ida_destroy}(hjAEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hj=Eubah}(h]h ](j>j?eh"]h$]h&]hhuh1j%hjEhhhj.EhM`ubj)}(h(struct ida *ida)h]j)}(hstruct ida *idah](j)}(hjh]hstruct}(hj]EhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYEubjq)}(h h]h }(hjjEhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjYEubh)}(hhh]j,)}(hidah]hida}(hj{EhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjxEubah}(h]h ]h"]h$]h&] refdomainjreftypej reftargetj}EmodnameN classnameNjj)}j]j")}jjCEsb c.ida_destroyasbuh1hhjYEubjq)}(h h]h }(hjEhhhNhNubah}(h]h ]j}ah"]h$]h&]uh1jphjYEubj6)}(hj9h]h*}(hjEhhhNhNubah}(h]h ]jBah"]h$]h&]uh1j5hjYEubj,)}(hidah]hida}(hjEhhhNhNubah}(h]h ]j7ah"]h$]h&]uh1j+hjYEubeh}(h]h ]h"]h$]h&]noemphhhuh1jhjUEubah}(h]h ]h"]h$]h&]hhuh1jhjEhhhj.EhM`ubeh}(h]h ]h"]h$]h&]hhjJuh1jjKjLhjEhhhj.EhM`ubah}(h]jEah ](jPjQeh"]h$]h&]jUjV)jWhuh1jhj.EhM`hjEhhubjY)}(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.chMUhjEhhubah}(h]h ]h"]h$]h&]uh1jXhjEhhhj.EhM`ubeh}(h]h ](jfunctioneh"]h$]h&]jjjjkjEjljEjmjnjouh1jhhhjhNhNubj)}(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.chMYhjEubj)}(hhh]j)}(h ``struct ida *ida`` IDA handle. h](j)}(h``struct ida *ida``h]j)}(hj!Fh]hstruct ida *ida}(hj#FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubah}(h]h ]h"]h$]h&]uh1jhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMVhjFubj)}(hhh]h)}(h IDA handle.h]h IDA handle.}(hj:FhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6FhMVhj7Fubah}(h]h ]h"]h$]h&]uh1jhjFubeh}(h]h ]h"]h$]h&]uh1jhj6FhMVhjFubah}(h]h ]h"]h$]h&]uh1jhjEubh)}(h**Description**h]j)}(hj\Fh]h Description}(hj^FhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZFubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMXhjEubh)}(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.}(hjrFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhF/var/lib/git/docbuild/linux/Documentation/core-api/idr:83: ./lib/idr.chMXhjEubh)}(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]hjEubh)}(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]hjEubeh}(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_sourceh _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}(jFjFjfjcjvjsjjjFjFu nametypes}(jFjfjvjjFuh}(jFhjcj jsjijjyjFjjjjGjLjQjVj$j)jA jF jB jG j j jmjrjjjCjHj*j/jjjmjrjjjjj%j*j#j#j{'j'j+j+j-j-j0j0j4j4j6j6j 9j9j <j<j?j?jCj CjEjEu 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.