€•[Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ'/translations/zh_CN/core-api/kernel-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/zh_TW/core-api/kernel-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/it_IT/core-api/kernel-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ja_JP/core-api/kernel-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/ko_KR/core-api/kernel-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/pt_BR/core-api/kernel-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ'/translations/sp_SP/core-api/kernel-api”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒThe Linux Kernel API”h]”hŒThe Linux Kernel API”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒA/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api.rst”h´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒBasic C Library Functions”h]”hŒBasic C Library Functions”…”�”}”(hhÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhËh²hh³hÊh´KubhŒ paragraph”“”)�”}”(hX#When writing drivers, you cannot in general use routines which are from the C Library. Some of the functions have been found generally useful and they are listed below. The behaviour of these functions may vary slightly from those defined by ANSI, and these deviations are noted in the text.”h]”hX#When writing drivers, you cannot in general use routines which are from the C Library. Some of the functions have been found generally useful and they are listed below. The behaviour of these functions may vary slightly from those defined by ANSI, and these deviations are noted in the text.”…”�”}”(hhÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K hhËh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒString Conversions”h]”hŒString Conversions”…”�”}”(hhïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhhìh²hh³hÊh´KubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”Œsimple_strtoull (C function)”Œc.simple_strtoull”hNt”auh1hýhhìh²hh³Nh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒSunsigned long long simple_strtoull (const char *cp, char **endp, unsigned int base)”h]”hŒdesc_signature_line”“”)�”}”(hŒRunsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base)”h]”(hŒdesc_sig_keyword_type”“”)�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”Œkt”ah"]”h$]”h&]”uh1jhjh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´KhubhŒdesc_sig_space”“”)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”Œw”ah"]”h$]”h&]”uh1j1hjh²hh³j0h´Khubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjh²hh³j0h´Khubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³j0h´Khubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjh²hh³j0h´Khubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³j0h´KhubhŒ desc_name”“”)�”}”(hŒsimple_strtoull”h]”hŒ desc_sig_name”“”)�”}”(hŒsimple_strtoull”h]”hŒsimple_strtoull”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j€hj|ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jzhjh²hh³j0h´KhubhŒdesc_parameterlist”“”)�”}”(hŒ0(const char *cp, char **endp, unsigned int base)”h]”(hŒdesc_parameter”“”)�”}”(hŒconst char *cp”h]”(hŒdesc_sig_keyword”“”)�”}”(hŒconst”h]”hŒconst”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”Œk”ah"]”h$]”h&]”uh1j§hj£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£ubhŒdesc_sig_punctuation”“”)�”}”(hŒ*”h]”hŒ*”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”Œp”ah"]”h$]”h&]”uh1jâhj£ubj�)�”}”(hŒcp”h]”hŒcp”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubj¢)�”}”(hŒ char **endp”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒendp”h]”hŒendp”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjWubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjWubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³j0h´Khubeh}”(h]”h ]”h"]”h$]”h&]”j™jšŒ add_permalink”ˆuh1jŒsphinx_line_type”Œ declarator”hjh²hh³j0h´Khubah}”(h]”j ah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jh³j0h´Khhjh²hubhŒ desc_content”“”)�”}”(hhh]”hÝ)�”}”(hŒ)convert a string to an unsigned long long”h]”hŒ)convert a string to an unsigned long long”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´KhhjÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³j0h´Khubeh}”(h]”h ]”(Œc”Œfunction”eh"]”h$]”h&]”Œdomain”jߌobjtype”jàŒdesctype”jàŒnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jh²hhhìh³Nh´NubhŒ container”“”)�”}”(hX**Parameters** ``const char *cp`` The start of the string ``char **endp`` A pointer to the end of the parsed string will be placed here ``unsigned int base`` The number base to use **Description** This function has caveats. Please use kstrtoull instead.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”hŒstrong”“”)�”}”(hjòh]”hŒ Parameters”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´KlhjìubhŒdefinition_list”“”)�”}”(hhh]”(hŒdefinition_list_item”“”)�”}”(hŒ+``const char *cp`` The start of the string ”h]”(hŒterm”“”)�”}”(hŒ``const char *cp``”h]”hŒliteral”“”)�”}”(hjh]”hŒconst char *cp”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´KihjubhŒ definition”“”)�”}”(hhh]”hÝ)�”}”(hŒThe start of the string”h]”hŒThe start of the string”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0h´Kihj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0h´Kihj ubj)�”}”(hŒN``char **endp`` A pointer to the end of the parsed string will be placed here ”h]”(j)�”}”(hŒ``char **endp``”h]”j)�”}”(hjVh]”hŒ char **endp”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´KjhjPubj2)�”}”(hhh]”hÝ)�”}”(hŒ=A pointer to the end of the parsed string will be placed here”h]”hŒ=A pointer to the end of the parsed string will be placed here”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jkh´Kjhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jkh´Kjhj ubj)�”}”(hŒ-``unsigned int base`` The number base to use ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hj�h]”hŒunsigned int base”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Kkhj‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe number base to use”h]”hŒThe number base to use”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤h´Kkhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤h´Kkhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjìubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÊh]”hŒ Description”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´KmhjìubhÝ)�”}”(hŒ8This function has caveats. Please use kstrtoull instead.”h]”hŒ8This function has caveats. Please use kstrtoull instead.”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Klhjìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsimple_strtoul (C function)”Œc.simple_strtoul”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒMunsigned long simple_strtoul (const char *cp, char **endp, unsigned int base)”h]”j)�”}”(hŒLunsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Kwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj h²hh³jh´Kwubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj h²hh³jh´Kwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj h²hh³jh´Kwubj{)�”}”(hŒsimple_strtoul”h]”j�)�”}”(hŒsimple_strtoul”h]”hŒsimple_strtoul”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj h²hh³jh´Kwubjœ)�”}”(hŒ0(const char *cp, char **endp, unsigned int base)”h]”(j¢)�”}”(hŒconst char *cp”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjdubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjdubj�)�”}”(hŒcp”h]”hŒcp”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj`ubj¢)�”}”(hŒ char **endp”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÁubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÁubj�)�”}”(hŒendp”h]”hŒendp”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj`ubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj`ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj h²hh³jh´Kwubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³jh´Kwubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´Kwhjh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$convert a string to an unsigned long”h]”hŒ$convert a string to an unsigned long”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Kwhjsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³jh´Kwubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŽjæjŽjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX**Parameters** ``const char *cp`` The start of the string ``char **endp`` A pointer to the end of the parsed string will be placed here ``unsigned int base`` The number base to use **Description** This function has caveats. Please use kstrtoul instead.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K{hj’ubj )�”}”(hhh]”(j)�”}”(hŒ+``const char *cp`` The start of the string ”h]”(j)�”}”(hŒ``const char *cp``”h]”j)�”}”(hj·h]”hŒconst char *cp”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Kxhj±ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe start of the string”h]”hŒThe start of the string”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌh´KxhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌh´Kxhj®ubj)�”}”(hŒN``char **endp`` A pointer to the end of the parsed string will be placed here ”h]”(j)�”}”(hŒ``char **endp``”h]”j)�”}”(hjðh]”hŒ char **endp”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Kyhjêubj2)�”}”(hhh]”hÝ)�”}”(hŒ=A pointer to the end of the parsed string will be placed here”h]”hŒ=A pointer to the end of the parsed string will be placed here”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Kyhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Kyhj®ubj)�”}”(hŒ-``unsigned int base`` The number base to use ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hj)h]”hŒunsigned int base”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Kzhj#ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe number base to use”h]”hŒThe number base to use”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j>h´Kzhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>h´Kzhj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj’ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjdh]”hŒ Description”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K|hj’ubhÝ)�”}”(hŒ7This function has caveats. Please use kstrtoul instead.”h]”hŒ7This function has caveats. Please use kstrtoul instead.”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K{hj’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsimple_strtol (C function)”Œc.simple_strtol”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒClong simple_strtol (const char *cp, char **endp, unsigned int base)”h]”j)�”}”(hŒBlong simple_strtol(const char *cp, char **endp, unsigned int base)”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¥h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥h²hh³j·h´K…ubj{)�”}”(hŒ simple_strtol”h]”j�)�”}”(hŒ simple_strtol”h]”hŒ simple_strtol”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¥h²hh³j·h´K…ubjœ)�”}”(hŒ0(const char *cp, char **endp, unsigned int base)”h]”(j¢)�”}”(hŒconst char *cp”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâubj�)�”}”(hŒcp”h]”hŒcp”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞubj¢)�”}”(hŒ char **endp”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj?ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj?ubj�)�”}”(hŒendp”h]”hŒendp”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¥h²hh³j·h´K…ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¡h²hh³j·h´K…ubah}”(h]”jœah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j·h´K…hjžh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!convert a string to a signed long”h]”hŒ!convert a string to a signed long”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K…hjñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjžh²hh³j·h´K…ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj jæj jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX**Parameters** ``const char *cp`` The start of the string ``char **endp`` A pointer to the end of the parsed string will be placed here ``unsigned int base`` The number base to use **Description** This function has caveats. Please use kstrtol instead.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K‰hjubj )�”}”(hhh]”(j)�”}”(hŒ+``const char *cp`` The start of the string ”h]”(j)�”}”(hŒ``const char *cp``”h]”j)�”}”(hj5h]”hŒconst char *cp”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K†hj/ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe start of the string”h]”hŒThe start of the string”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jJh´K†hjKubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJh´K†hj,ubj)�”}”(hŒN``char **endp`` A pointer to the end of the parsed string will be placed here ”h]”(j)�”}”(hŒ``char **endp``”h]”j)�”}”(hjnh]”hŒ char **endp”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K‡hjhubj2)�”}”(hhh]”hÝ)�”}”(hŒ=A pointer to the end of the parsed string will be placed here”h]”hŒ=A pointer to the end of the parsed string will be placed here”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒh´K‡hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒh´K‡hj,ubj)�”}”(hŒ-``unsigned int base`` The number base to use ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hj§h]”hŒunsigned int base”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Kˆhj¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe number base to use”h]”hŒThe number base to use”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼h´Kˆhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼h´Kˆhj,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjâh]”hŒ Description”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´KŠhjubhÝ)�”}”(hŒ6This function has caveats. Please use kstrtol instead.”h]”hŒ6This function has caveats. Please use kstrtol instead.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K‰hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsimple_strtoll (C function)”Œc.simple_strtoll”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIlong long simple_strtoll (const char *cp, char **endp, unsigned int base)”h]”j)�”}”(hŒHlong long simple_strtoll(const char *cp, char **endp, unsigned int base)”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj# h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj# h²hh³j5 h´K¥ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjD h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj# h²hh³j5 h´K¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj# h²hh³j5 h´K¥ubj{)�”}”(hŒsimple_strtoll”h]”j�)�”}”(hŒsimple_strtoll”h]”hŒsimple_strtoll”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj` ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj# h²hh³j5 h´K¥ubjœ)�”}”(hŒ0(const char *cp, char **endp, unsigned int base)”h]”(j¢)�”}”(hŒconst char *cp”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj| ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj| ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj| ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj| ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj· h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj| ubj�)�”}”(hŒcp”h]”hŒcp”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj| ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjx ubj¢)�”}”(hŒ char **endp”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÙ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÙ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÙ ubj�)�”}”(hŒendp”h]”hŒendp”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjx ubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj( ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj( ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj( ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj( ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj( ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjx ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj# h²hh³j5 h´K¥ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj h²hh³j5 h´K¥ubah}”(h]”j ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j5 h´K¥hj h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&convert a string to a signed long long”h]”hŒ&convert a string to a signed long long”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K¥hj‹ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj h²hh³j5 h´K¥ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¦ jæj¦ jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX**Parameters** ``const char *cp`` The start of the string ``char **endp`` A pointer to the end of the parsed string will be placed here ``unsigned int base`` The number base to use **Description** This function has caveats. Please use kstrtoll instead.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj° h]”hŒ Parameters”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K©hjª ubj )�”}”(hhh]”(j)�”}”(hŒ+``const char *cp`` The start of the string ”h]”(j)�”}”(hŒ``const char *cp``”h]”j)�”}”(hjÏ h]”hŒconst char *cp”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K¦hjÉ ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe start of the string”h]”hŒThe start of the string”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jä h´K¦hjå ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÉ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jä h´K¦hjÆ ubj)�”}”(hŒN``char **endp`` A pointer to the end of the parsed string will be placed here ”h]”(j)�”}”(hŒ``char **endp``”h]”j)�”}”(hj h]”hŒ char **endp”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K§hj ubj2)�”}”(hhh]”hÝ)�”}”(hŒ=A pointer to the end of the parsed string will be placed here”h]”hŒ=A pointer to the end of the parsed string will be placed here”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´K§hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´K§hjÆ ubj)�”}”(hŒ-``unsigned int base`` The number base to use ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hjA h]”hŒunsigned int base”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj? ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K¨hj; ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe number base to use”h]”hŒThe number base to use”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jV h´K¨hjW ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj; ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jV h´K¨hjÆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjª ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj| h]”hŒ Description”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjz ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Kªhjª ubhÝ)�”}”(hŒ7This function has caveats. Please use kstrtoll instead.”h]”hŒ7This function has caveats. Please use kstrtoll instead.”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´K©hjª ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œvsnprintf (C function)”Œ c.vsnprintf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIint vsnprintf (char *buf, size_t size, const char *fmt_str, va_list args)”h]”j)�”}”(hŒHint vsnprintf(char *buf, size_t size, const char *fmt_str, va_list args)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½ h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½ h²hh³jÏ h´M ubj{)�”}”(hŒ vsnprintf”h]”j�)�”}”(hŒ vsnprintf”h]”hŒ vsnprintf”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞ ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj½ h²hh³jÏ h´M ubjœ)�”}”(hŒ;(char *buf, size_t size, const char *fmt_str, va_list args)”h]”(j¢)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjú ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjú ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjú ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjú ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjö ubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”Œ identifier”Œ reftarget”jE Œmodname”NŒ classname”NŒ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j^ Œ ASTIdentifier”“”)�”}”jY jä sbŒ c.vsnprintf”†”asbuh1hhj< ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj< ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj< ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjö ubj¢)�”}”(hŒconst char *fmt_str”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjŽ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽ ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŽ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjŽ ubj�)�”}”(hŒfmt_str”h]”hŒfmt_str”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjö ubj¢)�”}”(hŒ va_list args”h]”(h)�”}”(hhh]”j�)�”}”(hŒva_list”h]”hŒva_list”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjï ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jô Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jg Œ c.vsnprintf”†”asbuh1hhjë ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjë ubj�)�”}”(hŒargs”h]”hŒargs”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjë ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjö ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj½ h²hh³jÏ h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¹ h²hh³jÏ h´M ubah}”(h]”j´ ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÏ h´M hj¶ h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Format a string and place it in a buffer”h]”hŒ(Format a string and place it in a buffer”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjE h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¶ h²hh³jÏ h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj` jæj` jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX**Parameters** ``char *buf`` The buffer to place the result into ``size_t size`` The size of the buffer, including the trailing null space ``const char *fmt_str`` The format string to use ``va_list args`` Arguments for the format string **Description** This function generally follows C99 vsnprintf, but has some extensions and a few limitations: - ````n```` is unsupported - ````p*```` is handled by pointer() See pointer() or Documentation/core-api/printk-formats.rst for more extensive description. **Please update the documentation in both places when making changes** The return value is the number of characters which would be generated for the given input, excluding the trailing '\0', as per ISO C99. If you want to have the exact number of characters written into **buf** as return value (not including the trailing '\0'), use vscnprintf(). If the return is greater than or equal to **size**, the resulting string is truncated. If you're not already dealing with a va_list consider using snprintf().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjj h]”hŒ Parameters”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjh ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjd ubj )�”}”(hhh]”(j)�”}”(hŒ2``char *buf`` The buffer to place the result into ”h]”(j)�”}”(hŒ ``char *buf``”h]”j)�”}”(hj‰ h]”hŒ char *buf”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjƒ ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The buffer to place the result into”h]”hŒ#The buffer to place the result into”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jž h´M hjŸ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjƒ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jž h´M hj€ ubj)�”}”(hŒJ``size_t size`` The size of the buffer, including the trailing null space ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hj h]”hŒ size_t size”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj¼ ubj2)�”}”(hhh]”hÝ)�”}”(hŒ9The size of the buffer, including the trailing null space”h]”hŒ9The size of the buffer, including the trailing null space”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j× h´M hjØ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¼ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j× h´M hj€ ubj)�”}”(hŒ1``const char *fmt_str`` The format string to use ”h]”(j)�”}”(hŒ``const char *fmt_str``”h]”j)�”}”(hjû h]”hŒconst char *fmt_str”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjù ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjõ ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe format string to use”h]”hŒThe format string to use”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M hj€ ubj)�”}”(hŒ1``va_list args`` Arguments for the format string ”h]”(j)�”}”(hŒ``va_list args``”h]”j)�”}”(hj4h]”hŒ va_list args”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj.ubj2)�”}”(hhh]”hÝ)�”}”(hŒArguments for the format string”h]”hŒArguments for the format string”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jIh´M hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIh´M hj€ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjd ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjoh]”hŒ Description”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjd ubhÝ)�”}”(hŒ]This function generally follows C99 vsnprintf, but has some extensions and a few limitations:”h]”hŒ]This function generally follows C99 vsnprintf, but has some extensions and a few limitations:”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjd ubhŒ block_quote”“”)�”}”(hŒ@- ````n```` is unsupported - ````p*```` is handled by pointer() ”h]”hŒ bullet_list”“”)�”}”(hhh]”(hŒ list_item”“”)�”}”(hŒ````n```` is unsupported”h]”hÝ)�”}”(hj£h]”(j)�”}”(hŒ ````n````”h]”hŒ``n``”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ubhŒ is unsupported”…”�”}”(hj¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjœubj )�”}”(hŒ#````p*```` is handled by pointer() ”h]”hÝ)�”}”(hŒ"````p*```` is handled by pointer()”h]”(j)�”}”(hŒ ````p*````”h]”hŒ``p*``”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubhŒ is handled by pointer()”…”�”}”(hjËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjœubeh}”(h]”h ]”h"]”h$]”h&]”Œbullet”Œ-”uh1jšh³jÀh´M hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÀh´M hjd ubhÝ)�”}”(hŒZSee pointer() or Documentation/core-api/printk-formats.rst for more extensive description.”h]”hŒZSee pointer() or Documentation/core-api/printk-formats.rst for more extensive description.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjd ubhÝ)�”}”(hŒF**Please update the documentation in both places when making changes**”h]”jõ)�”}”(hj h]”hŒBPlease update the documentation in both places when making changes”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M# hjd ubhÝ)�”}”(hXkThe return value is the number of characters which would be generated for the given input, excluding the trailing '\0', as per ISO C99. If you want to have the exact number of characters written into **buf** as return value (not including the trailing '\0'), use vscnprintf(). If the return is greater than or equal to **size**, the resulting string is truncated.”h]”(hŒÌThe return value is the number of characters which would be generated for the given input, excluding the trailing ‘0’, as per ISO C99. If you want to have the exact number of characters written into ”…”�”}”(hj#h²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#ubhŒt as return value (not including the trailing ‘0’), use vscnprintf(). If the return is greater than or equal to ”…”�”}”(hj#h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#ubhŒ$, the resulting string is truncated.”…”�”}”(hj#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M% hjd ubhÝ)�”}”(hŒGIf you're not already dealing with a va_list consider using snprintf().”h]”hŒIIf you’re not already dealing with a va_list consider using snprintf().”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M- hjd ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œvscnprintf (C function)”Œ c.vscnprintf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFint vscnprintf (char *buf, size_t size, const char *fmt, va_list args)”h]”j)�”}”(hŒEint vscnprintf(char *buf, size_t size, const char *fmt, va_list args)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mµ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�h²hh³j“h´Mµ ubj{)�”}”(hŒ vscnprintf”h]”j�)�”}”(hŒ vscnprintf”h]”hŒ vscnprintf”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�h²hh³j“h´Mµ ubjœ)�”}”(hŒ7(char *buf, size_t size, const char *fmt, va_list args)”h]”(j¢)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¾ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjºubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¨sbŒ c.vscnprintf”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjºubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjJubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjºubj¢)�”}”(hŒ va_list args”h]”(h)�”}”(hhh]”j�)�”}”(hŒva_list”h]”hŒva_list”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j°Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j#Œ c.vscnprintf”†”asbuh1hhj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubj�)�”}”(hŒargs”h]”hŒargs”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjºubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�h²hh³j“h´Mµ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj}h²hh³j“h´Mµ ubah}”(h]”jxah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j“h´Mµ hjzh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Format a string and place it in a buffer”h]”hŒ(Format a string and place it in a buffer”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mµ hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjzh²hh³j“h´Mµ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX=**Parameters** ``char *buf`` The buffer to place the result into ``size_t size`` The size of the buffer, including the trailing null space ``const char *fmt`` The format string to use ``va_list args`` Arguments for the format string **Description** The return value is the number of characters which have been written into the **buf** not including the trailing '\0'. If **size** is == 0 the function returns 0. If you're not already dealing with a va_list consider using scnprintf(). See the vsnprintf() documentation for format string extensions over C99.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj&h]”hŒ Parameters”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M¹ hj ubj )�”}”(hhh]”(j)�”}”(hŒ2``char *buf`` The buffer to place the result into ”h]”(j)�”}”(hŒ ``char *buf``”h]”j)�”}”(hjEh]”hŒ char *buf”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M¶ hj?ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The buffer to place the result into”h]”hŒ#The buffer to place the result into”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jZh´M¶ hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZh´M¶ hj<ubj)�”}”(hŒJ``size_t size`` The size of the buffer, including the trailing null space ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hj~h]”hŒ size_t size”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M· hjxubj2)�”}”(hhh]”hÝ)�”}”(hŒ9The size of the buffer, including the trailing null space”h]”hŒ9The size of the buffer, including the trailing null space”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j“h´M· hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j“h´M· hj<ubj)�”}”(hŒ-``const char *fmt`` The format string to use ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hj·h]”hŒconst char *fmt”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M¸ hj±ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe format string to use”h]”hŒThe format string to use”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌh´M¸ hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌh´M¸ hj<ubj)�”}”(hŒ1``va_list args`` Arguments for the format string ”h]”(j)�”}”(hŒ``va_list args``”h]”j)�”}”(hjðh]”hŒ va_list args”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M¹ hjêubj2)�”}”(hhh]”hÝ)�”}”(hŒArguments for the format string”h]”hŒArguments for the format string”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M¹ hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M¹ hj<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj+h]”hŒ Description”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M» hj ubhÝ)�”}”(hŒ¢The return value is the number of characters which have been written into the **buf** not including the trailing '\0'. If **size** is == 0 the function returns 0.”h]”(hŒNThe return value is the number of characters which have been written into the ”…”�”}”(hjAh²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjAubhŒ) not including the trailing ‘0’. If ”…”�”}”(hjAh²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjAubhŒ is == 0 the function returns 0.”…”�”}”(hjAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mº hj ubhÝ)�”}”(hŒHIf you're not already dealing with a va_list consider using scnprintf().”h]”hŒJIf you’re not already dealing with a va_list consider using scnprintf().”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M¾ hj ubhÝ)�”}”(hŒHSee the vsnprintf() documentation for format string extensions over C99.”h]”hŒHSee the vsnprintf() documentation for format string extensions over C99.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÀ hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsnprintf (C function)”Œ c.snprintf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;int snprintf (char *buf, size_t size, const char *fmt, ...)”h]”j)�”}”(hŒ:int snprintf(char *buf, size_t size, const char *fmt, ...)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj®h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÔ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®h²hh³jÀh´MÔ ubj{)�”}”(hŒsnprintf”h]”j�)�”}”(hŒsnprintf”h]”hŒsnprintf”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj®h²hh³jÀh´MÔ ubjœ)�”}”(hŒ.(char *buf, size_t size, const char *fmt, ...)”h]”(j¢)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjëubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjçubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j6Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÕsbŒ c.snprintf”†”asbuh1hhj-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjçubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjwubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjçubj¢)�”}”(hŒ...”h]”jã)�”}”(hŒ...”h]”hŒ...”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjçubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj®h²hh³jÀh´MÔ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjªh²hh³jÀh´MÔ ubah}”(h]”j¥ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÀh´MÔ hj§h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Format a string and place it in a buffer”h]”hŒ(Format a string and place it in a buffer”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÔ hjÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj§h²hh³jÀh´MÔ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX'**Parameters** ``char *buf`` The buffer to place the result into ``size_t size`` The size of the buffer, including the trailing null space ``const char *fmt`` The format string to use ``...`` Arguments for the format string **Description** The return value is the number of characters which would be generated for the given input, excluding the trailing null, as per ISO C99. If the return is greater than or equal to **size**, the resulting string is truncated. See the vsnprintf() documentation for format string extensions over C99.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj$h]”hŒ Parameters”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MØ hjubj )�”}”(hhh]”(j)�”}”(hŒ2``char *buf`` The buffer to place the result into ”h]”(j)�”}”(hŒ ``char *buf``”h]”j)�”}”(hjCh]”hŒ char *buf”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÕ hj=ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The buffer to place the result into”h]”hŒ#The buffer to place the result into”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jXh´MÕ hjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jXh´MÕ hj:ubj)�”}”(hŒJ``size_t size`` The size of the buffer, including the trailing null space ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hj|h]”hŒ size_t size”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÖ hjvubj2)�”}”(hhh]”hÝ)�”}”(hŒ9The size of the buffer, including the trailing null space”h]”hŒ9The size of the buffer, including the trailing null space”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‘h´MÖ hj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‘h´MÖ hj:ubj)�”}”(hŒ-``const char *fmt`` The format string to use ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hjµh]”hŒconst char *fmt”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M× hj¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe format string to use”h]”hŒThe format string to use”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÊh´M× hjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÊh´M× hj:ubj)�”}”(hŒ(``...`` Arguments for the format string ”h]”(j)�”}”(hŒ``...``”h]”j)�”}”(hjîh]”hŒ...”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MØ hjèubj2)�”}”(hhh]”hÝ)�”}”(hŒArguments for the format string”h]”hŒArguments for the format string”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´MØ hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´MØ hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj)h]”hŒ Description”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÚ hjubhÝ)�”}”(hŒßThe return value is the number of characters which would be generated for the given input, excluding the trailing null, as per ISO C99. If the return is greater than or equal to **size**, the resulting string is truncated.”h]”(hŒ³The return value is the number of characters which would be generated for the given input, excluding the trailing null, as per ISO C99. If the return is greater than or equal to ”…”�”}”(hj?h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?ubhŒ$, the resulting string is truncated.”…”�”}”(hj?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÙ hjubhÝ)�”}”(hŒHSee the vsnprintf() documentation for format string extensions over C99.”h]”hŒHSee the vsnprintf() documentation for format string extensions over C99.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÞ hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œscnprintf (C function)”Œ c.scnprintf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hj‹h²hh³j�h´Mï ubj{)�”}”(hŒ scnprintf”h]”j�)�”}”(hŒ scnprintf”h]”hŒ scnprintf”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‹h²hh³j�h´Mï ubjœ)�”}”(hŒ.(char *buf, size_t size, const char *fmt, ...)”h]”(j¢)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÈubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÄubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j²sbŒ c.scnprintf”†”asbuh1hhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÄubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjTubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÄubj¢)�”}”(hŒ...”h]”jã)�”}”(hjÚh]”hŒ...”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj±ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÄubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‹h²hh³j�h´Mï ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‡h²hh³j�h´Mï ubah}”(h]”j‚ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�h´Mï hj„h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Format a string and place it in a buffer”h]”hŒ(Format a string and place it in a buffer”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mï hjÛh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj„h²hh³j�h´Mï ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjöjæjöjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXŒ**Parameters** ``char *buf`` The buffer to place the result into ``size_t size`` The size of the buffer, including the trailing null space ``const char *fmt`` The format string to use ``...`` Arguments for the format string **Description** The return value is the number of characters written into **buf** not including the trailing '\0'. If **size** is == 0 the function returns 0.”•h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mó hjúubj )�”}”(hhh]”(j)�”}”(hŒ2``char *buf`` The buffer to place the result into ”h]”(j)�”}”(hŒ ``char *buf``”h]”j)�”}”(hjh]”hŒ char *buf”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mð hjubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The buffer to place the result into”h]”hŒ#The buffer to place the result into”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j4h´Mð hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4h´Mð hjubj)�”}”(hŒJ``size_t size`` The size of the buffer, including the trailing null space ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjXh]”hŒ size_t size”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mñ hjRubj2)�”}”(hhh]”hÝ)�”}”(hŒ9The size of the buffer, including the trailing null space”h]”hŒ9The size of the buffer, including the trailing null space”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jmh´Mñ hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmh´Mñ hjubj)�”}”(hŒ-``const char *fmt`` The format string to use ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hj‘h]”hŒconst char *fmt”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mò hj‹ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe format string to use”h]”hŒThe format string to use”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¦h´Mò hj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¦h´Mò hjubj)�”}”(hŒ(``...`` Arguments for the format string ”h]”(j)�”}”(hŒ``...``”h]”j)�”}”(hjÊh]”hŒ...”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mó hjÄubj2)�”}”(hhh]”hÝ)�”}”(hŒArguments for the format string”h]”hŒArguments for the format string”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jßh´Mó hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jßh´Mó hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjúubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mõ hjúubhÝ)�”}”(hŒŽThe return value is the number of characters written into **buf** not including the trailing '\0'. If **size** is == 0 the function returns 0.”h]”(hŒ:The return value is the number of characters written into ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ) not including the trailing ‘0’. If ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ is == 0 the function returns 0.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mô hjúubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œvsprintf (C function)”Œ c.vsprintf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7int vsprintf (char *buf, const char *fmt, va_list args)”h]”j)�”}”(hŒ6int vsprintf(char *buf, const char *fmt, va_list args)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjh²hh³j|h´M ubj{)�”}”(hŒvsprintf”h]”j�)�”}”(hŒvsprintf”h]”hŒvsprintf”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjjh²hh³j|h´M ubjœ)�”}”(hŒ*(char *buf, const char *fmt, va_list args)”h]”(j¢)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj§ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£ubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjéubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjéubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjéubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£ubj¢)�”}”(hŒ va_list args”h]”(h)�”}”(hhh]”j�)�”}”(hŒva_list”h]”hŒva_list”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jOŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‘sbŒ c.vsprintf”†”asbuh1hhjFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFubj�)�”}”(hŒargs”h]”hŒargs”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjjh²hh³j|h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjfh²hh³j|h´M ubah}”(h]”jaah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j|h´M hjch²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Format a string and place it in a buffer”h]”hŒ(Format a string and place it in a buffer”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjch²hh³j|h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj½jæj½jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXò**Parameters** ``char *buf`` The buffer to place the result into ``const char *fmt`` The format string to use ``va_list args`` Arguments for the format string **Description** The return value is the number of characters written into **buf** not including the trailing '\0'. Use vsnprintf() or vscnprintf() in order to avoid buffer overflows. If you're not already dealing with a va_list consider using sprintf(). See the vsnprintf() documentation for format string extensions over C99.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÇh]”hŒ Parameters”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjÁubj )�”}”(hhh]”(j)�”}”(hŒ2``char *buf`` The buffer to place the result into ”h]”(j)�”}”(hŒ ``char *buf``”h]”j)�”}”(hjæh]”hŒ char *buf”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjàubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The buffer to place the result into”h]”hŒ#The buffer to place the result into”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jûh´M hjüubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jûh´M hjÝubj)�”}”(hŒ-``const char *fmt`` The format string to use ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hjh]”hŒconst char *fmt”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjubj2)�”}”(hhh]”hÝ)�”}”(hŒThe format string to use”h]”hŒThe format string to use”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j4h´M hj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4h´M hjÝubj)�”}”(hŒ1``va_list args`` Arguments for the format string ”h]”(j)�”}”(hŒ``va_list args``”h]”j)�”}”(hjXh]”hŒ va_list args”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjRubj2)�”}”(hhh]”hÝ)�”}”(hŒArguments for the format string”h]”hŒArguments for the format string”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jmh´M hjnubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmh´M hjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÁubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj“h]”hŒ Description”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjÁubhÝ)�”}”(hŒ¦The return value is the number of characters written into **buf** not including the trailing '\0'. Use vsnprintf() or vscnprintf() in order to avoid buffer overflows.”h]”(hŒ:The return value is the number of characters written into ”…”�”}”(hj©h²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©ubhŒi not including the trailing ‘0’. Use vsnprintf() or vscnprintf() in order to avoid buffer overflows.”…”�”}”(hj©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjÁubhÝ)�”}”(hŒFIf you're not already dealing with a va_list consider using sprintf().”h]”hŒHIf you’re not already dealing with a va_list consider using sprintf().”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjÁubhÝ)�”}”(hŒHSee the vsnprintf() documentation for format string extensions over C99.”h]”hŒHSee the vsnprintf() documentation for format string extensions over C99.”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjÁubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsprintf (C function)”Œ c.sprintf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-int sprintf (char *buf, const char *fmt, ...)”h]”j)�”}”(hŒ,int sprintf(char *buf, const char *fmt, ...)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³jh´M ubj{)�”}”(hŒsprintf”h]”j�)�”}”(hŒsprintf”h]”hŒsprintf”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjh²hh³jh´M ubjœ)�”}”(hŒ!(char *buf, const char *fmt, ...)”h]”(j¢)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjAubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjAubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjAubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=ubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjƒubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=ubj¢)�”}”(hŒ...”h]”jã)�”}”(hjÚh]”hŒ...”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjàubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³jh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³jh´M ubah}”(h]”jûah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´M hjýh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Format a string and place it in a buffer”h]”hŒ(Format a string and place it in a buffer”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjýh²hh³jh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj%jæj%jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXŸ**Parameters** ``char *buf`` The buffer to place the result into ``const char *fmt`` The format string to use ``...`` Arguments for the format string **Description** The return value is the number of characters written into **buf** not including the trailing '\0'. Use snprintf() or scnprintf() in order to avoid buffer overflows. See the vsnprintf() documentation for format string extensions over C99.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj/h]”hŒ Parameters”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj)ubj )�”}”(hhh]”(j)�”}”(hŒ2``char *buf`` The buffer to place the result into ”h]”(j)�”}”(hŒ ``char *buf``”h]”j)�”}”(hjNh]”hŒ char *buf”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjHubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The buffer to place the result into”h]”hŒ#The buffer to place the result into”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jch´M hjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jch´M hjEubj)�”}”(hŒ-``const char *fmt`` The format string to use ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hj‡h]”hŒconst char *fmt”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj�ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe format string to use”h]”hŒThe format string to use”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœh´M hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœh´M hjEubj)�”}”(hŒ(``...`` Arguments for the format string ”h]”(j)�”}”(hŒ``...``”h]”j)�”}”(hjÀh]”hŒ...”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hjºubj2)�”}”(hhh]”hÝ)�”}”(hŒArguments for the format string”h]”hŒArguments for the format string”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÕh´M hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕh´M hjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj)ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjûh]”hŒ Description”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj)ubhÝ)�”}”(hŒ¤The return value is the number of characters written into **buf** not including the trailing '\0'. Use snprintf() or scnprintf() in order to avoid buffer overflows.”h]”(hŒ:The return value is the number of characters written into ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒg not including the trailing ‘0’. Use snprintf() or scnprintf() in order to avoid buffer overflows.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj)ubhÝ)�”}”(hŒHSee the vsnprintf() documentation for format string extensions over C99.”h]”hŒHSee the vsnprintf() documentation for format string extensions over C99.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M# hj)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œvbin_printf (C function)”Œ c.vbin_printf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNint vbin_printf (u32 *bin_buf, size_t size, const char *fmt_str, va_list args)”h]”j)�”}”(hŒMint vbin_printf(u32 *bin_buf, size_t size, const char *fmt_str, va_list args)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj]h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M; ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]h²hh³joh´M; ubj{)�”}”(hŒ vbin_printf”h]”j�)�”}”(hŒ vbin_printf”h]”hŒ vbin_printf”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj]h²hh³joh´M; ubjœ)�”}”(hŒ>(u32 *bin_buf, size_t size, const char *fmt_str, va_list args)”h]”(j¢)�”}”(hŒ u32 *bin_buf”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j£Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j„sbŒ c.vbin_printf”†”asbuh1hhjšubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjšubj�)�”}”(hŒbin_buf”h]”hŒbin_buf”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–ubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”júŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j½Œ c.vbin_printf”†”asbuh1hhjñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–ubj¢)�”}”(hŒconst char *fmt_str”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj9ubj�)�”}”(hŒfmt_str”h]”hŒfmt_str”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–ubj¢)�”}”(hŒ va_list args”h]”(h)�”}”(hhh]”j�)�”}”(hŒva_list”h]”hŒva_list”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŸŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j½Œ c.vbin_printf”†”asbuh1hhj–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–ubj�)�”}”(hŒargs”h]”hŒargs”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj]h²hh³joh´M; ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjYh²hh³joh´M; ubah}”(h]”jTah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³joh´M; hjVh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ>Parse a format string and place args' binary value in a buffer”h]”hŒ@Parse a format string and place args’ binary value in a buffer”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M; hjðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjVh²hh³joh´M; ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj jæj jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX5**Parameters** ``u32 *bin_buf`` The buffer to place args' binary value ``size_t size`` The size of the buffer(by words(32bits), not characters) ``const char *fmt_str`` The format string to use ``va_list args`` Arguments for the format string **Description** The format follows C99 vsnprintf, except ``n`` is ignored, and its argument is skipped. The return value is the number of words(32bits) which would be generated for the given input. **NOTE** If the return value is greater than **size**, the resulting bin_buf is NOT valid for bstr_printf().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M? hjubj )�”}”(hhh]”(j)�”}”(hŒ8``u32 *bin_buf`` The buffer to place args' binary value ”h]”(j)�”}”(hŒ``u32 *bin_buf``”h]”j)�”}”(hj4h]”hŒ u32 *bin_buf”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M< hj.ubj2)�”}”(hhh]”hÝ)�”}”(hŒ&The buffer to place args' binary value”h]”hŒ(The buffer to place args’ binary value”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jIh´M< hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIh´M< hj+ubj)�”}”(hŒI``size_t size`` The size of the buffer(by words(32bits), not characters) ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjmh]”hŒ size_t size”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M= hjgubj2)�”}”(hhh]”hÝ)�”}”(hŒ8The size of the buffer(by words(32bits), not characters)”h]”hŒ8The size of the buffer(by words(32bits), not characters)”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚h´M= hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚h´M= hj+ubj)�”}”(hŒ1``const char *fmt_str`` The format string to use ”h]”(j)�”}”(hŒ``const char *fmt_str``”h]”j)�”}”(hj¦h]”hŒconst char *fmt_str”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M> hj ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe format string to use”h]”hŒThe format string to use”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»h´M> hj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»h´M> hj+ubj)�”}”(hŒ1``va_list args`` Arguments for the format string ”h]”(j)�”}”(hŒ``va_list args``”h]”j)�”}”(hjßh]”hŒ va_list args”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M? hjÙubj2)�”}”(hhh]”hÝ)�”}”(hŒArguments for the format string”h]”hŒArguments for the format string”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jôh´M? hjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jôh´M? hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MA hjubhÝ)�”}”(hŒWThe format follows C99 vsnprintf, except ``n`` is ignored, and its argument is skipped.”h]”(hŒ)The format follows C99 vsnprintf, except ”…”�”}”(hj0 h²hh³Nh´Nubj)�”}”(hŒ``n``”h]”hŒn”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0 ubhŒ) is ignored, and its argument is skipped.”…”�”}”(hj0 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M@ hjubhÝ)�”}”(hŒ]The return value is the number of words(32bits) which would be generated for the given input.”h]”hŒ]The return value is the number of words(32bits) which would be generated for the given input.”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MC hjubhÝ)�”}”(hŒ**NOTE**”h]”jõ)�”}”(hjb h]”hŒNOTE”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj` ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MF hjubhÝ)�”}”(hŒcIf the return value is greater than **size**, the resulting bin_buf is NOT valid for bstr_printf().”h]”(hŒ$If the return value is greater than ”…”�”}”(hjx h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx ubhŒ7, the resulting bin_buf is NOT valid for bstr_printf().”…”�”}”(hjx h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MG hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbstr_printf (C function)”Œ c.bstr_printf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒQint bstr_printf (char *buf, size_t size, const char *fmt_str, const u32 *bin_buf)”h]”j)�”}”(hŒPint bstr_printf(char *buf, size_t size, const char *fmt_str, const u32 *bin_buf)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjµ h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµ h²hh³jÇ h´M ubj{)�”}”(hŒ bstr_printf”h]”j�)�”}”(hŒ bstr_printf”h]”hŒ bstr_printf”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖ ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjµ h²hh³jÇ h´M ubjœ)�”}”(hŒA(char *buf, size_t size, const char *fmt_str, const u32 *bin_buf)”h]”(j¢)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjò ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjò ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjò ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî ubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj;!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j=!Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÜ sbŒ c.bstr_printf”†”asbuh1hhj4!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4!ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hji!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî ubj¢)�”}”(hŒconst char *fmt_str”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj‚!h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj~!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~!ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj�!h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~!ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¹!h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj~!ubj�)�”}”(hŒfmt_str”h]”hŒfmt_str”…”�”}”(hjÆ!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî ubj¢)�”}”(hŒconst u32 *bin_buf”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjß!h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÛ!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ!ubh)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjý!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjú!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÿ!Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jW!Œ c.bstr_printf”†”asbuh1hhjÛ!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ!ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj)"h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÛ!ubj�)�”}”(hŒbin_buf”h]”hŒbin_buf”…”�”}”(hj6"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjµ h²hh³jÇ h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj± h²hh³jÇ h´M ubah}”(h]”j¬ ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÇ h´M hj® h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ>Format a string from binary arguments and place it in a buffer”h]”hŒ>Format a string from binary arguments and place it in a buffer”…”�”}”(hj`"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M hj]"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj® h²hh³jÇ h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjx"jæjx"jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX®**Parameters** ``char *buf`` The buffer to place the result into ``size_t size`` The size of the buffer, including the trailing null space ``const char *fmt_str`` The format string to use ``const u32 *bin_buf`` Binary arguments for the format string **Description** This function like C99 vsnprintf, but the difference is that vsnprintf gets arguments from stack, and bstr_printf gets arguments from **bin_buf** which is a binary buffer that generated by vbin_printf. The format follows C99 vsnprintf, but has some extensions: see vsnprintf comment for details. The return value is the number of characters which would be generated for the given input, excluding the trailing '\0', as per ISO C99. If you want to have the exact number of characters written into **buf** as return value (not including the trailing '\0'), use vscnprintf(). If the return is greater than or equal to **size**, the resulting string is truncated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‚"h]”hŒ Parameters”…”�”}”(hj„"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÆ hj|"ubj )�”}”(hhh]”(j)�”}”(hŒ2``char *buf`` The buffer to place the result into ”h]”(j)�”}”(hŒ ``char *buf``”h]”j)�”}”(hj¡"h]”hŒ char *buf”…”�”}”(hj£"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mà hj›"ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The buffer to place the result into”h]”hŒ#The buffer to place the result into”…”�”}”(hjº"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶"h´Mà hj·"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶"h´Mà hj˜"ubj)�”}”(hŒJ``size_t size`` The size of the buffer, including the trailing null space ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjÚ"h]”hŒ size_t size”…”�”}”(hjÜ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÄ hjÔ"ubj2)�”}”(hhh]”hÝ)�”}”(hŒ9The size of the buffer, including the trailing null space”h]”hŒ9The size of the buffer, including the trailing null space”…”�”}”(hjó"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jï"h´MÄ hjð"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔ"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jï"h´MÄ hj˜"ubj)�”}”(hŒ1``const char *fmt_str`` The format string to use ”h]”(j)�”}”(hŒ``const char *fmt_str``”h]”j)�”}”(hj#h]”hŒconst char *fmt_str”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÅ hj #ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe format string to use”h]”hŒThe format string to use”…”�”}”(hj,#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(#h´MÅ hj)#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj #ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(#h´MÅ hj˜"ubj)�”}”(hŒ>``const u32 *bin_buf`` Binary arguments for the format string ”h]”(j)�”}”(hŒ``const u32 *bin_buf``”h]”j)�”}”(hjL#h]”hŒconst u32 *bin_buf”…”�”}”(hjN#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÆ hjF#ubj2)�”}”(hhh]”hÝ)�”}”(hŒ&Binary arguments for the format string”h]”hŒ&Binary arguments for the format string”…”�”}”(hje#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ja#h´MÆ hjb#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjF#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ja#h´MÆ hj˜"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj|"ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‡#h]”hŒ Description”…”�”}”(hj‰#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÈ hj|"ubhÝ)�”}”(hŒÉThis function like C99 vsnprintf, but the difference is that vsnprintf gets arguments from stack, and bstr_printf gets arguments from **bin_buf** which is a binary buffer that generated by vbin_printf.”h]”(hŒ†This function like C99 vsnprintf, but the difference is that vsnprintf gets arguments from stack, and bstr_printf gets arguments from ”…”�”}”(hj�#h²hh³Nh´Nubjõ)�”}”(hŒ **bin_buf**”h]”hŒbin_buf”…”�”}”(hj¥#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�#ubhŒ8 which is a binary buffer that generated by vbin_printf.”…”�”}”(hj�#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÇ hj|"ubj )�”}”(hhh]”j)�”}”(hŒ^The format follows C99 vsnprintf, but has some extensions: see vsnprintf comment for details. ”h]”(j)�”}”(hŒ:The format follows C99 vsnprintf, but has some extensions:”h]”hŒ:The format follows C99 vsnprintf, but has some extensions:”…”�”}”(hjÅ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÌ hjÁ#ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"see vsnprintf comment for details.”h]”hŒ"see vsnprintf comment for details.”…”�”}”(hj×#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÓ#h´MÌ hjÔ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÁ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓ#h´MÌ hj¾#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj|"ubhÝ)�”}”(hXkThe return value is the number of characters which would be generated for the given input, excluding the trailing '\0', as per ISO C99. If you want to have the exact number of characters written into **buf** as return value (not including the trailing '\0'), use vscnprintf(). If the return is greater than or equal to **size**, the resulting string is truncated.”h]”(hŒÌThe return value is the number of characters which would be generated for the given input, excluding the trailing ‘0’, as per ISO C99. If you want to have the exact number of characters written into ”…”�”}”(hj÷#h²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjÿ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷#ubhŒt as return value (not including the trailing ‘0’), use vscnprintf(). If the return is greater than or equal to ”…”�”}”(hj÷#h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷#ubhŒ$, the resulting string is truncated.”…”�”}”(hj÷#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´MÎ hj|"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œvsscanf (C function)”Œ c.vsscanf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjF$h²hh³jX$h´M� ubj{)�”}”(hŒvsscanf”h]”j�)�”}”(hŒvsscanf”h]”hŒvsscanf”…”�”}”(hjk$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjg$ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjF$h²hh³jX$h´M� ubjœ)�”}”(hŒ0(const char *buf, const char *fmt, va_list args)”h]”(j¢)�”}”(hŒconst char *buf”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj‡$h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjƒ$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ$ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¢$h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjƒ$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ$ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¾$h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjƒ$ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjË$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$ubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjä$h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjà$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjà$ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÿ$h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjà$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjà$ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjà$ubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hj(%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjà$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$ubj¢)�”}”(hŒ va_list args”h]”(h)�”}”(hhh]”j�)�”}”(hŒva_list”h]”hŒva_list”…”�”}”(hjD%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjA%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jF%Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jm$sbŒ c.vsscanf”†”asbuh1hhj=%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj=%ubj�)�”}”(hŒargs”h]”hŒargs”…”�”}”(hjr%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj=%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjF$h²hh³jX$h´M� ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjB$h²hh³jX$h´M� ubah}”(h]”j=$ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jX$h´M� hj?$h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Unformat a buffer into a list of arguments”h]”hŒ*Unformat a buffer into a list of arguments”…”�”}”(hjœ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M� hj™%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj?$h²hh³jX$h´M� ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj´%jæj´%jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hŒx**Parameters** ``const char *buf`` input buffer ``const char *fmt`` format of buffer ``va_list args`` arguments”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾%h]”hŒ Parameters”…”�”}”(hjÀ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M… hj¸%ubj )�”}”(hhh]”(j)�”}”(hŒ!``const char *buf`` input buffer ”h]”(j)�”}”(hŒ``const char *buf``”h]”j)�”}”(hjÝ%h]”hŒconst char *buf”…”�”}”(hjß%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M‚ hj×%ubj2)�”}”(hhh]”hÝ)�”}”(hŒ input buffer”h]”hŒ input buffer”…”�”}”(hjö%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jò%h´M‚ hjó%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj×%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jò%h´M‚ hjÔ%ubj)�”}”(hŒ%``const char *fmt`` format of buffer ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hj&h]”hŒconst char *fmt”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mƒ hj&ubj2)�”}”(hhh]”hÝ)�”}”(hŒformat of buffer”h]”hŒformat of buffer”…”�”}”(hj/&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+&h´Mƒ hj,&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+&h´Mƒ hjÔ%ubj)�”}”(hŒ``va_list args`` arguments”h]”(j)�”}”(hŒ``va_list args``”h]”j)�”}”(hjO&h]”hŒ va_list args”…”�”}”(hjQ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjM&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M… hjI&ubj2)�”}”(hhh]”hÝ)�”}”(hŒ arguments”h]”hŒ arguments”…”�”}”(hjh&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M„ hje&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjI&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jd&h´M… hjÔ%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¸%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsscanf (C function)”Œc.sscanf”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2int sscanf (const char *buf, const char *fmt, ...)”h]”j)�”}”(hŒ1int sscanf(const char *buf, const char *fmt, ...)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj©&h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¥&h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥&h²hh³j·&h´M–ubj{)�”}”(hŒsscanf”h]”j�)�”}”(hŒsscanf”h]”hŒsscanf”…”�”}”(hjÊ&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆ&ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¥&h²hh³j·&h´M–ubjœ)�”}”(hŒ'(const char *buf, const char *fmt, ...)”h]”(j¢)�”}”(hŒconst char *buf”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjæ&h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjâ&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâ&ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjâ&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâ&ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâ&ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj*'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâ&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞ&ubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjC'h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj?'ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP'h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?'ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj^'h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?'ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl'h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?'ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjz'h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj?'ubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hj‡'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞ&ubj¢)�”}”(hŒ...”h]”jã)�”}”(hjÚh]”hŒ...”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjœ'ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞ&ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¥&h²hh³j·&h´M–ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¡&h²hh³j·&h´M–ubah}”(h]”jœ&ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j·&h´M–hjž&h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Unformat a buffer into a list of arguments”h]”hŒ*Unformat a buffer into a list of arguments”…”�”}”(hjÉ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M–hjÆ'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjž&h²hh³j·&h´M–ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjá'jæjá'jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hŒ}**Parameters** ``const char *buf`` input buffer ``const char *fmt`` formatting of buffer ``...`` resulting arguments”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjë'h]”hŒ Parameters”…”�”}”(hjí'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mšhjå'ubj )�”}”(hhh]”(j)�”}”(hŒ!``const char *buf`` input buffer ”h]”(j)�”}”(hŒ``const char *buf``”h]”j)�”}”(hj (h]”hŒconst char *buf”…”�”}”(hj (h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M—hj(ubj2)�”}”(hhh]”hÝ)�”}”(hŒ input buffer”h]”hŒ input buffer”…”�”}”(hj#(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(h´M—hj (ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(h´M—hj(ubj)�”}”(hŒ)``const char *fmt`` formatting of buffer ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hjC(h]”hŒconst char *fmt”…”�”}”(hjE(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjA(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M˜hj=(ubj2)�”}”(hhh]”hÝ)�”}”(hŒformatting of buffer”h]”hŒformatting of buffer”…”�”}”(hj\(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jX(h´M˜hjY(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jX(h´M˜hj(ubj)�”}”(hŒ``...`` resulting arguments”h]”(j)�”}”(hŒ``...``”h]”j)�”}”(hj|(h]”hŒ...”…”�”}”(hj~(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjz(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´Mšhjv(ubj2)�”}”(hhh]”hÝ)�”}”(hŒresulting arguments”h]”hŒresulting arguments”…”�”}”(hj•(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:18: ./lib/vsprintf.c”h´M™hj’(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjv(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‘(h´Mšhj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjå'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrtoul (C function)”Œ c.kstrtoul”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCint kstrtoul (const char *s, unsigned int base, unsigned long *res)”h]”j)�”}”(hŒBint kstrtoul(const char *s, unsigned int base, unsigned long *res)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÖ(h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÒ(h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒ(h²hh³jä(h´Kubj{)�”}”(hŒkstrtoul”h]”j�)�”}”(hŒkstrtoul”h]”hŒkstrtoul”…”�”}”(hj÷(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjó(ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÒ(h²hh³jä(h´Kubjœ)�”}”(hŒ6(const char *s, unsigned int base, unsigned long *res)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj )h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj.)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjJ)h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj)ubj�)�”}”(hŒs”h]”hŒs”…”�”}”(hjW)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj )ubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjp)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjl)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl)ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjŒ)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjl)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl)ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hj¨)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj )ubj¢)�”}”(hŒunsigned long *res”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÁ)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½)ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÝ)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½)ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjù)h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj½)ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj )ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÒ(h²hh³jä(h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÎ(h²hh³jä(h´Kubah}”(h]”jÉ(ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jä(h´KhjË(h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$convert a string to an unsigned long”h]”hŒ$convert a string to an unsigned long”…”�”}”(hj0*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´Khj-*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjË(h²hh³jä(h´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjH*jæjH*jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXa**Parameters** ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign. ``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ``unsigned long *res`` Where to write the result of the conversion on success. **Description** Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoul(). Return code must be checked.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjR*h]”hŒ Parameters”…”�”}”(hjT*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjP*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´KhjL*ubj )�”}”(hhh]”(j)�”}”(hŒÕ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign. ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hjq*h]”hŒ const char *s”…”�”}”(hjs*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´Khjk*ubj2)�”}”(hhh]”hÝ)�”}”(hŒÂThe start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign.”h]”hŒÂThe start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign.”…”�”}”(hjŠ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´Khj‡*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjk*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†*h´Khjh*ubj)�”}”(hX‚``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hj«*h]”hŒunsigned int base”…”�”}”(hj­*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´Khj¥*ubj2)�”}”(hhh]”hÝ)�”}”(hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”h]”hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”…”�”}”(hjÄ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´KhjÁ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¥*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÀ*h´Khjh*ubj)�”}”(hŒO``unsigned long *res`` Where to write the result of the conversion on success. ”h]”(j)�”}”(hŒ``unsigned long *res``”h]”j)�”}”(hjå*h]”hŒunsigned long *res”…”�”}”(hjç*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjã*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´Khjß*ubj2)�”}”(hhh]”hÝ)�”}”(hŒ7Where to write the result of the conversion on success.”h]”hŒ7Where to write the result of the conversion on success.”…”�”}”(hjþ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jú*h´Khjû*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjß*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jú*h´Khjh*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjL*ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj +h]”hŒ Description”…”�”}”(hj"+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´KhjL*ubhÝ)�”}”(hŒ…Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoul(). Return code must be checked.”h]”hŒ…Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoul(). Return code must be checked.”…”�”}”(hj6+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´KhjL*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrtol (C function)”Œ c.kstrtol”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9int kstrtol (const char *s, unsigned int base, long *res)”h]”j)�”}”(hŒ8int kstrtol(const char *s, unsigned int base, long *res)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hje+h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhja+h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hja+h²hh³js+h´K,ubj{)�”}”(hŒkstrtol”h]”j�)�”}”(hŒkstrtol”h]”hŒkstrtol”…”�”}”(hj†+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚+ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhja+h²hh³js+h´K,ubjœ)�”}”(hŒ-(const char *s, unsigned int base, long *res)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¢+h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjž+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž+ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj½+h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjž+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž+ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÙ+h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjž+ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjæ+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjž+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjš+ubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjþ+h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjú+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjú+ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjú+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjú+ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hj6,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjú+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjš+ubj¢)�”}”(hŒ long *res”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjO,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjK,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj],h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjK,ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjk,h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjK,ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hjx,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjK,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjš+ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hja+h²hh³js+h´K,ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj]+h²hh³js+h´K,ubah}”(h]”jX+ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³js+h´K,hjZ+h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒconvert a string to a long”h]”hŒconvert a string to a long”…”�”}”(hj¢,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K,hjŸ,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjZ+h²hh³js+h´K,ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjº,jæjº,jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXQ**Parameters** ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. ``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ``long *res`` Where to write the result of the conversion on success. **Description** Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtol(). Return code must be checked.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÄ,h]”hŒ Parameters”…”�”}”(hjÆ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”•>h&]”uh1jôhjÂ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K0hj¾,ubj )�”}”(hhh]”(j)�”}”(hŒÏ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hjã,h]”hŒ const char *s”…”�”}”(hjå,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjá,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K/hjÝ,ubj2)�”}”(hhh]”hÝ)�”}”(hŒ¼The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign.”h]”hŒ¼The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign.”…”�”}”(hjü,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K-hjù,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÝ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jø,h´K/hjÚ,ubj)�”}”(hX‚``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hj-h]”hŒunsigned int base”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K4hj-ubj2)�”}”(hhh]”hÝ)�”}”(hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”h]”hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”…”�”}”(hj6-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K0hj3-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2-h´K4hjÚ,ubj)�”}”(hŒF``long *res`` Where to write the result of the conversion on success. ”h]”(j)�”}”(hŒ ``long *res``”h]”j)�”}”(hjW-h]”hŒ long *res”…”�”}”(hjY-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjU-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K5hjQ-ubj2)�”}”(hhh]”hÝ)�”}”(hŒ7Where to write the result of the conversion on success.”h]”hŒ7Where to write the result of the conversion on success.”…”�”}”(hjp-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jl-h´K5hjm-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jl-h´K5hjÚ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¾,ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj’-h]”hŒ Description”…”�”}”(hj”-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K7hj¾,ubhÝ)�”}”(hŒ„Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtol(). Return code must be checked.”h]”hŒ„Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtol(). Return code must be checked.”…”�”}”(hj¨-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:21: ./include/linux/kstrtox.h”h´K6hj¾,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrtoull (C function)”Œ c.kstrtoull”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIint kstrtoull (const char *s, unsigned int base, unsigned long long *res)”h]”j)�”}”(hŒHint kstrtoull(const char *s, unsigned int base, unsigned long long *res)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj×-h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÓ-h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Kxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ-h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÓ-h²hh³jå-h´Kxubj{)�”}”(hŒ kstrtoull”h]”j�)�”}”(hŒ kstrtoull”h]”hŒ kstrtoull”…”�”}”(hjø-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô-ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÓ-h²hh³jå-h´Kxubjœ)�”}”(hŒ;(const char *s, unsigned int base, unsigned long long *res)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj/.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjK.h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj.ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjX.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj .ubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjp.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjl.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl.ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjŒ.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjl.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl.ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hj¨.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj .ubj¢)�”}”(hŒunsigned long long *res”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÁ.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½.ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÝ.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½.ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjù.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½.ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj½.ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hj"/h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj .ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÓ-h²hh³jå-h´Kxubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÏ-h²hh³jå-h´Kxubah}”(h]”jÊ-ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jå-h´KxhjÌ-h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)convert a string to an unsigned long long”h]”hŒ)convert a string to an unsigned long long”…”�”}”(hjL/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´KxhjI/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÌ-h²hh³jå-h´Kxubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjd/jæjd/jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXg**Parameters** ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign. ``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ``unsigned long long *res`` Where to write the result of the conversion on success. **Description** Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoull(). Return code must be checked.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjn/h]”hŒ Parameters”…”�”}”(hjp/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjl/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K|hjh/ubj )�”}”(hhh]”(j)�”}”(hŒÕ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign. ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hj�/h]”hŒ const char *s”…”�”}”(hj�/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K{hj‡/ubj2)�”}”(hhh]”hÝ)�”}”(hŒÂThe start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign.”h]”hŒÂThe start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign.”…”�”}”(hj¦/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Kyhj£/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‡/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¢/h´K{hj„/ubj)�”}”(hX‚``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hjÇ/h]”hŒunsigned int base”…”�”}”(hjÉ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K€hjÁ/ubj2)�”}”(hhh]”hÝ)�”}”(hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”h]”hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”…”�”}”(hjà/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K|hjÝ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÁ/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÜ/h´K€hj„/ubj)�”}”(hŒT``unsigned long long *res`` Where to write the result of the conversion on success. ”h]”(j)�”}”(hŒ``unsigned long long *res``”h]”j)�”}”(hj0h]”hŒunsigned long long *res”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K�hjû/ubj2)�”}”(hhh]”hÝ)�”}”(hŒ7Where to write the result of the conversion on success.”h]”hŒ7Where to write the result of the conversion on success.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0h´K�hj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjû/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0h´K�hj„/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjh/ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj<0h]”hŒ Description”…”�”}”(hj>0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Kƒhjh/ubhÝ)�”}”(hŒ†Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoull(). Return code must be checked.”h]”hŒ†Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoull(). Return code must be checked.”…”�”}”(hjR0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K‚hjh/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrtoll (C function)”Œ c.kstrtoll”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ?int kstrtoll (const char *s, unsigned int base, long long *res)”h]”j)�”}”(hŒ>int kstrtoll(const char *s, unsigned int base, long long *res)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj}0h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}0h²hh³j�0h´K�ubj{)�”}”(hŒkstrtoll”h]”j�)�”}”(hŒkstrtoll”h]”hŒkstrtoll”…”�”}”(hj¢0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjž0ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj}0h²hh³j�0h´K�ubjœ)�”}”(hŒ2(const char *s, unsigned int base, long long *res)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¾0h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjº0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjº0ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÙ0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjº0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjº0ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjõ0h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjº0ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjº0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶0ubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj61h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hjR1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶0ubj¢)�”}”(hŒlong long *res”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjk1h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjg1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjg1ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‡1h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjg1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjg1ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj£1h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjg1ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hj°1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjg1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj}0h²hh³j�0h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjy0h²hh³j�0h´K�ubah}”(h]”jt0ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�0h´K�hjv0h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒconvert a string to a long long”h]”hŒconvert a string to a long long”…”�”}”(hjÚ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K�hj×1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjv0h²hh³j�0h´K�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjò1jæjò1jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXW**Parameters** ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. ``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ``long long *res`` Where to write the result of the conversion on success. **Description** Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoll(). Return code must be checked.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjü1h]”hŒ Parameters”…”�”}”(hjþ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjú1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K”hjö1ubj )�”}”(hhh]”(j)�”}”(hŒÏ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hj2h]”hŒ const char *s”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K“hj2ubj2)�”}”(hhh]”hÝ)�”}”(hŒ¼The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign.”h]”hŒ¼The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign.”…”�”}”(hj42h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K‘hj12ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j02h´K“hj2ubj)�”}”(hX‚``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hjU2h]”hŒunsigned int base”…”�”}”(hjW2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjS2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K˜hjO2ubj2)�”}”(hhh]”hÝ)�”}”(hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”h]”hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”…”�”}”(hjn2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K”hjk2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjO2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jj2h´K˜hj2ubj)�”}”(hŒK``long long *res`` Where to write the result of the conversion on success. ”h]”(j)�”}”(hŒ``long long *res``”h]”j)�”}”(hj�2h]”hŒlong long *res”…”�”}”(hj‘2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K™hj‰2ubj2)�”}”(hhh]”hÝ)�”}”(hŒ7Where to write the result of the conversion on success.”h]”hŒ7Where to write the result of the conversion on success.”…”�”}”(hj¨2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤2h´K™hj¥2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤2h´K™hj2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjö1ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÊ2h]”hŒ Description”…”�”}”(hjÌ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K›hjö1ubhÝ)�”}”(hŒ…Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoll(). Return code must be checked.”h]”hŒ…Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoll(). Return code must be checked.”…”�”}”(hjà2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Kšhjö1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrtouint (C function)”Œ c.kstrtouint”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDint kstrtouint (const char *s, unsigned int base, unsigned int *res)”h]”j)�”}”(hŒCint kstrtouint(const char *s, unsigned int base, unsigned int *res)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj 3h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´KØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj 3h²hh³j3h´KØubj{)�”}”(hŒ kstrtouint”h]”j�)�”}”(hŒ kstrtouint”h]”hŒ kstrtouint”…”�”}”(hj03h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,3ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj 3h²hh³j3h´KØubjœ)�”}”(hŒ5(const char *s, unsigned int base, unsigned int *res)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjL3h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjH3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH3ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjg3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjH3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH3ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒ3h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH3ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj�3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjH3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjD3ubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¨3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤3ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÄ3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤3ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hjà3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjD3ubj¢)�”}”(hŒunsigned int *res”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjù3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjõ3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõ3ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjõ3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõ3ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj14h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjõ3ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hj>4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõ3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjD3ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj 3h²hh³j3h´KØubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj3h²hh³j3h´KØubah}”(h]”j3ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j3h´KØhj3h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#convert a string to an unsigned int”h]”hŒ#convert a string to an unsigned int”…”�”}”(hjh4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´KØhje4h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj3h²hh³j3h´KØubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj€4jæj€4jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX`**Parameters** ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign. ``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ``unsigned int *res`` Where to write the result of the conversion on success. **Description** Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoul(). Return code must be checked.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŠ4h]”hŒ Parameters”…”�”}”(hjŒ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´KÜhj„4ubj )�”}”(hhh]”(j)�”}”(hŒÕ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign. ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hj©4h]”hŒ const char *s”…”�”}”(hj«4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´KÛhj£4ubj2)�”}”(hhh]”hÝ)�”}”(hŒÂThe start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign.”h]”hŒÂThe start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign, but not a minus sign.”…”�”}”(hjÂ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´KÙhj¿4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾4h´KÛhj 4ubj)�”}”(hX‚``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hjã4h]”hŒunsigned int base”…”�”}”(hjå4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjá4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´KàhjÝ4ubj2)�”}”(hhh]”hÝ)�”}”(hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”h]”hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”…”�”}”(hjü4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´KÜhjù4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÝ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jø4h´Kàhj 4ubj)�”}”(hŒN``unsigned int *res`` Where to write the result of the conversion on success. ”h]”(j)�”}”(hŒ``unsigned int *res``”h]”j)�”}”(hj5h]”hŒunsigned int *res”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Káhj5ubj2)�”}”(hhh]”hÝ)�”}”(hŒ7Where to write the result of the conversion on success.”h]”hŒ7Where to write the result of the conversion on success.”…”�”}”(hj65h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j25h´Káhj35ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j25h´Káhj 4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj„4ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjX5h]”hŒ Description”…”�”}”(hjZ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjV5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Kãhj„4ubhÝ)�”}”(hŒ…Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoul(). Return code must be checked.”h]”hŒ…Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtoul(). Return code must be checked.”…”�”}”(hjn5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Kâhj„4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrtoint (C function)”Œ c.kstrtoint”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:int kstrtoint (const char *s, unsigned int base, int *res)”h]”j)�”}”(hŒ9int kstrtoint(const char *s, unsigned int base, int *res)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj�5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj™5h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™5h²hh³j«5h´K÷ubj{)�”}”(hŒ kstrtoint”h]”j�)�”}”(hŒ kstrtoint”h]”hŒ kstrtoint”…”�”}”(hj¾5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjº5ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj™5h²hh³j«5h´K÷ubjœ)�”}”(hŒ,(const char *s, unsigned int base, int *res)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÚ5h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÖ5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖ5ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjõ5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÖ5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖ5ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÖ5ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖ5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÒ5ubj¢)�”}”(hŒunsigned int base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj66h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj26ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj26ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjR6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj26ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj26ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hjn6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj26ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÒ5ubj¢)�”}”(hŒint *res”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj‡6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjƒ6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ6ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj£6h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjƒ6ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hj°6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÒ5ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj™5h²hh³j«5h´K÷ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj•5h²hh³j«5h´K÷ubah}”(h]”j�5ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j«5h´K÷hj’5h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒconvert a string to an int”h]”hŒconvert a string to an int”…”�”}”(hjÚ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´K÷hj×6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj’5h²hh³j«5h´K÷ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjò6jæjò6jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXP**Parameters** ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. ``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ``int *res`` Where to write the result of the conversion on success. **Description** Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtol(). Return code must be checked.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjü6h]”hŒ Parameters”…”�”}”(hjþ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjú6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Kûhjö6ubj )�”}”(hhh]”(j)�”}”(hŒÏ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hj7h]”hŒ const char *s”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Kúhj7ubj2)�”}”(hhh]”hÝ)�”}”(hŒ¼The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign.”h]”hŒ¼The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign.”…”�”}”(hj47h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Køhj17ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j07h´Kúhj7ubj)�”}”(hX‚``unsigned int base`` The number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal. ”h]”(j)�”}”(hŒ``unsigned int base``”h]”j)�”}”(hjU7h]”hŒunsigned int base”…”�”}”(hjW7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjS7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´KÿhjO7ubj2)�”}”(hhh]”hÝ)�”}”(hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”h]”hXkThe number base to use. The maximum supported base is 16. If base is given as 0, then the base of the string is automatically detected with the conventional semantics - If it begins with 0x the number will be parsed as a hexadecimal (case insensitive), if it otherwise begins with 0, it will be parsed as an octal number. Otherwise it will be parsed as a decimal.”…”�”}”(hjn7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Kûhjk7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjO7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jj7h´Kÿhj7ubj)�”}”(hŒE``int *res`` Where to write the result of the conversion on success. ”h]”(j)�”}”(hŒ ``int *res``”h]”j)�”}”(hj�7h]”hŒint *res”…”�”}”(hj‘7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Mhj‰7ubj2)�”}”(hhh]”hÝ)�”}”(hŒ7Where to write the result of the conversion on success.”h]”hŒ7Where to write the result of the conversion on success.”…”�”}”(hj¨7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤7h´Mhj¥7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤7h´Mhj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjö6ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÊ7h]”hŒ Description”…”�”}”(hjÌ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈ7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Mhjö6ubhÝ)�”}”(hŒ„Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtol(). Return code must be checked.”h]”hŒ„Returns 0 on success, -ERANGE on overflow and -EINVAL on parsing error. Preferred over simple_strtol(). Return code must be checked.”…”�”}”(hjà7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´Mhjö6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrtobool (C function)”Œ c.kstrtobool”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)int kstrtobool (const char *s, bool *res)”h]”j)�”}”(hŒ(int kstrtobool(const char *s, bool *res)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj 8h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj 8h²hh³j8h´MVubj{)�”}”(hŒ kstrtobool”h]”j�)�”}”(hŒ kstrtobool”h]”hŒ kstrtobool”…”�”}”(hj08h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,8ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj 8h²hh³j8h´MVubjœ)�”}”(hŒ(const char *s, bool *res)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjL8h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjH8ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH8ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjg8h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjH8ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH8ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒ8h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH8ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj�8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjH8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjD8ubj¢)�”}”(hŒ bool *res”h]”(j )�”}”(hŒbool”h]”hŒbool”…”�”}”(hj¨8h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤8ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤8ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÄ8h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¤8ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hjÑ8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjD8ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj 8h²hh³j8h´MVubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj8h²hh³j8h´MVubah}”(h]”j8ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j8h´MVhj8h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.convert common user inputs into boolean values”h]”hŒ.convert common user inputs into boolean values”…”�”}”(hjû8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MVhjø8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj8h²hh³j8h´MVubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj9jæj9jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX#**Parameters** ``const char *s`` input string ``bool *res`` result **Description** This routine returns 0 iff the first character is one of 'EeYyTt1DdNnFf0', or [oO][NnFf] for "on" and "off". Otherwise it will return -EINVAL. Value pointed to by res is updated upon finding a match.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj9h]”hŒ Parameters”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MZhj9ubj )�”}”(hhh]”(j)�”}”(hŒ``const char *s`` input string ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hj<9h]”hŒ const char *s”…”�”}”(hj>9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MWhj69ubj2)�”}”(hhh]”hÝ)�”}”(hŒ input string”h]”hŒ input string”…”�”}”(hjU9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQ9h´MWhjR9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj69ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQ9h´MWhj39ubj)�”}”(hŒ``bool *res`` result ”h]”(j)�”}”(hŒ ``bool *res``”h]”j)�”}”(hju9h]”hŒ bool *res”…”�”}”(hjw9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjs9ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MXhjo9ubj2)�”}”(hhh]”hÝ)�”}”(hŒresult”h]”hŒresult”…”�”}”(hjŽ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠ9h´MXhj‹9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjo9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠ9h´MXhj39ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj9ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj°9h]”hŒ Description”…”�”}”(hj²9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MZhj9ubhÝ)�”}”(hŒÈThis routine returns 0 iff the first character is one of 'EeYyTt1DdNnFf0', or [oO][NnFf] for "on" and "off". Otherwise it will return -EINVAL. Value pointed to by res is updated upon finding a match.”h]”hŒÔThis routine returns 0 iff the first character is one of ‘EeYyTt1DdNnFf0’, or [oO][NnFf] for “onâ€� and “offâ€�. Otherwise it will return -EINVAL. Value pointed to by res is updated upon finding a match.”…”�”}”(hjÆ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MYhj9ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrtoudec64 (C function)”Œc.kstrtoudec64”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ>int kstrtoudec64 (const char *s, unsigned int scale, u64 *res)”h]”j)�”}”(hŒ=int kstrtoudec64(const char *s, unsigned int scale, u64 *res)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjõ9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñ9h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´M¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñ9h²hh³j:h´M¸ubj{)�”}”(hŒ kstrtoudec64”h]”j�)�”}”(hŒ kstrtoudec64”h]”hŒ kstrtoudec64”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjñ9h²hh³j:h´M¸ubjœ)�”}”(hŒ-(const char *s, unsigned int scale, u64 *res)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj2:h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.:ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjM:h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj.:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.:ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hji:h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj.:ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjv:h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*:ubj¢)�”}”(hŒunsigned int scale”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŽ:h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŠ:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŠ:ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjª:h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŠ:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŠ:ubj�)�”}”(hŒscale”h]”hŒscale”…”�”}”(hjÆ:h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŠ:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*:ubj¢)�”}”(hŒu64 *res”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjâ:h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjß:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jä:Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j:sbŒc.kstrtoudec64”†”asbuh1hhjÛ:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ:ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÛ:ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*:ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjñ9h²hh³j:h´M¸ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjí9h²hh³j:h´M¸ubah}”(h]”jè9ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j:h´M¸hjê9h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjž<h²hh³j°<h´MÏubj{)�”}”(hŒ kstrtodec64”h]”j�)�”}”(hŒ kstrtodec64”h]”hŒ kstrtodec64”…”�”}”(hjÃ<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿<ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjž<h²hh³j°<h´MÏubjœ)�”}”(hŒ-(const char *s, unsigned int scale, s64 *res)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjß<h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÛ<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ<ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjú<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÛ<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ<ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÛ<ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj#=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×<ubj¢)�”}”(hŒunsigned int scale”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj;=h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj7=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7=ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjW=h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj7=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7=ubj�)�”}”(hŒscale”h]”hŒscale”…”�”}”(hjs=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×<ubj¢)�”}”(hŒs64 *res”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hj�=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‘=Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÅ<sbŒ c.kstrtodec64”†”asbuh1hhjˆ=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆ=ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj½=h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjˆ=ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hjÊ=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆ=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×<ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjž<h²hh³j°<h´MÏubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjš<h²hh³j°<h´MÏubah}”(h]”j•<ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j°<h´MÏhj—<h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9Convert a string to a signed 64-bit scaled decimal value.”h]”hŒ9Convert a string to a signed 64-bit scaled decimal value.”…”�”}”(hjô=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÏhjñ=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj—<h²hh³j°<h´MÏubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj >jæj >jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX±**Parameters** ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. ``unsigned int scale`` The number of digits to the right of the decimal point. ``s64 *res`` Where to write the result of the conversion on success. **Description** For example, a scale of 4 with input "-3.141592" results in -31415. Note that digits beyond the specified scale are ignored. Also, trailing zeros in the fractional part input to match the scale are not required. **Return** 0 on success, -ERANGE on overflow and -EINVAL on parsing error.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj>h]”hŒ Parameters”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÓhj>ubj )�”}”(hhh]”(j)�”}”(hŒÏ``const char *s`` The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign. ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hj5>h]”hŒ const char *s”…”�”}”(hj7>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÒhj/>ubj2)�”}”(hhh]”hÝ)�”}”(hŒ¼The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign.”h]”hŒ¼The start of the string. The string must be null-terminated, and may also include a single newline before its terminating null. The first character may also be a plus sign or a minus sign.”…”�”}”(hjN>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÐhjK>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJ>h´MÒhj,>ubj)�”}”(hŒO``unsigned int scale`` The number of digits to the right of the decimal point. ”h]”(j)�”}”(hŒ``unsigned int scale``”h]”j)�”}”(hjo>h]”hŒunsigned int scale”…”�”}”(hjq>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjm>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÓhji>ubj2)�”}”(hhh]”hÝ)�”}”(hŒ7The number of digits to the right of the decimal point.”h]”hŒ7The number of digits to the right of the decimal point.”…”�”}”(hjˆ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j„>h´MÓhj…>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hji>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„>h´MÓhj,>ubj)�”}”(hŒE``s64 *res`` Where to write the result of the conversion on success. ”h]”(j)�”}”(hŒ ``s64 *res``”h]”j)�”}”(hj¨>h]”hŒs64 *res”…”�”}”(hjª>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÔhj¢>ubj2)�”}”(hhh]”hÝ)�”}”(hŒ7Where to write the result of the conversion on success.”h]”hŒ7Where to write the result of the conversion on success.”…”�”}”(hjÁ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j½>h´MÔhj¾>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¢>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½>h´MÔhj,>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj>ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjã>h]”hŒ Description”…”�”}”(hjå>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjá>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÖhj>ubhÝ)�”}”(hŒÓFor example, a scale of 4 with input "-3.141592" results in -31415. Note that digits beyond the specified scale are ignored. Also, trailing zeros in the fractional part input to match the scale are not required.”h]”hŒ×For example, a scale of 4 with input “-3.141592â€� results in -31415. Note that digits beyond the specified scale are ignored. Also, trailing zeros in the fractional part input to match the scale are not required.”…”�”}”(hjù>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÕhj>ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj ?h]”hŒReturn”…”�”}”(hj ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÙhj>ubhÝ)�”}”(hŒ?0 on success, -ERANGE on overflow and -EINVAL on parsing error.”h]”hŒ?0 on success, -ERANGE on overflow and -EINVAL on parsing error.”…”�”}”(hj ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:24: ./lib/kstrtox.c”h´MÚhj>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstring_get_size (C function)”Œc.string_get_size”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒdint string_get_size (u64 size, u64 blk_size, const enum string_size_units units, char *buf, int len)”h]”j)�”}”(hŒcint string_get_size(u64 size, u64 blk_size, const enum string_size_units units, char *buf, int len)”•h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjO?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjK?h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjK?h²hh³j]?h´Kubj{)�”}”(hŒstring_get_size”h]”j�)�”}”(hŒstring_get_size”h]”hŒstring_get_size”…”�”}”(hjp?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl?ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjK?h²hh³j]?h´Kubjœ)�”}”(hŒP(u64 size, u64 blk_size, const enum string_size_units units, char *buf, int len)”h]”(j¢)�”}”(hŒu64 size”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‘?Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jr?sbŒc.string_get_size”†”asbuh1hhjˆ?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆ?ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj½?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆ?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„?ubj¢)�”}”(hŒ u64 blk_size”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjÙ?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖ?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÛ?Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j«?Œc.string_get_size”†”asbuh1hhjÒ?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒ?ubj�)�”}”(hŒblk_size”h]”hŒblk_size”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒ?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„?ubj¢)�”}”(hŒ"const enum string_size_units units”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@ubj¨)�”}”(hŒenum”h]”hŒenum”…”�”}”(hj9@h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@ubh)�”}”(hhh]”j�)�”}”(hŒstring_size_units”h]”hŒstring_size_units”…”�”}”(hjX@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjU@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jZ@Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j«?Œc.string_get_size”†”asbuh1hhj@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@ubj�)�”}”(hŒunits”h]”hŒunits”…”�”}”(hj„@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„?ubj¢)�”}”(hŒ char *buf”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj�@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj™@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™@ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¹@h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj™@ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjÆ@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„?ubj¢)�”}”(hŒint len”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjß@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÛ@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ@ubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjû@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„?ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjK?h²hh³j]?h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjG?h²hh³j]?h´Kubah}”(h]”jB?ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j]?h´KhjD?h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#get the size in the specified units”h]”hŒ#get the size in the specified units”…”�”}”(hj%Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Khj"Ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjD?h²hh³j]?h´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj=Ajæj=Ajç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX�**Parameters** ``u64 size`` The size to be converted in blocks ``u64 blk_size`` Size of the block (use 1 for size in bytes) ``const enum string_size_units units`` Units to use (powers of 1000 or 1024), whether to include space separator ``char *buf`` buffer to format to ``int len`` length of buffer **Description** This function returns a string formatted to 3 significant figures giving the size in the required units. **buf** should have room for at least 9 bytes and will always be zero terminated. Return value: number of characters of output that would have been written (which may be greater than len, if output was truncated).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjGAh]”hŒ Parameters”…”�”}”(hjIAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´KhjAAubj )�”}”(hhh]”(j)�”}”(hŒ0``u64 size`` The size to be converted in blocks ”h]”(j)�”}”(hŒ ``u64 size``”h]”j)�”}”(hjfAh]”hŒu64 size”…”�”}”(hjhAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdAubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Khj`Aubj2)�”}”(hhh]”hÝ)�”}”(hŒ"The size to be converted in blocks”h]”hŒ"The size to be converted in blocks”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{Ah´Khj|Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{Ah´Khj]Aubj)�”}”(hŒ=``u64 blk_size`` Size of the block (use 1 for size in bytes) ”h]”(j)�”}”(hŒ``u64 blk_size``”h]”j)�”}”(hjŸAh]”hŒ u64 blk_size”…”�”}”(hj¡Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Khj™Aubj2)�”}”(hhh]”hÝ)�”}”(hŒ+Size of the block (use 1 for size in bytes)”h]”hŒ+Size of the block (use 1 for size in bytes)”…”�”}”(hj¸Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j´Ah´KhjµAubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´Ah´Khj]Aubj)�”}”(hŒq``const enum string_size_units units`` Units to use (powers of 1000 or 1024), whether to include space separator ”h]”(j)�”}”(hŒ&``const enum string_size_units units``”h]”j)�”}”(hjØAh]”hŒ"const enum string_size_units units”…”�”}”(hjÚAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖAubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´KhjÒAubj2)�”}”(hhh]”hÝ)�”}”(hŒIUnits to use (powers of 1000 or 1024), whether to include space separator”h]”hŒIUnits to use (powers of 1000 or 1024), whether to include space separator”…”�”}”(hjñAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jíAh´KhjîAubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÒAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jíAh´Khj]Aubj)�”}”(hŒ"``char *buf`` buffer to format to ”h]”(j)�”}”(hŒ ``char *buf``”h]”j)�”}”(hjBh]”hŒ char *buf”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Khj Bubj2)�”}”(hhh]”hÝ)�”}”(hŒbuffer to format to”h]”hŒbuffer to format to”…”�”}”(hj*Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j&Bh´Khj'Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&Bh´Khj]Aubj)�”}”(hŒ``int len`` length of buffer ”h]”(j)�”}”(hŒ ``int len``”h]”j)�”}”(hjJBh]”hŒint len”…”�”}”(hjLBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHBubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´KhjDBubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of buffer”h]”hŒlength of buffer”…”�”}”(hjcBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j_Bh´Khj`Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjDBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j_Bh´Khj]Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjAAubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj…Bh]”hŒ Description”…”�”}”(hj‡Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒBubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K!hjAAubhÝ)�”}”(hŒ»This function returns a string formatted to 3 significant figures giving the size in the required units. **buf** should have room for at least 9 bytes and will always be zero terminated.”h]”(hŒjThis function returns a string formatted to 3 significant figures giving the size in the required units. ”…”�”}”(hj›Bh²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hj£Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj›BubhŒJ should have room for at least 9 bytes and will always be zero terminated.”…”�”}”(hj›Bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K hjAAubhÝ)�”}”(hŒƒReturn value: number of characters of output that would have been written (which may be greater than len, if output was truncated).”h]”hŒƒReturn value: number of characters of output that would have been written (which may be greater than len, if output was truncated).”…”�”}”(hj¼Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K$hjAAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!parse_int_array_user (C function)”Œc.parse_int_array_user”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒMint parse_int_array_user (const char __user *from, size_t count, int **array)”h]”j)�”}”(hŒLint parse_int_array_user(const char __user *from, size_t count, int **array)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjëBh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjçBh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçBh²hh³jùBh´K¢ubj{)�”}”(hŒparse_int_array_user”h]”j�)�”}”(hŒparse_int_array_user”h]”hŒparse_int_array_user”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjçBh²hh³jùBh´K¢ubjœ)�”}”(hŒ4(const char __user *from, size_t count, int **array)”h]”(j¢)�”}”(hŒconst char __user *from”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj(Ch²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj$Cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$Cubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjCCh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj$Cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$CubhŒ__user”…”�”}”(hj$Ch²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$Cubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjqCh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj$Cubj�)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hj~Ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Cubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjšCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jœCŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jCsbŒc.parse_int_array_user”†”asbuh1hhj“Cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“Cubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÈCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Cubj¢)�”}”(hŒ int **array”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjáCh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÝCubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝCubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjýCh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÝCubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÝCubj�)�”}”(hŒarray”h]”hŒarray”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Cubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjçBh²hh³jùBh´K¢ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjãBh²hh³jùBh´K¢ubah}”(h]”jÞBah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jùBh´K¢hjàBh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Split string into a sequence of integers”h]”hŒ(Split string into a sequence of integers”…”�”}”(hjADh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K¢hj>Dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjàBh²hh³jùBh´K¢ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjYDjæjYDjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXæ**Parameters** ``const char __user *from`` The user space buffer to read from ``size_t count`` The maximum number of bytes to read ``int **array`` Returned pointer to sequence of integers **Description** On success **array** is allocated and initialized with a sequence of integers extracted from the **from** plus an additional element that begins the sequence and specifies the integers count. Caller takes responsibility for freeing **array** when it is no longer needed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjcDh]”hŒ Parameters”…”�”}”(hjeDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K¦hj]Dubj )�”}”(hhh]”(j)�”}”(hŒ?``const char __user *from`` The user space buffer to read from ”h]”(j)�”}”(hŒ``const char __user *from``”h]”j)�”}”(hj‚Dh]”hŒconst char __user *from”…”�”}”(hj„Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K£hj|Dubj2)�”}”(hhh]”hÝ)�”}”(hŒ"The user space buffer to read from”h]”hŒ"The user space buffer to read from”…”�”}”(hj›Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j—Dh´K£hj˜Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—Dh´K£hjyDubj)�”}”(hŒ5``size_t count`` The maximum number of bytes to read ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hj»Dh]”hŒ size_t count”…”�”}”(hj½Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K¤hjµDubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The maximum number of bytes to read”h]”hŒ#The maximum number of bytes to read”…”�”}”(hjÔDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÐDh´K¤hjÑDubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÐDh´K¤hjyDubj)�”}”(hŒ9``int **array`` Returned pointer to sequence of integers ”h]”(j)�”}”(hŒ``int **array``”h]”j)�”}”(hjôDh]”hŒ int **array”…”�”}”(hjöDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòDubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K¥hjîDubj2)�”}”(hhh]”hÝ)�”}”(hŒ(Returned pointer to sequence of integers”h]”hŒ(Returned pointer to sequence of integers”…”�”}”(hj Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Eh´K¥hj Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjîDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Eh´K¥hjyDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj]DubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj/Eh]”hŒ Description”…”�”}”(hj1Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-Eubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K§hj]DubhÝ)�”}”(hŒ¿On success **array** is allocated and initialized with a sequence of integers extracted from the **from** plus an additional element that begins the sequence and specifies the integers count.”h]”(hŒ On success ”…”�”}”(hjEEh²hh³Nh´Nubjõ)�”}”(hŒ **array**”h]”hŒarray”…”�”}”(hjMEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEEubhŒM is allocated and initialized with a sequence of integers extracted from the ”…”�”}”(hjEEh²hh³Nh´Nubjõ)�”}”(hŒ**from**”h]”hŒfrom”…”�”}”(hj_Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEEubhŒV plus an additional element that begins the sequence and specifies the integers count.”…”�”}”(hjEEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´K¦hj]DubhÝ)�”}”(hŒNCaller takes responsibility for freeing **array** when it is no longer needed.”h]”(hŒ(Caller takes responsibility for freeing ”…”�”}”(hjxEh²hh³Nh´Nubjõ)�”}”(hŒ **array**”h]”hŒarray”…”�”}”(hj€Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjxEubhŒ when it is no longer needed.”…”�”}”(hjxEh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Kªhj]Dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstring_unescape (C function)”Œc.string_unescape”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒKint string_unescape (char *src, char *dst, size_t size, unsigned int flags)”h]”j)�”}”(hŒJint string_unescape(char *src, char *dst, size_t size, unsigned int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¹Eh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjµEh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµEh²hh³jÇEh´Mubj{)�”}”(hŒstring_unescape”h]”j�)�”}”(hŒstring_unescape”h]”hŒstring_unescape”…”�”}”(hjÚEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖEubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjµEh²hh³jÇEh´Mubjœ)�”}”(hŒ7(char *src, char *dst, size_t size, unsigned int flags)”h]”(j¢)�”}”(hŒ char *src”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjöEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjòEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòEubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjòEubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjîEubj¢)�”}”(hŒ char *dst”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj8Fh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj4Fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4Fubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjTFh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj4Fubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjaFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjîEubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj}Fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjzFubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jFŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÜEsbŒc.string_unescape”†”asbuh1hhjvFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvFubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj«Fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjîEubj¢)�”}”(hŒunsigned int flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÄFh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÀFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀFubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjàFh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÀFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀFubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjüFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjîEubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjµEh²hh³jÇEh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj±Eh²hh³jÇEh´Mubah}”(h]”j¬Eah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÇEh´Mhj®Eh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&unquote characters in the given string”h]”hŒ&unquote characters in the given string”…”�”}”(hj&Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mhj#Gh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj®Eh²hh³jÇEh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj>Gjæj>Gjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX**Parameters** ``char *src`` source buffer (escaped) ``char *dst`` destination buffer (unescaped) ``size_t size`` size of the destination buffer (0 to unlimit) ``unsigned int flags`` combination of the flags. **Description** The function unquotes characters in the given string. Because the size of the output will be the same as or less than the size of the input, the transformation may be performed in place. Caller must provide valid source and destination pointers. Be aware that destination buffer will always be NULL-terminated. Source string must be NULL-terminated as well. The supported flags are:: UNESCAPE_SPACE: '\f' - form feed '\n' - new line '\r' - carriage return '\t' - horizontal tab '\v' - vertical tab UNESCAPE_OCTAL: '\NNN' - byte with octal value NNN (1 to 3 digits) UNESCAPE_HEX: '\xHH' - byte with hexadecimal value HH (1 to 2 digits) UNESCAPE_SPECIAL: '\"' - double quote '\\' - backslash '\a' - alert (BEL) '\e' - escape UNESCAPE_ANY: all previous together **Return** The amount of the characters processed to the destination buffer excluding trailing '\0' is returned.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjHGh]”hŒ Parameters”…”�”}”(hjJGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjFGubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M"hjBGubj )�”}”(hhh]”(j)�”}”(hŒ&``char *src`` source buffer (escaped) ”h]”(j)�”}”(hŒ ``char *src``”h]”j)�”}”(hjgGh]”hŒ char *src”…”�”}”(hjiGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeGubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MhjaGubj2)�”}”(hhh]”hÝ)�”}”(hŒsource buffer (escaped)”h]”hŒsource buffer (escaped)”…”�”}”(hj€Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|Gh´Mhj}Gubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjaGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|Gh´Mhj^Gubj)�”}”(hŒ-``char *dst`` destination buffer (unescaped) ”h]”(j)�”}”(hŒ ``char *dst``”h]”j)�”}”(hj Gh]”hŒ char *dst”…”�”}”(hj¢Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžGubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M hjšGubj2)�”}”(hhh]”hÝ)�”}”(hŒdestination buffer (unescaped)”h]”hŒdestination buffer (unescaped)”…”�”}”(hj¹Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµGh´M hj¶Gubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjšGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµGh´M hj^Gubj)�”}”(hŒ>``size_t size`` size of the destination buffer (0 to unlimit) ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjÙGh]”hŒ size_t size”…”�”}”(hjÛGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×Gubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M!hjÓGubj2)�”}”(hhh]”hÝ)�”}”(hŒ-size of the destination buffer (0 to unlimit)”h]”hŒ-size of the destination buffer (0 to unlimit)”…”�”}”(hjòGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jîGh´M!hjïGubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓGubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîGh´M!hj^Gubj)�”}”(hŒ1``unsigned int flags`` combination of the flags. ”h]”(j)�”}”(hŒ``unsigned int flags``”h]”j)�”}”(hjHh]”hŒunsigned int flags”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M"hj Hubj2)�”}”(hhh]”hÝ)�”}”(hŒcombination of the flags.”h]”hŒcombination of the flags.”…”�”}”(hj+Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j'Hh´M"hj(Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'Hh´M"hj^Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjBGubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjMHh]”hŒ Description”…”�”}”(hjOHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjKHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M$hjBGubhÝ)�”}”(hŒ5The function unquotes characters in the given string.”h]”hŒ5The function unquotes characters in the given string.”…”�”}”(hjcHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M$hjBGubhÝ)�”}”(hŒ„Because the size of the output will be the same as or less than the size of the input, the transformation may be performed in place.”h]”hŒ„Because the size of the output will be the same as or less than the size of the input, the transformation may be performed in place.”…”�”}”(hjrHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M&hjBGubhÝ)�”}”(hŒÅCaller must provide valid source and destination pointers. Be aware that destination buffer will always be NULL-terminated. Source string must be NULL-terminated as well. The supported flags are::”h]”hŒÄCaller must provide valid source and destination pointers. Be aware that destination buffer will always be NULL-terminated. Source string must be NULL-terminated as well. The supported flags are:”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M)hjBGubhŒ literal_block”“”)�”}”(hXÖUNESCAPE_SPACE: '\f' - form feed '\n' - new line '\r' - carriage return '\t' - horizontal tab '\v' - vertical tab UNESCAPE_OCTAL: '\NNN' - byte with octal value NNN (1 to 3 digits) UNESCAPE_HEX: '\xHH' - byte with hexadecimal value HH (1 to 2 digits) UNESCAPE_SPECIAL: '\"' - double quote '\\' - backslash '\a' - alert (BEL) '\e' - escape UNESCAPE_ANY: all previous together”h]”hXÖUNESCAPE_SPACE: '\f' - form feed '\n' - new line '\r' - carriage return '\t' - horizontal tab '\v' - vertical tab UNESCAPE_OCTAL: '\NNN' - byte with octal value NNN (1 to 3 digits) UNESCAPE_HEX: '\xHH' - byte with hexadecimal value HH (1 to 2 digits) UNESCAPE_SPECIAL: '\"' - double quote '\\' - backslash '\a' - alert (BEL) '\e' - escape UNESCAPE_ANY: all previous together”…”�”}”hj’Hsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M-hjBGubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj£Hh]”hŒReturn”…”�”}”(hj¥Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡Hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M?hjBGubhÝ)�”}”(hŒeThe amount of the characters processed to the destination buffer excluding trailing '\0' is returned.”h]”hŒiThe amount of the characters processed to the destination buffer excluding trailing ‘0’ is returned.”…”�”}”(hj¹Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M@hjBGubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstring_escape_mem (C function)”Œc.string_escape_mem”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒpint string_escape_mem (const char *src, size_t isz, char *dst, size_t osz, unsigned int flags, const char *only)”h]”j)�”}”(hŒoint string_escape_mem(const char *src, size_t isz, char *dst, size_t osz, unsigned int flags, const char *only)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjèHh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjäHh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Möubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷Hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäHh²hh³jöHh´Möubj{)�”}”(hŒstring_escape_mem”h]”j�)�”}”(hŒstring_escape_mem”h]”hŒstring_escape_mem”…”�”}”(hj Ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjIubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjäHh²hh³jöHh´Möubjœ)�”}”(hŒZ(const char *src, size_t isz, char *dst, size_t osz, unsigned int flags, const char *only)”h]”(j¢)�”}”(hŒconst char *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj%Ih²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!Iubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Iubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj@Ih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj!Iubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNIh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Iubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj\Ih²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!Iubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjiIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubj¢)�”}”(hŒ size_t isz”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj…Ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚Iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‡IŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j IsbŒc.string_escape_mem”†”asbuh1hhj~Iubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~Iubj�)�”}”(hŒisz”h]”hŒisz”…”�”}”(hj³Ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubj¢)�”}”(hŒ char *dst”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÌIh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÈIubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚIh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈIubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjèIh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÈIubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjõIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubj¢)�”}”(hŒ size_t osz”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jJŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¡IŒc.string_escape_mem”†”asbuh1hhj Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/Jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Jubj�)�”}”(hŒosz”h]”hŒosz”…”�”}”(hj=Jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubj¢)�”}”(hŒunsigned int flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjVJh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjRJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRJubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjrJh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjRJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRJubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjŽJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubj¢)�”}”(hŒconst char *only”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj§Jh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj£Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£Jubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÂJh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj£Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£Jubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÞJh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj£Jubj�)�”}”(hŒonly”h]”hŒonly”…”�”}”(hjëJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjäHh²hh³jöHh´Möubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjàHh²hh³jöHh´Möubah}”(h]”jÛHah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jöHh´MöhjÝHh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+quote characters in the given memory buffer”h]”hŒ+quote characters in the given memory buffer”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MöhjKh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÝHh²hh³jöHh´Möubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj-Kjæj-Kjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXü **Parameters** ``const char *src`` source buffer (unescaped) ``size_t isz`` source buffer size ``char *dst`` destination buffer (escaped) ``size_t osz`` destination buffer size ``unsigned int flags`` combination of the flags ``const char *only`` NULL-terminated string containing characters used to limit the selected escape class. If characters are included in **only** that would not normally be escaped by the classes selected in **flags**, they will be copied to **dst** unescaped. **Description** The process of escaping byte buffer includes several parts. They are applied in the following sequence. 1. The character is not matched to the one from **only** string and thus must go as-is to the output. 2. The character is matched to the printable and ASCII classes, if asked, and in case of match it passes through to the output. 3. The character is matched to the printable or ASCII class, if asked, and in case of match it passes through to the output. 4. The character is checked if it falls into the class given by **flags**. ``ESCAPE_OCTAL`` and ``ESCAPE_HEX`` are going last since they cover any character. Note that they actually can't go together, otherwise ``ESCAPE_HEX`` will be ignored. Caller must provide valid source and destination pointers. Be aware that destination buffer will not be NULL-terminated, thus caller have to append it if needs. The supported flags are:: %ESCAPE_SPACE: (special white space, not space itself) '\f' - form feed '\n' - new line '\r' - carriage return '\t' - horizontal tab '\v' - vertical tab %ESCAPE_SPECIAL: '\"' - double quote '\\' - backslash '\a' - alert (BEL) '\e' - escape %ESCAPE_NULL: '\0' - null %ESCAPE_OCTAL: '\NNN' - byte with octal value NNN (3 digits) %ESCAPE_ANY: all previous together %ESCAPE_NP: escape only non-printable characters, checked by isprint() %ESCAPE_ANY_NP: all previous together %ESCAPE_HEX: '\xHH' - byte with hexadecimal value HH (2 digits) %ESCAPE_NA: escape only non-ascii characters, checked by isascii() %ESCAPE_NAP: escape only non-printable or non-ascii characters %ESCAPE_APPEND: append characters from @only to be escaped by the given classes ``ESCAPE_APPEND`` would help to pass additional characters to the escaped, when one of ``ESCAPE_NP``, ``ESCAPE_NA``, or ``ESCAPE_NAP`` is provided. One notable caveat, the ``ESCAPE_NAP``, ``ESCAPE_NP`` and ``ESCAPE_NA`` have the higher priority than the rest of the flags (``ESCAPE_NAP`` is the highest). It doesn't make much sense to use either of them without ``ESCAPE_OCTAL`` or ``ESCAPE_HEX``, because they cover most of the other character classes. ``ESCAPE_NAP`` can utilize ``ESCAPE_SPACE`` or ``ESCAPE_SPECIAL`` in addition to the above. **Return** The total size of the escaped output that would be generated for the given input and flags. To check whether the output was truncated, compare the return value to osz. There is room left in dst for a '\0' terminator if and only if ret < osz.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj7Kh]”hŒ Parameters”…”�”}”(hj9Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Múhj1Kubj )�”}”(hhh]”(j)�”}”(hŒ.``const char *src`` source buffer (unescaped) ”h]”(j)�”}”(hŒ``const char *src``”h]”j)�”}”(hjVKh]”hŒconst char *src”…”�”}”(hjXKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M÷hjPKubj2)�”}”(hhh]”hÝ)�”}”(hŒsource buffer (unescaped)”h]”hŒsource buffer (unescaped)”…”�”}”(hjoKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jkKh´M÷hjlKubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjPKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jkKh´M÷hjMKubj)�”}”(hŒ"``size_t isz`` source buffer size ”h]”(j)�”}”(hŒ``size_t isz``”h]”j)�”}”(hj�Kh]”hŒ size_t isz”…”�”}”(hj‘Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Møhj‰Kubj2)�”}”(hhh]”hÝ)�”}”(hŒsource buffer size”h]”hŒsource buffer size”…”�”}”(hj¨Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤Kh´Møhj¥Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤Kh´MøhjMKubj)�”}”(hŒ+``char *dst`` destination buffer (escaped) ”h]”(j)�”}”(hŒ ``char *dst``”h]”j)�”}”(hjÈKh]”hŒ char *dst”…”�”}”(hjÊKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MùhjÂKubj2)�”}”(hhh]”hÝ)�”}”(hŒdestination buffer (escaped)”h]”hŒdestination buffer (escaped)”…”�”}”(hjáKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝKh´MùhjÞKubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝKh´MùhjMKubj)�”}”(hŒ'``size_t osz`` destination buffer size ”h]”(j)�”}”(hŒ``size_t osz``”h]”j)�”}”(hjLh]”hŒ size_t osz”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MúhjûKubj2)�”}”(hhh]”hÝ)�”}”(hŒdestination buffer size”h]”hŒdestination buffer size”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jLh´MúhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jLh´MúhjMKubj)�”}”(hŒ0``unsigned int flags`` combination of the flags ”h]”(j)�”}”(hŒ``unsigned int flags``”h]”j)�”}”(hj:Lh]”hŒunsigned int flags”…”�”}”(hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjMubj )�”}”(hŒyThe character is matched to the printable or ASCII class, if asked, and in case of match it passes through to the output.”h]”hÝ)�”}”(hŒyThe character is matched to the printable or ASCII class, if asked, and in case of match it passes through to the output.”h]”hŒyThe character is matched to the printable or ASCII class, if asked, and in case of match it passes through to the output.”…”�”}”(hj[Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MhjWMubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjMubj )�”}”(hŒðThe character is checked if it falls into the class given by **flags**. ``ESCAPE_OCTAL`` and ``ESCAPE_HEX`` are going last since they cover any character. Note that they actually can't go together, otherwise ``ESCAPE_HEX`` will be ignored. ”h]”hÝ)�”}”(hŒïThe character is checked if it falls into the class given by **flags**. ``ESCAPE_OCTAL`` and ``ESCAPE_HEX`` are going last since they cover any character. Note that they actually can't go together, otherwise ``ESCAPE_HEX`` will be ignored.”h]”(hŒ=The character is checked if it falls into the class given by ”…”�”}”(hjtMh²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj|Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtMubhŒ. ”…”�”}”(hjtMh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_OCTAL``”h]”hŒ ESCAPE_OCTAL”…”�”}”(hjŽMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtMubhŒ and ”…”�”}”(hjtMh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_HEX``”h]”hŒ ESCAPE_HEX”…”�”}”(hj Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtMubhŒg are going last since they cover any character. Note that they actually can’t go together, otherwise ”…”�”}”(hjtMh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_HEX``”h]”hŒ ESCAPE_HEX”…”�”}”(hj²Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtMubhŒ will be ignored.”…”�”}”(hjtMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M hjpMubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjMubeh}”(h]”h ]”h"]”h$]”h&]”Œenumtype”Œarabic”Œprefix”hŒsuffix”Œ.”uh1jMhj Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j7Mh´Mhj1KubhÝ)�”}”(hŒºCaller must provide valid source and destination pointers. Be aware that destination buffer will not be NULL-terminated, thus caller have to append it if needs. The supported flags are::”h]”hŒ¹Caller must provide valid source and destination pointers. Be aware that destination buffer will not be NULL-terminated, thus caller have to append it if needs. The supported flags are:”…”�”}”(hjâMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mhj1Kubj‘H)�”}”(hXx%ESCAPE_SPACE: (special white space, not space itself) '\f' - form feed '\n' - new line '\r' - carriage return '\t' - horizontal tab '\v' - vertical tab %ESCAPE_SPECIAL: '\"' - double quote '\\' - backslash '\a' - alert (BEL) '\e' - escape %ESCAPE_NULL: '\0' - null %ESCAPE_OCTAL: '\NNN' - byte with octal value NNN (3 digits) %ESCAPE_ANY: all previous together %ESCAPE_NP: escape only non-printable characters, checked by isprint() %ESCAPE_ANY_NP: all previous together %ESCAPE_HEX: '\xHH' - byte with hexadecimal value HH (2 digits) %ESCAPE_NA: escape only non-ascii characters, checked by isascii() %ESCAPE_NAP: escape only non-printable or non-ascii characters %ESCAPE_APPEND: append characters from @only to be escaped by the given classes”h]”hXx%ESCAPE_SPACE: (special white space, not space itself) '\f' - form feed '\n' - new line '\r' - carriage return '\t' - horizontal tab '\v' - vertical tab %ESCAPE_SPECIAL: '\"' - double quote '\\' - backslash '\a' - alert (BEL) '\e' - escape %ESCAPE_NULL: '\0' - null %ESCAPE_OCTAL: '\NNN' - byte with octal value NNN (3 digits) %ESCAPE_ANY: all previous together %ESCAPE_NP: escape only non-printable characters, checked by isprint() %ESCAPE_ANY_NP: all previous together %ESCAPE_HEX: '\xHH' - byte with hexadecimal value HH (2 digits) %ESCAPE_NA: escape only non-ascii characters, checked by isascii() %ESCAPE_NAP: escape only non-printable or non-ascii characters %ESCAPE_APPEND: append characters from @only to be escaped by the given classes”…”�”}”hjñMsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mhj1KubhÝ)�”}”(hŒ“``ESCAPE_APPEND`` would help to pass additional characters to the escaped, when one of ``ESCAPE_NP``, ``ESCAPE_NA``, or ``ESCAPE_NAP`` is provided.”h]”(j)�”}”(hŒ``ESCAPE_APPEND``”h]”hŒ ESCAPE_APPEND”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubhŒF would help to pass additional characters to the escaped, when one of ”…”�”}”(hjNh²hh³Nh´Nubj)�”}”(hŒ ``ESCAPE_NP``”h]”hŒ ESCAPE_NP”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubhŒ, ”…”�”}”(hjNh²hh³Nh´Nubj)�”}”(hŒ ``ESCAPE_NA``”h]”hŒ ESCAPE_NA”…”�”}”(hj(Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubhŒ, or ”…”�”}”(hjNh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_NAP``”h]”hŒ ESCAPE_NAP”…”�”}”(hj:Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubhŒ is provided.”…”�”}”(hjNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M1hj1KubhÝ)�”}”(hX�One notable caveat, the ``ESCAPE_NAP``, ``ESCAPE_NP`` and ``ESCAPE_NA`` have the higher priority than the rest of the flags (``ESCAPE_NAP`` is the highest). It doesn't make much sense to use either of them without ``ESCAPE_OCTAL`` or ``ESCAPE_HEX``, because they cover most of the other character classes. ``ESCAPE_NAP`` can utilize ``ESCAPE_SPACE`` or ``ESCAPE_SPECIAL`` in addition to the above.”h]”(hŒOne notable caveat, the ”…”�”}”(hjSNh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_NAP``”h]”hŒ ESCAPE_NAP”…”�”}”(hj[Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSNubhŒ, ”…”�”}”(hjSNh²hh³Nh´Nubj)�”}”(hŒ ``ESCAPE_NP``”h]”hŒ ESCAPE_NP”…”�”}”(hjmNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSNubhŒ and ”…”�”}”(hjSNh²hh³Nh´Nubj)�”}”(hŒ ``ESCAPE_NA``”h]”hŒ ESCAPE_NA”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSNubhŒ6 have the higher priority than the rest of the flags (”…”�”}”(hjSNh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_NAP``”h]”hŒ ESCAPE_NAP”…”�”}”(hj‘Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSNubhŒM is the highest). It doesn’t make much sense to use either of them without ”…”�”}”(hjSNh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_OCTAL``”h]”hŒ ESCAPE_OCTAL”…”�”}”(hj£Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSNubhŒ or ”…”�”}”(hjSNh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_HEX``”h]”hŒ ESCAPE_HEX”…”�”}”(hjµNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSNubhŒ:, because they cover most of the other character classes. ”…”�”}”(hjSNh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_NAP``”h]”hŒ ESCAPE_NAP”…”�”}”(hjÇNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSNubhŒ can utilize ”…”�”}”(hjSNh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_SPACE``”h]”hŒ ESCAPE_SPACE”…”�”}”(hjÙNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSNubhŒ or ”…”�”}”(hjSNh²hh³Nh´Nubj)�”}”(hŒ``ESCAPE_SPECIAL``”h]”hŒESCAPE_SPECIAL”…”�”}”(hjëNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSNubhŒ in addition to the above.”…”�”}”(hjSNh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M4hj1KubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjOh]”hŒReturn”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M;hj1KubhÝ)�”}”(hŒñThe total size of the escaped output that would be generated for the given input and flags. To check whether the output was truncated, compare the return value to osz. There is room left in dst for a '\0' terminator if and only if ret < osz.”h]”hŒõThe total size of the escaped output that would be generated for the given input and flags. To check whether the output was truncated, compare the return value to osz. There is room left in dst for a ‘0’ terminator if and only if ret < osz.”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M<hj1Kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkasprintf_strarray (C function)”Œc.kasprintf_strarray”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDchar ** kasprintf_strarray (gfp_t gfp, const char *prefix, size_t n)”h]”j)�”}”(hŒBchar **kasprintf_strarray(gfp_t gfp, const char *prefix, size_t n)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjKOh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjGOh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGOh²hh³jYOh´Mðubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjhOh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjGOh²hh³jYOh´Mðubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjuOh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjGOh²hh³jYOh´Mðubj{)�”}”(hŒkasprintf_strarray”h]”j�)�”}”(hŒkasprintf_strarray”h]”hŒkasprintf_strarray”…”�”}”(hj†Oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚Oubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjGOh²hh³jYOh´Mðubjœ)�”}”(hŒ)(gfp_t gfp, const char *prefix, size_t n)”h]”(j¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj¥Oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j§OŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jˆOsbŒc.kasprintf_strarray”†”asbuh1hhjžOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžOubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjÓOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjšOubj¢)�”}”(hŒconst char *prefix”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjìOh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjèOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèOubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjèOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèOubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj#Ph²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjèOubj�)�”}”(hŒprefix”h]”hŒprefix”…”�”}”(hj0Ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjšOubj¢)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjLPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjIPubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jNPŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÁOŒc.kasprintf_strarray”†”asbuh1hhjEPubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEPubj�)�”}”(hj�h]”hŒn”…”�”}”(hjxPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjEPubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjšOubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjGOh²hh³jYOh´Mðubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjCOh²hh³jYOh´Mðubah}”(h]”j>Oah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jYOh´Mðhj@Oh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-allocate and fill array of sequential strings”h]”hŒ-allocate and fill array of sequential strings”…”�”}”(hj¡Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MðhjžPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj@Oh²hh³jYOh´Mðubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¹Pjæj¹Pjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX¥**Parameters** ``gfp_t gfp`` flags for the slab allocator ``const char *prefix`` prefix to be used ``size_t n`` number of strings to be allocated and filled **Description** Allocates and fills **n** strings using pattern "``s-````zu``", where prefix is provided by caller. The caller is responsible to free them with kfree_strarray() after use. Returns array of strings or NULL when memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÃPh]”hŒ Parameters”…”�”}”(hjÅPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁPubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Môhj½Pubj )�”}”(hhh]”(j)�”}”(hŒ+``gfp_t gfp`` flags for the slab allocator ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hjâPh]”hŒ gfp_t gfp”…”�”}”(hjäPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MñhjÜPubj2)�”}”(hhh]”hÝ)�”}”(hŒflags for the slab allocator”h]”hŒflags for the slab allocator”…”�”}”(hjûPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷Ph´MñhjøPubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷Ph´MñhjÙPubj)�”}”(hŒ)``const char *prefix`` prefix to be used ”h]”(j)�”}”(hŒ``const char *prefix``”h]”j)�”}”(hjQh]”hŒconst char *prefix”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MòhjQubj2)�”}”(hhh]”hÝ)�”}”(hŒprefix to be used”h]”hŒprefix to be used”…”�”}”(hj4Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0Qh´Mòhj1Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0Qh´MòhjÙPubj)�”}”(hŒ:``size_t n`` number of strings to be allocated and filled ”h]”(j)�”}”(hŒ ``size_t n``”h]”j)�”}”(hjTQh]”hŒsize_t n”…”�”}”(hjVQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRQubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MóhjNQubj2)�”}”(hhh]”hÝ)�”}”(hŒ,number of strings to be allocated and filled”h]”hŒ,number of strings to be allocated and filled”…”�”}”(hjmQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jiQh´MóhjjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjNQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jiQh´MóhjÙPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj½PubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�Qh]”hŒ Description”…”�”}”(hj‘Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mõhj½PubhÝ)�”}”(hŒ«Allocates and fills **n** strings using pattern "``s-````zu``", where prefix is provided by caller. The caller is responsible to free them with kfree_strarray() after use.”h]”(hŒAllocates and fills ”…”�”}”(hj¥Qh²hh³Nh´Nubjõ)�”}”(hŒ**n**”h]”hŒn”…”�”}”(hj­Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥QubhŒ strings using pattern “”…”�”}”(hj¥Qh²hh³Nh´Nubj)�”}”(hŒ ``s-````zu``”h]”hŒs-````zu”…”�”}”(hj¿Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥QubhŒpâ€�, where prefix is provided by caller. The caller is responsible to free them with kfree_strarray() after use.”…”�”}”(hj¥Qh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Môhj½PubhÝ)�”}”(hŒ@Returns array of strings or NULL when memory can't be allocated.”h]”hŒBReturns array of strings or NULL when memory can’t be allocated.”…”�”}”(hjØQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Møhj½Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfree_strarray (C function)”Œc.kfree_strarray”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,void kfree_strarray (char **array, size_t n)”h]”j)�”}”(hŒ+void kfree_strarray(char **array, size_t n)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjRh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRh²hh³jRh´Mubj{)�”}”(hŒkfree_strarray”h]”j�)�”}”(hŒkfree_strarray”h]”hŒkfree_strarray”…”�”}”(hj(Rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$Rubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjRh²hh³jRh´Mubjœ)�”}”(hŒ(char **array, size_t n)”h]”(j¢)�”}”(hŒ char **array”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjDRh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@Rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@Rubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj`Rh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj@Rubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjmRh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj@Rubj�)�”}”(hŒarray”h]”hŒarray”…”�”}”(hjzRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@Rubeh}”(h]”•1h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjah"]”h$]”h&]”uh1j1hj�Rubj�)�”}”(hj�h]”hŒn”…”�”}”(hjÄRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+Th²hh³j=Th´MIubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjLTh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj+Th²hh³j=Th´MIubj{)�”}”(hŒ skip_spaces”h]”j�)�”}”(hŒ skip_spaces”h]”hŒ skip_spaces”…”�”}”(hj]Th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYTubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj+Th²hh³j=Th´MIubjœ)�”}”(hŒ(const char *str)”h]”j¢)�”}”(hŒconst char *str”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjyTh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjuTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†Th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuTubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj”Th²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjuTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuTubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj°Th²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjuTubj�)�”}”(hŒstr”h]”hŒstr”…”�”}”(hj½Th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjqTubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj+Th²hh³j=Th´MIubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj'Th²hh³j=Th´MIubah}”(h]”j"Tah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j=Th´MIhj$Th²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Removes leading whitespace from **str**.”h]”(hŒ Removes leading whitespace from ”…”�”}”(hjçTh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hjïTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjçTubhŒ.”…”�”}”(hjçTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MIhjäTh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj$Th²hh³j=Th´MIubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjUjæjUjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hŒ–**Parameters** ``const char *str`` The string to be stripped. **Description** Returns a pointer to the first non-whitespace character in **str**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjUh]”hŒ Parameters”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MMhjUubj )�”}”(hhh]”j)�”}”(hŒ/``const char *str`` The string to be stripped. ”h]”(j)�”}”(hŒ``const char *str``”h]”j)�”}”(hj:Uh]”hŒconst char *str”…”�”}”(hjah"]”h$]”h&]”uh1j1hjÈUh²hh³jÚUh´MWubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjéUh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÈUh²hh³jÚUh´MWubj{)�”}”(hŒstrim”h]”j�)�”}”(hŒstrim”h]”hŒstrim”…”�”}”(hjúUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöUubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÈUh²hh³jÚUh´MWubjœ)�”}”(hŒ (char *s)”h]”j¢)�”}”(hŒchar *s”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Vh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj2Vh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjVubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj?Vh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÈUh²hh³jÚUh´MWubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÄUh²hh³jÚUh´MWubah}”(h]”j¿Uah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÚUh´MWhjÁUh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3Removes leading and trailing whitespace from **s**.”h]”(hŒ-Removes leading and trailing whitespace from ”…”�”}”(hjhVh²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjpVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhVubhŒ.”…”�”}”(hjhVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MWhjeVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÁUh²hh³jÚUh´MWubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj’Vjæj’Vjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hŒõ**Parameters** ``char *s`` The string to be stripped. **Description** Note that the first trailing whitespace is replaced with a ``NUL-terminator`` in the given string **s**. Returns a pointer to the first non-whitespace character in **s**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjœVh]”hŒ Parameters”…”�”}”(hjžVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjšVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M[hj–Vubj )�”}”(hhh]”j)�”}”(hŒ'``char *s`` The string to be stripped. ”h]”(j)�”}”(hŒ ``char *s``”h]”j)�”}”(hj»Vh]”hŒchar *s”…”�”}”(hj½Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MXhjµVubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be stripped.”h]”hŒThe string to be stripped.”…”�”}”(hjÔVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÐVh´MXhjÑVubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÐVh´MXhj²Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj–VubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjöVh]”hŒ Description”…”�”}”(hjøVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjôVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MZhj–VubhÝ)�”}”(hŒªNote that the first trailing whitespace is replaced with a ``NUL-terminator`` in the given string **s**. Returns a pointer to the first non-whitespace character in **s**.”h]”(hŒ;Note that the first trailing whitespace is replaced with a ”…”�”}”(hj Wh²hh³Nh´Nubj)�”}”(hŒ``NUL-terminator``”h]”hŒNUL-terminator”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj WubhŒ in the given string ”…”�”}”(hj Wh²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hj&Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj WubhŒ=. Returns a pointer to the first non-whitespace character in ”…”�”}”(hj Wh²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hj8Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj WubhŒ.”…”�”}”(hj Wh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MYhj–Vubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsysfs_streq (C function)”Œ c.sysfs_streq”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1bool sysfs_streq (const char *s1, const char *s2)”h]”j)�”}”(hŒ0bool sysfs_streq(const char *s1, const char *s2)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjqWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjmWh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmWh²hh³j~Wh´Mqubj{)�”}”(hŒ sysfs_streq”h]”j�)�”}”(hŒ sysfs_streq”h]”hŒ sysfs_streq”…”�”}”(hj‘Wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Wubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjmWh²hh³j~Wh´Mqubjœ)�”}”(hŒ (const char *s1, const char *s2)”h]”(j¢)�”}”(hŒconst char *s1”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj­Wh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj©Wubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©Wubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÈWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj©Wubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©Wubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjäWh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj©Wubj�)�”}”(hŒs1”h]”hŒs1”…”�”}”(hjñWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¥Wubj¢)�”}”(hŒconst char *s2”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj Xh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj%Xh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjAXh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjXubj�)�”}”(hŒs2”h]”hŒs2”…”�”}”(hjNXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¥Wubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjmWh²hh³j~Wh´Mqubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjiWh²hh³j~Wh´Mqubah}”(h]”jdWah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j~Wh´MqhjfWh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9return true if strings are equal, modulo trailing newline”h]”hŒ9return true if strings are equal, modulo trailing newline”…”�”}”(hjxXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MqhjuXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjfWh²hh³j~Wh´Mqubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�Xjæj�Xjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXn**Parameters** ``const char *s1`` one string ``const char *s2`` another string **Description** This routine returns true iff two strings are equal, treating both NUL and newline-then-NUL as equivalent string terminations. It's geared for use with sysfs input strings, which generally terminate with newlines but are compared against values without newlines.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjšXh]”hŒ Parameters”…”�”}”(hjœXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜Xubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Muhj”Xubj )�”}”(hhh]”(j)�”}”(hŒ``const char *s1`` one string ”h]”(j)�”}”(hŒ``const char *s1``”h]”j)�”}”(hj¹Xh]”hŒconst char *s1”…”�”}”(hj»Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mrhj³Xubj2)�”}”(hhh]”hÝ)�”}”(hŒ one string”h]”hŒ one string”…”�”}”(hjÒXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÎXh´MrhjÏXubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj³Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÎXh´Mrhj°Xubj)�”}”(hŒ"``const char *s2`` another string ”h]”(j)�”}”(hŒ``const char *s2``”h]”j)�”}”(hjòXh]”hŒconst char *s2”…”�”}”(hjôXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjðXubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MshjìXubj2)�”}”(hhh]”hÝ)�”}”(hŒanother string”h]”hŒanother string”…”�”}”(hj Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jYh´MshjYubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjìXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jYh´Mshj°Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj”XubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj-Yh]”hŒ Description”…”�”}”(hj/Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+Yubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Muhj”XubhÝ)�”}”(hXThis routine returns true iff two strings are equal, treating both NUL and newline-then-NUL as equivalent string terminations. It's geared for use with sysfs input strings, which generally terminate with newlines but are compared against values without newlines.”h]”hX This routine returns true iff two strings are equal, treating both NUL and newline-then-NUL as equivalent string terminations. It’s geared for use with sysfs input strings, which generally terminate with newlines but are compared against values without newlines.”…”�”}”(hjCYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mthj”Xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmatch_string (C function)”Œc.match_string”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒJint match_string (const char * const *array, size_t n, const char *string)”h]”j)�”}”(hŒHint match_string(const char *const *array, size_t n, const char *string)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjrYh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnYh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnYh²hh³j€Yh´MŒubj{)�”}”(hŒ match_string”h]”j�)�”}”(hŒ match_string”h]”hŒ match_string”…”�”}”(hj“Yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Yubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjnYh²hh³j€Yh´MŒubjœ)�”}”(hŒ8(const char *const *array, size_t n, const char *string)”h]”(j¢)�”}”(hŒconst char *const *array”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¯Yh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj«Yubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«Yubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÊYh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj«Yubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«Yubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjæYh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj«Yubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjóYh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj«Yubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«Yubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj«Yubj�)�”}”(hŒarray”h]”hŒarray”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«Yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj§Yubj¢)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj7Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4Zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j9ZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j•YsbŒc.match_string”†”asbuh1hhj0Zubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0Zubj�)�”}”(hj�h]”hŒn”…”�”}”(hjeZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0Zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj§Yubj¢)�”}”(hŒconst char *string”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj}Zh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjyZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyZubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj˜Zh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjyZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyZubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj´Zh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjyZubj�)�”}”(hŒstring”h]”hŒstring”…”�”}”(hjÁZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj§Yubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjnYh²hh³j€Yh´MŒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjjYh²hh³j€Yh´MŒubah}”(h]”jeYah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j€Yh´MŒhjgYh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ matches given string in an array”h]”hŒ matches given string in an array”…”�”}”(hjëZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MŒhjèZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjgYh²hh³j€Yh´MŒubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj[jæj[jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX¦**Parameters** ``const char * const *array`` array of strings ``size_t n`` number of strings in the array or -1 for NULL terminated arrays ``const char *string`` string to match with **Description** This routine will look for a string in an array of strings up to the n-th element in the array or until the first NULL element. Historically the value of -1 for **n**, was used to search in arrays that are NULL terminated. However, the function does not make a distinction when finishing the search: either **n** elements have been compared OR the first NULL element was found. **Return** index of a **string** in the **array** if matches, or ``-EINVAL`` otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj [h]”hŒ Parameters”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj [ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M�hj[ubj )�”}”(hhh]”(j)�”}”(hŒ/``const char * const *array`` array of strings ”h]”(j)�”}”(hŒ``const char * const *array``”h]”j)�”}”(hj,[h]”hŒconst char * const *array”…”�”}”(hj.[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M�hj&[ubj2)�”}”(hhh]”hÝ)�”}”(hŒarray of strings”h]”hŒarray of strings”…”�”}”(hjE[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jA[h´M�hjB[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj&[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jA[h´M�hj#[ubj)�”}”(hŒM``size_t n`` number of strings in the array or -1 for NULL terminated arrays ”h]”(j)�”}”(hŒ ``size_t n``”h]”j)�”}”(hje[h]”hŒsize_t n”…”�”}”(hjg[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjc[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MŽhj_[ubj2)�”}”(hhh]”hÝ)�”}”(hŒ?number of strings in the array or -1 for NULL terminated arrays”h]”hŒ?number of strings in the array or -1 for NULL terminated arrays”…”�”}”(hj~[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jz[h´MŽhj{[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj_[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jz[h´MŽhj#[ubj)�”}”(hŒ,``const char *string`` string to match with ”h]”(j)�”}”(hŒ``const char *string``”h]”j)�”}”(hjž[h]”hŒconst char *string”…”�”}”(hj [h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M�hj˜[ubj2)�”}”(hhh]”hÝ)�”}”(hŒstring to match with”h]”hŒstring to match with”…”�”}”(hj·[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j³[h´M�hj´[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj˜[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j³[h´M�hj#[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj[ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÙ[h]”hŒ Description”…”�”}”(hjÛ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj×[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M‘hj[ubhÝ)�”}”(hŒThis routine will look for a string in an array of strings up to the n-th element in the array or until the first NULL element.”h]”hŒThis routine will look for a string in an array of strings up to the n-th element in the array or until the first NULL element.”…”�”}”(hjï[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M�hj[ubhÝ)�”}”(hŒùHistorically the value of -1 for **n**, was used to search in arrays that are NULL terminated. However, the function does not make a distinction when finishing the search: either **n** elements have been compared OR the first NULL element was found.”h]”(hŒ!Historically the value of -1 for ”…”�”}”(hjþ[h²hh³Nh´Nubjõ)�”}”(hŒ**n**”h]”hŒn”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþ[ubhŒ�, was used to search in arrays that are NULL terminated. However, the function does not make a distinction when finishing the search: either ”…”�”}”(hjþ[h²hh³Nh´Nubjõ)�”}”(hŒ**n**”h]”hŒn”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþ[ubhŒA elements have been compared OR the first NULL element was found.”…”�”}”(hjþ[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M“hj[ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj3\h]”hŒReturn”…”�”}”(hj5\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M˜hj[ubhÝ)�”}”(hŒLindex of a **string** in the **array** if matches, or ``-EINVAL`` otherwise.”h]”(hŒ index of a ”…”�”}”(hjI\h²hh³Nh´Nubjõ)�”}”(hŒ **string**”h]”hŒstring”…”�”}”(hjQ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjI\ubhŒ in the ”…”�”}”(hjI\h²hh³Nh´Nubjõ)�”}”(hŒ **array**”h]”hŒarray”…”�”}”(hjc\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjI\ubhŒ if matches, or ”…”�”}”(hjI\h²hh³Nh´Nubj)�”}”(hŒ ``-EINVAL``”h]”hŒ-EINVAL”…”�”}”(hju\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjI\ubhŒ otherwise.”…”�”}”(hjI\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M™hj[ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!__sysfs_match_string (C function)”Œc.__sysfs_match_string”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOint __sysfs_match_string (const char * const *array, size_t n, const char *str)”h]”j)�”}”(hŒMint __sysfs_match_string(const char *const *array, size_t n, const char *str)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj®\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjª\h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjª\h²hh³j¼\h´M®ubj{)�”}”(hŒ__sysfs_match_string”h]”j�)�”}”(hŒ__sysfs_match_string”h]”hŒ__sysfs_match_string”…”�”}”(hjÏ\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjË\ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjª\h²hh³j¼\h´M®ubjœ)�”}”(hŒ5(const char *const *array, size_t n, const char *str)”h]”(j¢)�”}”(hŒconst char *const *array”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjë\h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjç\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjç\ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjç\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjç\ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj"]h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjç\ubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hj/]h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjç\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjç\ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjJ]h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjç\ubj�)�”}”(hŒarray”h]”hŒarray”…”�”}”(hjW]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjç\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjã\ubj¢)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjs]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjp]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”ju]Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÑ\sbŒc.__sysfs_match_string”†”asbuh1hhjl]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl]ubj�)�”}”(hj�h]”hŒn”…”�”}”(hj¡]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjã\ubj¢)�”}”(hŒconst char *str”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¹]h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjµ]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµ]ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÔ]h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjµ]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµ]ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjð]h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµ]ubj�)�”}”(hŒstr”h]”hŒstr”…”�”}”(hjý]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµ]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjã\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjª\h²hh³j¼\h´M®ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¦\h²hh³j¼\h´M®ubah}”(h]”j¡\ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¼\h´M®hj£\h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ matches given string in an array”h]”hŒ matches given string in an array”…”�”}”(hj'^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M®hj$^h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj£\h²hh³j¼\h´M®ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj?^jæj?^jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hXË**Parameters** ``const char * const *array`` array of strings ``size_t n`` number of strings in the array or -1 for NULL terminated arrays ``const char *str`` string to match with **Description** Returns index of **str** in the **array** or -EINVAL, just like match_string(). Uses sysfs_streq instead of strcmp for matching. This routine will look for a string in an array of strings up to the n-th element in the array or until the first NULL element. Historically the value of -1 for **n**, was used to search in arrays that are NULL terminated. However, the function does not make a distinction when finishing the search: either **n** elements have been compared OR the first NULL element was found.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjI^h]”hŒ Parameters”…”�”}”(hjK^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjG^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M²hjC^ubj )�”}”(hhh]”(j)�”}”(hŒ/``const char * const *array`` array of strings ”h]”(j)�”}”(hŒ``const char * const *array``”h]”j)�”}”(hjh^h]”hŒconst char * const *array”…”�”}”(hjj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjf^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M¯hjb^ubj2)�”}”(hhh]”hÝ)�”}”(hŒarray of strings”h]”hŒarray of strings”…”�”}”(hj�^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}^h´M¯hj~^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjb^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}^h´M¯hj_^ubj)�”}”(hŒM``size_t n`` number of strings in the array or -1 for NULL terminated arrays ”h]”(j)�”}”(hŒ ``size_t n``”h]”j)�”}”(hj¡^h]”hŒsize_t n”…”�”}”(hj£^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M°hj›^ubj2)�”}”(hhh]”hÝ)�”}”(hŒ?number of strings in the array or -1 for NULL terminated arrays”h]”hŒ?number of strings in the array or -1 for NULL terminated arrays”…”�”}”(hjº^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶^h´M°hj·^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶^h´M°hj_^ubj)�”}”(hŒ)``const char *str`` string to match with ”h]”(j)�”}”(hŒ``const char *str``”h]”j)�”}”(hjÚ^h]”hŒconst char *str”…”�”}”(hjÜ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M±hjÔ^ubj2)�”}”(hhh]”hÝ)�”}”(hŒstring to match with”h]”hŒstring to match with”…”�”}”(hjó^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jï^h´M±hjð^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jï^h´M±hj_^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjC^ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj_h]”hŒ Description”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M³hjC^ubhÝ)�”}”(hŒ€Returns index of **str** in the **array** or -EINVAL, just like match_string(). Uses sysfs_streq instead of strcmp for matching.”h]”(hŒReturns index of ”…”�”}”(hj+_h²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hj3_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+_ubhŒ in the ”…”�”}”(hj+_h²hh³Nh´Nubjõ)�”}”(hŒ **array**”h]”hŒarray”…”�”}”(hjE_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+_ubhŒW or -EINVAL, just like match_string(). Uses sysfs_streq instead of strcmp for matching.”…”�”}”(hj+_h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M²hjC^ubhÝ)�”}”(hŒThis routine will look for a string in an array of strings up to the n-th element in the array or until the first NULL element.”h]”hŒThis routine will look for a string in an array of strings up to the n-th element in the array or until the first NULL element.”…”�”}”(hj^_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MµhjC^ubhÝ)�”}”(hŒùHistorically the value of -1 for **n**, was used to search in arrays that are NULL terminated. However, the function does not make a distinction when finishing the search: either **n** elements have been compared OR the first NULL element was found.”h]”(hŒ!Historically the value of -1 for ”…”�”}”(hjm_h²hh³Nh´Nubjõ)�”}”(hŒ**n**”h]”hŒn”…”�”}”(hju_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm_ubhŒ�, was used to search in arrays that are NULL terminated. However, the function does not make a distinction when finishing the search: either ”…”�”}”(hjm_h²hh³Nh´Nubjõ)�”}”(hŒ**n**”h]”hŒn”…”�”}”(hj‡_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm_ubhŒA elements have been compared OR the first NULL element was found.”…”�”}”(hjm_h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M¸hjC^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrreplace (C function)”Œ c.strreplace”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1char * strreplace (char *str, char old, char new)”h]”j)�”}”(hŒ/char *strreplace(char *str, char old, char new)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÀ_h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¼_h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼_h²hh³jÎ_h´MÐubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÝ_h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¼_h²hh³jÎ_h´MÐubj{)�”}”(hŒ strreplace”h]”j�)�”}”(hŒ strreplace”h]”hŒ strreplace”…”�”}”(hjî_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjê_ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¼_h²hh³jÎ_h´MÐubjœ)�”}”(hŒ(char *str, char old, char new)”h]”(j¢)�”}”(hŒ char *str”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj `h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj&`h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj`ubj�)�”}”(hŒstr”h]”hŒstr”…”�”}”(hj3`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj`ubj¢)�”}”(hŒchar old”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjL`h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjH`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH`ubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hjh`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjH`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj`ubj¢)�”}”(hŒchar new”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj�`h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj}`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}`ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj�`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj`ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¼_h²hh³jÎ_h´MÐubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¸_h²hh³jÎ_h´MÐubah}”(h]”j³_ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÎ_h´MÐhjµ_h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/Replace all occurrences of character in string.”h]”hŒ/Replace all occurrences of character in string.”…”�”}”(hjÇ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MÐhjÄ`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjµ_h²hh³jÎ_h´MÐubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjß`jæjß`jç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX8**Parameters** ``char *str`` The string to operate on. ``char old`` The character being replaced. ``char new`` The character **old** is replaced with. **Description** Replaces the each **old** character with a **new** one in the given string **str**. **Return** pointer to the string **str** itself.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjé`h]”hŒ Parameters”…”�”}”(hjë`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjç`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MÔhjã`ubj )�”}”(hhh]”(j)�”}”(hŒ(``char *str`` The string to operate on. ”h]”(j)�”}”(hŒ ``char *str``”h]”j)�”}”(hjah]”hŒ char *str”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MÑhjaubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to operate on.”h]”hŒThe string to operate on.”…”�”}”(hj!ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jah´MÑhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jah´MÑhjÿ`ubj)�”}”(hŒ+``char old`` The character being replaced. ”h]”(j)�”}”(hŒ ``char old``”h]”j)�”}”(hjAah]”hŒchar old”…”�”}”(hjCah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MÒhj;aubj2)�”}”(hhh]”hÝ)�”}”(hŒThe character being replaced.”h]”hŒThe character being replaced.”…”�”}”(hjZah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jVah´MÒhjWaubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj;aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jVah´MÒhjÿ`ubj)�”}”(hŒ5``char new`` The character **old** is replaced with. ”h]”(j)�”}”(hŒ ``char new``”h]”j)�”}”(hjzah]”hŒchar new”…”�”}”(hj|ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjxaubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MÓhjtaubj2)�”}”(hhh]”hÝ)�”}”(hŒ'The character **old** is replaced with.”h]”(hŒThe character ”…”�”}”(hj“ah²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj›ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“aubhŒ is replaced with.”…”�”}”(hj“ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�ah´MÓhj�aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjtaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�ah´MÓhjÿ`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjã`ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÇah]”hŒ Description”…”�”}”(hjÉah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MÕhjã`ubhÝ)�”}”(hŒSReplaces the each **old** character with a **new** one in the given string **str**.”h]”(hŒReplaces the each ”…”�”}”(hjÝah²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjåah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝaubhŒ character with a ”…”�”}”(hjÝah²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj÷ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝaubhŒ one in the given string ”…”�”}”(hjÝah²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝaubhŒ.”…”�”}”(hjÝah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MÔhjã`ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj$bh]”hŒReturn”…”�”}”(hj&bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"bubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MÖhjã`ubhÝ)�”}”(hŒ%pointer to the string **str** itself.”h]”(hŒpointer to the string ”…”�”}”(hj:bh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hjBbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:bubhŒ itself.”…”�”}”(hj:bh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´M×hjã`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemcpy_and_pad (C function)”Œc.memcpy_and_pad”hNt”auh1hýhhìh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒYvoid memcpy_and_pad (void *dest, size_t dest_len, const void *src, size_t count, int pad)”h]”j)�”}”(hŒXvoid memcpy_and_pad(void *dest, size_t dest_len, const void *src, size_t count, int pad)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{bh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjwbh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Måubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwbh²hh³j‰bh´Måubj{)�”}”(hŒmemcpy_and_pad”h]”j�)�”}”(hŒmemcpy_and_pad”h]”hŒmemcpy_and_pad”…”�”}”(hjœbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜bubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjwbh²hh³j‰bh´Måubjœ)�”}”(hŒE(void *dest, size_t dest_len, const void *src, size_t count, int pad)”h]”(j¢)�”}”(hŒ void *dest”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¸bh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj´bubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´bubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÔbh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj´bubj�)�”}”(hŒdest”h]”hŒdest”…”�”}”(hjábh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj°bubj¢)�”}”(hŒsize_t dest_len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjýbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÿbŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jžbsbŒc.memcpy_and_pad”†”asbuh1hhjöbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöbubj�)�”}”(hŒdest_len”h]”hŒdest_len”…”�”}”(hj+ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj°bubj¢)�”}”(hŒconst void *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjDch²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj@cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@cubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj_ch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@cubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj{ch²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj@cubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjˆch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj°bubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¤ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¦cŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jcŒc.memcpy_and_pad”†”asbuh1hhj�cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�cubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÐch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj°bubj¢)�”}”(hŒint pad”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjéch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjåcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåcubj�)�”}”(hŒpad”h]”hŒpad”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj°bubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjwbh²hh³j‰bh´Måubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjsbh²hh³j‰bh´Måubah}”(h]”jnbah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‰bh´Måhjpbh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Copy one buffer to another with padding”h]”hŒ'Copy one buffer to another with padding”…”�”}”(hj/dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Måhj,dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjpbh²hh³j‰bh´Måubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjGdjæjGdjç‰jè‰jé‰uh1jh²hhhìh³Nh´Nubjë)�”}”(hX **Parameters** ``void *dest`` Where to copy to ``size_t dest_len`` The destination buffer size ``const void *src`` Where to copy from ``size_t count`` The number of bytes to copy ``int pad`` Character to use for padding if space is left in destination.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjQdh]”hŒ Parameters”…”�”}”(hjSdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjOdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MéhjKdubj )�”}”(hhh]”(j)�”}”(hŒ ``void *dest`` Where to copy to ”h]”(j)�”}”(hŒ``void *dest``”h]”j)�”}”(hjpdh]”hŒ void *dest”…”�”}”(hjrdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjndubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mæhjjdubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy to”h]”hŒWhere to copy to”…”�”}”(hj‰dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j…dh´Mæhj†dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…dh´Mæhjgdubj)�”}”(hŒ0``size_t dest_len`` The destination buffer size ”h]”(j)�”}”(hŒ``size_t dest_len``”h]”j)�”}”(hj©dh]”hŒsize_t dest_len”…”�”}”(hj«dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§dubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mçhj£dubj2)�”}”(hhh]”hÝ)�”}”(hŒThe destination buffer size”h]”hŒThe destination buffer size”…”�”}”(hjÂdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¾dh´Mçhj¿dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾dh´Mçhjgdubj)�”}”(hŒ'``const void *src`` Where to copy from ”h]”(j)�”}”(hŒ``const void *src``”h]”j)�”}”(hjâdh]”hŒconst void *src”…”�”}”(hjädh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàdubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MèhjÜdubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy from”h]”hŒWhere to copy from”…”�”}”(hjûdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷dh´Mèhjødubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷dh´Mèhjgdubj)�”}”(hŒ-``size_t count`` The number of bytes to copy ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hjeh]”hŒ size_t count”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Méhjeubj2)�”}”(hhh]”hÝ)�”}”(hŒThe number of bytes to copy”h]”hŒThe number of bytes to copy”…”�”}”(hj4eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0eh´Méhj1eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0eh´Méhjgdubj)�”}”(hŒI``int pad`` Character to use for padding if space is left in destination.”h]”(j)�”}”(hŒ ``int pad``”h]”j)�”}”(hjTeh]”hŒint pad”…”�”}”(hjVeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjReubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´MëhjNeubj2)�”}”(hhh]”hÝ)�”}”(hŒ=Character to use for padding if space is left in destination.”h]”hŒ=Character to use for padding if space is left in destination.”…”�”}”(hjmeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:27: ./lib/string_helpers.c”h´Mêhjjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjNeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jieh´Mëhjgdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjKdubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhhìh²hh³Nh´Nubeh}”(h]”Œstring-conversions”ah ]”h"]”Œstring conversions”ah$]”h&]”uh1hµhhËh²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒString Manipulation”h]”hŒString Manipulation”…”�”}”(hj eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj�eh²hh³hÊh´Kubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œunsafe_memcpy (C macro)”Œc.unsafe_memcpy”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ unsafe_memcpy”h]”j)�”}”(hŒ unsafe_memcpy”h]”j{)�”}”(hŒ unsafe_memcpy”h]”j�)�”}”(hjÁeh]”hŒ unsafe_memcpy”…”�”}”(hjËeh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇeubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÃeh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K|ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¿eh²hh³jÞeh´K|ubah}”(h]”jºeah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÞeh´K|hj¼eh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¼eh²hh³jÞeh´K|ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj÷ejæj÷ejç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ2``unsafe_memcpy (dst, src, bytes, justification)``”h]”j)�”}”(hjýeh]”hŒ.unsafe_memcpy (dst, src, bytes, justification)”…”�”}”(hjÿeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûeubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K~hj�eh²hubj•)�”}”(hŒ6memcpy implementation with no FORTIFY bounds checking ”h]”hÝ)�”}”(hŒ5memcpy implementation with no FORTIFY bounds checking”h]”hŒ5memcpy implementation with no FORTIFY bounds checking”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K|hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j%fh´K|hj�eh²hubjë)�”}”(hX,**Parameters** ``dst`` Destination memory address to write to ``src`` Source memory address to read from ``bytes`` How many bytes to write to **dst** from **src** ``justification`` Free-form text or comment describing why the use is needed **Description** This should be used for corner cases where the compiler cannot do the right thing, or during transitions between APIs, etc. It should be used very rarely, and includes a place for justification detailing where bounds checking has happened, and why existing solutions cannot be employed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj2fh]”hŒ Parameters”…”�”}”(hj4fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0fubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K€hj,fubj )�”}”(hhh]”(j)�”}”(hŒ/``dst`` Destination memory address to write to ”h]”(j)�”}”(hŒ``dst``”h]”j)�”}”(hjQfh]”hŒdst”…”�”}”(hjSfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjOfubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K~hjKfubj2)�”}”(hhh]”hÝ)�”}”(hŒ&Destination memory address to write to”h]”hŒ&Destination memory address to write to”…”�”}”(hjjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jffh´K~hjgfubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjKfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jffh´K~hjHfubj)�”}”(hŒ+``src`` Source memory address to read from ”h]”(j)�”}”(hŒ``src``”h]”j)�”}”(hjŠfh]”hŒsrc”…”�”}”(hjŒfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆfubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Khj„fubj2)�”}”(hhh]”hÝ)�”}”(hŒ"Source memory address to read from”h]”hŒ"Source memory address to read from”…”�”}”(hj£fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸfh´Khj fubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸfh´KhjHfubj)�”}”(hŒ:``bytes`` How many bytes to write to **dst** from **src** ”h]”(j)�”}”(hŒ ``bytes``”h]”j)�”}”(hjÃfh]”hŒbytes”…”�”}”(hjÅfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁfubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K€hj½fubj2)�”}”(hhh]”hÝ)�”}”(hŒ/How many bytes to write to **dst** from **src**”h]”(hŒHow many bytes to write to ”…”�”}”(hjÜfh²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjäfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜfubhŒ from ”…”�”}”(hjÜfh²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjöfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜfubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØfh´K€hjÙfubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj½fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØfh´K€hjHfubj)�”}”(hŒM``justification`` Free-form text or comment describing why the use is needed ”h]”(j)�”}”(hŒ``justification``”h]”j)�”}”(hjgh]”hŒ justification”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K�hjgubj2)�”}”(hhh]”hÝ)�”}”(hŒ:Free-form text or comment describing why the use is needed”h]”hŒ:Free-form text or comment describing why the use is needed”…”�”}”(hj5gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j1gh´K�hj2gubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1gh´K�hjHfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj,fubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjWgh]”hŒ Description”…”�”}”(hjYgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjUgubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Kƒhj,fubhÝ)�”}”(hXThis should be used for corner cases where the compiler cannot do the right thing, or during transitions between APIs, etc. It should be used very rarely, and includes a place for justification detailing where bounds checking has happened, and why existing solutions cannot be employed.”h]”hXThis should be used for corner cases where the compiler cannot do the right thing, or during transitions between APIs, etc. It should be used very rarely, and includes a place for justification detailing where bounds checking has happened, and why existing solutions cannot be employed.”…”�”}”(hjmgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K‚hj,fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrnlen (C function)”Œ c.strnlen”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒF__kernel_size_t strnlen (const char * const p, __kernel_size_t maxlen)”h]”j)�”}”(hŒD__kernel_size_t strnlen(const char *const p, __kernel_size_t maxlen)”h]”(h)�”}”(hhh]”j�)�”}”(hŒ__kernel_size_t”h]”hŒ__kernel_size_t”…”�”}”(hjŸgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¡gŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œstrnlen”sbŒ c.strnlen”†”asbuh1hhj˜gh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˜gh²hh³jÀgh´K ubj{)�”}”(hŒstrnlen”h]”j�)�”}”(hj½gh]”hŒstrnlen”…”�”}”(hjÓgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏgubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj˜gh²hh³jÀgh´K ubjœ)�”}”(hŒ-(const char *const p, __kernel_size_t maxlen)”h]”(j¢)�”}”(hŒconst char *const p”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjîgh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjêgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêgubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjêgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêgubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj%hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjêgubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hj2hh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjêgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêgubj�)�”}”(hjïh]”hŒp”…”�”}”(hjMhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjægubj¢)�”}”(hŒ__kernel_size_t maxlen”h]”(h)�”}”(hhh]”j�)�”}”(hŒ__kernel_size_t”h]”hŒ__kernel_size_t”…”�”}”(hjhhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjehubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jjhŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j»gŒ c.strnlen”†”asbuh1hhjahubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjahubj�)�”}”(hŒmaxlen”h]”hŒmaxlen”…”�”}”(hj”hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjahubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjægubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj˜gh²hh³jÀgh´K ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj”gh²hh³jÀgh´K ubah}”(h]”j�gah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÀgh´K hj‘gh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ=Return bounded count of characters in a NUL-terminated string”h]”hŒ=Return bounded count of characters in a NUL-terminated string”…”�”•}”(hj¾hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K hj»hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‘gh²hh³jÀgh´K ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÖhjæjÖhjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX&**Parameters** ``const char * const p`` pointer to NUL-terminated string to count. ``__kernel_size_t maxlen`` maximum number of characters to count. **Description** Returns number of characters in **p** (NOT including the final NUL), or **maxlen**, if no NUL has been found up to there.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjàhh]”hŒ Parameters”…”�”}”(hjâhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K¤hjÚhubj )�”}”(hhh]”(j)�”}”(hŒD``const char * const p`` pointer to NUL-terminated string to count. ”h]”(j)�”}”(hŒ``const char * const p``”h]”j)�”}”(hjÿhh]”hŒconst char * const p”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýhubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K¢hjùhubj2)�”}”(hhh]”hÝ)�”}”(hŒ*pointer to NUL-terminated string to count.”h]”hŒ*pointer to NUL-terminated string to count.”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jih´K¢hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jih´K¢hjöhubj)�”}”(hŒB``__kernel_size_t maxlen`` maximum number of characters to count. ”h]”(j)�”}”(hŒ``__kernel_size_t maxlen``”h]”j)�”}”(hj8ih]”hŒ__kernel_size_t maxlen”…”�”}”(hj:ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K£hj2iubj2)�”}”(hhh]”hÝ)�”}”(hŒ&maximum number of characters to count.”h]”hŒ&maximum number of characters to count.”…”�”}”(hjQih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jMih´K£hjNiubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jMih´K£hjöhubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÚhubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjsih]”hŒ Description”…”�”}”(hjuih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjqiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K¥hjÚhubhÝ)�”}”(hŒyReturns number of characters in **p** (NOT including the final NUL), or **maxlen**, if no NUL has been found up to there.”h]”(hŒ Returns number of characters in ”…”�”}”(hj‰ih²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj‘ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‰iubhŒ# (NOT including the final NUL), or ”…”�”}”(hj‰ih²hh³Nh´Nubjõ)�”}”(hŒ **maxlen**”h]”hŒmaxlen”…”�”}”(hj£ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‰iubhŒ', if no NUL has been found up to there.”…”�”}”(hj‰ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´K¤hjÚhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrlen (C macro)”Œc.strlen”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒstrlen”h]”j)�”}”(hŒstrlen”h]”j{)�”}”(hŒstrlen”h]”j�)�”}”(hjÖih]”hŒstrlen”…”�”}”(hjàih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜiubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjØih²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´KÃubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÔih²hh³jóih´KÃubah}”(h]”jÏiah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jóih´KÃhjÑih²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÑih²hh³jóih´KÃubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj jjæj jjç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ``strlen (p)``”h]”j)�”}”(hjjh]”hŒ strlen (p)”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´KÅhj�eh²hubj•)�”}”(hŒ6Return count of characters in a NUL-terminated string ”h]”hÝ)�”}”(hŒ5Return count of characters in a NUL-terminated string”h]”hŒ5Return count of characters in a NUL-terminated string”…”�”}”(hj,jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´KÃhj(jubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j:jh´KÃhj�eh²hubjë)�”}”(hXu**Parameters** ``p`` pointer to NUL-terminated string to count. **Description** Do not use this function unless the string length is known at compile-time. When **p** is unterminated, this function may crash or return unexpected counts that could lead to memory content exposures. Prefer strnlen(). Returns number of characters in **p** (NOT including the final NUL).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjGjh]”hŒ Parameters”…”�”}”(hjIjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´KÇhjAjubj )�”}”(hhh]”j)�”}”(hŒ1``p`` pointer to NUL-terminated string to count. ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjfjh]”hŒp”…”�”}”(hjhjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´KÅhj`jubj2)�”}”(hhh]”hÝ)�”}”(hŒ*pointer to NUL-terminated string to count.”h]”hŒ*pointer to NUL-terminated string to count.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{jh´KÅhj|jubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{jh´KÅhj]jubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjAjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¡jh]”hŒ Description”…”�”}”(hj£jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´KÇhjAjubhÝ)�”}”(hŒÚDo not use this function unless the string length is known at compile-time. When **p** is unterminated, this function may crash or return unexpected counts that could lead to memory content exposures. Prefer strnlen().”h]”(hŒQDo not use this function unless the string length is known at compile-time. When ”…”�”}”(hj·jh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj¿jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·jubhŒ„ is unterminated, this function may crash or return unexpected counts that could lead to memory content exposures. Prefer strnlen().”…”�”}”(hj·jh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´KÆhjAjubhÝ)�”}”(hŒDReturns number of characters in **p** (NOT including the final NUL).”h]”(hŒ Returns number of characters in ”…”�”}”(hjØjh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjàjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØjubhŒ (NOT including the final NUL).”…”�”}”(hjØjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´KËhjAjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrlcat (C function)”Œ c.strlcat”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCsize_t strlcat (char * const p, const char * const q, size_t avail)”h]”j)�”}”(hŒ@size_t strlcat(char *const p, const char *const q, size_t avail)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jkŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œstrlcat”sbŒ c.strlcat”†”asbuh1hhjkh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjkh²hh³j=kh´Mubj{)�”}”(hŒstrlcat”h]”j�)�”}”(hj:kh]”hŒstrlcat”…”�”}”(hjPkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLkubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjkh²hh³j=kh´Mubjœ)�”}”(hŒ2(char *const p, const char *const q, size_t avail)”h]”(j¢)�”}”(hŒ char *const p”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjkkh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjgkubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjykh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgkubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‡kh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjgkubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hj”kh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjgkubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgkubj�)�”}”(hjïh]”hŒp”…”�”}”(hj¯kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjgkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjckubj¢)�”}”(hŒconst char *const q”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÇkh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÃkubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃkubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjâkh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÃkubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃkubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjþkh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÃkubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÃkubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃkubj�)�”}”(hŒq”h]”hŒq”…”�”}”(hj&lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÃkubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjckubj¢)�”}”(hŒ size_t avail”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjBlh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jDlŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j8kŒ c.strlcat”†”asbuh1hhj;lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;lubj�)�”}”(hŒavail”h]”hŒavail”…”�”}”(hjnlh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjckubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjkh²hh³j=kh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjkh²hh³j=kh´Mubah}”(h]”j kah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j=kh´Mhjkh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Append a string to an existing string”h]”hŒ%Append a string to an existing string”…”�”}”(hj˜lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Mhj•lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjkh²hh³j=kh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj°ljæj°ljç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX **Parameters** ``char * const p`` pointer to ``NUL-terminated`` string to append to ``const char * const q`` pointer to ``NUL-terminated`` string to append from ``size_t avail`` Maximum bytes available in **p** **Description** Appends ``NUL-terminated`` string **q** after the ``NUL-terminated`` string at **p**, but will not write beyond **avail** bytes total, potentially truncating the copy from **q**. **p** will stay ``NUL-terminated`` only if a ``NUL`` already existed within the **avail** bytes of **p**. If so, the resulting number of bytes copied from **q** will be at most "**avail** - strlen(**p**) - 1". Do not use this function. While FORTIFY_SOURCE tries to avoid read and write overflows, this is only possible when the sizes of **p** and **q** are known to the compiler. Prefer building the string with formatting, via scnprintf(), seq_buf, or similar. Returns total bytes that _would_ have been contained by **p** regardless of truncation, similar to snprintf(). If return value is >= **avail**, the string has been truncated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjºlh]”hŒ Parameters”…”�”}”(hj¼lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¸lubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M!hj´lubj )�”}”(hhh]”(j)�”}”(hŒE``char * const p`` pointer to ``NUL-terminated`` string to append to ”h]”(j)�”}”(hŒ``char * const p``”h]”j)�”}”(hjÙlh]”hŒchar * const p”…”�”}”(hjÛlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×lubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´MhjÓlubj2)�”}”(hhh]”hÝ)�”}”(hŒ1pointer to ``NUL-terminated`` string to append to”h]”(hŒ pointer to ”…”�”}”(hjòlh²hh³Nh´Nubj)�”}”(hŒ``NUL-terminated``”h]”hŒNUL-terminated”…”�”}”(hjúlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòlubhŒ string to append to”…”�”}”(hjòlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jîlh´Mhjïlubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîlh´MhjÐlubj)�”}”(hŒM``const char * const q`` pointer to ``NUL-terminated`` string to append from ”h]”(j)�”}”(hŒ``const char * const q``”h]”j)�”}”(hj$mh]”hŒconst char * const q”…”�”}”(hj&mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"mubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M hjmubj2)�”}”(hhh]”hÝ)�”}”(hŒ3pointer to ``NUL-terminated`` string to append from”h]”(hŒ pointer to ”…”�”}”(hj=mh²hh³Nh´Nubj)�”}”(hŒ``NUL-terminated``”h]”hŒNUL-terminated”…”�”}”(hjEmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=mubhŒ string to append from”…”�”}”(hj=mh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j9mh´M hj:mubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9mh´M hjÐlubj)�”}”(hŒ2``size_t avail`` Maximum bytes available in **p** ”h]”(j)�”}”(hŒ``size_t avail``”h]”j)�”}”(hjomh]”hŒ size_t avail”…”�”}”(hjqmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmmubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M!hjimubj2)�”}”(hhh]”hÝ)�”}”(hŒ Maximum bytes available in **p**”h]”(hŒMaximum bytes available in ”…”�”}”(hjˆmh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj�mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆmubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j„mh´M!hj…mubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjimubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„mh´M!hjÐlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj´lubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¸mh]”hŒ Description”…”�”}”(hjºmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M#hj´lubhÝ)�”}”(hX„Appends ``NUL-terminated`` string **q** after the ``NUL-terminated`` string at **p**, but will not write beyond **avail** bytes total, potentially truncating the copy from **q**. **p** will stay ``NUL-terminated`` only if a ``NUL`` already existed within the **avail** bytes of **p**. If so, the resulting number of bytes copied from **q** will be at most "**avail** - strlen(**p**) - 1".”h]”(hŒAppends ”…”�”}”(hjÎmh²hh³Nh´Nubj)�”}”(hŒ``NUL-terminated``”h]”hŒNUL-terminated”…”�”}”(hjÖmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎmubhŒ string ”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjèmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ after the ”…”�”}”(hjÎmh²hh³Nh´Nubj)�”}”(hŒ``NUL-terminated``”h]”hŒNUL-terminated”…”�”}”(hjúmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎmubhŒ string at ”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ, but will not write beyond ”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ **avail**”h]”hŒavail”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ3 bytes total, potentially truncating the copy from ”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hj0nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ. ”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjBnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ will stay ”…”�”}”(hjÎmh²hh³Nh´Nubj)�”}”(hŒ``NUL-terminated``”h]”hŒNUL-terminated”…”�”}”(hjTnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎmubhŒ only if a ”…”�”}”(hjÎmh²hh³Nh´Nubj)�”}”(hŒ``NUL``”h]”hŒNUL”…”�”}”(hjfnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎmubhŒ already existed within the ”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ **avail**”h]”hŒavail”…”�”}”(hjxnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ bytes of ”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjŠnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ3. If so, the resulting number of bytes copied from ”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjœnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ will be at most “”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ **avail**”h]”hŒavail”…”�”}”(hj®nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ - strlen(”…”�”}”(hjÎmh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjÀnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎmubhŒ ) - 1â€�.”…”�”}”(hjÎmh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M"hj´lubhÝ)�”}”(hŒüDo not use this function. While FORTIFY_SOURCE tries to avoid read and write overflows, this is only possible when the sizes of **p** and **q** are known to the compiler. Prefer building the string with formatting, via scnprintf(), seq_buf, or similar.”h]”(hŒ€Do not use this function. While FORTIFY_SOURCE tries to avoid read and write overflows, this is only possible when the sizes of ”…”�”}”(hjÙnh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjánh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙnubhŒ and ”…”�”}”(hjÙnh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjónh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙnubhŒm are known to the compiler. Prefer building the string with formatting, via scnprintf(), seq_buf, or similar.”…”�”}”(hjÙnh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M)hj´lubhÝ)�”}”(hŒ®Returns total bytes that _would_ have been contained by **p** regardless of truncation, similar to snprintf(). If return value is >= **avail**, the string has been truncated.”h]”(hŒ8Returns total bytes that _would_ have been contained by ”…”�”}”(hj oh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj oubhŒH regardless of truncation, similar to snprintf(). If return value is >= ”…”�”}”(hj oh²hh³Nh´Nubjõ)�”}”(hŒ **avail**”h]”hŒavail”…”�”}”(hj&oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj oubhŒ , the string has been truncated.”…”�”}”(hj oh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M.hj´lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrcat (C function)”Œc.strcat”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-char * strcat (char * const p, const char *q)”h]”j)�”}”(hŒ*char *strcat(char *const p, const char *q)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj_oh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj[oh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnoh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[oh²hh³jmoh´M\ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj|oh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj[oh²hh³jmoh´M\ubj{)�”}”(hŒstrcat”h]”j�)�”}”(hŒstrcat”h]”hŒstrcat”…”�”}”(hj�oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰oubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj[oh²hh³jmoh´M\ubjœ)�”}”(hŒ(char *const p, const char *q)”h]”(j¢)�”}”(hŒ char *const p”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj©oh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¥oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥oubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÅoh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¥oubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÒoh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¥oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßoh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥oubj�)�”}”(hjïh]”hŒp”…”�”}”(hjíoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¡oubj¢)�”}”(hŒ const char *q”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.ph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjah"]”h$]”h&]”uh1j1hj‰qh²hh³j›qh´Mvubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjªqh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‰qh²hh³j›qh´Mvubj{)�”}”(hŒstrncat”h]”j�)�”}”(hŒstrncat”h]”hŒstrncat”…”�”}”(hj»qh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·qubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‰qh²hh³j›qh´Mvubjœ)�”}”(hŒ;(char *const p, const char *const q, __kernel_size_t count)”h]”(j¢)�”}”(hŒ char *const p”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj×qh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÓqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåqh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÓqubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjóqh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÓqubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÓqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÓqubj�)�”}”(hjïh]”hŒp”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÏqubj¢)�”}”(hŒconst char *const q”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj3rh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/rubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjNrh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj/rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/rubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjjrh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj/rubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjwrh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/rubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj’rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÏqubj¢)�”}”(hŒ__kernel_size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒ__kernel_size_t”h]”hŒ__kernel_size_t”…”�”}”(hj­rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¯rŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j½qsbŒ c.strncat”†”asbuh1hhj¦rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍrh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦rubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÛrh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÏqubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‰qh²hh³j›qh´Mvubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj…qh²hh³j›qh´Mvubah}”(h]”j€qah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j›qh´Mvhj‚qh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Append a string to an existing string”h]”hŒ%Append a string to an existing string”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Mvhjsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‚qh²hh³j›qh´Mvubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjsjæjsjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX~**Parameters** ``char * const p`` pointer to NUL-terminated string to append to ``const char * const q`` pointer to source string to append from ``__kernel_size_t count`` Maximum bytes to read from **q** **Description** Appends at most **count** bytes from **q** (stopping at the first NUL byte) after the NUL-terminated string at **p**. **p** will be NUL-terminated. Do not use this function. While FORTIFY_SOURCE tries to avoid read and write overflows, this is only possible when the sizes of **p** and **q** are known to the compiler. Prefer building the string with formatting, via scnprintf() or similar. Returns **p**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj'sh]”hŒ Parameters”…”�”}”(hj)sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%subah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Mzhj!subj )�”}”(hhh]”(j)�”}”(hŒA``char * const p`` pointer to NUL-terminated string to append to ”h]”(j)�”}”(hŒ``char * const p``”h]”j)�”}”(hjFsh]”hŒchar * const p”…”�”}”(hjHsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDsubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Mxhj@subj2)�”}”(hhh]”hÝ)�”}”(hŒ-pointer to NUL-terminated string to append to”h]”hŒ-pointer to NUL-terminated string to append to”…”�”}”(hj_sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[sh´Mxhj\subah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj@subeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[sh´Mxhj=subj)�”}”(hŒA``const char * const q`` pointer to source string to append from ”h]”(j)�”}”(hŒ``const char * const q``”h]”j)�”}”(hjsh]”hŒconst char * const q”…”�”}”(hj�sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Myhjysubj2)�”}”(hhh]”hÝ)�”}”(hŒ'pointer to source string to append from”h]”hŒ'pointer to source string to append from”…”�”}”(hj˜sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”sh´Myhj•subah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjysubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”sh´Myhj=subj)�”}”(hŒ;``__kernel_size_t count`` Maximum bytes to read from **q** ”h]”(j)�”}”(hŒ``__kernel_size_t count``”h]”j)�”}”(hj¸sh]”hŒ__kernel_size_t count”…”�”}”(hjºsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Mzhj²subj2)�”}”(hhh]”hÝ)�”}”(hŒ Maximum bytes to read from **q**”h]”(hŒMaximum bytes to read from ”…”�”}”(hjÑsh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjÙsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑsubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÍsh´MzhjÎsubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj²subeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍsh´Mzhj=subeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj!subhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjth]”hŒ Description”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿsubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M|hj!subhÝ)�”}”(hŒ“Appends at most **count** bytes from **q** (stopping at the first NUL byte) after the NUL-terminated string at **p**. **p** will be NUL-terminated.”h]”(hŒAppends at most ”…”�”}”(hjth²hh³Nh´Nubjõ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtubhŒ bytes from ”…”�”}”(hjth²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hj1th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtubhŒE (stopping at the first NUL byte) after the NUL-terminated string at ”…”�”}”(hjth²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjCth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtubhŒ. ”…”�”}”(hjth²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjUth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtubhŒ will be NUL-terminated.”…”�”}”(hjth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M{hj!subhÝ)�”}”(hŒòDo not use this function. While FORTIFY_SOURCE tries to avoid read and write overflows, this is only possible when the sizes of **p** and **q** are known to the compiler. Prefer building the string with formatting, via scnprintf() or similar.”h]”(hŒ€Do not use this function. While FORTIFY_SOURCE tries to avoid read and write overflows, this is only possible when the sizes of ”…”�”}”(hjnth²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjvth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjntubhŒ and ”…”�”}”(hjnth²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjˆth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjntubhŒc are known to the compiler. Prefer building the string with formatting, via scnprintf() or similar.”…”�”}”(hjnth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´Mhj!subhÝ)�”}”(hŒReturns **p**.”h]”(hŒReturns ”…”�”}”(hj¡th²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj©th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡tubhŒ.”…”�”}”(hj¡th²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´M„hj!subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrcpy (C function)”Œc.strcpy”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4char * strcpy (char * const p, const char * const q)”h]”j)�”}”(hŒ0char *strcpy(char *const p, const char *const q)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjâth²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞth²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´MÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñth²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞth²hh³jðth´MÐubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÿth²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞth²hh³jðth´MÐubj{)�”}”(hŒstrcpy”h]”j�)�”}”(hŒstrcpy”h]”hŒstrcpy”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj uubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÞth²hh³jðth´MÐubjœ)�”}”(hŒ$(char *const p, const char *const q)”h]”(j¢)�”}”(hŒ char *const p”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj,uh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj(uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(uubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjHuh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj(uubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjUuh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj(uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(uubj�)�”}”(hjïh]”hŒp”…”�”}”(hjpuh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$uubj¢)�”}”(hŒconst char *const q”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjˆuh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj„uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„uubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj£uh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj„uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„uubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¿uh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj„uubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÌuh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj„uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„uubj�)�”}”(hj(lh]”hŒq”…”�”}”(hjçuh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$uubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÞth²hh³jðth´MÐubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÚth²hh³jðth´MÐubah}”(h]”jÕtah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jðth´MÐhj×th²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Copy a string into another string buffer”h]”hŒ(Copy a string into another string buffer”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´MÐhj vh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj×th²hh³jðth´MÐubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj(vjæj(vjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX¡**Parameters** ``char * const p`` pointer to destination of copy ``const char * const q`` pointer to NUL-terminated source string to copy **Description** Do not use this function. While FORTIFY_SOURCE tries to avoid overflows, this is only possible when the sizes of **q** and **p** are known to the compiler. Prefer strscpy(), though note its different return values for detecting truncation. Returns **p**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj2vh]”hŒ Parameters”…”�”}”(hj4vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´MÔhj,vubj )�”}”(hhh]”(j)�”}”(hŒ2``char * const p`` pointer to destination of copy ”h]”(j)�”}”(hŒ``char * const p``”h]”j)�”}”(hjQvh]”hŒchar * const p”…”�”}”(hjSvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjOvubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´MÒhjKvubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to destination of copy”h]”hŒpointer to destination of copy”…”�”}”(hjjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jfvh´MÒhjgvubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjKvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jfvh´MÒhjHvubj)�”}”(hŒI``const char * const q`` pointer to NUL-terminated source string to copy ”h]”(j)�”}”(hŒ``const char * const q``”h]”j)�”}”(hjŠvh]”hŒconst char * const q”…”�”}”(hjŒvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆvubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´MÓhj„vubj2)�”}”(hhh]”hÝ)�”}”(hŒ/pointer to NUL-terminated source string to copy”h]”hŒ/pointer to NUL-terminated source string to copy”…”�”}”(hj£vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸvh´MÓhj vubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸvh´MÓhjHvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj,vubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÅvh]”hŒ Description”…”�”}”(hjÇvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃvubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´MÕhj,vubhÝ)�”}”(hŒïDo not use this function. While FORTIFY_SOURCE tries to avoid overflows, this is only possible when the sizes of **q** and **p** are known to the compiler. Prefer strscpy(), though note its different return values for detecting truncation.”h]”(hŒqDo not use this function. While FORTIFY_SOURCE tries to avoid overflows, this is only possible when the sizes of ”…”�”}”(hjÛvh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjãvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛvubhŒ and ”…”�”}”(hjÛvh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjõvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛvubhŒo are known to the compiler. Prefer strscpy(), though note its different return values for detecting truncation.”…”�”}”(hjÛvh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´MÔhj,vubhÝ)�”}”(hŒReturns **p**.”h]”(hŒReturns ”…”�”}”(hjwh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjwubhŒ.”…”�”}”(hjwh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:33: ./include/linux/fortify-string.h”h´MÙhj,vubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrncasecmp (C function)”Œ c.strncasecmp”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjKwh²hh³j]wh´K$ubj{)�”}”(hŒ strncasecmp”h]”j�)�”}”(hŒ strncasecmp”h]”hŒ strncasecmp”…”�”}”(hjpwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlwubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjKwh²hh³j]wh´K$ubjœ)�”}”(hŒ,(const char *s1, const char *s2, size_t len)”h]”(j¢)�”}”(hŒconst char *s1”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjŒwh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjˆwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆwubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj§wh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjˆwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆwubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÃwh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjˆwubj�)�”}”(hŒs1”h]”hŒs1”…”�”}”(hjÐwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„wubj¢)�”}”(hŒconst char *s2”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjéwh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjåwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåwubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjåwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåwubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj xh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjåwubj�)�”}”(hŒs2”h]”hŒs2”…”�”}”(hj-xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„wubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjIxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jKxŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jrwsbŒ c.strncasecmp”†”asbuh1hhjBxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjixh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBxubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjwxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjBxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„wubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjKwh²hh³j]wh´K$ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjGwh²hh³j]wh´K$ubah}”(h]”jBwah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j]wh´K$hjDwh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2Case insensitive, length-limited string comparison”h]”hŒ2Case insensitive, length-limited string comparison”…”�”}”(hj¡xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K$hjžxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjDwh²hh³j]wh´K$ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¹xjæj¹xjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒ”**Parameters** ``const char *s1`` One string ``const char *s2`` The other string ``size_t len`` the maximum number of characters to compare”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÃxh]”hŒ Parameters”…”�”}”(hjÅxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K(hj½xubj )�”}”(hhh]”(j)�”}”(hŒ``const char *s1`` One string ”h]”(j)�”}”(hŒ``const char *s1``”h]”j)�”}”(hjâxh]”hŒconst char *s1”…”�”}”(hjäxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàxubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K%hjÜxubj2)�”}”(hhh]”hÝ)�”}”(hŒ One string”h]”hŒ One string”…”�”}”(hjûxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷xh´K%hjøxubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷xh´K%hjÙxubj)�”}”(hŒ$``const char *s2`` The other string ”h]”(j)�”}”(hŒ``const char *s2``”h]”j)�”}”(hjyh]”hŒconst char *s2”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K&hjyubj2)�”}”(hhh]”hÝ)�”}”(hŒThe other string”h]”hŒThe other string”…”�”}”(hj4yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0yh´K&hj1yubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0yh´K&hjÙxubj)�”}”(hŒ:``size_t len`` the maximum number of characters to compare”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjTyh]”hŒ size_t len”…”�”}”(hjVyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRyubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K(hjNyubj2)�”}”(hhh]”hÝ)�”}”(hŒ+the maximum number of characters to compare”h]”hŒ+the maximum number of characters to compare”…”�”}”(hjmyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K'hjjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjNyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jiyh´K(hjÙxubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj½xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstpcpy (C function)”Œc.stpcpy”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEchar * stpcpy (char *__restrict__ dest, const char *__restrict__ src)”h]”j)�”}”(hŒCchar *stpcpy(char *__restrict__ dest, const char *__restrict__ src)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj®yh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjªyh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªyh²hh³j¼yh´K°ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjËyh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjªyh²hh³j¼yh´K°ubj{)�”}”(hŒstpcpy”h]”j�)�”}”(hŒstpcpy”h]”hŒstpcpy”…”�”}”(hjÜyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØyubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjªyh²hh³j¼yh´K°ubjœ)�”}”(hŒ7(char *__restrict__ dest, const char *__restrict__ src)”h]”(j¢)�”}”(hŒchar *__restrict__ dest”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjøyh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjôyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôyubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjôyubhŒ __restrict__”…”�”}”(hjôyh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôyubj�)�”}”(hŒdest”h]”hŒdest”…”�”}”(hj3zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjðyubj¢)�”}”(hŒconst char *__restrict__ src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjLzh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjHzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHzubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjgzh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjHzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHzubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒzh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjHzubhŒ __restrict__”…”�”}”(hjHzh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHzubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj¢zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjðyubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjªyh²hh³j¼yh´K°ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¦yh²hh³j¼yh´K°ubah}”(h]”j¡yah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¼yh´K°hj£yh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ€copy a string from src to dest returning a pointer to the new end of dest, including src's ``NUL-terminator``. May overrun dest.”h]”(hŒ]copy a string from src to dest returning a pointer to the new end of dest, including src’s ”…”�”}”(hjÌzh²hh³Nh´Nubj)�”}”(hŒ``NUL-terminator``”h]”hŒNUL-terminator”…”�”}”(hjÔzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌzubhŒ. May overrun dest.”…”�”}”(hjÌzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K°hjÉzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj£yh²hh³j¼yh´K°ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjözjæjözjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX¤**Parameters** ``char *__restrict__ dest`` pointer to end of string being copied into. Must be large enough to receive copy. ``const char *__restrict__ src`` pointer to the beginning of string being copied from. Must not overlap dest. **Description** stpcpy differs from strcpy in a key way: the return value is a pointer to the new ``NUL-terminating`` character in **dest**. (For strcpy, the return value is a pointer to the start of **dest**). This interface is considered unsafe as it doesn't perform bounds checking of the inputs. As such it's not recommended for usage. Instead, its definition is provided in case the compiler lowers other libcalls to stpcpy.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj{h]”hŒ Parameters”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþzubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K´hjúzubj )�”}”(hhh]”(j)�”}”(hŒn``char *__restrict__ dest`` pointer to end of string being copied into. Must be large enough to receive copy. ”h]”(j)�”}”(hŒ``char *__restrict__ dest``”h]”j)�”}”(hj{h]”hŒchar *__restrict__ dest”…”�”}”(hj!{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K³hj{ubj2)�”}”(hhh]”hÝ)�”}”(hŒQpointer to end of string being copied into. Must be large enough to receive copy.”h]”hŒQpointer to end of string being copied into. Must be large enough to receive copy.”…”�”}”(hj8{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K²hj5{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4{h´K³hj{ubj)�”}”(hŒn``const char *__restrict__ src`` pointer to the beginning of string being copied from. Must not overlap dest. ”h]”(j)�”}”(hŒ ``const char *__restrict__ src``”h]”j)�”}”(hjY{h]”hŒconst char *__restrict__ src”…”�”}”(hj[{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´KµhjS{ubj2)�”}”(hhh]”hÝ)�”}”(hŒLpointer to the beginning of string being copied from. Must not overlap dest.”h]”hŒLpointer to the beginning of string being copied from. Must not overlap dest.”…”�”}”(hjr{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K´hjo{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjS{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jn{h´Kµhj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjúzubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj•{h]”hŒ Description”…”�”}”(hj—{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K·hjúzubhÝ)�”}”(hX�stpcpy differs from strcpy in a key way: the return value is a pointer to the new ``NUL-terminating`` character in **dest**. (For strcpy, the return value is a pointer to the start of **dest**). This interface is considered unsafe as it doesn't perform bounds checking of the inputs. As such it's not recommended for usage. Instead, its definition is provided in case the compiler lowers other libcalls to stpcpy.”h]”(hŒRstpcpy differs from strcpy in a key way: the return value is a pointer to the new ”…”�”}”(hj«{h²hh³Nh´Nubj)�”}”(hŒ``NUL-terminating``”h]”hŒNUL-terminating”…”�”}”(hj³{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«{ubhŒ character in ”…”�”}”(hj«{h²hh³Nh´Nubjõ)�”}”(hŒ**dest**”h]”hŒdest”…”�”}”(hjÅ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj«{ubhŒ=. (For strcpy, the return value is a pointer to the start of ”…”�”}”(hj«{h²hh³Nh´Nubjõ)�”}”(hŒ**dest**”h]”hŒdest”…”�”}”(hj×{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj«{ubhŒá). This interface is considered unsafe as it doesn’t perform bounds checking of the inputs. As such it’s not recommended for usage. Instead, its definition is provided in case the compiler lowers other libcalls to stpcpy.”…”�”}”(hj«{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´K¶hjúzubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrcmp (C function)”Œc.strcmp”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+int strcmp (const char *cs, const char *ct)”h]”j)�”}”(hŒ*int strcmp(const char *cs, const char *ct)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj |h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj |h²hh³j|h´Mubj{)�”}”(hŒstrcmp”h]”j�)�”}”(hŒstrcmp”h]”hŒstrcmp”…”�”}”(hj1|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-|ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj |h²hh³j|h´Mubjœ)�”}”(hŒ (const char *cs, const char *ct)”h]”(j¢)�”}”(hŒconst char *cs”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjM|h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjI|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjI|ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjh|h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjI|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjI|ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj„|h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjI|ubj�)�”}”(hŒcs”h]”hŒcs”…”�”}”(hj‘|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjI|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjE|ubj¢)�”}”(hŒconst char *ct”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjª|h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¦|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦|ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÅ|h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¦|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦|ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjá|h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¦|ubj�)�”}”(hŒct”h]”hŒct”…”�”}”(hjî|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjE|ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj |h²hh³j|h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj|h²hh³j|h´Mubah}”(h]”j|ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j|h´Mhj|h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCompare two strings”h]”hŒCompare two strings”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj}h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj|h²hh³j|h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj0}jæj0}jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒT**Parameters** ``const char *cs`` One string ``const char *ct`` Another string”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj:}h]”hŒ Parameters”…”�”}”(hj<}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj4}ubj )�”}”(hhh]”(j)�”}”(hŒ``const char *cs`` One string ”h]”(j)�”}”(hŒ``const char *cs``”h]”j)�”}”(hjY}h]”hŒconst char *cs”…”�”}”(hj[}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjS}ubj2)�”}”(hhh]”hÝ)�”}”(hŒ One string”h]”hŒ One string”…”�”}”(hjr}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jn}h´Mhjo}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjS}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jn}h´MhjP}ubj)�”}”(hŒ!``const char *ct`` Another string”h]”(j)�”}”(hŒ``const char *ct``”h]”j)�”}”(hj’}h]”hŒconst char *ct”…”�”}”(hj”}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjŒ}ubj2)�”}”(hhh]”hÝ)�”}”(hŒAnother string”h]”hŒAnother string”…”�”}”(hj«}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj¨}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŒ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§}h´MhjP}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj4}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrncmp (C function)”Œ c.strncmp”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:int strncmp (const char *cs, const char *ct, size_t count)”h]”j)�”}”(hŒ9int strncmp(const char *cs, const char *ct, size_t count)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjì}h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjè}h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjè}h²hh³jú}h´Mubj{)�”}”(hŒstrncmp”h]”j�)�”}”(hŒstrncmp”h]”hŒstrncmp”…”�”}”(hj ~h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ~ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjè}h²hh³jú}h´Mubjœ)�”}”(hŒ.(const char *cs, const char *ct, size_t count)”h]”(j¢)�”}”(hŒconst char *cs”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj)~h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj%~ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%~ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjD~h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj%~ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%~ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj`~h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj%~ubj�)�”}”(hŒcs”h]”hŒcs”…”�”}”(hjm~h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!~ubj¢•)�”}”(hŒconst char *ct”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj†~h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‚~ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚~ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¡~h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‚~ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚~ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj½~h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‚~ubj�)�”}”(hŒct”h]”hŒct”…”�”}”(hjÊ~h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!~ubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjæ~h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjã~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jè~Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j~sbŒ c.strncmp”†”asbuh1hhjß~ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjß~ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjß~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!~ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjè}h²hh³jú}h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjä}h²hh³jú}h´Mubah}”(h]”jß}ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jú}h´Mhjá}h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Compare two length-limited strings”h]”hŒ"Compare two length-limited strings”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjá}h²hh³jú}h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjVjæjVjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒ�**Parameters** ``const char *cs`` One string ``const char *ct`` Another string ``size_t count`` The maximum number of bytes to compare”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj`h]”hŒ Parameters”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjZubj )�”}”(hhh]”(j)�”}”(hŒ``const char *cs`` One string ”h]”(j)�”}”(hŒ``const char *cs``”h]”j)�”}”(hjh]”hŒconst char *cs”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhjyubj2)�”}”(hhh]”hÝ)�”}”(hŒ One string”h]”hŒ One string”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”h´Mhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”h´Mhjvubj)�”}”(hŒ"``const char *ct`` Another string ”h]”(j)�”}”(hŒ``const char *ct``”h]”j)�”}”(hj¸h]”hŒconst char *ct”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj²ubj2)�”}”(hhh]”hÝ)�”}”(hŒAnother string”h]”hŒAnother string”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÍh´MhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍh´Mhjvubj)�”}”(hŒ7``size_t count`` The maximum number of bytes to compare”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hjñh]”hŒ size_t count”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhjëubj2)�”}”(hhh]”hÝ)�”}”(hŒ&The maximum number of bytes to compare”h]”hŒ&The maximum number of bytes to compare”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€h´Mhjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrchr (C function)”Œc.strchr”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ$char * strchr (const char *s, int c)”h]”j)�”}”(hŒ"char *strchr(const char *s, int c)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjK€h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjG€h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjG€h²hh³jY€h´M0ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh€h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjG€h²hh³jY€h´M0ubj{)�”}”(hŒstrchr”h]”j�)�”}”(hŒstrchr”h]”hŒstrchr”…”�”}”(hjy€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hju€ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjG€h²hh³jY€h´M0ubjœ)�”}”(hŒ(const char *s, int c)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj•€h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‘€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘€ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj°€h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘€ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÌ€h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‘€ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjÙ€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�€ubj¢)�”}”(hŒint c”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjñ€h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjí€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjí€ubj�)�”}”(hjßh]”hŒc”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjí€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�€ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjG€h²hh³jY€h´M0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjC€h²hh³jY€h´M0ubah}”(h]”j>€ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jY€h´M0hj@€h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4Find the first occurrence of a character in a string”h]”hŒ4Find the first occurrence of a character in a string”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M0hj3�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj@€h²hh³jY€h´M0ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjN�jæjN�jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒÔ**Parameters** ``const char *s`` The string to be searched ``int c`` The character to search for **Description** Note that the ``NUL-terminator`` is considered part of the string, and can be searched for.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjX�h]”hŒ Parameters”…”�”}”(hjZ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjV�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M4hjR�ubj )�”}”(hhh]”(j)�”}”(hŒ,``const char *s`` The string to be searched ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hjw�h]”hŒ const char *s”…”�”}”(hjy�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M1hjq�ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŒ�h´M1hj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjq�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒ�h´M1hjn�ubj)�”}”(hŒ&``int c`` The character to search for ”h]”(j)�”}”(hŒ ``int c``”h]”j)�”}”(hj°�h]”hŒint c”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M2hjª�ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe character to search for”h]”hŒThe character to search for”…”�”}”(hjÉ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÅ�h´M2hjÆ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjª�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÅ�h´M2hjn�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjR�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjë�h]”hŒ Description”…”�”}”(hjí�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M4hjR�ubhÝ)�”}”(hŒ[Note that the ``NUL-terminator`` is considered part of the string, and can be searched for.”h]”(hŒNote that the ”…”�”}”(hj‚h²hh³Nh´Nubj)�”}”(hŒ``NUL-terminator``”h]”hŒNUL-terminator”…”�”}”(hj ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚ubhŒ; is considered part of the string, and can be searched for.”…”�”}”(hj‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M3hjR�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrchrnul (C function)”Œ c.strchrnul”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'char * strchrnul (const char *s, int c)”h]”j)�”}”(hŒ%char *strchrnul(const char *s, int c)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjB‚h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj>‚h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MCubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>‚h²hh³jP‚h´MCubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj_‚h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj>‚h²hh³jP‚h´MCubj{)�”}”(hŒ strchrnul”h]”j�)�”}”(hŒ strchrnul”h]”hŒ strchrnul”…”�”}”(hjp‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl‚ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj>‚h²hh³jP‚h´MCubjœ)�”}”(hŒ(const char *s, int c)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjŒ‚h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjˆ‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆ‚ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj§‚h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjˆ‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆ‚ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjˆ‚ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjЂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆ‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„‚ubj¢)�”}”(hŒint c”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjè‚h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjä‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjä‚ubj�)�”}”(hjßh]”hŒc”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjä‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„‚ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj>‚h²hh³jP‚h´MCubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj:‚h²hh³jP‚h´MCubah}”(h]”j5‚ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jP‚h´MChj7‚h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9Find and return a character in a string, or end of string”h]”hŒ9Find and return a character in a string, or end of string”…”�”}”(hj-ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MChj*ƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj7‚h²hh³jP‚h´MCubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjEƒjæjEƒjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒô**Parameters** ``const char *s`` The string to be searched ``int c`` The character to search for **Description** Returns pointer to first occurrence of 'c' in s. If c is not found, then return a pointer to the null byte at the end of s.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjOƒh]”hŒ Parameters”…”�”}”(hjQƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MGhjIƒubj )�”}”(hhh]”(j)�”}”(hŒ,``const char *s`` The string to be searched ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hjnƒh]”hŒ const char *s”…”�”}”(hjpƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MDhjhƒubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hj‡ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒƒh´MDhj„ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjhƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒƒh´MDhjeƒubj)�”}”(hŒ&``int c`` The character to search for ”h]”(j)�”}”(hŒ ``int c``”h]”j)�”}”(hj§ƒh]”hŒint c”…”�”}”(hj©ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MEhj¡ƒubj2)�”}”(hhh]”hÝ)�”}”(hŒThe character to search for”h]”hŒThe character to search for”…”�”}”(hjÀƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼ƒh´MEhj½ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼ƒh´MEhjeƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjIƒubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjâƒh]”hŒ Description”…”�”}”(hjäƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MGhjIƒubhÝ)�”}”(hŒ{Returns pointer to first occurrence of 'c' in s. If c is not found, then return a pointer to the null byte at the end of s.”h]”hŒReturns pointer to first occurrence of ‘c’ in s. If c is not found, then return a pointer to the null byte at the end of s.”…”�”}”(hjøƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MFhjIƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrrchr (C function)”Œ c.strrchr”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%char * strrchr (const char *s, int c)”h]”j)�”}”(hŒ#char *strrchr(const char *s, int c)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj'„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj#„h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mfubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#„h²hh³j5„h´Mfubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjD„h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj#„h²hh³j5„h´Mfubj{)�”}”(hŒstrrchr”h]”j�)�”}”(hŒstrrchr”h]”hŒstrrchr”…”�”}”(hjU„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQ„ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj#„h²hh³j5„h´Mfubjœ)�”}”(hŒ(const char *s, int c)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjq„h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjm„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm„ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjŒ„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjm„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm„ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¨„h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjm„ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjµ„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjm„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hji„ubj¢)�”}”(hŒint c”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÍ„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÉ„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉ„ubj�)�”}”(hjßh]”hŒc”…”�”}”(hjé„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉ„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hji„ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj#„h²hh³j5„h´Mfubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj„h²hh³j5„h´Mfubah}”(h]”j„ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j5„h´Mfhj„h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3Find the last occurrence of a character in a string”h]”hŒ3Find the last occurrence of a character in a string”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mfhj…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj„h²hh³j5„h´Mfubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj*…jæj*…jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒf**Parameters** ``const char *s`` The string to be searched ``int c`` The character to search for”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj4…h]”hŒ Parameters”…”�”}”(hj6…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj2…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mjhj.…ubj )�”}”(hhh]”(j)�”}”(hŒ,``const char *s`` The string to be searched ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hjS…h]”hŒ const char *s”…”�”}”(hjU…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MghjM…ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hjl…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh…h´Mghji…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjM…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh…h´MghjJ…ubj)�”}”(hŒ%``int c`` The character to search for”h]”(j)�”}”(hŒ ``int c``”h]”j)�”}”(hjŒ…h]”hŒint c”…”�”}”(hjŽ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mihj†…ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe character to search for”h]”hŒThe character to search for”…”�”}”(hj¥…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhhj¢…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj†…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡…h´MihjJ…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj.…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrnchr (C function)”Œ c.strnchr”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3char * strnchr (const char *s, size_t count, int c)”h]”j)�”}”(hŒ1char *strnchr(const char *s, size_t count, int c)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjæ…h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjâ…h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâ…h²hh³jô…h´Mxubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâ…h²hh³jô…h´Mxubj{)�”}”(hŒstrnchr”h]”j�)�”}”(hŒstrnchr”h]”hŒstrnchr”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjâ…h²hh³jô…h´Mxubjœ)�”}”(hŒ$(const char *s, size_t count, int c)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj0†h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj,†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,†ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjK†h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj,†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,†ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjg†h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj,†ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjt†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj(†ubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj�†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‘†Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j†sbŒ c.strnchr”†”asbuh1hhjˆ†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆ†ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj½†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆ†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj(†ubj¢)�”}”(hŒint c”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÖ†h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÒ†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒ†ubj�)�”}”(hjßh]”hŒc”…”�”}”(hjò†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒ†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj(†ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjâ…h²hh³jô…h´Mxubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÞ…h²hh³jô…h´Mxubah}”(h]”jÙ…ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jô…h´MxhjÛ…h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Find a character in a length limited string”h]”hŒ+Find a character in a length limited string”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mxhj‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÛ…h²hh³jô…h´Mxubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj3‡jæj3‡jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX**Parameters** ``const char *s`` The string to be searched ``size_t count`` The number of characters to be searched ``int c`` The character to search for **Description** Note that the ``NUL-terminator`` is considered part of the string, and can be searched for.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj=‡h]”hŒ Parameters”…”�”}”(hj?‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M|hj7‡ubj )�”}”(hhh]”(j)�”}”(hŒ,``const char *s`` The string to be searched ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hj\‡h]”hŒ const char *s”…”�”}”(hj^‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MyhjV‡ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hju‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jq‡h´Myhjr‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjV‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jq‡h´MyhjS‡ubj)�”}”(hŒ9``size_t count`` The number of characters to be searched ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hj•‡h]”hŒ size_t count”…”�”}”(hj—‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mzhj�‡ubj2)�”}”(hhh]”hÝ)�”}”(hŒ'The number of characters to be searched”h]”hŒ'The number of characters to be searched”…”�”}”(hj®‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jª‡h´Mzhj«‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jª‡h´MzhjS‡ubj)�”}”(hŒ&``int c`` The character to search for ”h]”(j)�”}”(hŒ ``int c``”h]”j)�”}”(hj·h]”hŒint c”…”�”}”(hjЇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj̇ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M{hjȇubj2)�”}”(hhh]”hÝ)�”}”(hŒThe character to search for”h]”hŒThe character to search for”…”�”}”(hjç‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jã‡h´M{hjä‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjȇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jã‡h´M{hjS‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj7‡ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj ˆh]”hŒ Description”…”�”}”(hj ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M}hj7‡ubhÝ)�”}”(hŒ[Note that the ``NUL-terminator`` is considered part of the string, and can be searched for.”h]”(hŒNote that the ”…”�”}”(hjˆh²hh³Nh´Nubj)�”}”(hŒ``NUL-terminator``”h]”hŒNUL-terminator”…”�”}”(hj'ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆubhŒ; is considered part of the string, and can be searched for.”…”�”}”(hjˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M|hj7‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrspn (C function)”Œc.strspn”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1size_t strspn (const char *s, const char *accept)”h]”j)�”}”(hŒ0size_t strspn(const char *s, const char *accept)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjcˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`ˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jeˆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œstrspn”sbŒc.strspn”†”asbuh1hhj\ˆh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…ˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\ˆh²hh³j„ˆh´M§ubj{)�”}”(hŒstrspn”h]”j�)�”}”(hj�ˆh]”hŒstrspn”…”�”}”(hj—ˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ˆubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj\ˆh²hh³j„ˆh´M§ubjœ)�”}”(hŒ#(const char *s, const char *accept)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj²ˆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®ˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿ˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ˆubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj͈h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj®ˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ˆubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjéˆh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj®ˆubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjöˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®ˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªˆubj¢)�”}”(hŒconst char *accept”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ‰ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ‰ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj)‰h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ‰ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7‰h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ‰ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjE‰h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ‰ubj�)�”}”(hŒaccept”h]”hŒaccept”…”�”}”(hjR‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ‰ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªˆubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj\ˆh²hh³j„ˆh´M§ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjXˆh²hh³j„ˆh´M§ubah}”(h]”jSˆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j„ˆh´M§hjUˆh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ_Calculate the length of the initial substring of **s** which only contain letters in **accept**”h]”(hŒ1Calculate the length of the initial substring of ”…”�”}”(hj|‰h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hj„‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|‰ubhŒ which only contain letters in ”…”�”}”(hj|‰h²hh³Nh´Nubjõ)�”}”(hŒ **accept**”h]”hŒaccept”…”�”}”(hj–‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M§hjy‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjUˆh²hh³j„ˆh´M§ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj´‰jæj´‰jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒp**Parameters** ``const char *s`` The string to be searched ``const char *accept`` The string to search for”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾‰h]”hŒ Parameters”…”�”}”(hjÀ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M«hj¸‰ubj )�”}”(hhh]”(j)�”}”(hŒ,``const char *s`` The string to be searched ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hj݉h]”hŒ const char *s”…”�”}”(hj߉h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M¨hj׉ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hjö‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jò‰h´M¨hjó‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj׉ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jò‰h´M¨hjÔ‰ubj)�”}”(hŒ/``const char *accept`` The string to search for”h]”(j)�”}”(hŒ``const char *accept``”h]”j)�”}”(hjŠh]”hŒconst char *accept”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MªhjŠubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to search for”h]”hŒThe string to search for”…”�”}”(hj/Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M©hj,Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+Šh´MªhjÔ‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¸‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrcspn (C function)”Œ c.strcspn”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2size_t strcspn (const char *s, const char *reject)”h]”j)�”}”(hŒ1size_t strcspn(const char *s, const char *reject)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjsŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjpŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”juŠŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œstrcspn”sbŒ c.strcspn”†”asbuh1hhjlŠh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Šh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjlŠh²hh³j”Šh´Mºubj{)�”}”(hŒstrcspn”h]”j�)�”}”(hj‘Šh]”hŒstrcspn”…”�”}”(hj§Šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£Šubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjlŠh²hh³j”Šh´Mºubjœ)�”}”(hŒ#(const char *s, const char *reject)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¾Šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾Šubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÝŠh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¾Šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾Šubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjùŠh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¾Šubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjºŠubj¢)�”}”(hŒconst char *reject”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+‹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj9‹h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjG‹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjU‹h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‹ubj�)�”}”(hŒreject”h]”hŒreject”…”�”}”(hjb‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjºŠubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjlŠh²hh³j”Šh´Mºubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjhŠh²hh³j”Šh´Mºubah}”(h]”jcŠah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j”Šh´MºhjeŠh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒcCalculate the length of the initial substring of **s** which does not contain letters in **reject**”h]”(hŒ1Calculate the length of the initial substring of ”…”�”}”(hjŒ‹h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hj”‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒ‹ubhŒ# which does not contain letters in ”…”�”}”(hjŒ‹h²hh³Nh´Nubjõ)�”}”(hŒ **reject**”h]”hŒreject”…”�”}”(hj¦‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mºhj‰‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjeŠh²hh³j”Šh´Mºubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÄ‹jæjÄ‹jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒk**Parameters** ``const char *s`` The string to be searched ``const char *reject`` The string to avoid”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj΋h]”hŒ Parameters”…”�”}”(hjЋh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÌ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M¾hjÈ‹ubj )�”}”(hhh]”(j)�”}”(hŒ,``const char *s`` The string to be searched ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hjí‹h]”hŒ const char *s”…”�”}”(hjï‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjë‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M»hjç‹ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŒh´M»hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjç‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒh´M»hjä‹ubj)�”}”(hŒ*``const char *reject`` The string to avoid”h]”(j)�”}”(hŒ``const char *reject``”h]”j)�”}”(hj&Œh]”hŒconst char *reject”…”�”}”(hj(Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$Œubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M½hj Œubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to avoid”h]”hŒThe string to avoid”…”�”}”(hj?Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M¼hj<Œubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;Œh´M½hjä‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÈ‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrpbrk (C function)”Œ c.strpbrk”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ/char * strpbrk (const char *cs, const char *ct)”h]”j)�”}”(hŒ-char *strpbrk(const char *cs, const char *ct)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj€Œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj|Œh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|Œh²hh³jŽŒh´MÍubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�Œh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj|Œh²hh³jŽŒh´MÍubj{)�”}”(hŒstrpbrk”h]”j�)�”}”(hŒstrpbrk”h]”hŒstrpbrk”…”�”}”(hj®Œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªŒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj|Œh²hh³jŽŒh´MÍubjœ)�”}”(hŒ (const char *cs, const char *ct)”h]”(j¢)�”}”(hŒconst char *cs”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÊŒh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÆŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj׌h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆŒubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjåŒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÆŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆŒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÆŒubj�)�”}”(hŒcs”h]”hŒcs”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÂŒubj¢)�”}”(hŒconst char *ct”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj'�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj#�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#�ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjB�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj#�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj^�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj#�ubj�)�”}”(hŒct”h]”hŒct”…”�”}”(hjk�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÂŒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj|Œh²hh³jŽŒh´MÍubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjxŒh²hh³jŽŒh´MÍubah}”(h]”jsŒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŽŒh´MÍhjuŒh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0Find the first occurrence of a set of characters”h]”hŒ0Find the first occurrence of a set of characters”…”�”}”(hj•�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÍhj’�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjuŒh²hh³jŽŒh´MÍubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj­�jæj­�jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒq**Parameters** ``const char *cs`` The string to be searched ``const char *ct`` The characters to search for”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj·�h]”hŒ Parameters”…”�”}”(hj¹�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÑhj±�ubj )�”}”(hhh]”(j)�”}”(hŒ-``const char *cs`` The string to be searched ”h]”(j)�”}”(hŒ``const char *cs``”h]”j)�”}”(hjÖ�h]”hŒconst char *cs”…”�”}”(hjØ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÎhjÐ�ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hjï�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jë�h´MÎhjì�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÐ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jë�h´MÎhjÍ�ubj)�”}”(hŒ/``const char *ct`` The characters to search for”h]”(j)�”}”(hŒ``const char *ct``”h]”j)�”}”(hjŽh]”hŒconst char *ct”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Žubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÐhj Žubj2)�”}”(hhh]”hÝ)�”}”(hŒThe characters to search for”h]”hŒThe characters to search for”…”�”}”(hj(Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÏhj%Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$Žh´MÐhjÍ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj±�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrsep (C function)”Œc.strsep”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(char * strsep (char **s, const char *ct)”h]”j)�”}”(hŒ&char *strsep(char **s, const char *ct)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjiŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjeŽh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Màubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeŽh²hh³jwŽh´Màubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj†Žh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjeŽh²hh³jwŽh´Màubj{)�”}”(hŒstrsep”h]”j�)�”}”(hŒstrsep”h]”hŒstrsep”…”�”}”(hj—Žh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“Žubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjeŽh²hh³jwŽh´Màubjœ)�”}”(hŒ(char **s, const char *ct)”h]”(j¢)�”}”(hŒchar **s”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj³Žh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¯Žubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯Žubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÏŽh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¯Žubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÜŽh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¯Žubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjéŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj«Žubj¢)�”}”(hŒconst char *ct”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjýŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjýŽubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjýŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjýŽubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj8�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjýŽubj�)�”}”(hŒct”h]”hŒct”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj«Žubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjeŽh²hh³jwŽh´Màubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjaŽh²hh³jwŽh´Màubah}”(h]”j\Žah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jwŽh´Màhj^Žh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒSplit a string into tokens”h]”hŒSplit a string into tokens”…”�”}”(hjo�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Màhjl�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj^Žh²hh³jwŽh´Màubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‡�jæj‡�jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hXt**Parameters** ``char **s`` The string to be searched ``const char *ct`` The characters to search for **Description** strsep() updates **s** to point after the token, ready for the next call. It returns empty tokens, too, behaving exactly like the libc function of that name. In fact, it was stolen from glibc2 and de-fancy-fied. Same semantics, slimmer shape. ;)”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‘�h]”hŒ Parameters”…”�”}”(hj“�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mähj‹�ubj )�”}”(hhh]”(j)�”}”(hŒ'``char **s`` The string to be searched ”h]”(j)�”}”(hŒ ``char **s``”h]”j)�”}”(hj°�h]”hŒchar **s”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Máhjª�ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hjÉ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÅ�h´MáhjÆ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjª�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÅ�h´Máhj§�ubj)�”}”(hŒ0``const char *ct`` The characters to search for ”h]”(j)�”}”(hŒ``const char *ct``”h]”j)�”}”(hjé�h]”hŒconst char *ct”…”�”}”(hjë�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjç�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mâhjã�ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe characters to search for”h]”hŒThe characters to search for”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jþ�h´Mâhjÿ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjã�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþ�h´Mâhj§�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‹�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj$�h]”hŒ Description”…”�”}”(hj&�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mähj‹�ubhÝ)�”}”(hŒIstrsep() updates **s** to point after the token, ready for the next call.”h]”(hŒstrsep() updates ”…”�”}”(hj:�h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjB�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:�ubhŒ3 to point after the token, ready for the next call.”…”�”}”(hj:�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mãhj‹�ubhÝ)�”}”(hŒ«It returns empty tokens, too, behaving exactly like the libc function of that name. In fact, it was stolen from glibc2 and de-fancy-fied. Same semantics, slimmer shape. ;)”h]”hŒ«It returns empty tokens, too, behaving exactly like the libc function of that name. In fact, it was stolen from glibc2 and de-fancy-fied. Same semantics, slimmer shape. ;)”…”�”}”(hj[�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Måhj‹�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemset (C function)”Œc.memset”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,void * memset (void *s, int c, size_t count)”h]”j)�”}”(hŒ*void *memset(void *s, int c, size_t count)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŠ�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj†�h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†�h²hh³j˜�h´Mýubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj§�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj†�h²hh³j˜�h´Mýubj{)�”}”(hŒmemset”h]”j�)�”}”(hŒmemset”h]”hŒmemset”…”�”}”(hj¸�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj†�h²hh³j˜�h´Mýubjœ)�”}”(hŒ(void *s, int c, size_t count)”h]”(j¢)�”}”(hŒvoid *s”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔ�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÐ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÐ�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjð�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÐ�ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjý�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÌ�ubj¢)�”}”(hŒint c”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘ubj�)�”}”(hjßh]”hŒc”…”�”}”(hj1‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÌ�ubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjL‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjI‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jN‘Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jº�sbŒc.memset”†”asbuh1hhjE‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjE‘ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjz‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjE‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÌ�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj†�h²hh³j˜�h´Mýubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‚�h²hh³j˜�h´Mýubah}”(h]”j}�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j˜�h´Mýhj�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Fill a region of memory with the given value”h]”hŒ,Fill a region of memory with the given value”…”�”}”(hj¤‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mýhj¡‘h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�h²hh³j˜�h´Mýubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¼‘jæj¼‘jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒè**Parameters** ``void *s`` Pointer to the start of the area. ``int c`` The byte to fill the area with ``size_t count`` The size of the area. **Description** Do not use memset() to access IO space, use memset_io() instead.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÆ‘h]”hŒ Parameters”…”�”}”(hjÈ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÄ‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjÀ‘ubj )�”}”(hhh]”(j)�”}”(hŒ.``void *s`` Pointer to the start of the area. ”h]”(j)�”}”(hŒ ``void *s``”h]”j)�”}”(hjå‘h]”hŒvoid *s”…”�”}”(hjç‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjã‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mþhjß‘ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!Pointer to the start of the area.”h]”hŒ!Pointer to the start of the area.”…”�”}”(hjþ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jú‘h´Mþhjû‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjß‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jú‘h´MþhjÜ‘ubj)�”}”(hŒ)``int c`` The byte to fill the area with ”h]”(j)�”}”(hŒ ``int c``”h]”j)�”}”(hj’h]”hŒint c”…”�”}”(hj ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mÿhj’ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe byte to fill the area with”h]”hŒThe byte to fill the area with”…”�”}”(hj7’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3’h´Mÿhj4’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3’h´MÿhjÜ‘ubj)�”}”(hŒ'``size_t count`` The size of the area. ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hjW’h]”hŒ size_t count”…”�”}”(hjY’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjU’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjQ’ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the area.”h]”hŒThe size of the area.”…”�”}”(hjp’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jl’h´Mhjm’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQ’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jl’h´MhjÜ‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÀ‘ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj’’h]”hŒ Description”…”�”}”(hj”’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjÀ‘ubhÝ)�”}”(hŒ@Do not use memset() to access IO space, use memset_io() instead.”h]”hŒ@Do not use memset() to access IO space, use memset_io() instead.”…”�”}”(hj¨’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjÀ‘ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemset16 (C function)”Œ c.memset16”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void * memset16 (uint16_t *s, uint16_t v, size_t count)”h]”j)�”}”(hŒ5void *memset16(uint16_t *s, uint16_t v, size_t count)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj×’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÓ’h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÓ’h²hh³jå’h´Mubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjô’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÓ’h²hh³jå’h´Mubj{)�”}”(hŒmemset16”h]”j�)�”}”(hŒmemset16”h]”hŒmemset16”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÓ’h²hh³jå’h´Mubjœ)�”}”(hŒ'(uint16_t *s, uint16_t v, size_t count)”h]”(j¢)�”}”(hŒ uint16_t *s”h]”(h)�”}”(hhh]”j�)�”}”(hŒuint16_t”h]”hŒuint16_t”…”�”}”(hj$“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j&“Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j“sbŒ c.memset16”†”asbuh1hhj“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjR“h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj“ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj_“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“ubj¢)�”}”(hŒ uint16_t v”h]”(h)�”}”(hhh]”j�)�”}”(hŒuint16_t”h]”hŒuint16_t”…”�”}”(hjz“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjw“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j|“Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j@“Œ c.memset16”†”asbuh1hhjs“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjs“ubj�)�”}”(hŒv”h]”hŒv”…”�”}”(hj¦“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjs“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“ubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÄ“Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j@“Œ c.memset16”†”asbuh1hhj»“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»“ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjî“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÓ’h²hh³jå’h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÏ’h²hh³jå’h´Mubah}”(h]”jÊ’ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jå’h´MhjÌ’h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Fill a memory area with a uint16_t”h]”hŒ"Fill a memory area with a uint16_t”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÌ’h²hh³jå’h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj0”jæj0”jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hXZ**Parameters** ``uint16_t *s`` Pointer to the start of the area. ``uint16_t v`` The value to fill the area with ``size_t count`` The number of values to store **Description** Differs from memset() in that it fills with a uint16_t instead of a byte. Remember that **count** is the number of uint16_ts to store, not the number of bytes.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj:”h]”hŒ Parameters”…”�”}”(hj<”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj4”ubj )�”}”(hhh]”(j)�”}”(hŒ2``uint16_t *s`` Pointer to the start of the area. ”h]”(j)�”}”(hŒ``uint16_t *s``”h]”j)�”}”(hjY”h]”hŒ uint16_t *s”…”�”}”(hj[”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjS”ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!Pointer to the start of the area.”h]”hŒ!Pointer to the start of the area.”…”�”}”(hjr”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jn”h´Mhjo”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjS”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jn”h´MhjP”ubj)�”}”(hŒ/``uint16_t v`` The value to fill the area with ”h]”(j)�”}”(hŒ``uint16_t v``”h]”j)�”}”(hj’”h]”hŒ uint16_t v”…”�”}”(hj””h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjŒ”ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe value to fill the area with”h]”hŒThe value to fill the area with”…”�”}”(hj«”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j§”h´Mhj¨”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŒ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§”h´MhjP”ubj)�”}”(hŒ/``size_t count`` The number of values to store ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hjË”h]”hŒ size_t count”…”�”}”(hjÍ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MhjÅ”ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe number of values to store”h]”hŒThe number of values to store”…”�”}”(hjä”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jà”h´Mhjá”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jà”h´MhjP”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj4”ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj•h]”hŒ Description”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj4”ubhÝ)�”}”(hŒ Differs from memset() in that it fills with a uint16_t instead of a byte. Remember that **count** is the number of uint16_ts to store, not the number of bytes.”h]”(hŒYDiffers from memset() in that it fills with a uint16_t instead of a byte. Remember that ”…”�”}”(hj•h²hh³Nh´Nubjõ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hj$•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj•ubhŒ> is the number of uint16_ts to store, not the number of bytes.”…”�”}”(hj•h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj4”ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemset32 (C function)”Œ c.memset32”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void * memset32 (uint32_t *s, uint32_t v, size_t count)”h]”j)�”}”(hŒ5void *memset32(uint32_t *s, uint32_t v, size_t count)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj]•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjY•h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M'ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjY•h²hh³jk•h´M'ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjz•h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjY•h²hh³jk•h´M'ubj{)�”}”(hŒmemset32”h]”j�)�”}”(hŒmemset32”h]”hŒmemset32”…”�”}”(hj‹•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡•ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjY•h²hh³jk•h´M'ubjœ)�”}”(hŒ'(uint32_t *s, uint32_t v, size_t count)”h]”(j¢)�”}”(hŒ uint32_t *s”h]”(h)�”}”(hhh]”j�)�”}”(hŒuint32_t”h]”hŒuint32_t”…”�”}”(hjª•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¬•Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�•sbŒ c.memset32”†”asbuh1hhj£•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£•ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjØ•h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj£•ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjå•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŸ•ubj¢)�”}”(hŒ uint32_t v”h]”(h)�”}”(hhh]”j�)�”}”(hŒuint32_t”h]”hŒuint32_t”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjý•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j–Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÆ•Œ c.memset32”†”asbuh1hhjù•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjù•ubj�)�”}”(hj¨“h]”hŒv”…”�”}”(hj,–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjù•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŸ•ubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjG–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjD–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jI–Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÆ•Œ c.memset32”†”asbuh1hhj@–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@–ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjs–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŸ•ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjY•h²hh³jk•h´M'ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjU•h²hh³jk•h´M'ubah}”(h]”jP•ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jk•h´M'hjR•h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Fill a memory area with a uint32_t”h]”hŒ"Fill a memory area with a uint32_t”…”�”}”(hj�–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”•h´M'hjš–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjR•h²hh³jk•h´M'ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjµ–jæjµ–jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hXZ**Parameters** ``uint32_t *s`` Pointer to the start of the area. ``uint32_t v`` The value to fill the area with ``size_t count`` The number of values to store **Description** Differs from memset() in that it fills with a uint32_t instead of a byte. Remember that **count** is the number of uint32_ts to store, not the number of bytes.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¿–h]”hŒ Parameters”…”�”}”(hjÁ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M+hj¹–ubj )�”}”(hhh]”(j)�”}”(hŒ2``uint32_t *s`` Pointer to the start of the area. ”h]”(j)�”}”(hŒ``uint32_t *s``”h]”j)�”}”(hjÞ–h]”hŒ uint32_t *s”…”�”}”(hjà–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M(hjØ–ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!Pointer to the start of the area.”h]”hŒ!Pointer to the start of the area.”…”�”}”(hj÷–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jó–h´M(hjô–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØ–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jó–h´M(hjÕ–ubj)�”}”(hŒ/``uint32_t v`` The value to fill the area with ”h]”(j)�”}”(hŒ``uint32_t v``”h]”j)�”}”(hj—h]”hŒ uint32_t v”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M)hj—ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe value to fill the area with”h]”hŒThe value to fill the area with”…”�”}”(hj0—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,—h´M)hj-—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,—h´M)hjÕ–ubj)�”}”(hŒ/``size_t count`` The number of values to store ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hjP—h]”hŒ size_t count”…”�”}”(hjR—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjN—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M*hjJ—ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe number of values to store”h]”hŒThe number of values to store”…”�”}”(hji—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³je—h´M*hjf—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJ—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³je—h´M*hjÕ–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹–ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‹—h]”hŒ Description”…”�”}”(hj�—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‰—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M,hj¹–ubhÝ)�”}”(hŒ Differs from memset() in that it fills with a uint32_t instead of a byte. Remember that **count** is the number of uint32_ts to store, not the number of bytes.”h]”(hŒYDiffers from memset() in that it fills with a uint32_t instead of a byte. Remember that ”…”�”}”(hj¡—h²hh³Nh´Nubjõ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hj©—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡—ubhŒ> is the number of uint32_ts to store, not the number of bytes.”…”�”}”(hj¡—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M+hj¹–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemset64 (C function)”Œ c.memset64”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void * memset64 (uint64_t *s, uint64_t v, size_t count)”h]”j)�”}”(hŒ5void *memset64(uint64_t *s, uint64_t v, size_t count)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjâ—h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞ—h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞ—h²hh³jð—h´M=ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÿ—h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞ—h²hh³jð—h´M=ubj{)�”}”(hŒmemset64”h]”j�)�”}”(hŒmemset64”h]”hŒmemset64”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ˜ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÞ—h²hh³jð—h´M=ubjœ)�”}”(hŒ'(uint64_t *s, uint64_t v, size_t count)”h]”(j¢)�”}”(hŒ uint64_t *s”h]”(h)�”}”(hhh]”j�)�”}”(hŒuint64_t”h]”hŒuint64_t”…”�”}”(hj/˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j1˜Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j˜sbŒ c.memset64”†”asbuh1hhj(˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(˜ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj]˜h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj(˜ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjj˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$˜ubj¢)�”}”(hŒ uint64_t v”h]”(h)�”}”(hhh]”j�)�”}”(hŒuint64_t”h]”hŒuint64_t”…”�”}”(hj…˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‡˜Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jK˜Œ c.memset64”†”asbuh1hhj~˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~˜ubj�)�”}”(hj¨“h]”hŒv”…”�”}”(hj±˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$˜ubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj̘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjɘubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jΘŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jK˜Œ c.memset64”†”asbuh1hhjŘubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŘubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjø˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŘubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$˜ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÞ—h²hh³jð—h´M=ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÚ—h²hh³jð—h´M=ubah}”(h]”jÕ—ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jð—h´M=hj×—h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Fill a memory area with a uint64_t”h]”hŒ"Fill a memory area with a uint64_t”…”�”}”(hj"™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M=hj™h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj×—h²hh³jð—h´M=ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj:™jæj:™jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hXZ**Parameters** ``uint64_t *s`` Pointer to the start of the area. ``uint64_t v`` The value to fill the area with ``size_t count`` The number of values to store **Description** Differs from memset() in that it fills with a uint64_t instead of a byte. Remember that **count** is the number of uint64_ts to store, not the number of bytes.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjD™h]”hŒ Parameters”…”�”}”(hjF™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjB™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MAhj>™ubj )�”}”(hhh]”(j)�”}”(hŒ2``uint64_t *s`` Pointer to the start of the area. ”h]”(j)�”}”(hŒ``uint64_t *s``”h]”j)�”}”(hjc™h]”hŒ uint64_t *s”…”�”}”(hje™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M>hj]™ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!Pointer to the start of the area.”h]”hŒ!Pointer to the start of the area.”…”�”}”(hj|™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jx™h´M>hjy™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj]™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jx™h´M>hjZ™ubj)�”}”(hŒ/``uint64_t v`` The value to fill the area with ”h]”(j)�”}”(hŒ``uint64_t v``”h]”j)�”}”(hjœ™h]”hŒ uint64_t v”…”�”}”(hjž™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjš™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M?hj–™ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe value to fill the area with”h]”hŒThe value to fill the area with”…”�”}”(hjµ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±™h´M?hj²™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±™h´M?hjZ™ubj)�”}”(hŒ/``size_t count`` The number of values to store ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hjÕ™h]”hŒ size_t count”…”�”}”(hj×™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M@hjÏ™ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe number of values to store”h]”hŒThe number of values to store”…”�”}”(hjî™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jê™h´M@hjë™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏ™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jê™h´M@hjZ™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj>™ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjšh]”hŒ Description”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MBhj>™ubhÝ)�”}”(hŒ Differs from memset() in that it fills with a uint64_t instead of a byte. Remember that **count** is the number of uint64_ts to store, not the number of bytes.”h]”(hŒYDiffers from memset() in that it fills with a uint64_t instead of a byte. Remember that ”…”�”}”(hj&šh²hh³Nh´Nubjõ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hj.šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj&šubhŒ> is the number of uint64_ts to store, not the number of bytes.”…”�”}”(hj&šh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MAhj>™ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemcpy (C function)”Œc.memcpy”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9void * memcpy (void *dest, const void *src, size_t count)”h]”j)�”}”(hŒ7void *memcpy(void *dest, const void *src, size_t count)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjgšh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjcšh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjcšh²hh³jušh´MSubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj„šh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjcšh²hh³jušh´MSubj{)�”}”(hŒmemcpy”h]”j�)�”}”(hŒmemcpy”h]”hŒmemcpy”…”�”}”(hj•šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘šubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjcšh²hh³jušh´MSubjœ)�”}”(hŒ+(void *dest, const void *src, size_t count)”h]”(j¢)�”}”(hŒ void *dest”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±šh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿šh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­šubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÍšh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj­šubj�)�”}”(hŒdest”h]”hŒdest”…”�”}”(hjÚšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©šubj¢)�”}”(hŒconst void *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjóšh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjïšubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïšubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjïšubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïšubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj*›h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjïšubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj7›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©šubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjS›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjP›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jU›Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j—šsbŒc.memcpy”†”asbuh1hhjL›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjL›ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj�›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjL›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©šubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjcšh²hh³jušh´MSubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj_šh²hh³jušh´MSubah}”(h]”jZšah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jušh´MShj\šh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Copy one area of memory to another”h]”hŒ"Copy one area of memory to another”…”�”}”(hj«›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MShj¨›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj\šh²hh³jušh´MSubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÛjæjÛjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒú**Parameters** ``void *dest`` Where to copy to ``const void *src`` Where to copy from ``size_t count`` The size of the area. **Description** You should not use this function to access IO space, use memcpy_toio() or memcpy_fromio() instead.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÍ›h]”hŒ Parameters”…”�”}”(hjÏ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjË›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MWhjÇ›ubj )�”}”(hhh]”(j)�”}”(hŒ ``void *dest`` Where to copy to ”h]”(j)�”}”(hŒ``void *dest``”h]”j)�”}”(hjì›h]”hŒ void *dest”…”�”}”(hjî›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjê›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MThjæ›ubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy to”h]”hŒWhere to copy to”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœh´MThjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæ›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœh´MThjã›ubj)�”}”(hŒ'``const void *src`` Where to copy from ”h]”(j)�”}”(hŒ``const void *src``”h]”j)�”}”(hj%œh]”hŒconst void *src”…”�”}”(hj'œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#œubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MUhjœubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy from”h]”hŒWhere to copy from”…”�”}”(hj>œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:œh´MUhj;œubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:œh´MUhjã›ubj)�”}”(hŒ'``size_t count`` The size of the area. ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hj^œh]”hŒ size_t count”…”�”}”(hj`œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\œubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MVhjXœubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the area.”h]”hŒThe size of the area.”…”�”}”(hjwœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jsœh´MVhjtœubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjXœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jsœh´MVhjã›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÇ›ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj™œh]”hŒ Description”…”�”}”(hj›œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MXhjÇ›ubhÝ)�”}”(hŒbYou should not use this function to access IO space, use memcpy_toio() or memcpy_fromio() instead.”h]”hŒbYou should not use this function to access IO space, use memcpy_toio() or memcpy_fromio() instead.”…”�”}”(hj¯œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MWhjÇ›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemmove (C function)”Œ c.memmove”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:void * memmove (void *dest, const void *src, size_t count)”h]”j)�”}”(hŒ8void *memmove(void *dest, const void *src, size_t count)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÞœh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚœh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Miubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚœh²hh³jìœh´Miubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjûœh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÚœh²hh³jìœh´Miubj{)�”}”(hŒmemmove”h]”j�)�”}”(hŒmemmove”h]”hŒmemmove”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÚœh²hh³jìœh´Miubjœ)�”}”(hŒ+(void *dest, const void *src, size_t count)”h]”(j¢)�”}”(hŒ void *dest”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj(�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj$�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjD�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj$�ubj�)�”}”(hŒdest”h]”hŒdest”…”�”}”(hjQ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj �ubj¢)�”}”(hŒconst void *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjj�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjf�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjf�ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj…�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjf�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjf�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¡�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjf�ubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj®�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjf�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj �ubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÊ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÌ�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�sbŒ c.memmove”†”asbuh1hhjÃ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃ�ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjø�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÃ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj �ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÚœh²hh³jìœh´Miubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÖœh²hh³jìœh´Miubah}”(h]”jÑœah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jìœh´MihjÓœh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Copy one area of memory to another”h]”hŒ"Copy one area of memory to another”…”�”}”(hj"žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mihjžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÓœh²hh³jìœh´Miubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj:žjæj:žjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒÐ**Parameters** ``void *dest`` Where to copy to ``const void *src`` Where to copy from ``size_t count`` The size of the area. **Description** Unlike memcpy(), memmove() copes with overlapping areas.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjDžh]”hŒ Parameters”…”�”}”(hjFžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjBžubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mmhj>žubj )�”}”(hhh]”(j)�”}”(hŒ ``void *dest`` Where to copy to ”h]”(j)�”}”(hŒ``void *dest``”h]”j)�”}”(hjcžh]”hŒ void *dest”…”�”}”(hježh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjažubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mjhj]žubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy to”h]”hŒWhere to copy to”…”�”}”(hj|žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jxžh´Mjhjyžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj]žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jxžh´MjhjZžubj)�”}”(hŒ'``const void *src`` Where to copy from ”h]”(j)�”}”(hŒ``const void *src``”h]”j)�”}”(hjœžh]”hŒconst void *src”…”�”}”(hjžžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mkhj–žubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy from”h]”hŒWhere to copy from”…”�”}”(hjµžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±žh´Mkhj²žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±žh´MkhjZžubj)�”}”(hŒ'``size_t count`` The size of the area. ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hjÕžh]”hŒ size_t count”…”�”}”(hjמh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MlhjÏžubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the area.”h]”hŒThe size of the area.”…”�”}”(hjîžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jêžh´Mlhjëžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêžh´MlhjZžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj>žubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŸh]”hŒ Description”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mnhj>žubhÝ)�”}”(hŒ8Unlike memcpy(), memmove() copes with overlapping areas.”h]”hŒ8Unlike memcpy(), memmove() copes with overlapping areas.”…”�”}”(hj&Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mmhj>žubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemcmp (C function)”Œc.memcmp”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒC__visible int memcmp (const void *cs, const void *ct, size_t count)”h]”j)�”}”(hŒB__visible int memcmp(const void *cs, const void *ct, size_t count)”h]”(hŒ __visible”…”�”}”(hjQŸh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQŸh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M‰ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjhŸh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjQŸh²hh³jgŸh´M‰ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQŸh²hh³jgŸh´M‰ubj{)�”}”(hŒmemcmp”h]”j�)�”}”(hŒmemcmp”h]”hŒmemcmp”…”�”}”(hjˆŸh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„Ÿubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjQŸh²hh³jgŸh´M‰ubjœ)�”}”(hŒ.(const void *cs, const void *ct, size_t count)”h]”(j¢)�”}”(hŒconst void *cs”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¤Ÿh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj Ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Ÿubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¿Ÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Ÿubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÛŸh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj Ÿubj�)�”}”(hŒcs”h]”hŒcs”…”�”}”(hjèŸh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjœŸubj¢)�”}”(hŒconst void *ct”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjýŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjýŸubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjýŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjýŸubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjýŸubj�)�”}”(hŒct”h]”hŒct”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjœŸubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jc Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŠŸsbŒc.memcmp”†”asbuh1hhjZ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjœŸubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjQŸh²hh³jgŸh´M‰ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjMŸh²hh³jgŸh´M‰ubah}”(h]”jHŸah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jgŸh´M‰hjJŸh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCompare two areas of memory”h]”hŒCompare two areas of memory”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M‰hj¶ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjJŸh²hh³jgŸh´M‰ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÑ jæjÑ jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒŽ**Parameters** ``const void *cs`` One area of memory ``const void *ct`` Another area of memory ``size_t count`` The size of the area.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÛ h]”hŒ Parameters”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M�hjÕ ubj )�”}”(hhh]”(j)�”}”(hŒ&``const void *cs`` One area of memory ”h]”(j)�”}”(hŒ``const void *cs``”h]”j)�”}”(hjú h]”hŒconst void *cs”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjø ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MŠhjô ubj2)�”}”(hhh]”hÝ)�”}”(hŒOne area of memory”h]”hŒOne area of memory”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¡h´MŠhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjô ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡h´MŠhjñ ubj)�”}”(hŒ*``const void *ct`` Another area of memory ”h]”(j)�”}”(hŒ``const void *ct``”h]”j)�”}”(hj3¡h]”hŒconst void *ct”…”�”}”(hj5¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M‹hj-¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒAnother area of memory”h]”hŒAnother area of memory”…”�”}”(hjL¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jH¡h´M‹hjI¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj-¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jH¡h´M‹hjñ ubj)�”}”(hŒ&``size_t count`` The size of the area.”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hjl¡h]”hŒ size_t count”…”�”}”(hjn¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M�hjf¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the area.”h]”hŒThe size of the area.”…”�”}”(hj…¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MŒhj‚¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjf¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�¡h´M�hjñ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÕ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbcmp (C function)”Œc.bcmp”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3int bcmp (const void *a, const void *b, size_t len)”h]”j)�”}”(hŒ2int bcmp(const void *a, const void *b, size_t len)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÆ¡h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¡h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ¡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡h²hh³jÔ¡h´M­ubj{)�”}”(hŒbcmp”h]”j�)�”}”(hŒbcmp”h]”hŒbcmp”…”�”}”(hjç¡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjã¡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¡h²hh³jÔ¡h´M­ubjœ)�”}”(hŒ*(const void *a, const void *b, size_t len)”h]”(j¢)�”}”(hŒ const void *a”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÿ¡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿ¡ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÿ¡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿ¡ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj:¢h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÿ¡ubj�)�”}”(hŒa”h]”hŒa”…”�”}”(hjG¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿ¡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjû¡ubj¢)�”}”(hŒ const void *b”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj`¢h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj\¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\¢ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{¢h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj\¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\¢ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj—¢h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\¢ubj�)�”}”(hŒb”h]”hŒb”…”�”}”(hj¤¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjû¡ubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÀ¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¢Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jé¡sbŒc.bcmp”†”asbuh1hhj¹¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹¢ubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjî¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjû¡ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¡h²hh³jÔ¡h´M­ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¾¡h²hh³jÔ¡h´M­ubah}”(h]”j¹¡ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÔ¡h´M­hj»¡h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ=returns 0 if and only if the buffers have identical contents.”h]”hŒ=returns 0 if and only if the buffers have identical contents.”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M­hj£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj»¡h²hh³jÔ¡h´M­ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj0£jæj0£jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hXÂ**Parameters** ``const void *a`` pointer to first buffer. ``const void *b`` pointer to second buffer. ``size_t len`` size of buffers. **Description** The sign or magnitude of a non-zero return value has no particular meaning, and architectures may implement their own more efficient bcmp(). So while this particular implementation is a simple (tail) call to memcmp, do not rely on anything but whether the return value is zero or non-zero.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj:£h]”hŒ Parameters”…”�”}”(hj<£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M±hj4£ubj )�”}”(hhh]”(j)�”}”(hŒ+``const void *a`` pointer to first buffer. ”h]”(j)�”}”(hŒ``const void *a``”h]”j)�”}”(hjY£h]”hŒ const void *a”…”�”}”(hj[£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M®hjS£ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to first buffer.”h]”hŒpointer to first buffer.”…”�”}”(hjr£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jn£h´M®hjo£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjS£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jn£h´M®hjP£ubj)�”}”(hŒ,``const void *b`` pointer to second buffer. ”h]”(j)�”}”(hŒ``const void *b``”h]”j)�”}”(hj’£h]”hŒ const void *b”…”�”}”(hj”£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M¯hjŒ£ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to second buffer.”h]”hŒpointer to second buffer.”…”�”}”(hj«£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j§£h´M¯hj¨£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŒ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§£h´M¯hjP£ubj)�”}”(hŒ ``size_t len`` size of buffers. ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjË£h]”hŒ size_t len”…”�”}”(hjÍ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M°hjÅ£ubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of buffers.”h]”hŒsize of buffers.”…”�”}”(hjä£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jà£h´M°hjá£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jà£h´M°hjP£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj4£ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¤h]”hŒ Description”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M²hj4£ubhÝ)�”}”(hX!The sign or magnitude of a non-zero return value has no particular meaning, and architectures may implement their own more efficient bcmp(). So while this particular implementation is a simple (tail) call to memcmp, do not rely on anything but whether the return value is zero or non-zero.”h]”hX!The sign or magnitude of a non-zero return value has no particular meaning, and architectures may implement their own more efficient bcmp(). So while this particular implementation is a simple (tail) call to memcmp, do not rely on anything but whether the return value is zero or non-zero.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M±hj4£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemscan (C function)”Œ c.memscan”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ/void * memscan (void *addr, int c, size_t size)”h]”j)�”}”(hŒ-void *memscan(void *addr, int c, size_t size)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjK¤h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjG¤h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÀubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjG¤h²hh³jY¤h´MÀubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh¤h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjG¤h²hh³jY¤h´MÀubj{)�”}”(hŒmemscan”h]”j�)�”}”(hŒmemscan”h]”hŒmemscan”…”�”}”(hjy¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hju¤ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjG¤h²hh³jY¤h´MÀubjœ)�”}”(hŒ (void *addr, int c, size_t size)”h]”(j¢)�”}”(hŒ void *addr”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj•¤h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘¤ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj±¤h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‘¤ubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj¾¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�¤ubj¢)�”}”(hŒint c”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjפh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÓ¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÓ¤ubj�)�”}”(hjßh]”hŒc”…”�”}”(hjó¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓ¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�¤ubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¥Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j{¤sbŒ c.memscan”†”asbuh1hhj¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj<¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�¤ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjG¤h²hh³jY¤h´MÀubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjC¤h²hh³jY¤h´MÀubah}”(h]”j>¤ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jY¤h´MÀhj@¤h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Find a character in an area of memory.”h]”hŒ&Find a character in an area of memory.”…”�”}”(hjf¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÀhjc¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj@¤h²hh³jY¤h´MÀubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj~¥jæj~¥jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒó**Parameters** ``void *addr`` The memory area ``int c`` The byte to search for ``size_t size`` The size of the area. **Description** returns the address of the first occurrence of **c**, or 1 byte past the area if **c** is not found”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjˆ¥h]”hŒ Parameters”…”�”}”(hjŠ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÄhj‚¥ubj )�”}”(hhh]”(j)�”}”(hŒ``void *addr`` The memory area ”h]”(j)�”}”(hŒ``void *addr``”h]”j)�”}”(hj§¥h]”hŒ void *addr”…”�”}”(hj©¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÁhj¡¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe memory area”h]”hŒThe memory area”…”�”}”(hjÀ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼¥h´MÁhj½¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼¥h´MÁhjž¥ubj)�”}”(hŒ!``int c`` The byte to search for ”h]”(j)�”}”(hŒ ``int c``”h]”j)�”}”(hjà¥h]”hŒint c”…”�”}”(hjâ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÂhjÚ¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe byte to search for”h]”hŒThe byte to search for”…”�”}”(hjù¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõ¥h´MÂhjö¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚ¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõ¥h´MÂhjž¥ubj)�”}”(hŒ&``size_t size`` The size of the area. ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hj¦h]”hŒ size_t size”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÃhj¦ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the area.”h]”hŒThe size of the area.”…”�”}”(hj2¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.¦h´MÃhj/¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.¦h´MÃhjž¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‚¥ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjT¦h]”hŒ Description”…”�”}”(hjV¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjR¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÅhj‚¥ubhÝ)�”}”(hŒcreturns the address of the first occurrence of **c**, or 1 byte past the area if **c** is not found”h]”(hŒ/returns the address of the first occurrence of ”…”�”}”(hjj¦h²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjr¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjj¦ubhŒ, or 1 byte past the area if ”…”�”}”(hjj¦h²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hj„¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjj¦ubhŒ is not found”…”�”}”(hjj¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÄhj‚¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrstr (C function)”Œc.strstr”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.char * strstr (const char *s1, const char *s2)”h]”j)�”}”(hŒ,char *strstr(const char *s1, const char *s2)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj½¦h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¹¦h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj̦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹¦h²hh³j˦h´MÙubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÚ¦h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¹¦h²hh³j˦h´MÙubj{)�”}”(hŒstrstr”h]”j�)�”}”(hŒstrstr”h]”hŒstrstr”…”�”}”(hjë¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjç¦ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¹¦h²hh³j˦h´MÙubjœ)�”}”(hŒ (const char *s1, const char *s2)”h]”(j¢)�”}”(hŒconst char *s1”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj"§h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj>§h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj§ubj�)�”}”(hŒs1”h]”hŒs1”…”�”}”(hjK§h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÿ¦ubj¢)�”}”(hŒconst char *s2”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjd§h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj`§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`§ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj`§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`§ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj›§h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj`§ubj�)�”}”(hŒs2”h]”hŒs2”…”�”}”(hj¨§h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÿ¦ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¹¦h²hh³j˦h´MÙubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjµ¦h²hh³j˦h´MÙubah}”(h]”j°¦ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j˦h´MÙhj²¦h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7Find the first substring in a ``NUL`` terminated string”h]”(hŒFind the first substring in a ”…”�”}”(hjÒ§h²hh³Nh´Nubj)�”}”(hŒ``NUL``”h]”hŒNUL”…”�”}”(hjÚ§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒ§ubhŒ terminated string”…”�”}”(hjÒ§h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÙhjϧh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj²¦h²hh³j˦h´MÙubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjü§jæjü§jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒm**Parameters** ``const char *s1`` The string to be searched ``const char *s2`` The string to search for”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¨h]”hŒ Parameters”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÝhj¨ubj )�”}”(hhh]”(j)�”}”(hŒ-``const char *s1`` The string to be searched ”h]”(j)�”}”(hŒ``const char *s1``”h]”j)�”}”(hj%¨h]”hŒconst char *s1”…”�”}”(hj'¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÚhj¨ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hj>¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:¨h´MÚhj;¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:¨h´MÚhj¨ubj)�”}”(hŒ+``const char *s2`` The string to search for”h]”(j)�”}”(hŒ``const char *s2``”h]”j)�”}”(hj^¨h]”hŒconst char *s2”…”�”}”(hj`¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÜhjX¨ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to search for”h]”hŒThe string to search for”…”�”}”(hjw¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MÛhjt¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjX¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³js¨h´MÜhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrnstr (C function)”Œ c.strnstr”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;char * strnstr (const char *s1, const char *s2, size_t len)”h]”j)�”}”(hŒ9char *strnstr(const char *s1, const char *s2, size_t len)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¸¨h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj´¨h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjǨh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´¨h²hh³jƨh´Mòubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÕ¨h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj´¨h²hh³jƨh´Mòubj{)�”}”(hŒstrnstr”h]”j�)�”}”(hŒstrnstr”h]”hŒstrnstr”…”�”}”(hjæ¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâ¨ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj´¨h²hh³jƨh´Mòubjœ)�”}”(hŒ,(const char *s1, const char *s2, size_t len)”h]”(j¢)�”}”(hŒconst char *s1”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjþ¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ¨ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþ¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ¨ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj9©h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjþ¨ubj�)�”}”(hŒs1”h]”hŒs1”…”�”}”(hjF©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjú¨ubj¢)�”}”(hŒconst char *s2”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj_©h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj[©ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[©ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjz©h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj[©ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[©ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj–©h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj[©ubj�)�”}”(hŒs2”h]”hŒs2”…”�”}”(hj£©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjú¨ubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¿©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÁ©Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jè¨sbŒ c.strnstr”†”asbuh1hhj¸©ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸©ubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjí©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjú¨ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj´¨h²hh³jƨh´Mòubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj°¨h²hh³jƨh´Mòubah}”(h]”j«¨ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jƨh´Mòhj­¨h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3Find the first substring in a length-limited string”h]”hŒ3Find the first substring in a length-limited string”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mòhjªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj­¨h²hh³jƨh´Mòubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj/ªjæj/ªjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒª**Parameters** ``const char *s1`` The string to be searched ``const char *s2`` The string to search for ``size_t len`` the maximum number of characters to search”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj9ªh]”hŒ Parameters”…”�”}”(hj;ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj7ªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Möhj3ªubj )�”}”(hhh]”(j)�”}”(hŒ-``const char *s1`` The string to be searched ”h]”(j)�”}”(hŒ``const char *s1``”h]”j)�”}”(hjXªh]”hŒconst char *s1”…”�”}”(hjZªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjVªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MóhjRªubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to be searched”h]”hŒThe string to be searched”…”�”}”(hjqªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jmªh´Móhjnªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjRªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmªh´MóhjOªubj)�”}”(hŒ,``const char *s2`` The string to search for ”h]”(j)�”}”(hŒ``const char *s2``”h]”j)�”}”(hj‘ªh]”hŒconst char *s2”…”�”}”(hj“ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Môhj‹ªubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to search for”h]”hŒThe string to search for”…”�”}”(hjªªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¦ªh´Môhj§ªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‹ªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¦ªh´MôhjOªubj)�”}”(hŒ9``size_t len`` the maximum number of characters to search”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjʪh]”hŒ size_t len”…”�”}”(hj̪h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjȪubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´MöhjĪubj2)�”}”(hhh]”hÝ)�”}”(hŒ*the maximum number of characters to search”h]”hŒ*the maximum number of characters to search”…”�”}”(hjãªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mõhjàªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjĪubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jߪh´MöhjOªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj3ªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemchr (C function)”Œc.memchr”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void * memchr (const void *s, int c, size_t n)”h]”j)�”}”(hŒ,void *memchr(const void *s, int c, size_t n)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj$«h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj «h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj «h²hh³j2«h´M ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjA«h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj «h²hh³j2«h´M ubj{)�”}”(hŒmemchr”h]”j�)�”}”(hŒmemchr”h]”hŒmemchr”…”�”}”(hjR«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN«ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj «h²hh³j2«h´M ubjœ)�”}”(hŒ (const void *s, int c, size_t n)”h]”(j¢)�”}”(hŒ const void *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjn«h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjj«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj«ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‰«h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjj«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj«ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¥«h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjj«ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj²«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjj«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjf«ubj¢)�”}”(hŒint c”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÊ«h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÆ«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆ«ubj�)�”}”(hjßh]”hŒc”…”�”}”(hjæ«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆ«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjf«ubj¢)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¬Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jT«sbŒc.memchr”†”asbuh1hhjú«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!¬h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjú«ubj�)�”}”(hj�h]”hŒn”…”�”}”(hj/¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjú«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjf«ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj «h²hh³j2«h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj«h²hh³j2«h´M ubah}”(h]”j«ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j2«h´M hj«h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Find a character in an area of memory.”h]”hŒ&Find a character in an area of memory.”…”�”}”(hjX¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M hjU¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj«h²hh³j2«h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjp¬jæjp¬jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒç**Parameters** ``const void *s`` The memory area ``int c`` The byte to search for ``size_t n`` The size of the area. **Description** returns the address of the first occurrence of **c**, or ``NULL`` if **c** is not found”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjz¬h]”hŒ Parameters”…”�”}”(hj|¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhjt¬ubj )�”}”(hhh]”(j)�”}”(hŒ"``const void *s`` The memory area ”h]”(j)�”}”(hŒ``const void *s``”h]”j)�”}”(hj™¬h]”hŒ const void *s”…”�”}”(hj›¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M hj“¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe memory area”h]”hŒThe memory area”…”�”}”(hj²¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j®¬h´M hj¯¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj“¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j®¬h´M hj�¬ubj)�”}”(hŒ!``int c`` The byte to search for ”h]”(j)�”}”(hŒ ``int c``”h]”j)�”}”(hjÒ¬h]”hŒint c”…”�”}”(hjÔ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjЬubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M hj̬ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe byte to search for”h]”hŒThe byte to search for”…”�”}”(hjë¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jç¬h´M hjè¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj̬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jç¬h´M hj�¬ubj)�”}”(hŒ#``size_t n`` The size of the area. ”h]”(j)�”}”(hŒ ``size_t n``”h]”j)�”}”(hj ­h]”hŒsize_t n”…”�”}”(hj ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhj­ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the area.”h]”hŒThe size of the area.”…”�”}”(hj$­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ­h´Mhj!­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ­h´Mhj�¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjt¬ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjF­h]”hŒ Description”…”�”}”(hjH­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjD­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhjt¬ubhÝ)�”}”(hŒWreturns the address of the first occurrence of **c**, or ``NULL`` if **c** is not found”h]”(hŒ/returns the address of the first occurrence of ”…”�”}”(hj\­h²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjd­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\­ubhŒ, or ”…”�”}”(hj\­h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjv­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\­ubhŒ if ”…”�”}”(hj\­h²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjˆ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\­ubhŒ is not found”…”�”}”(hj\­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´Mhjt¬ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemchr_inv (C function)”Œ c.memchr_inv”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:void * memchr_inv (const void *start, int c, size_t bytes)”h]”j)�”}”(hŒ8void *memchr_inv(const void *start, int c, size_t bytes)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÁ­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½­h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjЭh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½­h²hh³jÏ­h´M,ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÞ­h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj½­h²hh³jÏ­h´M,ubj{)�”}”(hŒ memchr_inv”h]”j�)�”}”(hŒ memchr_inv”h]”hŒ memchr_inv”…”�”}”(hjï­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjë­ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj½­h²hh³jÏ­h´M,ubjœ)�”}”(hŒ((const void *start, int c, size_t bytes)”h]”(j¢)�”}”(hŒconst void *start”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj ®h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj&®h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjB®h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj®ubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjO®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj®ubj¢)�”}”(hŒint c”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjh®h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjd®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjd®ubj�)�”}”(hjßh]”hŒc”…”�”}”(hj„®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjd®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj®ubj¢)�”}”(hŒ size_t bytes”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjŸ®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœ®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¡®Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jñ­sbŒ c.memchr_inv”†”asbuh1hhj˜®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˜®ubj�)�”}”(hŒbytes”h]”hŒbytes”…”�”}”(hjÍ®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj®ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj½­h²hh³jÏ­h´M,ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¹­h²hh³jÏ­h´M,ubah}”(h]”j´­ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÏ­h´M,hj¶­h²hubjÃ)�”}”(hhh]”hÝ)�”•'}”(hŒ2Find an unmatching character in an area of memory.”h]”hŒ2Find an unmatching character in an area of memory.”…”�”}”(hj÷®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M,hjô®h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¶­h²hh³jÏ­h´M,ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¯jæj¯jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX**Parameters** ``const void *start`` The memory area ``int c`` Find a character other than c ``size_t bytes`` The size of the area. **Description** returns the address of the first character other than **c**, or ``NULL`` if the whole buffer contains just **c**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¯h]”hŒ Parameters”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M0hj¯ubj )�”}”(hhh]”(j)�”}”(hŒ&``const void *start`` The memory area ”h]”(j)�”}”(hŒ``const void *start``”h]”j)�”}”(hj8¯h]”hŒconst void *start”…”�”}”(hj:¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M-hj2¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe memory area”h]”hŒThe memory area”…”�”}”(hjQ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jM¯h´M-hjN¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jM¯h´M-hj/¯ubj)�”}”(hŒ(``int c`` Find a character other than c ”h]”(j)�”}”(hŒ ``int c``”h]”j)�”}”(hjq¯h]”hŒint c”…”�”}”(hjs¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M.hjk¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒFind a character other than c”h]”hŒFind a character other than c”…”�”}”(hjНh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†¯h´M.hj‡¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjk¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†¯h´M.hj/¯ubj)�”}”(hŒ'``size_t bytes`` The size of the area. ”h]”(j)�”}”(hŒ``size_t bytes``”h]”j)�”}”(hjª¯h]”hŒ size_t bytes”…”�”}”(hj¬¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M/hj¤¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the area.”h]”hŒThe size of the area.”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¿¯h´M/hjÀ¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¤¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿¯h´M/hj/¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¯ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjå¯h]”hŒ Description”…”�”}”(hjç¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M1hj¯ubhÝ)�”}”(hŒqreturns the address of the first character other than **c**, or ``NULL`` if the whole buffer contains just **c**.”h]”(hŒ6returns the address of the first character other than ”…”�”}”(hjû¯h²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjû¯ubhŒ, or ”…”�”}”(hjû¯h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû¯ubhŒ# if the whole buffer contains just ”…”�”}”(hjû¯h²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hj'°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjû¯ubhŒ.”…”�”}”(hjû¯h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:36: ./lib/string.c”h´M0hj¯ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemdup_array_user (C function)”Œc.memdup_array_user”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHvoid * memdup_array_user (const void __user *src, size_t n, size_t size)”h]”j)�”}”(hŒFvoid *memdup_array_user(const void __user *src, size_t n, size_t size)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj`°h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj\°h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\°h²hh³jn°h´Kubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj}°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\°h²hh³jn°h´Kubj{)�”}”(hŒmemdup_array_user”h]”j�)�”}”(hŒmemdup_array_user”h]”hŒmemdup_array_user”…”�”}”(hjްh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjаubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj\°h²hh³jn°h´Kubjœ)�”}”(hŒ/(const void __user *src, size_t n, size_t size)”h]”(j¢)�”}”(hŒconst void __user *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjª°h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¦°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦°ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŰh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¦°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦°ubhŒ__user”…”�”}”(hj¦°h²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦°ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjó°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¦°ubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¢°ubj¢)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j±Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�°sbŒc.memdup_array_user”†”asbuh1hhj±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±ubj�)�”}”(hj�h]”hŒn”…”�”}”(hjJ±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¢°ubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hje±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjb±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jg±Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j8±Œc.memdup_array_user”†”asbuh1hhj^±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj^±ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj‘±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¢°ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj\°h²hh³jn°h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjX°h²hh³jn°h´Kubah}”(h]”jS°ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jn°h´KhjU°h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒduplicate array from user space”h]”hŒduplicate array from user space”…”�”}”(hj»±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Khj¸±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjU°h²hh³jn°h´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÓ±jæjÓ±jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX**Parameters** ``const void __user *src`` source address in user space ``size_t n`` number of array members to copy ``size_t size`` size of one array member **Return** an ERR_PTR() on failure. Result is physically contiguous, to be freed by kfree().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjݱh]”hŒ Parameters”…”�”}”(hjß±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛ±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Khj×±ubj )�”}”(hhh]”(j)�”}”(hŒ8``const void __user *src`` source address in user space ”h]”(j)�”}”(hŒ``const void __user *src``”h]”j)�”}”(hjü±h]”hŒconst void __user *src”…”�”}”(hjþ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjú±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Khjö±ubj2)�”}”(hhh]”hÝ)�”}”(hŒsource address in user space”h]”hŒsource address in user space”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j²h´Khj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjö±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²h´Khjó±ubj)�”}”(hŒ-``size_t n`` number of array members to copy ”h]”(j)�”}”(hŒ ``size_t n``”h]”j)�”}”(hj5²h]”hŒsize_t n”…”�”}”(hj7²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Khj/²ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of array members to copy”h]”hŒnumber of array members to copy”…”�”}”(hjN²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jJ²h´KhjK²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJ²h´Khjó±ubj)�”}”(hŒ)``size_t size`` size of one array member ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjn²h]”hŒ size_t size”…”�”}”(hjp²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjl²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Khjh²ubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of one array member”h]”hŒsize of one array member”…”�”}”(hj‡²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒ²h´Khj„²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjh²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒ²h´Khjó±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj×±ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj©²h]”hŒReturn”…”�”}”(hj«²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Khj×±ubhÝ)�”}”(hŒQan ERR_PTR() on failure. Result is physically contiguous, to be freed by kfree().”h]”hŒQan ERR_PTR() on failure. Result is physically contiguous, to be freed by kfree().”…”�”}”(hj¿²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Khj×±ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œvmemdup_array_user (C function)”Œc.vmemdup_array_user”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIvoid * vmemdup_array_user (const void __user *src, size_t n, size_t size)”h]”j)�”}”(hŒGvoid *vmemdup_array_user(const void __user *src, size_t n, size_t size)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjî²h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjê²h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý²h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjê²h²hh³jü²h´K+ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ³h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjê²h²hh³jü²h´K+ubj{)�”}”(hŒvmemdup_array_user”h]”j�)�”}”(hŒvmemdup_array_user”h]”hŒvmemdup_array_user”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjê²h²hh³jü²h´K+ubjœ)�”}”(hŒ/(const void __user *src, size_t n, size_t size)”h]”(j¢)�”}”(hŒconst void __user *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj8³h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj4³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4³ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjS³h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj4³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4³ubhŒ__user”…”�”}”(hj4³h²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4³ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�³h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj4³ubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj޳h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0³ubj¢)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjª³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¬³Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j³sbŒc.vmemdup_array_user”†”asbuh1hhj£³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjʳh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£³ubj�)�”}”(hj�h]”hŒn”…”�”}”(hjسh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0³ubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjó³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjð³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jõ³Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jƳŒc.vmemdup_array_user”†”asbuh1hhjì³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjì³ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjê²h²hh³jü²h´K+ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjæ²h²hh³jü²h´K+ubah}”(h]”já²ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jü²h´K+hjã²h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒduplicate array from user space”h]”hŒduplicate array from user space”…”�”}”(hjI´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K+hjF´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjã²h²hh³jü²h´K+ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåja´jæja´jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX **Parameters** ``const void __user *src`` source address in user space ``size_t n`` number of array members to copy ``size_t size`` size of one array member **Return** an ERR_PTR() on failure. Result may be not physically contiguous. Use kvfree() to free.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjk´h]”hŒ Parameters”…”�”}”(hjm´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhji´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K/hje´ubj )�”}”(hhh]”(j)�”}”(hŒ8``const void __user *src`` source address in user space ”h]”(j)�”}”(hŒ``const void __user *src``”h]”j)�”}”(hjŠ´h]”hŒconst void __user *src”…”�”}”(hjŒ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K,hj„´ubj2)�”}”(hhh]”hÝ)�”}”(hŒsource address in user space”h]”hŒsource address in user space”…”�”}”(hj£´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸ´h´K,hj ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸ´h´K,hj�´ubj)�”}”(hŒ-``size_t n`` number of array members to copy ”h]”(j)�”}”(hŒ ``size_t n``”h]”j)�”}”(hjôh]”hŒsize_t n”…”�”}”(hjÅ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K-hj½´ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of array members to copy”h]”hŒnumber of array members to copy”…”�”}”(hjÜ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØ´h´K-hjÙ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj½´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØ´h´K-hj�´ubj)�”}”(hŒ)``size_t size`` size of one array member ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjü´h]”hŒ size_t size”…”�”}”(hjþ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjú´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K.hjö´ubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of one array member”h]”hŒsize of one array member”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµh´K.hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjö´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµh´K.hj�´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hje´ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj7µh]”hŒReturn”…”�”}”(hj9µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5µubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K0hje´ubhÝ)�”}”(hŒWan ERR_PTR() on failure. Result may be not physically contiguous. Use kvfree() to free.”h]”hŒWan ERR_PTR() on failure. Result may be not physically contiguous. Use kvfree() to free.”…”�”}”(hjMµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K0hje´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrscpy (C macro)”Œ c.strscpy”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒstrscpy”h]”j)�”}”(hŒstrscpy”h]”j{)�”}”(hŒstrscpy”h]”j�)�”}”(hjvµh]”hŒstrscpy”…”�”}”(hj€µh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|µubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjxµh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´KYubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjtµh²hh³j“µh´KYubah}”(h]”joµah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j“µh´KYhjqµh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjqµh²hh³j“µh´KYubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj¬µjæj¬µjç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ``strscpy (dst, src, ...)``”h]”j)�”}”(hj²µh]”hŒstrscpy (dst, src, ...)”…”�”}”(hj´µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°µubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K[hj�eh²hubj•)�”}”(hŒ$Copy a C-string into a sized buffer ”h]”hÝ)�”}”(hŒ#Copy a C-string into a sized buffer”h]”hŒ#Copy a C-string into a sized buffer”…”�”}”(hj̵h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´KYhjȵubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÚµh´KYhj�eh²hubjë)�”}”(hXq**Parameters** ``dst`` Where to copy the string to ``src`` Where to copy the string from ``...`` Size of destination buffer (optional) **Description** Copy the source string **src**, or as much of it as fits, into the destination **dst** buffer. The behavior is undefined if the string buffers overlap. The destination **dst** buffer is always NUL terminated, unless it's zero-sized. The size argument **...** is only required when **dst** is not an array, or when the copy needs to be smaller than sizeof(**dst**). Preferred to strncpy() since it always returns a valid string, and doesn't unnecessarily force the tail of the destination buffer to be zero padded. If padding is desired please use strscpy_pad(). Returns the number of characters copied in **dst** (not including the trailing ``NUL``) or -E2BIG if **size** is 0 or the copy from **src** was truncated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjçµh]”hŒ Parameters”…”�”}”(hjéµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjåµubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K]hjáµubj )�”}”(hhh]”(j)�”}”(hŒ$``dst`` Where to copy the string to ”h]”(j)�”}”(hŒ``dst``”h]”j)�”}”(hj¶h]”hŒdst”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´KZhj¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy the string to”h]”hŒWhere to copy the string to”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶h´KZhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶h´KZhjýµubj)�”}”(hŒ&``src`` Where to copy the string from ”h]”(j)�”}”(hŒ``src``”h]”j)�”}”(hj?¶h]”hŒsrc”…”�”}”(hjA¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K[hj9¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy the string from”h]”hŒWhere to copy the string from”…”�”}”(hjX¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jT¶h´K[hjU¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj9¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jT¶h´K[hjýµubj)�”}”(hŒ.``...`` Size of destination buffer (optional) ”h]”(j)�”}”(hŒ``...``”h]”j)�”}”(hjx¶h]”hŒ...”…”�”}”(hjz¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjv¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K\hjr¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%Size of destination buffer (optional)”h]”hŒ%Size of destination buffer (optional)”…”�”}”(hj‘¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�¶h´K\hj޶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjr¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�¶h´K\hjýµubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjáµubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj³¶h]”hŒ Description”…”�”}”(hjµ¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K^hjáµubhÝ)�”}”(hŒèCopy the source string **src**, or as much of it as fits, into the destination **dst** buffer. The behavior is undefined if the string buffers overlap. The destination **dst** buffer is always NUL terminated, unless it's zero-sized.”h]”(hŒCopy the source string ”…”�”}”(hjɶh²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjѶh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjɶubhŒ1, or as much of it as fits, into the destination ”…”�”}”(hjɶh²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjã¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjɶubhŒR buffer. The behavior is undefined if the string buffers overlap. The destination ”…”�”}”(hjɶh²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjõ¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjɶubhŒ; buffer is always NUL terminated, unless it’s zero-sized.”…”�”}”(hjɶh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K]hjáµubhÝ)�”}”(hŒƒThe size argument **...** is only required when **dst** is not an array, or when the copy needs to be smaller than sizeof(**dst**).”h]”(hŒThe size argument ”…”�”}”(hj·h²hh³Nh´Nubjõ)�”}”(hŒ**...**”h]”hŒ...”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·ubhŒ is only required when ”…”�”}”(hj·h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj(·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·ubhŒC is not an array, or when the copy needs to be smaller than sizeof(”…”�”}”(hj·h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj:·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·ubhŒ).”…”�”}”(hj·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´KbhjáµubhÝ)�”}”(hŒÄPreferred to strncpy() since it always returns a valid string, and doesn't unnecessarily force the tail of the destination buffer to be zero padded. If padding is desired please use strscpy_pad().”h]”hŒÆPreferred to strncpy() since it always returns a valid string, and doesn’t unnecessarily force the tail of the destination buffer to be zero padded. If padding is desired please use strscpy_pad().”…”�”}”(hjS·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´KehjáµubhÝ)�”}”(hŒšReturns the number of characters copied in **dst** (not including the trailing ``NUL``) or -E2BIG if **size** is 0 or the copy from **src** was truncated.”h]”(hŒ+Returns the number of characters copied in ”…”�”}”(hjb·h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjb·ubhŒ (not including the trailing ”…”�”}”(hjb·h²hh³Nh´Nubj)�”}”(hŒ``NUL``”h]”hŒNUL”…”�”}”(hj|·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb·ubhŒ) or -E2BIG if ”…”�”}”(hjb·h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjŽ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjb·ubhŒ is 0 or the copy from ”…”�”}”(hjb·h²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjb·ubhŒ was truncated.”…”�”}”(hjb·h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Kihjáµubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrscpy_pad (C macro)”Œ c.strscpy_pad”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ strscpy_pad”h]”j)�”}”(hŒ strscpy_pad”h]”j{)�”}”(hŒ strscpy_pad”h]”j�)�”}”(hjÓ·h]”hŒ strscpy_pad”…”�”}”(hjÝ·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙ·ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÕ·h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K~ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÑ·h²hh³jð·h´K~ubah}”(h]”jÌ·ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jð·h´K~hjηh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjηh²hh³jð·h´K~ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj ¸jæj ¸jç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ``strscpy_pad (dst, src, ...)``”h]”j)�”}”(hj¸h]”hŒstrscpy_pad (dst, src, ...)”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K€hj�eh²hubj•)�”}”(hŒ$Copy a C-string into a sized buffer ”h]”hÝ)�”}”(hŒ#Copy a C-string into a sized buffer”h]”hŒ#Copy a C-string into a sized buffer”…”�”}”(hj)¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K~hj%¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j7¸h´K~hj�eh²hubjë)�”}”(hXë**Parameters** ``dst`` Where to copy the string to ``src`` Where to copy the string from ``...`` Size of destination buffer **Description** Copy the string, or as much of it as fits, into the dest buffer. The behavior is undefined if the string buffers overlap. The destination buffer is always ``NUL`` terminated, unless it's zero-sized. If the source string is shorter than the destination buffer, the remaining bytes in the buffer will be filled with ``NUL`` bytes. For full explanation of why you may want to consider using the 'strscpy' functions please see the function docstring for strscpy(). **Return** * The number of characters copied (not including the trailing ``NULs``) * -E2BIG if count is 0 or **src** was truncated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjD¸h]”hŒ Parameters”…”�”}”(hjF¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjB¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K‚hj>¸ubj )�”}”(hhh]”(j)�”}”(hŒ$``dst`` Where to copy the string to ”h]”(j)�”}”(hŒ``dst``”h]”j)�”}”(hjc¸h]”hŒdst”…”�”}”(hje¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Khj]¸ubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy the string to”h]”hŒWhere to copy the string to”…”�”}”(hj|¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jx¸h´Khjy¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj]¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jx¸h´KhjZ¸ubj)�”}”(hŒ&``src`` Where to copy the string from ”h]”(j)�”}”(hŒ``src``”h]”j)�”}”(hjœ¸h]”hŒsrc”…”�”}”(hjž¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjš¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K€hj–¸ubj2)�”}”(hhh]”hÝ)�”}”(hŒWhere to copy the string from”h]”hŒWhere to copy the string from”…”�”}”(hjµ¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±¸h´K€hj²¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±¸h´K€hjZ¸ubj)�”}”(hŒ#``...`` Size of destination buffer ”h]”(j)�”}”(hŒ``...``”h]”j)�”}”(hjÕ¸h]”hŒ...”…”�”}”(hj׸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓ¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K�hjϸubj2)�”}”(hhh]”hÝ)�”}”(hŒSize of destination buffer”h]”hŒSize of destination buffer”…”�”}”(hjî¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jê¸h´K�hjë¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjϸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jê¸h´K�hjZ¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj>¸ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¹h]”hŒ Description”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Kƒhj>¸ubhÝ)�”}”(hŒÆCopy the string, or as much of it as fits, into the dest buffer. The behavior is undefined if the string buffers overlap. The destination buffer is always ``NUL`` terminated, unless it's zero-sized.”h]”(hŒ›Copy the string, or as much of it as fits, into the dest buffer. The behavior is undefined if the string buffers overlap. The destination buffer is always ”…”�”}”(hj&¹h²hh³Nh´Nubj)�”}”(hŒ``NUL``”h]”hŒNUL”…”�”}”(hj.¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&¹ubhŒ& terminated, unless it’s zero-sized.”…”�”}”(hj&¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K‚hj>¸ubhÝ)�”}”(hŒ�If the source string is shorter than the destination buffer, the remaining bytes in the buffer will be filled with ``NUL`` bytes.”h]”(hŒsIf the source string is shorter than the destination buffer, the remaining bytes in the buffer will be filled with ”…”�”}”(hjG¹h²hh³Nh´Nubj)�”}”(hŒ``NUL``”h]”hŒNUL”…”�”}”(hjO¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG¹ubhŒ bytes.”…”�”}”(hjG¹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K†hj>¸ubhÝ)�”}”(hŒƒFor full explanation of why you may want to consider using the 'strscpy' functions please see the function docstring for strscpy().”h]”hŒ‡For full explanation of why you may want to consider using the ‘strscpy’ functions please see the function docstring for strscpy().”…”�”}”(hjh¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´K‰hj>¸ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjy¹h]”hŒReturn”…”�”}”(hj{¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjw¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´KŒhj>¸ubj›)�”}”(hhh]”(j )�”}”(hŒEThe number of characters copied (not including the trailing ``NULs``)”h]”hÝ)�”}”(hj”¹h]”(hŒ¸ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmem_is_zero (C function)”Œ c.mem_is_zero”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ*bool mem_is_zero (const void *s, size_t n)”h]”j)�”}”(hŒ)bool mem_is_zero(const void *s, size_t n)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj ºh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjºh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºh²hh³jºh´Mubj{)�”}”(hŒ mem_is_zero”h]”j�)�”}”(hŒ mem_is_zero”h]”hŒ mem_is_zero”…”�”}”(hj,ºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(ºubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjºh²hh³jºh´Mubjœ)�”}”(hŒ(const void *s, size_t n)”h]”(j¢)�”}”(hŒ const void *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjHºh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjDºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjDºubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjcºh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjDºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjDºubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjDºubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjŒºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj@ºubj¢)�”}”(hŒsize_t n”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj§ºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤ºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j©ºŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j.ºsbŒ c.mem_is_zero”†”asbuh1hhj ºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjǺh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ºubj�)�”}”(hj�h]”hŒn”…”�”}”(hjÕºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj@ºubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjºh²hh³jºh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjºh²hh³jºh´Mubah}”(h]”jÿ¹ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jºh´Mhjºh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Check if an area of memory is all 0's.”h]”hŒ(Check if an area of memory is all 0’s.”…”�”}”(hjþºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mhjûºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjºh²hh³jºh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj»jæj»jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒŒ**Parameters** ``const void *s`` The memory area ``size_t n`` The size of the area **Return** True if the area of memory is all 0's.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj »h]”hŒ Parameters”…”�”}”(hj"»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M!hj»ubj )�”}”(hhh]”(j)�”}”(hŒ"``const void *s`` The memory area ”h]”(j)�”}”(hŒ``const void *s``”h]”j)�”}”(hj?»h]”hŒ const void *s”…”�”}”(hjA»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mhj9»ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe memory area”h]”hŒThe memory area”…”�”}”(hjX»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jT»h´MhjU»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj9»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jT»h´Mhj6»ubj)�”}”(hŒ"``size_t n`` The size of the area ”h]”(j)�”}”(hŒ ``size_t n``”h]”j)�”}”(hjx»h]”hŒsize_t n”…”�”}”(hjz»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjv»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mhjr»ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the area”h]”hŒThe size of the area”…”�”}”(hj‘»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�»h´MhjŽ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjr»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�»h´Mhj6»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj»ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj³»h]”hŒReturn”…”�”}”(hjµ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M!hj»ubhÝ)�”}”(hŒ&True if the area of memory is all 0's.”h]”hŒ(True if the area of memory is all 0’s.”…”�”}”(hjÉ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M!hj»ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsysfs_match_string (C macro)”Œc.sysfs_match_string”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒsysfs_match_string”h]”j)�”}”(hŒsysfs_match_string”h]”j{)�”}”(hŒsysfs_match_string”h]”j�)�”}”(hjò»h]”hŒsysfs_match_string”…”�”}”(hjü»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjø»ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjô»h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MGubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjð»h²hh³j¼h´MGubah}”(h]”jë»ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¼h´MGhjí»h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjí»h²hh³j¼h´MGubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj(¼jæj(¼jç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ``sysfs_match_string (_a, _s)``”h]”j)�”}”(hj.¼h]”hŒsysfs_match_string (_a, _s)”…”�”}”(hj0¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MIhj�eh²hubj•)�”}”(hŒ!matches given string in an array ”h]”hÝ)�”}”(hŒ matches given string in an array”h]”hŒ matches given string in an array”…”�”}”(hjH¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MGhjD¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jV¼h´MGhj�eh²hubjë)�”}”(hŒ©**Parameters** ``_a`` array of strings ``_s`` string to match with **Description** Helper for __sysfs_match_string(). Calculates the size of **a** automatically.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjc¼h]”hŒ Parameters”…”�”}”(hje¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhja¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MKhj]¼ubj )�”}”(hhh]”(j)�”}”(hŒ``_a`` array of strings ”h]”(j)�”}”(hŒ``_a``”h]”j)�”}”(hj‚¼h]”hŒ_a”…”�”}”(hj„¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MHhj|¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒarray of strings”h]”hŒarray of strings”…”�”}”(hj›¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j—¼h´MHhj˜¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—¼h´MHhjy¼ubj)�”}”(hŒ``_s`` string to match with ”h]”(j)�”}”(hŒ``_s``”h]”j)�”}”(hj»¼h]”hŒ_s”…”�”}”(hj½¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MIhjµ¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒstring to match with”h]”hŒstring to match with”…”�”}”(hjÔ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jмh´MIhjѼubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµ¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jмh´MIhjy¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj]¼ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjö¼h]”hŒ Description”…”�”}”(hjø¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjô¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MKhj]¼ubhÝ)�”}”(hŒNHelper for __sysfs_match_string(). Calculates the size of **a** automatically.”h]”(hŒ:Helper for __sysfs_match_string(). Calculates the size of ”…”�”}”(hj ½h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ½ubhŒ automatically.”…”�”}”(hj ½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MJhj]¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemzero_explicit (C function)”Œc.memzero_explicit”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-void memzero_explicit (void *s, size_t count)”h]”j)�”}”(hŒ,void memzero_explicit(void *s, size_t count)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjM½h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjI½h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjI½h²hh³j[½h´M\ubj{)�”}”(hŒmemzero_explicit”h]”j�)�”}”(hŒmemzero_explicit”h]”hŒmemzero_explicit”…”�”}”(hjn½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjj½ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjI½h²hh³j[½h´M\ubjœ)�”}”(hŒ(void *s, size_t count)”h]”(j¢)�”}”(hŒvoid *s”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjнh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj†½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†½ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¦½h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj†½ubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj³½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‚½ubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjνh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˽ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jнŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jp½sbŒc.memzero_explicit”†”asbuh1hhjǽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjǽubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjü½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjǽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‚½ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjI½h²hh³j[½h´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjE½h²hh³j[½h´M\ubah}”(h]”j@½ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j[½h´M\hjB½h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ=Fill a region of memory (e.g. sensitive keying data) with 0s.”h]”hŒ=Fill a region of memory (e.g. sensitive keying data) with 0s.”…”�”}”(hj&¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M\hj#¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjB½h²hh³j[½h´M\ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj>¾jæj>¾jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hXÄ**Parameters** ``void *s`` Pointer to the start of the area. ``size_t count`` The size of the area. **Note** usually using memset() is just fine (!), but in cases where clearing out _local_ data at the end of a scope is necessary, memzero_explicit() should be used instead in order to prevent the compiler from optimising away zeroing. memzero_explicit() doesn't need an arch-specific version as it just invokes the one of memset() implicitly.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjH¾h]”hŒ Parameters”…”�”}”(hjJ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjF¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M`hjB¾ubj )�”}”(hhh]”(j)�”}”(hŒ.``void *s`` Pointer to the start of the area. ”h]”(j)�”}”(hŒ ``void *s``”h]”j)�”}”(hjg¾h]”hŒvoid *s”…”�”}”(hji¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhje¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M^hja¾ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!Pointer to the start of the area.”h]”hŒ!Pointer to the start of the area.”…”�”}”(hj€¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|¾h´M^hj}¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hja¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|¾h´M^hj^¾ubj)�”}”(hŒ'``size_t count`` The size of the area. ”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hj ¾h]”hŒ size_t count”…”�”}”(hj¢¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjž¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M_hjš¾ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the area.”h]”hŒThe size of the area.”…”�”}”(hj¹¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµ¾h´M_hj¶¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjš¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµ¾h´M_hj^¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjB¾ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjÛ¾h]”hŒNote”…”�”}”(hjݾh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙ¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MahjB¾ubhÝ)�”}”(hŒâusually using memset() is just fine (!), but in cases where clearing out _local_ data at the end of a scope is necessary, memzero_explicit() should be used instead in order to prevent the compiler from optimising away zeroing.”h]”hŒâusually using memset() is just fine (!), but in cases where clearing out _local_ data at the end of a scope is necessary, memzero_explicit() should be used instead in order to prevent the compiler from optimising away zeroing.”…”�”}”(hjñ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MahjB¾ubhÝ)�”}”(hŒkmemzero_explicit() doesn't need an arch-specific version as it just invokes the one of memset() implicitly.”h]”hŒmmemzero_explicit() doesn’t need an arch-specific version as it just invokes the one of memset() implicitly.”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MfhjB¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkbasename (C function)”Œ c.kbasename”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)const char * kbasename (const char *path)”h]”j)�”}”(hŒ'const char *kbasename(const char *path)”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj/¿h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj+¿h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+¿h²hh³j<¿h´Mpubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjK¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj+¿h²hh³j<¿h´Mpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+¿h²hh³j<¿h´Mpubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjg¿h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj+¿h²hh³j<¿h´Mpubj{)�”}”(hŒ kbasename”h]”j�)�”}”(hŒ kbasename”h]”hŒ kbasename”…”�”}”(hjx¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjt¿ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj+¿h²hh³j<¿h´Mpubjœ)�”}”(hŒ(const char *path)”h]”j¢)�”}”(hŒconst char *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj”¿h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�¿ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¯¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�¿ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjË¿h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�¿ubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjØ¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŒ¿ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj+¿h²hh³j<¿h´Mpubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj'¿h²hh³j<¿h´Mpubah}”(h]”j"¿ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j<¿h´Mphj$¿h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#return the last part of a pathname.”h]”hŒ#return the last part of a pathname.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mphjÿ¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj$¿h²hh³j<¿h´Mpubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÀjæjÀjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒµ**Parameters** ``const char *path`` path to extract the filename from. **Return** Pointer to the filename portion inside **path**. If no '/' exists, returns **path** unchanged.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj$Àh]”hŒ Parameters”…”�”}”(hj&Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"Àubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MthjÀubj )�”}”(hhh]”j)�”}”(hŒ8``const char *path`` path to extract the filename from. ”h]”(j)�”}”(hŒ``const char *path``”h]”j)�”}”(hjCÀh]”hŒconst char *path”…”�”}”(hjEÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mrhj=Àubj2)�”}”(hhh]”hÝ)�”}”(hŒ"path to extract the filename from.”h]”hŒ"path to extract the filename from.”…”�”}”(hj\Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jXÀh´MrhjYÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jXÀh´Mrhj:Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÀubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj~Àh]”hŒReturn”…”�”}”(hj€Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|Àubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MthjÀubhÝ)�”}”(hŒ^Pointer to the filename portion inside **path**. If no '/' exists, returns **path** unchanged.”h]”(hŒ'Pointer to the filename portion inside ”…”�”}”(hj”Àh²hh³Nh´Nubjõ)�”}”(hŒ**path**”h]”hŒpath”…”�”}”(hjœÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”ÀubhŒ . If no ‘/’ exists, returns ”…”�”}”(hj”Àh²hh³Nh´Nubjõ)�”}”(hŒ**path**”h]”hŒpath”…”�”}”(hj®Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”ÀubhŒ unchanged.”…”�”}”(hj”Àh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MthjÀubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrtomem_pad (C macro)”Œc.strtomem_pad”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ strtomem_pad”h]”j)�”}”(hŒ strtomem_pad”h]”j{)�”}”(hŒ strtomem_pad”h]”j�)�”}”(hjáÀh]”hŒ strtomem_pad”…”�”}”(hjëÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçÀubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjãÀh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MŠubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjßÀh²hh³jþÀh´MŠubah}”(h]”jÚÀah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jþÀh´MŠhjÜÀh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÜÀh²hh³jþÀh´MŠubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÁjæjÁjç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ!``strtomem_pad (dest, src, pad)``”h]”j)�”}”(hjÁh]”hŒstrtomem_pad (dest, src, pad)”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MŒhj�eh²hubj•)�”}”(hŒ8Copy NUL-terminated string to non-NUL-terminated buffer ”h]”hÝ)�”}”(hŒ7Copy NUL-terminated string to non-NUL-terminated buffer”h]”hŒ7Copy NUL-terminated string to non-NUL-terminated buffer”…”�”}”(hj7Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MŠhj3Áubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jEÁh´MŠhj�eh²hubjë)�”}”(hX6**Parameters** ``dest`` Pointer of destination character array (marked as __nonstring) ``src`` Pointer to NUL-terminated string ``pad`` Padding character to fill any remaining bytes of **dest** after copy **Description** This is a replacement for strncpy() uses where the destination is not a NUL-terminated string, but with bounds checking on the source size, and an explicit padding character. If padding is not required, use strtomem(). Note that the size of **dest** is not an argument, as the length of **dest** must be discoverable by the compiler.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjRÁh]”hŒ Parameters”…”�”}”(hjTÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MŽhjLÁubj )�”}”(hhh]”(j)�”}”(hŒH``dest`` Pointer of destination character array (marked as __nonstring) ”h]”(j)�”}”(hŒ``dest``”h]”j)�”}”(hjqÁh]”hŒdest”…”�”}”(hjsÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MŒhjkÁubj2)�”}”(hhh]”hÝ)�”}”(hŒ>Pointer of destination character array (marked as __nonstring)”h]”hŒ>Pointer of destination character array (marked as __nonstring)”…”�”}”(hjŠÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†Áh´MŒhj‡Áubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjkÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†Áh´MŒhjhÁubj)�”}”(hŒ)``src`` Pointer to NUL-terminated string ”h]”(j)�”}”(hŒ``src``”h]”j)�”}”(hjªÁh]”hŒsrc”…”�”}”(hj¬Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M�hj¤Áubj2)�”}”(hhh]”hÝ)�”}”(hŒ Pointer to NUL-terminated string”h]”hŒ Pointer to NUL-terminated string”…”�”}”(hjÃÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¿Áh´M�hjÀÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¤Áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿Áh´M�hjhÁubj)�”}”(hŒM``pad`` Padding character to fill any remaining bytes of **dest** after copy ”h]”(j)�”}”(hŒ``pad``”h]”j)�”}”(hjãÁh]”hŒpad”…”�”}”(hjåÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MŽhjÝÁubj2)�”}”(hhh]”hÝ)�”}”(hŒDPadding character to fill any remaining bytes of **dest** after copy”h]”(hŒ1Padding character to fill any remaining bytes of ”…”�”}”(hjüÁh²hh³Nh´Nubjõ)�”}”(hŒ**dest**”h]”hŒdest”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjüÁubhŒ after copy”…”�”}”(hjüÁh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jøÁh´MŽhjùÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÝÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jøÁh´MŽhjhÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjLÁubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj0Âh]”hŒ Description”…”�”}”(hj2Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.Âubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M�hjLÁubhÝ)�”}”(hŒÚThis is a replacement for strncpy() uses where the destination is not a NUL-terminated string, but with bounds checking on the source size, and an explicit padding character. If padding is not required, use strtomem().”h]”hŒÚThis is a replacement for strncpy() uses where the destination is not a NUL-terminated string, but with bounds checking on the source size, and an explicit padding character. If padding is not required, use strtomem().”…”�”}”(hjFÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M�hjLÁubhÝ)�”}”(hŒrNote that the size of **dest** is not an argument, as the length of **dest** must be discoverable by the compiler.”h]”(hŒNote that the size of ”…”�”}”(hjUÂh²hh³Nh´Nubjõ)�”}”(hŒ**dest**”h]”hŒdest”…”�”}”(hj]Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjUÂubhŒ& is not an argument, as the length of ”…”�”}”(hjUÂh²hh³Nh´Nubjõ)�”}”(hŒ**dest**”h]”hŒdest”…”�”}”(hjoÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjUÂubhŒ& must be discoverable by the compiler.”…”�”}”(hjUÂh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M“hjLÁubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrtomem (C macro)”Œ c.strtomem”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒstrtomem”h]”j)�”}”(hŒstrtomem”h]”j{)�”}”(hŒstrtomem”h]”j�)�”}”(hj¢Âh]”hŒstrtomem”…”�”}”(hj¬Âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨Âubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¤Âh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M¥ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj Âh²hh³j¿Âh´M¥ubah}”(h]”j›Âah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¿Âh´M¥hj�Âh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�Âh²hh³j¿Âh´M¥ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjØÂjæjØÂjç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ``strtomem (dest, src)``”h]”j)�”}”(hjÞÂh]”hŒstrtomem (dest, src)”…”�”}”(hjàÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M§hj�eh²hubj•)�”}”(hŒ8Copy NUL-terminated string to non-NUL-terminated buffer ”h]”hÝ)�”}”(hŒ7Copy NUL-terminated string to non-NUL-terminated buffer”h]”hŒ7Copy NUL-terminated string to non-NUL-terminated buffer”…”�”}”(hjøÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M¥hjôÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÃh´M¥hj�eh²hubjë)�”}”(hXá**Parameters** ``dest`` Pointer of destination character array (marked as __nonstring) ``src`` Pointer to NUL-terminated string **Description** This is a replacement for strncpy() uses where the destination is not a NUL-terminated string, but with bounds checking on the source size, and without trailing padding. If padding is required, use strtomem_pad(). Note that the size of **dest** is not an argument, as the length of **dest** must be discoverable by the compiler.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÃh]”hŒ Parameters”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M©hj Ãubj )�”}”(hhh]”(j)�”}”(hŒH``dest`` Pointer of destination character array (marked as __nonstring) ”h]”(j)�”}”(hŒ``dest``”h]”j)�”}”(hj2Ãh]”hŒdest”…”�”}”(hj4Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M§hj,Ãubj2)�”}”(hhh]”hÝ)�”}”(hŒ>Pointer of destination character array (marked as __nonstring)”h]”hŒ>Pointer of destination character array (marked as __nonstring)”…”�”}”(hjKÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jGÃh´M§hjHÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj,Ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jGÃh´M§hj)Ãubj)�”}”(hŒ)``src`` Pointer to NUL-terminated string ”h]”(j)�”}”(hŒ``src``”h]”j)�”}”(hjkÃh]”hŒsrc”…”�”}”(hjmÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M¨hjeÃubj2)�”}”(hhh]”hÝ)�”}”(hŒ Pointer to NUL-terminated string”h]”hŒ Pointer to NUL-terminated string”…”�”}”(hj„Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j€Ãh´M¨hj�Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjeÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€Ãh´M¨hj)Ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ÃubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¦Ãh]”hŒ Description”…”�”}”(hj¨Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mªhj ÃubhÝ)�”}”(hŒÕThis is a replacement for strncpy() uses where the destination is not a NUL-terminated string, but with bounds checking on the source size, and without trailing padding. If padding is required, use strtomem_pad().”•h]”hŒÕThis is a replacement for strncpy() uses where the destination is not a NUL-terminated string, but with bounds checking on the source size, and without trailing padding. If padding is required, use strtomem_pad().”…”�”}”(hj¼Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M©hj ÃubhÝ)�”}”(hŒrNote that the size of **dest** is not an argument, as the length of **dest** must be discoverable by the compiler.”h]”(hŒNote that the size of ”…”�”}”(hjËÃh²hh³Nh´Nubjõ)�”}”(hŒ**dest**”h]”hŒdest”…”�”}”(hjÓÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjËÃubhŒ& is not an argument, as the length of ”…”�”}”(hjËÃh²hh³Nh´Nubjõ)�”}”(hŒ**dest**”h]”hŒdest”…”�”}”(hjåÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjËÃubhŒ& must be discoverable by the compiler.”…”�”}”(hjËÃh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M­hj Ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemtostr (C macro)”Œ c.memtostr”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒmemtostr”h]”j)�”}”(hŒmemtostr”h]”j{)�”}”(hŒmemtostr”h]”j�)�”}”(hjÄh]”hŒmemtostr”…”�”}”(hj"Äh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÄh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M¾ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÄh²hh³j5Äh´M¾ubah}”(h]”jÄah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j5Äh´M¾hjÄh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÄh²hh³j5Äh´M¾ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjNÄjæjNÄjç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ``memtostr (dest, src)``”h]”j)�”}”(hjTÄh]”hŒmemtostr (dest, src)”…”�”}”(hjVÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRÄubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÀhj�eh²hubj•)�”}”(hŒ9Copy a possibly non-NUL-term string to a NUL-term string ”h]”hÝ)�”}”(hŒ8Copy a possibly non-NUL-term string to a NUL-term string”h]”hŒ8Copy a possibly non-NUL-term string to a NUL-term string”…”�”}”(hjnÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M¾hjjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j|Äh´M¾hj�eh²hubjë)�”}”(hX@**Parameters** ``dest`` Pointer to destination NUL-terminates string ``src`` Pointer to character array (likely marked as __nonstring) **Description** This is a replacement for strncpy() uses where the source is not a NUL-terminated string. Note that sizes of **dest** and **src** must be known at compile-time.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‰Äh]”hŒ Parameters”…”�”}”(hj‹Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‡Äubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÂhjƒÄubj )�”}”(hhh]”(j)�”}”(hŒ6``dest`` Pointer to destination NUL-terminates string ”h]”(j)�”}”(hŒ``dest``”h]”j)�”}”(hj¨Äh]”hŒdest”…”�”}”(hjªÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦Äubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M¿hj¢Äubj2)�”}”(hhh]”hÝ)�”}”(hŒ,Pointer to destination NUL-terminates string”h]”hŒ,Pointer to destination NUL-terminates string”…”�”}”(hjÁÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j½Äh´M¿hj¾Äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¢Äubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½Äh´M¿hjŸÄubj)�”}”(hŒB``src`` Pointer to character array (likely marked as __nonstring) ”h]”(j)�”}”(hŒ``src``”h]”j)�”}”(hjáÄh]”hŒsrc”…”�”}”(hjãÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÀhjÛÄubj2)�”}”(hhh]”hÝ)�”}”(hŒ9Pointer to character array (likely marked as __nonstring)”h]”hŒ9Pointer to character array (likely marked as __nonstring)”…”�”}”(hjúÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jöÄh´MÀhj÷Äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÛÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jöÄh´MÀhjŸÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjƒÄubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÅh]”hŒ Description”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÂhjƒÄubhÝ)�”}”(hŒYThis is a replacement for strncpy() uses where the source is not a NUL-terminated string.”h]”hŒYThis is a replacement for strncpy() uses where the source is not a NUL-terminated string.”…”�”}”(hj2Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÁhjƒÄubhÝ)�”}”(hŒFNote that sizes of **dest** and **src** must be known at compile-time.”h]”(hŒNote that sizes of ”…”�”}”(hjAÅh²hh³Nh´Nubjõ)�”}”(hŒ**dest**”h]”hŒdest”…”�”}”(hjIÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjAÅubhŒ and ”…”�”}”(hjAÅh²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj[Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjAÅubhŒ must be known at compile-time.”…”�”}”(hjAÅh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÄhjƒÄubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemtostr_pad (C macro)”Œc.memtostr_pad”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ memtostr_pad”h]”j)�”}”(hŒ memtostr_pad”h]”j{)�”}”(hŒ memtostr_pad”h]”j�)�”}”(hjŽÅh]”hŒ memtostr_pad”…”�”}”(hj˜Åh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”Åubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�Åh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÙubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŒÅh²hh³j«Åh´MÙubah}”(h]”j‡Åah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j«Åh´MÙhj‰Åh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‰Åh²hh³j«Åh´MÙubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÄÅjæjÄÅjç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ``memtostr_pad (dest, src)``”h]”j)�”}”(hjÊÅh]”hŒmemtostr_pad (dest, src)”…”�”}”(hjÌÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÛhj�eh²hubj•)�”}”(hŒ]Copy a possibly non-NUL-term string to a NUL-term string with NUL padding in the destination ”h]”hÝ)�”}”(hŒ\Copy a possibly non-NUL-term string to a NUL-term string with NUL padding in the destination”h]”hŒ\Copy a possibly non-NUL-term string to a NUL-term string with NUL padding in the destination”…”�”}”(hjäÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÙhjàÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jòÅh´MÙhj�eh²hubjë)�”}”(hX@**Parameters** ``dest`` Pointer to destination NUL-terminates string ``src`` Pointer to character array (likely marked as __nonstring) **Description** This is a replacement for strncpy() uses where the source is not a NUL-terminated string. Note that sizes of **dest** and **src** must be known at compile-time.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÿÅh]”hŒ Parameters”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjýÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÝhjùÅubj )�”}”(hhh]”(j)�”}”(hŒ6``dest`` Pointer to destination NUL-terminates string ”h]”(j)�”}”(hŒ``dest``”h]”j)�”}”(hjÆh]”hŒdest”…”�”}”(hj Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÛhjÆubj2)�”}”(hhh]”hÝ)�”}”(hŒ,Pointer to destination NUL-terminates string”h]”hŒ,Pointer to destination NUL-terminates string”…”�”}”(hj7Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3Æh´MÛhj4Æubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3Æh´MÛhjÆubj)�”}”(hŒB``src`` Pointer to character array (likely marked as __nonstring) ”h]”(j)�”}”(hŒ``src``”h]”j)�”}”(hjWÆh]”hŒsrc”…”�”}”(hjYÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÜhjQÆubj2)�”}”(hhh]”hÝ)�”}”(hŒ9Pointer to character array (likely marked as __nonstring)”h]”hŒ9Pointer to character array (likely marked as __nonstring)”…”�”}”(hjpÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlÆh´MÜhjmÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlÆh´MÜhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjùÅubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj’Æh]”hŒ Description”…”�”}”(hj”Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Æubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÞhjùÅubhÝ)�”}”(hŒYThis is a replacement for strncpy() uses where the source is not a NUL-terminated string.”h]”hŒYThis is a replacement for strncpy() uses where the source is not a NUL-terminated string.”…”�”}”(hj¨Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MÝhjùÅubhÝ)�”}”(hŒFNote that sizes of **dest** and **src** must be known at compile-time.”h]”(hŒNote that sizes of ”…”�”}”(hj·Æh²hh³Nh´Nubjõ)�”}”(hŒ**dest**”h]”hŒdest”…”�”}”(hj¿Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·ÆubhŒ and ”…”�”}”(hj·Æh²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjÑÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·ÆubhŒ must be known at compile-time.”…”�”}”(hj·Æh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MàhjùÅubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemset_after (C macro)”Œc.memset_after”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ memset_after”h]”j)�”}”(hŒ memset_after”h]”j{)�”}”(hŒ memset_after”h]”j�)�”}”(hjÇh]”hŒ memset_after”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Çubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÇh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mõubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÇh²hh³j!Çh´Mõubah}”(h]”jýÆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j!Çh´MõhjÿÆh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÿÆh²hh³j!Çh´Mõubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj:Çjæj:Çjç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ!``memset_after (obj, v, member)``”h]”j)�”}”(hj@Çh]”hŒmemset_after (obj, v, member)”…”�”}”(hjBÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>Çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M÷hj�eh²hubj•)�”}”(hŒ9Set a value after a struct member to the end of a struct ”h]”hÝ)�”}”(hŒ8Set a value after a struct member to the end of a struct”h]”hŒ8Set a value after a struct member to the end of a struct”…”�”}”(hjZÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MõhjVÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jhÇh´Mõhj�eh²hubjë)�”}”(hŒò**Parameters** ``obj`` Address of target struct instance ``v`` Byte value to repeatedly write ``member`` after which struct member to start writing bytes **Description** This is good for clearing padding following the given member.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjuÇh]”hŒ Parameters”…”�”}”(hjwÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MùhjoÇubj )�”}”(hhh]”(j)�”}”(hŒ*``obj`` Address of target struct instance ”h]”(j)�”}”(hŒ``obj``”h]”j)�”}”(hj”Çh]”hŒobj”…”�”}”(hj–Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M÷hjŽÇubj2)�”}”(hhh]”hÝ)�”}”(hŒ!Address of target struct instance”h]”hŒ!Address of target struct instance”…”�”}”(hj­Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©Çh´M÷hjªÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŽÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©Çh´M÷hj‹Çubj)�”}”(hŒ%``v`` Byte value to repeatedly write ”h]”(j)�”}”(hŒ``v``”h]”j)�”}”(hjÍÇh]”hŒv”…”�”}”(hjÏÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MøhjÇÇubj2)�”}”(hhh]”hÝ)�”}”(hŒByte value to repeatedly write”h]”hŒByte value to repeatedly write”…”�”}”(hjæÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jâÇh´MøhjãÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÇÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâÇh´Møhj‹Çubj)�”}”(hŒ<``member`` after which struct member to start writing bytes ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hjÈh]”hŒmember”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MùhjÈubj2)�”}”(hhh]”hÝ)�”}”(hŒ0after which struct member to start writing bytes”h]”hŒ0after which struct member to start writing bytes”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÈh´MùhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈh´Mùhj‹Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjoÇubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjAÈh]”hŒ Description”…”�”}”(hjCÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?Èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MûhjoÇubhÝ)�”}”(hŒ=This is good for clearing padding following the given member.”h]”hŒ=This is good for clearing padding following the given member.”…”�”}”(hjWÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MúhjoÇubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemset_startat (C macro)”Œc.memset_startat”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒmemset_startat”h]”j)�”}”(hŒmemset_startat”h]”j{)�”}”(hŒmemset_startat”h]”j�)�”}”(hj€Èh]”hŒmemset_startat”…”�”}”(hjŠÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†Èubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‚Èh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj~Èh²hh³j�Èh´Mubah}”(h]”jyÈah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�Èh´Mhj{Èh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj{Èh²hh³j�Èh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj¶Èjæj¶Èjç‰jè‰jé‰uh1jh²hhj�eh³Nh´NubhÝ)�”}”(hŒ#``memset_startat (obj, v, member)``”h]”j)�”}”(hj¼Èh]”hŒmemset_startat (obj, v, member)”…”�”}”(hj¾Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mhj�eh²hubj•)�”}”(hŒ8Set a value starting at a member to the end of a struct ”h]”hÝ)�”}”(hŒ7Set a value starting at a member to the end of a struct”h]”hŒ7Set a value starting at a member to the end of a struct”…”�”}”(hjÖÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MhjÒÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jäÈh´Mhj�eh²hubjë)�”}”(hX-**Parameters** ``obj`` Address of target struct instance ``v`` Byte value to repeatedly write ``member`` struct member to start writing at **Description** Note that if there is padding between the prior member and the target member, memset_after() should be used to clear the prior padding.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjñÈh]”hŒ Parameters”…”�”}”(hjóÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjïÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M hjëÈubj )�”}”(hhh]”(j)�”}”(hŒ*``obj`` Address of target struct instance ”h]”(j)�”}”(hŒ``obj``”h]”j)�”}”(hjÉh]”hŒobj”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mhj Éubj2)�”}”(hhh]”hÝ)�”}”(hŒ!Address of target struct instance”h]”hŒ!Address of target struct instance”…”�”}”(hj)Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j%Éh´Mhj&Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j%Éh´MhjÉubj)�”}”(hŒ%``v`` Byte value to repeatedly write ”h]”(j)�”}”(hŒ``v``”h]”j)�”}”(hjIÉh]”hŒv”…”�”}”(hjKÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjGÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M hjCÉubj2)�”}”(hhh]”hÝ)�”}”(hŒByte value to repeatedly write”h]”hŒByte value to repeatedly write”…”�”}”(hjbÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j^Éh´M hj_Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjCÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j^Éh´M hjÉubj)�”}”(hŒ-``member`` struct member to start writing at ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj‚Éh]”hŒmember”…”�”}”(hj„Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€Éubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M hj|Éubj2)�”}”(hhh]”hÝ)�”}”(hŒ!struct member to start writing at”h]”hŒ!struct member to start writing at”…”�”}”(hj›Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j—Éh´M hj˜Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—Éh´M hjÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjëÈubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj½Éh]”hŒ Description”…”�”}”(hj¿Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»Éubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M hjëÈubhÝ)�”}”(hŒ‡Note that if there is padding between the prior member and the target member, memset_after() should be used to clear the prior padding.”h]”hŒ‡Note that if there is padding between the prior member and the target member, memset_after() should be used to clear the prior padding.”…”�”}”(hjÓÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M hjëÈubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstr_has_prefix (C function)”Œc.str_has_prefix”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;size_t str_has_prefix (const char *str, const char *prefix)”h]”j)�”}”(hŒ:size_t str_has_prefix(const char *str, const char *prefix)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÊŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œstr_has_prefix”sbŒc.str_has_prefix”†”asbuh1hhjþÉh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþÉh²hh³j&Êh´Mubj{)�”}”(hŒstr_has_prefix”h]”j�)�”}”(hj#Êh]”hŒstr_has_prefix”…”�”}”(hj9Êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5Êubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjþÉh²hh³j&Êh´Mubjœ)�”}”(hŒ%(const char *str, const char *prefix)”h]”(j¢)�”}”(hŒconst char *str”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjTÊh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjPÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPÊubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjoÊh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjPÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPÊubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹Êh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjPÊubj�)�”}”(hŒstr”h]”hŒstr”…”�”}”(hj˜Êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjLÊubj¢)�”}”(hŒconst char *prefix”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj±Êh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj­Êubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­Êubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÌÊh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­Êubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­Êubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjèÊh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj­Êubj�)�”}”(hŒprefix”h]”hŒprefix”…”�”}”(hjõÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­Êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjLÊubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjþÉh²hh³j&Êh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjúÉh²hh³j&Êh´Mubah}”(h]”jõÉah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j&Êh´Mhj÷Éh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Test if a string has a given prefix”h]”hŒ#Test if a string has a given prefix”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MhjËh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj÷Éh²hh³j&Êh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj7Ëjæj7Ëjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hXÒ**Parameters** ``const char *str`` The string to test ``const char *prefix`` The string to see if **str** starts with **Description** A common way to test a prefix of a string is to do: strncmp(str, prefix, sizeof(prefix) - 1) But this can lead to bugs due to typos, or if prefix is a pointer and not a constant. Instead use str_has_prefix(). **Return** * strlen(**prefix**) if **str** starts with **prefix** * 0 if **str** does not start with **prefix**”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjAËh]”hŒ Parameters”…”�”}”(hjCËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mhj;Ëubj )�”}”(hhh]”(j)�”}”(hŒ'``const char *str`` The string to test ”h]”(j)�”}”(hŒ``const char *str``”h]”j)�”}”(hj`Ëh]”hŒconst char *str”…”�”}”(hjbËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MhjZËubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to test”h]”hŒThe string to test”…”�”}”(hjyËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³juËh´MhjvËubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjZËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³juËh´MhjWËubj)�”}”(hŒ@``const char *prefix`` The string to see if **str** starts with ”h]”(j)�”}”(hŒ``const char *prefix``”h]”j)�”}”(hj™Ëh]”hŒconst char *prefix”…”�”}”(hj›Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mhj“Ëubj2)�”}”(hhh]”hÝ)�”}”(hŒ(The string to see if **str** starts with”h]”(hŒThe string to see if ”…”�”}”(hj²Ëh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hjºËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²ËubhŒ starts with”…”�”}”(hj²Ëh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j®Ëh´Mhj¯Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj“Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j®Ëh´MhjWËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj;ËubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjæËh]”hŒ Description”…”�”}”(hjèËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjäËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mhj;Ëubj )�”}”(hhh]”j)�”}”(hŒ]A common way to test a prefix of a string is to do: strncmp(str, prefix, sizeof(prefix) - 1) ”h]”(j)�”}”(hŒ3A common way to test a prefix of a string is to do:”h]”hŒ3A common way to test a prefix of a string is to do:”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´MhjÿËubj2)�”}”(hhh]”hÝ)�”}”(hŒ(strncmp(str, prefix, sizeof(prefix) - 1)”h]”hŒ(strncmp(str, prefix, sizeof(prefix) - 1)”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌh´MhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÿËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌh´MhjüËubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj;ËubhÝ)�”}”(hŒsBut this can lead to bugs due to typos, or if prefix is a pointer and not a constant. Instead use str_has_prefix().”h]”hŒsBut this can lead to bugs due to typos, or if prefix is a pointer and not a constant. Instead use str_has_prefix().”…”�”}”(hj5Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´Mhj;ËubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjFÌh]”hŒReturn”…”�”}”(hjHÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjDÌubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M!hj;Ëubj›)�”}”(hhh]”(j )�”}”(hŒ4strlen(**prefix**) if **str** starts with **prefix**”h]”hÝ)�”}”(hjaÌh]”(hŒstrlen(”…”�”}”(hjcÌh²hh³Nh´Nubjõ)�”}”(hŒ **prefix**”h]”hŒprefix”…”�”}”(hjjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcÌubhŒ) if ”…”�”}”(hjcÌh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hj|Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcÌubhŒ starts with ”…”�”}”(hjcÌh²hh³Nh´Nubjõ)�”}”(hŒ **prefix**”h]”hŒprefix”…”�”}”(hjŽÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M"hj_Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj\Ìubj )�”}”(hŒ+0 if **str** does not start with **prefix**”h]”hÝ)�”}”(hj«Ìh]”(hŒ0 if ”…”�”}”(hj­Ìh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hj´Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ÌubhŒ does not start with ”…”�”}”(hj­Ìh²hh³Nh´Nubjõ)�”}”(hŒ **prefix**”h]”hŒprefix”…”�”}”(hjÆÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­Ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M#hj©Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj\Ìubeh}”(h]”h ]”h"]”h$]”h&]”jôjæuh1jšh³j¢Ìh´M"hj;Ëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrstarts (C function)”Œ c.strstarts”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4bool strstarts (const char *str, const char *prefix)”h]”j)�”}”(hŒ3bool strstarts(const char *str, const char *prefix)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÍh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍh²hh³jÍh´M-ubj{)�”}”(hŒ strstarts”h]”j�)�”}”(hŒ strstarts”h]”hŒ strstarts”…”�”}”(hj'Íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#Íubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÍh²hh³jÍh´M-ubjœ)�”}”(hŒ%(const char *str, const char *prefix)”h]”(j¢)�”}”(hŒconst char *str”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjCÍh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj?Íubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?Íubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj^Íh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?Íubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?Íubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjzÍh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj?Íubj�)�”}”(hŒstr”h]”hŒstr”…”�”}”(hj‡Íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?Íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;Íubj¢)�”}”(hŒconst char *prefix”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj Íh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjœÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­Íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœÍubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj»Íh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjœÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœÍubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj×Íh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjœÍubj�)�”}”(hŒprefix”h]”hŒprefix”…”�”}”(hjäÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;Íubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÍh²hh³jÍh´M-ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÿÌh²hh³jÍh´M-ubah}”(h]”júÌah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÍh´M-hjüÌh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#does **str** start with **prefix**?”h]”(hŒdoes ”…”�”}”(hjÎh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎubhŒ start with ”…”�”}”(hjÎh²hh³Nh´Nubjõ)�”}”(hŒ **prefix**”h]”hŒprefix”…”�”}”(hj(Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎubhŒ?”…”�”}”(hjÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M-hj Îh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjüÌh²hh³jÍh´M-ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjJÎjæjJÎjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒ´**Parameters** ``const char *str`` string to examine ``const char *prefix`` prefix to look for. **Return** True if **str** begins with **prefix**. False in all other cases.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjTÎh]”hŒ Parameters”…”�”}”(hjVÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M1hjNÎubj )�”}”(hhh]”(j)�”}”(hŒ&``const char *str`` string to examine ”h]”(j)�”}”(hŒ``const char *str``”h]”j)�”}”(hjsÎh]”hŒconst char *str”…”�”}”(hjuÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M.hjmÎubj2)�”}”(hhh]”hÝ)�”}”(hŒstring to examine”h]”hŒstring to examine”…”�”}”(hjŒÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆÎh´M.hj‰Îubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjmÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆÎh´M.hjjÎubj)�”}”(hŒ+``const char *prefix`` prefix to look for. ”h]”(j)�”}”(hŒ``const char *prefix``”h]”j)�”}”(hj¬Îh]”hŒconst char *prefix”…”�”}”(hj®Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M/hj¦Îubj2)�”}”(hhh]”hÝ)�”}”(hŒprefix to look for.”h]”hŒprefix to look for.”…”�”}”(hjÅÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁÎh´M/hjÂÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁÎh´M/hjjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjNÎubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjçÎh]”hŒReturn”…”�”}”(hjéÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjåÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M1hjNÎubhÝ)�”}”(hŒATrue if **str** begins with **prefix**. False in all other cases.”h]”(hŒTrue if ”…”�”}”(hjýÎh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjýÎubhŒ begins with ”…”�”}”(hjýÎh²hh³Nh´Nubjõ)�”}”(hŒ **prefix**”h]”hŒprefix”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjýÎubhŒ. False in all other cases.”…”�”}”(hjýÎh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M1hjNÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrends (C function)”Œ c.strends”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3bool strends (const char *str, const char *suffix)”h]”j)�”}”(hŒ1bool strends(const char *str, const char *suffix)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjPÏh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjLÏh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjLÏh²hh³j]Ïh´M:ubj{)�”}”(hŒstrends”h]”j�)�”}”(hŒstrends”h]”hŒstrends”…”�”}”(hjpÏh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlÏubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjLÏh²hh³j]Ïh´M:ubjœ)�”}”(hŒ%(const char *str, const char *suffix)”h]”(j¢)�”}”(hŒconst char *str”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjŒÏh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjˆÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆÏubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj§Ïh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjˆÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆÏubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÃÏh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjˆÏubj�)�”}”(hŒstr”h]”hŒstr”…”�”}”(hjÐÏh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„Ïubj¢)�”}”(hŒconst char *suffix”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjéÏh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjåÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåÏubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjåÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåÏubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Ðh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjåÏubj�)�”}”(hŒsuffix”h]”hŒsuffix”…”�”}”(hj-Ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„Ïubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjLÏh²hh³j]Ïh´M:ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjHÏh²hh³j]Ïh´M:ubah}”(h]”jCÏah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j]Ïh´M:hjEÏh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if a string ends with another string.”h]”hŒ+Check if a string ends with another string.”…”�”}”(hjWÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M:hjTÐh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjEÏh²hh³j]Ïh´M:ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjoÐjæjoÐjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX**Parameters** ``const char *str`` NULL-terminated string to check against **suffix** ``const char *suffix`` NULL-terminated string defining the suffix to look for in **str** **Return** True if **str** ends with **suffix**. False in all other cases.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjyÐh]”hŒ Parameters”…”�”}”(hj{Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjwÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M>hjsÐubj )�”}”(hhh]”(j)�”}”(hŒG``const char *str`` NULL-terminated string to check against **suffix** ”h]”(j)�”}”(hŒ``const char *str``”h]”j)�”}”(hj˜Ðh]”hŒconst char *str”…”�”}”(hjšÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M;hj’Ðubj2)�”}”(hhh]”hÝ)�”}”(hŒ2NULL-terminated string to check against **suffix**”h]”(hŒ(NULL-terminated string to check against ”…”�”}”(hj±Ðh²hh³Nh´Nubjõ)�”}”(hŒ **suffix**”h]”hŒsuffix”…”�”}”(hj¹Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j­Ðh´M;hj®Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj’Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­Ðh´M;hj�Ðubj)�”}”(hŒY``const char *suffix`` NULL-terminated string defining the suffix to look for in **str** ”h]”(j)�”}”(hŒ``const char *suffix``”h]”j)�”}”(hjßÐh]”hŒconst char *suffix”…”�”}”(hjáÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M<hjÙÐubj2)�”}”(hhh]”hÝ)�”}”(hŒANULL-terminated string defining the suffix to look for in **str**”h]”(hŒ:NULL-terminated string defining the suffix to look for in ”…”�”}”(hjøÐh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jôÐh´M<hjõÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÙÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jôÐh´M<hj�Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjsÐubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj(Ñh]”hŒReturn”…”�”}”(hj*Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj&Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M>hjsÐubhÝ)�”}”(hŒ?True if **str** ends with **suffix**. False in all other cases.”h]”(hŒTrue if ”…”�”}”(hj>Ñh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hjFÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>ÑubhŒ ends with ”…”�”}”(hj>Ñh²hh³Nh´Nubjõ)�”}”(hŒ **suffix**”h]”hŒsuffix”…”�”}”(hjXÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>ÑubhŒ. False in all other cases.”…”�”}”(hj>Ñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:39: ./include/linux/string.h”h´M>hjsÐubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrdup (C function)”Œ c.kstrdup”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)char * kstrdup (const char *s, gfp_t gfp)”h]”j)�”}”(hŒ'char *kstrdup(const char *s, gfp_t gfp)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj‘Ñh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�Ñh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Ñh²hh³jŸÑh´KKubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj®Ñh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�Ñh²hh³jŸÑh´KKubj{)�”}”(hŒkstrdup”h]”j�)�”}”(hŒkstrdup”h]”hŒkstrdup”…”�”}”(hj¿Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»Ñubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�Ñh²hh³jŸÑh´KKubjœ)�”}”(hŒ(const char *s, gfp_t gfp)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÛÑh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj×Ñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèÑh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×Ñubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjöÑh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj×Ñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×Ñubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj×Ñubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×Ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓÑubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj:Òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7Òubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j<ÒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÁÑsbŒ c.kstrdup”†”asbuh1hhj3Òubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3Òubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjhÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3Òubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓÑubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�Ñh²hh³jŸÑh´KKubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‰Ñh²hh³jŸÑh´KKubah}”(h]”j„Ñah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŸÑh´KKhj†Ñh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.allocate space for and copy an existing string”h]”hŒ.allocate space for and copy an existing string”…”�”}”(hj’Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KKhj�Òh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj†Ñh²hh³jŸÑh´KKubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjªÒjæjªÒjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒÓ**Parameters** ``const char *s`` the string to duplicate ``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory **Return** newly allocated copy of **s** or ``NULL`` in case of error”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj´Òh]”hŒ Parameters”…”�”}”(hj¶Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²Òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KOhj®Òubj )�”}”(hhh]”(j)�”}”(hŒ*``const char *s`` the string to duplicate ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hjÓÒh]”hŒ const char *s”…”�”}”(hjÕÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KLhjÍÒubj2)�”}”(hhh]”hÝ)�”}”(hŒthe string to duplicate”h]”hŒthe string to duplicate”…”�”}”(hjìÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèÒh´KLhjéÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèÒh´KLhjÊÒubj)�”}”(hŒM``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hj Óh]”hŒ gfp_t gfp”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Óubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KMhjÓubj2)�”}”(hhh]”hÝ)�”}”(hŒ>the GFP mask used in the kmalloc() call when allocating memory”h]”hŒ>the GFP mask used in the kmalloc() call when allocating memory”…”�”}”(hj%Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!Óh´KMhj"Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!Óh´KMhjÊÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj®ÒubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjGÓh]”hŒReturn”…”�”}”(hjIÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KOhj®ÒubhÝ)�”}”(hŒ:newly allocated copy of **s** or ``NULL`` in case of error”h]”(hŒnewly allocated copy of ”…”�”}”(hj]Óh²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjeÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj]ÓubhŒ or ”…”�”}”(hj]Óh²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjwÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]ÓubhŒ in case of error”…”�”}”(hj]Óh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KOhj®Òubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrdup_const (C function)”Œc.kstrdup_const”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ5const char * kstrdup_const (const char *s, gfp_t gfp)”h]”j)�”}”(hŒ3const char *kstrdup_const(const char *s, gfp_t gfp)”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj°Óh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¬Óh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬Óh²hh³j½Óh´KYubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÌÓh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¬Óh²hh³j½Óh´KYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬Óh²hh³j½Óh´KYubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjèÓh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¬Óh²hh³j½Óh´KYubj{)�”}”(hŒ kstrdup_const”h]”j�)�”}”(hŒ kstrdup_const”h]”hŒ kstrdup_const”…”�”}”(hjùÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõÓubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¬Óh²hh³j½Óh´KYubjœ)�”}”(hŒ(const char *s, gfp_t gfp)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"Ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj0Ôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjLÔh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjYÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Ôubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjtÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqÔubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jvÔŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jûÓsbŒc.kstrdup_const”†”asbuh1hhjmÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmÔubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj¢Ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Ôubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¬Óh²hh³j½Óh´KYubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¨Óh²hh³j½Óh´KYubah}”(h]”j£Óah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j½Óh´KYhj¥Óh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0conditionally duplicate an existing const string”h]”hŒ0conditionally duplicate an existing const string”…”�”}”(hjÌÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KYhjÉÔh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¥Óh²hh³j½Óh´KYubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjäÔjæjäÔjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hXT**Parameters** ``const char *s`` the string to duplicate ``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory **Note** Strings allocated by kstrdup_const should be freed by kfree_const and must not be passed to krealloc(). **Return** source string if it is in .rodata section otherwise fallback to kstrdup.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjîÔh]”hŒ Parameters”…”�”}”(hjðÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjìÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K]hjèÔubj )�”}”(hhh]”(j)�”}”(hŒ*``const char *s`` the string to duplicate ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hj Õh]”hŒ const char *s”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KZhjÕubj2)�”}”(hhh]”hÝ)�”}”(hŒthe string to duplicate”h]”hŒthe string to duplicate”…”�”}”(hj&Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j"Õh´KZhj#Õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"Õh´KZhjÕubj)�”}”(hŒM``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hjFÕh]”hŒ gfp_t gfp”…”�”}”(hjHÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K[hj@Õubj2)�”}”(hhh]”hÝ)�”}”(hŒ>the GFP mask used in the kmalloc() call when allocating memory”h]”hŒ>the GFP mask used in the kmalloc() call when allocating memory”…”�”}”(hj_Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[Õh´K[hj\Õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj@Õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[Õh´K[hjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjèÔubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj�Õh]”hŒNote”…”�”}”(hjƒÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K]hjèÔubhÝ)�”}”(hŒgStrings allocated by kstrdup_const should be freed by kfree_const and must not be passed to krealloc().”h]”hŒgStrings allocated by kstrdup_const should be freed by kfree_const and must not be passed to krealloc().”…”�”}”(hj—Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K]hjèÔubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¨Õh]”hŒReturn”…”�”}”(hjªÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦Õubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K`hjèÔubhÝ)�”}”(hŒHsource string if it is in .rodata section otherwise fallback to kstrdup.”h]”hŒHsource string if it is in .rodata section otherwise fallback to kstrdup.”…”�”}”(hj¾Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K`hjèÔubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkstrndup (C function)”Œ c.kstrndup”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6char * kstrndup (const char *s, size_t max, gfp_t gfp)”h]”j)�”}”(hŒ4char *kstrndup(const char *s, size_t max, gfp_t gfp)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjíÕh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjéÕh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Kmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéÕh²hh³jûÕh´Kmubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Öh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjéÕh²hh³jûÕh´Kmubj{)�”}”(hŒkstrndup”h]”j�)�”}”(hŒkstrndup”h]”hŒkstrndup”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjéÕh²hh³jûÕh´Kmubjœ)�”}”(hŒ&(const char *s, size_t max, gfp_t gfp)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj7Öh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj3Öubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3Öubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjRÖh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj3Öubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Öh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3Öubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjnÖh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj3Öubj�)�”}”(hjY)h]”hŒs”…”�”}”(hj{Öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3Öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/Öubj¢)�”}”(hŒ size_t max”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj–Öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“Öubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j˜ÖŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÖsbŒ c.kstrndup”†”asbuh1hhj�Öubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Öh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Öubj�)�”}”(hŒmax”h]”hŒmax”…”�”}”(hjÄÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/Öubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjàÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jâÖŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j²ÖŒ c.kstrndup”†”asbuh1hhjÙÖubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙÖubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj ×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/Öubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjéÕh²hh³jûÕh´Kmubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjåÕh²hh³jûÕh´Kmubah}”(h]”jàÕah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jûÕh´KmhjâÕh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.allocate space for and copy an existing string”h]”hŒ.allocate space for and copy an existing string”…”�”}”(hj6×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Kmhj3×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjâÕh²hh³jûÕh´Kmubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjN×jæjN×jç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hXN**Parameters** ``const char *s`` the string to duplicate ``size_t max`` read at most **max** chars from **s** ``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory **Note** Use kmemdup_nul() instead if the size is known exactly. **Return** newly allocated copy of **s** or ``NULL`` in case of error”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjX×h]”hŒ Parameters”…”�”}”(hjZ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjV×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KqhjR×ubj )�”}”(hhh]”(j)�”}”(hŒ*``const char *s`` the string to duplicate ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hjw×h]”hŒ const char *s”…”�”}”(hjy×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Knhjq×ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe string to duplicate”h]”hŒthe string to duplicate”…”�”}”(hj�×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŒ×h´Knhj�×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjq×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒ×h´Knhjn×ubj)�”}”(hŒ5``size_t max`` read at most **max** chars from **s** ”h]”(j)�”}”(hŒ``size_t max``”h]”j)�”}”(hj°×h]”hŒ size_t max”…”�”}”(hj²×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Kohjª×ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%read at most **max** chars from **s**”h]”(hŒ read at most ”…”�”}”(hjÉ×h²hh³Nh´Nubjõ)�”}”(hŒ**max**”h]”hŒmax”…”�”}”(hjÑ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÉ×ubhŒ chars from ”…”�”}”(hjÉ×h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjã×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÉ×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÅ×h´KohjÆ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjª×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÅ×h´Kohjn×ubj)�”}”(hŒM``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hj Øh]”hŒ gfp_t gfp”…”�”}”(hj Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KphjØubj2)�”}”(hhh]”hÝ)�”}”(hŒ>the GFP mask used in the kmalloc() call when allocating memory”h]”hŒ>the GFP mask used in the kmalloc() call when allocating memory”…”�”}”(hj"Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØh´KphjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØh´Kphjn×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjR×ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjDØh]”hŒNote”…”�”}”(hjFØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjBØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KrhjR×ubhÝ)�”}”(hŒ7Use kmemdup_nul() instead if the size is known exactly.”h]”hŒ7Use kmemdup_nul() instead if the size is known exactly.”…”�”}”(hjZØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KrhjR×ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjkØh]”hŒReturn”…”�”}”(hjmØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjiØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KthjR×ubhÝ)�”}”(hŒ:newly allocated copy of **s** or ``NULL`` in case of error”h]”(hŒnewly allocated copy of ”…”�”}”(hj�Øh²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hj‰Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ØubhŒ or ”…”�”}”(hj�Øh²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj›Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ØubhŒ in case of error”…”�”}”(hj�Øh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KthjR×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkmemdup (C function)”Œ c.kmemdup”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void * kmemdup (const void *src, size_t len, gfp_t gfp)”h]”j)�”}”(hŒ5void *kmemdup(const void *src, size_t len, gfp_t gfp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔØh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÐØh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãØh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÐØh²hh³jâØh´K}ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjñØh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÐØh²hh³jâØh´K}ubj{)�”}”(hŒkmemdup”h]”j�)�”}”(hŒkmemdup”h]”hŒkmemdup”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþØubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÐØh²hh³jâØh´K}ubjœ)�”}”(hŒ((const void *src, size_t len, gfp_t gfp)”h]”(j¢)�”}”(hŒconst void *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+Ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj9Ùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjUÙh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÙubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjbÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj~Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{Ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j€ÙŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÙsbŒ c.kmemdup”†”asbuh1hhjwÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwÙubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj¬Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjÈÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÊÙŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jšÙŒ c.kmemdup”†”asbuh1hhjÁÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁÙubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjôÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÐØh²hh³jâØh´K}ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÌØh²hh³jâØh´K}ubah}”(h]”jÇØah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jâØh´K}hjÉØh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒduplicate region of memory”h]”hŒduplicate region of memory”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”•h´K}hjÚh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÉØh²hh³jâØh´K}ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj6Újæj6Újç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX **Parameters** ``const void *src`` memory region to duplicate ``size_t len`` memory region length ``gfp_t gfp`` GFP mask to use **Return** newly allocated copy of **src** or ``NULL`` in case of error, result is physically contiguous. Use kfree() to free.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj@Úh]”hŒ Parameters”…”�”}”(hjBÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>Úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K�hj:Úubj )�”}”(hhh]”(j)�”}”(hŒ/``const void *src`` memory region to duplicate ”h]”(j)�”}”(hŒ``const void *src``”h]”j)�”}”(hj_Úh]”hŒconst void *src”…”�”}”(hjaÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KhjYÚubj2)�”}”(hhh]”hÝ)�”}”(hŒmemory region to duplicate”h]”hŒmemory region to duplicate”…”�”}”(hjxÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jtÚh´KhjuÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjYÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jtÚh´KhjVÚubj)�”}”(hŒ$``size_t len`` memory region length ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hj˜Úh]”hŒ size_t len”…”�”}”(hjšÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K€hj’Úubj2)�”}”(hhh]”hÝ)�”}”(hŒmemory region length”h]”hŒmemory region length”…”�”}”(hj±Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j­Úh´K€hj®Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj’Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­Úh´K€hjVÚubj)�”}”(hŒ``gfp_t gfp`` GFP mask to use ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hjÑÚh]”hŒ gfp_t gfp”…”�”}”(hjÓÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K�hjËÚubj2)�”}”(hhh]”hÝ)�”}”(hŒGFP mask to use”h]”hŒGFP mask to use”…”�”}”(hjêÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jæÚh´K�hjçÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjËÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jæÚh´K�hjVÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj:ÚubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj Ûh]”hŒReturn”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Kƒhj:ÚubhÝ)�”}”(hŒsnewly allocated copy of **src** or ``NULL`` in case of error, result is physically contiguous. Use kfree() to free.”h]”(hŒnewly allocated copy of ”…”�”}”(hj"Ûh²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj*Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"ÛubhŒ or ”…”�”}”(hj"Ûh²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj<Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"ÛubhŒH in case of error, result is physically contiguous. Use kfree() to free.”…”�”}”(hj"Ûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Kƒhj:Úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkmemdup_nul (C function)”Œ c.kmemdup_nul”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9char * kmemdup_nul (const char *s, size_t len, gfp_t gfp)”h]”j)�”}”(hŒ7char *kmemdup_nul(const char *s, size_t len, gfp_t gfp)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjuÛh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjqÛh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„Ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqÛh²hh³jƒÛh´K¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj’Ûh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjqÛh²hh³jƒÛh´K¸ubj{)�”}”(hŒ kmemdup_nul”h]”j�)�”}”(hŒ kmemdup_nul”h]”hŒ kmemdup_nul”…”�”}”(hj£Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸÛubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjqÛh²hh³jƒÛh´K¸ubjœ)�”}”(hŒ&(const char *s, size_t len, gfp_t gfp)”h]”(j¢)�”}”(hŒ const char *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¿Ûh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj»Ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»Ûubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÚÛh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj»Ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»Ûubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjöÛh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj»Ûubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»Ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj·Ûubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ÜŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¥ÛsbŒ c.kmemdup_nul”†”asbuh1hhjÜubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Üh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjLÜh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj·Ûubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjhÜh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeÜubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jjÜŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j:ÜŒ c.kmemdup_nul”†”asbuh1hhjaÜubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†Üh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjaÜubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj”Üh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjaÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj·Ûubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjqÛh²hh³jƒÛh´K¸ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjmÛh²hh³jƒÛh´K¸ubah}”(h]”jhÛah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jƒÛh´K¸hjjÛh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5Create a NUL-terminated string from unterminated data”h]”hŒ5Create a NUL-terminated string from unterminated data”…”�”}”(hj¾Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K¸hj»Üh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjjÛh²hh³jƒÛh´K¸ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÖÜjæjÖÜjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hX **Parameters** ``const char *s`` The data to stringify ``size_t len`` The size of the data ``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory **Return** newly allocated copy of **s** with NUL-termination or ``NULL`` in case of error”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjàÜh]”hŒ Parameters”…”�”}”(hjâÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K¼hjÚÜubj )�”}”(hhh]”(j)�”}”(hŒ(``const char *s`` The data to stringify ”h]”(j)�”}”(hŒ``const char *s``”h]”j)�”}”(hjÿÜh]”hŒ const char *s”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K¹hjùÜubj2)�”}”(hhh]”hÝ)�”}”(hŒThe data to stringify”h]”hŒThe data to stringify”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝh´K¹hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝh´K¹hjöÜubj)�”}”(hŒ$``size_t len`` The size of the data ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hj8Ýh]”hŒ size_t len”…”�”}”(hj:Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Kºhj2Ýubj2)�”}”(hhh]”hÝ)�”}”(hŒThe size of the data”h]”hŒThe size of the data”…”�”}”(hjQÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jMÝh´KºhjNÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jMÝh´KºhjöÜubj)�”}”(hŒM``gfp_t gfp`` the GFP mask used in the kmalloc() call when allocating memory ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hjqÝh]”hŒ gfp_t gfp”…”�”}”(hjsÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K»hjkÝubj2)�”}”(hhh]”hÝ)�”}”(hŒ>the GFP mask used in the kmalloc() call when allocating memory”h]”hŒ>the GFP mask used in the kmalloc() call when allocating memory”…”�”}”(hjŠÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†Ýh´K»hj‡Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjkÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†Ýh´K»hjöÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÚÜubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¬Ýh]”hŒReturn”…”�”}”(hj®Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjªÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K½hjÚÜubhÝ)�”}”(hŒOnewly allocated copy of **s** with NUL-termination or ``NULL`` in case of error”h]”(hŒnewly allocated copy of ”…”�”}”(hjÂÝh²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjÊÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂÝubhŒ with NUL-termination or ”…”�”}”(hjÂÝh²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÜÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂÝubhŒ in case of error”…”�”}”(hjÂÝh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´K½hjÚÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemdup_user (C function)”Œ c.memdup_user”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void * memdup_user (const void __user *src, size_t len)”h]”j)�”}”(hŒ5void *memdup_user(const void __user *src, size_t len)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞh²hh³j#Þh´KÑubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj2Þh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞh²hh³j#Þh´KÑubj{)�”}”(hŒ memdup_user”h]”j�)�”}”(hŒ memdup_user”h]”hŒ memdup_user”…”�”}”(hjCÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?Þubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÞh²hh³j#Þh´KÑubjœ)�”}”(hŒ$(const void __user *src, size_t len)”h]”(j¢)�”}”(hŒconst void __user *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj_Þh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj[Þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlÞh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[Þubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjzÞh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj[Þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆÞh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[ÞubhŒ__user”…”�”}”(hj[Þh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšÞh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[Þubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¨Þh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj[Þubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjµÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[Þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjWÞubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÑÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎÞubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÓÞŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jEÞsbŒ c.memdup_user”†”asbuh1hhjÊÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñÞh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊÞubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjÿÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjWÞubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÞh²hh³j#Þh´KÑubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj Þh²hh³j#Þh´KÑubah}”(h]”jÞah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j#Þh´KÑhj Þh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'duplicate memory region from user space”h]”hŒ'duplicate memory region from user space”…”�”}”(hj)ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KÑhj&ßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj Þh²hh³j#Þh´KÑubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjAßjæjAßjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒÓ**Parameters** ``const void __user *src`` source address in user space ``size_t len`` number of bytes to copy **Return** an ERR_PTR() on failure. Result is physically contiguous, to be freed by kfree().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjKßh]”hŒ Parameters”…”�”}”(hjMßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjIßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KÕhjEßubj )�”}”(hhh]”(j)�”}”(hŒ8``const void __user *src`` source address in user space ”h]”(j)�”}”(hŒ``const void __user *src``”h]”j)�”}”(hjjßh]”hŒconst void __user *src”…”�”}”(hjlßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KÓhjdßubj2)�”}”(hhh]”hÝ)�”}”(hŒsource address in user space”h]”hŒsource address in user space”…”�”}”(hjƒßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jßh´KÓhj€ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjdßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jßh´KÓhjaßubj)�”}”(hŒ'``size_t len`` number of bytes to copy ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hj£ßh]”hŒ size_t len”…”�”}”(hj¥ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KÔhj�ßubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes to copy”h]”hŒnumber of bytes to copy”…”�”}”(hj¼ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¸ßh´KÔhj¹ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¸ßh´KÔhjaßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjEßubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÞßh]”hŒReturn”…”�”}”(hjàßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KÖhjEßubhÝ)�”}”(hŒRan ERR_PTR() on failure. Result is physically contiguous, to be freed by kfree().”h]”hŒRan ERR_PTR() on failure. Result is physically contiguous, to be freed by kfree().”…”�”}”(hjôßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KÖhjEßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œvmemdup_user (C function)”Œc.vmemdup_user”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8void * vmemdup_user (const void __user *src, size_t len)”h]”j)�”}”(hŒ6void *vmemdup_user(const void __user *src, size_t len)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj#àh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjàh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Këubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2àh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàh²hh³j1àh´Këubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj@àh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjàh²hh³j1àh´Këubj{)�”}”(hŒ vmemdup_user”h]”j�)�”}”(hŒ vmemdup_user”h]”hŒ vmemdup_user”…”�”}”(hjQàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMàubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjàh²hh³j1àh´Këubjœ)�”}”(hŒ$(const void __user *src, size_t len)”h]”(j¢)�”}”(hŒconst void __user *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjmàh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjiàubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjiàubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjˆàh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjiàubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–àh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjiàubhŒ__user”…”�”}”(hjiàh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨àh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjiàubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¶àh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjiàubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjÃàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjeàubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjßàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jáàŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jSàsbŒc.vmemdup_user”†”asbuh1hhjØàubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØàubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj áh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjeàubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjàh²hh³j1àh´Këubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjàh²hh³j1àh´Këubah}”(h]”jàah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j1àh´Këhjàh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'duplicate memory region from user space”h]”hŒ'duplicate memory region from user space”…”�”}”(hj7áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Këhj4áh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjàh²hh³j1àh´Këubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjOájæjOájç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒÚ**Parameters** ``const void __user *src`` source address in user space ``size_t len`` number of bytes to copy **Return** an ERR_PTR() on failure. Result may be not physically contiguous. Use kvfree() to free.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjYáh]”hŒ Parameters”…”�”}”(hj[áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjWáubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KïhjSáubj )�”}”(hhh]”(j)�”}”(hŒ8``const void __user *src`` source address in user space ”h]”(j)�”}”(hŒ``const void __user *src``”h]”j)�”}”(hjxáh]”hŒconst void __user *src”…”�”}”(hjzáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjváubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Kíhjráubj2)�”}”(hhh]”hÝ)�”}”(hŒsource address in user space”h]”hŒsource address in user space”…”�”}”(hj‘áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�áh´KíhjŽáubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjráubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�áh´Kíhjoáubj)�”}”(hŒ'``size_t len`` number of bytes to copy ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hj±áh]”hŒ size_t len”…”�”}”(hj³áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Kîhj«áubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes to copy”h]”hŒnumber of bytes to copy”…”�”}”(hjÊáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÆáh´KîhjÇáubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj«áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÆáh´Kîhjoáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjSáubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjìáh]”hŒReturn”…”�”}”(hjîáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjêáubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KðhjSáubhÝ)�”}”(hŒYan ERR_PTR() on failure. Result may be not physically contiguous. Use kvfree() to free.”h]”hŒYan ERR_PTR() on failure. Result may be not physically contiguous. Use kvfree() to free.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´KðhjSáubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstrndup_user (C function)”Œc.strndup_user”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2char * strndup_user (const char __user *s, long n)”h]”j)�”}”(hŒ0char *strndup_user(const char __user *s, long n)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj1âh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj-âh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-âh²hh³j?âh´Mubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjNâh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj-âh²hh³j?âh´Mubj{)�”}”(hŒ strndup_user”h]”j�)�”}”(hŒ strndup_user”h]”hŒ strndup_user”…”�”}”(hj_âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[âubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj-âh²hh³j?âh´Mubjœ)�”}”(hŒ(const char __user *s, long n)”h]”(j¢)�”}”(hŒconst char __user *s”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj{âh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjwâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆâh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwâubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj–âh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjwâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwâubhŒ__user”…”�”}”(hjwâh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwâubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÄâh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjwâubj�)�”}”(hjY)h]”hŒs”…”�”}”(hjÑâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjsâubj¢)�”}”(hŒlong n”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjéâh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjåâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåâubj�)�”}”(hj�h]”hŒn”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjsâubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj-âh²hh³j?âh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj)âh²hh³j?âh´Mubah}”(h]”j$âah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j?âh´Mhj&âh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,duplicate an existing string from user space”h]”hŒ,duplicate an existing string from user space”…”�”}”(hj.ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Mhj+ãh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj&âh²hh³j?âh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjFãjæjFãjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒÙ**Parameters** ``const char __user *s`` The string to duplicate ``long n`` Maximum number of bytes to copy, including the trailing NUL. **Return** newly allocated copy of **s** or an ERR_PTR() in case of error”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjPãh]”hŒ Parameters”…”�”}”(hjRãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjNãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´M hjJãubj )�”}”(hhh]”(j)�”}”(hŒ1``const char __user *s`` The string to duplicate ”h]”(j)�”}”(hŒ``const char __user *s``”h]”j)�”}”(hjoãh]”hŒconst char __user *s”…”�”}”(hjqãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Mhjiãubj2)�”}”(hhh]”hÝ)�”}”(hŒThe string to duplicate”h]”hŒThe string to duplicate”…”�”}”(hjˆãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j„ãh´Mhj…ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjiãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„ãh´Mhjfãubj)�”}”(hŒH``long n`` Maximum number of bytes to copy, including the trailing NUL. ”h]”(j)�”}”(hŒ ``long n``”h]”j)�”}”(hj¨ãh]”hŒlong n”…”�”}”(hjªãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´Mhj¢ãubj2)�”}”(hhh]”hÝ)�”}”(hŒnewly allocated copy of **s** or an ERR_PTR() in case of error”h]”(hŒnewly allocated copy of ”…”�”}”(hjùãh²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjùãubhŒ! or an ERR_PTR() in case of error”…”�”}”(hjùãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´M hjJãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemdup_user_nul (C function)”Œc.memdup_user_nul”hNt”auh1hýhj�eh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;void * memdup_user_nul (const void __user *src, size_t len)”h]”j)�”}”(hŒ9void *memdup_user_nul(const void __user *src, size_t len)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj:äh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6äh²hh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´M$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIäh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6äh²hh³jHäh´M$ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjWäh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj6äh²hh³jHäh´M$ubj{)�”}”(hŒmemdup_user_nul”h]”j�)�”}”(hŒmemdup_user_nul”h]”hŒmemdup_user_nul”…”�”}”(hjhäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdäubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj6äh²hh³jHäh´M$ubjœ)�”}”(hŒ$(const void __user *src, size_t len)”h]”(j¢)�”}”(hŒconst void __user *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj„äh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj€äubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘äh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€äubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŸäh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj€äubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­äh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€äubhŒ__user”…”�”}”(hj€äh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿äh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€äubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÍäh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj€äubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjÚäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj€äubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj|äubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjöäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jøäŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jjäsbŒc.memdup_user_nul”†”asbuh1hhjïäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïäubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj$åh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj|äubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj6äh²hh³jHäh´M$ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj2äh²hh³jHäh´M$ubah}”(h]”j-äah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jHäh´M$hj/äh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9duplicate memory region from user space and NUL-terminate”h]”hŒ9duplicate memory region from user space and NUL-terminate”…”�”}”(hjNåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´M$hjKåh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj/äh²hh³jHäh´M$ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjfåjæjfåjç‰jè‰jé‰uh1jh²hhj�eh³Nh´Nubjë)�”}”(hŒ™**Parameters** ``const void __user *src`` source address in user space ``size_t len`` number of bytes to copy **Return** an ERR_PTR() on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjpåh]”hŒ Parameters”…”�”}”(hjråh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnåubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´M(hjjåubj )�”}”(hhh]”(j)�”}”(hŒ8``const void __user *src`` source address in user space ”h]”(j)�”}”(hŒ``const void __user *src``”h]”j)�”}”(hj�åh]”hŒconst void __user *src”…”�”}”(hj‘åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�åubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´M&hj‰åubj2)�”}”(hhh]”hÝ)�”}”(hŒsource address in user space”h]”hŒsource address in user space”…”�”}”(hj¨åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤åh´M&hj¥åubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤åh´M&hj†åubj)�”}”(hŒ'``size_t len`` number of bytes to copy ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjÈåh]”hŒ size_t len”…”�”}”(hjÊåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆåubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´M'hjÂåubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes to copy”h]”hŒnumber of bytes to copy”…”�”}”(hjáåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝåh´M'hjÞåubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝåh´M'hj†åubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjjåubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjæh]”hŒReturn”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´M)hjjåubhÝ)�”}”(hŒan ERR_PTR() on failure.”h]”hŒan ERR_PTR() on failure.”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒM/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:42: ./mm/util.c”h´M)hjjåubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj�eh²hh³Nh´Nubeh}”(h]”Œstring-manipulation”ah ]”h"]”Œstring manipulation”ah$]”h&]”uh1hµhhËh²hh³hÊh´Kubeh}”(h]”Œbasic-c-library-functions”ah ]”h"]”Œbasic c library functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒBasic Kernel Library Functions”h]”hŒBasic Kernel Library Functions”…”�”}”(hjBæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj?æh²hh³hÊh´K/ubhÝ)�”}”(hŒ7The Linux kernel provides more basic utility functions.”h]”hŒ7The Linux kernel provides more basic utility functions.”…”�”}”(hjPæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´K1hj?æh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒBit Operations”h]”hŒBit Operations”…”�”}”(hjaæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj^æh²hh³hÊh´K4ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œset_bit (C function)”Œ c.set_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4void set_bit (long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒ3void set_bit(long nr, volatile unsigned long *addr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjˆæh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj„æh²hh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„æh²hh³j–æh´Kubj{)�”}”(hŒset_bit”h]”j�)�”}”(hŒset_bit”h]”hŒset_bit”…”�”}”(hj©æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥æubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj„æh²hh³j–æh´Kubjœ)�”}”(hŒ'(long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒlong nr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÅæh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓæh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁæubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjáæh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj½æubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hŒvolatile”h]”hŒvolatile”…”�”}”(hjúæh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjöæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöæubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjöæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$çh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöæubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj2çh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjöæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@çh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöæubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjNçh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjöæubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj[çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj½æubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj„æh²hh³j–æh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj€æh²hh³j–æh´Kubah}”(h]”j{æah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j–æh´Khj}æh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒAtomically set a bit in memory”h]”hŒAtomically set a bit in memory”…”�”}”(hj…çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´Khj‚çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj}æh²hh³j–æh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�çjæj�çjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hX>**Parameters** ``long nr`` the bit to set ``volatile unsigned long *addr`` the address to start counting from **Description** This is a relaxed atomic operation (no implied memory barriers). Note that **nr** may be almost arbitrarily large; this function is not restricted to acting on a single-word quantity.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj§çh]”hŒ Parameters”…”�”}”(hj©çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´Khj¡çubj )�”}”(hhh]”(j)�”}”(hŒ``long nr`` the bit to set ”h]”(j)�”}”(hŒ ``long nr``”h]”j)�”}”(hjÆçh]”hŒlong nr”…”�”}”(hjÈçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄçubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KhjÀçubj2)�”}”(hhh]”hÝ)�”}”(hŒthe bit to set”h]”hŒthe bit to set”…”�”}”(hjßçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÛçh´KhjÜçubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÀçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛçh´Khj½çubj)�”}”(hŒD``volatile unsigned long *addr`` the address to start counting from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjÿçh]”hŒvolatile unsigned long *addr”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýçubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´Khjùçubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the address to start counting from”h]”hŒ"the address to start counting from”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèh´Khjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèh´Khj½çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡çubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj:èh]”hŒ Description”…”�”}”(hj<èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´Khj¡çubhÝ)�”}”(hŒ@This is a relaxed atomic operation (no implied memory barriers).”h]”hŒ@This is a relaxed atomic operation (no implied memory barriers).”…”�”}”(hjPèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´Khj¡çubhÝ)�”}”(hŒvNote that **nr** may be almost arbitrarily large; this function is not restricted to acting on a single-word quantity.”h]”(hŒ Note that ”…”�”}”(hj_èh²hh³Nh´Nubjõ)�”}”(hŒ**nr**”h]”hŒnr”…”�”}”(hjgèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_èubhŒf may be almost arbitrarily large; this function is not restricted to acting on a single-word quantity.”…”�”}”(hj_èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´Khj¡çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclear_bit (C function)”Œ c.clear_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6void clear_bit (long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒ5void clear_bit(long nr, volatile unsigned long *addr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj èh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjœèh²hh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœèh²hh³j®èh´K!ubj{)�”}”(hŒ clear_bit”h]”j�)�”}”(hŒ clear_bit”h]”hŒ clear_bit”…”�”}”(hjÁèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½èubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjœèh²hh³j®èh´K!ubjœ)�”}”(hŒ'(long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒlong nr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÝèh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÙèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙèubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjùèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙèubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕèubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjéubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj-éh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjéubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjIéh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjéubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjeéh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjéubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjréh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕèubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjœèh²hh³j®èh´K!ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj˜èh²hh³j®èh´K!ubah}”(h]”j“èah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j®èh´K!hj•èh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒClears a bit in memory”h]”hŒClears a bit in memory”…”�”}”(hjœéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K!hj™éh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj•èh²hh³j®èh´K!ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj´éjæj´éjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒÀ**Parameters** ``long nr`` Bit to clear ``volatile unsigned long *addr`` Address to start counting from **Description** This is a relaxed atomic operation (no implied memory barriers).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾éh]”hŒ Parameters”…”�”}”(hjÀéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼éubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K%hj¸éubj )�”}”(hhh]”(j)�”}”(hŒ``long nr`` Bit to clear ”h]”(j)�”}”(hŒ ``long nr``”h]”j)�”}”(hjÝéh]”hŒlong nr”…”�”}”(hjßéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛéubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K"hj×éubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to clear”h]”hŒ Bit to clear”…”�”}”(hjöéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jòéh´K"hjóéubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj×éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jòéh´K"hjÔéubj)�”}”(hŒ@``volatile unsigned long *addr`` Address to start counting from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjêh]”hŒvolatile unsigned long *addr”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K#hjêubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to start counting from”h]”hŒAddress to start counting from”…”�”}”(hj/êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+êh´K#hj,êubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+êh´K#hjÔéubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¸éubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjQêh]”hŒ Description”…”�”}”(hjSêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjOêubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K%hj¸éubhÝ)�”}”(hŒ@This is a relaxed atomic operation (no implied memory barriers).”h]”hŒ@This is a relaxed atomic operation (no implied memory barriers).”…”�”}”(hjgêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K$hj¸éubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œchange_bit (C function)”Œ c.change_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void change_bit (long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒ6void change_bit(long nr, volatile unsigned long *addr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj–êh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj’êh²hh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’êh²hh³j¤êh´K.ubj{)�”}”(hŒ change_bit”h]”j�)�”}”(hŒ change_bit”h]”hŒ change_bit”…”�”}”(hj·êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³êubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj’êh²hh³j¤êh´K.ubjœ)�”}”(hŒ'(long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒlong nr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÓêh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÏêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏêubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjïêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjËêubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj#ëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1ëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj?ëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj[ëh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjëubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjhëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjËêubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj’êh²hh³j¤êh´K.ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŽêh²hh³j¤êh´K.ubah}”(h]”j‰êah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¤êh´K.hj‹êh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒToggle a bit in memory”h]”hŒToggle a bit in memory”…”�”}”(hj’ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K.hj�ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‹êh²hh³j¤êh´K.ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjªëjæjªëjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hX9**Parameters** ``long nr`` Bit to change ``volatile unsigned long *addr`` Address to start counting from **Description** This is a relaxed atomic operation (no implied memory barriers). Note that **nr** may be almost arbitrarily large; this function is not restricted to acting on a single-word quantity.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj´ëh]”hŒ Parameters”…”�”}”(hj¶ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K2hj®ëubj )�”}”(hhh]”(j)�”}”(hŒ``long nr`` Bit to change ”h]”(j)�”}”(hŒ ``long nr``”h]”j)�”}”(hjÓëh]”hŒlong nr”…”�”}”(hjÕëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K/hjÍëubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to change”h]”hŒ Bit to change”…”�”}”(hjìëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèëh´K/hjéëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèëh´K/hjÊëubj)�”}”(hŒ@``volatile unsigned long *addr`` Address to start counting from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hj ìh]”hŒvolatile unsigned long *addr”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K0hjìubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to start counting from”h]”hŒAddress to start counting from”…”�”}”(hj%ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!ìh´K0hj"ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!ìh´K0hjÊëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj®ëubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjGìh]”hŒ Description”…”�”}”(hjIìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K2hj®ëubhÝ)�”}”(hŒ@This is a relaxed atomic operation (no implied memory barriers).”h]”hŒ@This is a relaxed atomic operation (no implied memory barriers).”…”�”}”(hj]ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K1hj®ëubhÝ)�”}”(hŒvNote that **nr** may be almost arbitrarily large; this function is not restricted to acting on a single-word quantity.”h]”(hŒ Note that ”…”�”}”(hjlìh²hh³Nh´Nubjõ)�”}”(hŒ**nr**”h]”hŒnr”…”�”}”(hjtìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjlìubhŒf may be almost arbitrarily large; this function is not restricted to acting on a single-word quantity.”…”�”}”(hjlìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K3hj®ëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œtest_and_set_bit (C function)”Œc.test_and_set_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=bool test_and_set_bit (long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©ìh²hh³jºìh´K>ubj{)�”}”(hŒtest_and_set_bit”h]”j�)�”}”(hŒtest_and_set_bit”h]”hŒtest_and_set_bit”…”�”}”(hjÍìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉìubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj©ìh²hh³jºìh´K>ubjœ)�”}”(hŒ'(long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒlong nr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjéìh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjåìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåìubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjáìubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjíubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj9íh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjíubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjUíh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjíubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjqíh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjíubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj~íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjáìubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj©ìh²hh³jºìh´K>ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¥ìh²hh³jºìh´K>ubah}”(h]”j ìah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jºìh´K>hj¢ìh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Set a bit and return its old value”h]”hŒ"Set a bit and return its old value”…”�”}”(hj¨íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K>hj¥íh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¢ìh²hh³jºìh´K>ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÀíjæjÀíjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒ½**Parameters** ``long nr`` Bit to set ``volatile unsigned long *addr`` Address to count from **Description** This is an atomic fully-ordered operation (implied full memory barrier).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÊíh]”hŒ Parameters”…”�”}”(hjÌíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KBhjÄíubj )�”}”(hhh]”(j)�”}”(hŒ``long nr`` Bit to set ”h]”(j)�”}”(hŒ ``long nr``”h]”j)�”}”(hjéíh]”hŒlong nr”…”�”}”(hjëíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçíubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K?hjãíubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to set”h]”hŒ Bit to set”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jþíh´K?hjÿíubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjãíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþíh´K?hjàíubj)�”}”(hŒ7``volatile unsigned long *addr`` Address to count from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hj"îh]”hŒvolatile unsigned long *addr”…”�”}”(hj$îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj îubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K@hjîubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to count from”h]”hŒAddress to count from”…”�”}”(hj;îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j7îh´K@hj8îubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7îh´K@hjàíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÄíubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj]îh]”hŒ Description”…”�”}”(hj_îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj[îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KBhjÄíubhÝ)�”}”(hŒHThis is an atomic fully-ordered operation (implied full memory barrier).”h]”hŒHThis is an atomic fully-ordered operation (implied full memory barrier).”…”�”}”(hjsîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KAhjÄíubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œtest_and_clear_bit (C function)”Œc.test_and_clear_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ?bool test_and_clear_bit (long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒ>bool test_and_clear_bit(long nr, volatile unsigned long *addr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj¢îh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjžîh²hh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°îh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžîh²hh³j¯îh´KLubj{)�”}”(hŒtest_and_clear_bit”h]”j�)�”}”(hŒtest_and_clear_bit”h]”hŒtest_and_clear_bit”…”�”}”(hjÂîh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾îubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjžîh²hh³j¯îh´KLubjœ)�”}”(hŒ'(long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒlong nr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÞîh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚîubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìîh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚîubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjúîh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÖîubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj.ïh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjJïh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjfïh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjïubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjsïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÖîubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjžîh²hh³j¯îh´KLubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjšîh²hh³j¯îh´KLubah}”(h]”j•îah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¯îh´KLhj—îh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Clear a bit and return its old value”h]”hŒ$Clear a bit and return its old value”…”�”}”(hj�ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KLhjšïh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj—îh²hh³j¯îh´KLubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjµïjæjµïjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒ¿**Parameters** ``long nr`` Bit to clear ``volatile unsigned long *addr`` Address to count from **Description** This is an atomic fully-ordered operation (implied full memory barrier).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¿ïh]”hŒ Parameters”…”�”}”(hjÁïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KPhj¹ïubj )�”}”(hhh]”(j)�”}”(hŒ``long nr`` Bit to clear ”h]”(j)�”}”(hŒ ``long nr``”h]”j)�”}”(hjÞïh]”hŒlong nr”…”�”}”(hjàïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KMhjØïubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to clear”h]”hŒ Bit to clear”…”�”}”(hj÷ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jóïh´KMhjôïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jóïh´KMhjÕïubj)�”}”(hŒ7``volatile unsigned long *addr`` Address to count from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjðh]”hŒvolatile unsigned long *addr”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KNhjðubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to count from”h]”hŒAddress to count from”…”�”}”(hj0ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,ðh´KNhj-ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,ðh´KNhjÕïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹ïubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjRðh]”hŒ Description”…”�”}”(hjTðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KPhj¹ïubhÝ)�”}”(hŒHThis is an atomic fully-ordered operation (implied full memory barrier).”h]”hŒHThis is an atomic fully-ordered operation (implied full memory barrier).”…”�”}”(hjhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KOhj¹ïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ test_and_change_bit (C function)”Œc.test_and_change_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@bool test_and_change_bit (long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒ?bool test_and_change_bit(long nr, volatile unsigned long *addr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj—ðh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“ðh²hh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“ðh²hh³j¤ðh´KZubj{)�”}”(hŒtest_and_change_bit”h]”j�)�”}”(hŒtest_and_change_bit”h]”hŒtest_and_change_bit”…”�”}”(hj·ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³ðubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj“ðh²hh³j¤ðh´KZubjœ)�”}”(hŒ'(long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒlong nr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÓðh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÏðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏðubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjïðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjËðubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj#ñh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj?ñh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñub•jã)�”}”(hjæh]”hŒ*”…”�”}”(hj[ñh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjñubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjhñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjËðubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj“ðh²hh³j¤ðh´KZubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�ðh²hh³j¤ðh´KZubah}”(h]”jŠðah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¤ðh´KZhjŒðh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Change a bit and return its old value”h]”hŒ%Change a bit and return its old value”…”�”}”(hj’ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´KZhj�ñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŒðh²hh³j¤ðh´KZubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjªñjæjªñjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒÀ**Parameters** ``long nr`` Bit to change ``volatile unsigned long *addr`` Address to count from **Description** This is an atomic fully-ordered operation (implied full memory barrier).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj´ñh]”hŒ Parameters”…”�”}”(hj¶ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K^hj®ñubj )�”}”(hhh]”(j)�”}”(hŒ``long nr`` Bit to change ”h]”(j)�”}”(hŒ ``long nr``”h]”j)�”}”(hjÓñh]”hŒlong nr”…”�”}”(hjÕñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K[hjÍñubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to change”h]”hŒ Bit to change”…”�”}”(hjìñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèñh´K[hjéñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèñh´K[hjÊñubj)�”}”(hŒ7``volatile unsigned long *addr`` Address to count from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hj òh]”hŒvolatile unsigned long *addr”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj òubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K\hjòubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to count from”h]”hŒAddress to count from”…”�”}”(hj%òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!òh´K\hj"òubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!òh´K\hjÊñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj®ñubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjGòh]”hŒ Description”…”�”}”(hjIòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEòubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K^hj®ñubhÝ)�”}”(hŒHThis is an atomic fully-ordered operation (implied full memory barrier).”h]”hŒHThis is an atomic fully-ordered operation (implied full memory barrier).”…”�”}”(hj]òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œt/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:54: ./include/asm-generic/bitops/instrumented-atomic.h”h´K]hj®ñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ___set_bit (C function)”Œ c.___set_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@void ___set_bit (unsigned long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒ?void ___set_bit(unsigned long nr, volatile unsigned long *addr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŒòh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjˆòh²hh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›òh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆòh²hh³jšòh´Kubj{)�”}”(hŒ ___set_bit”h]”j�)�”}”(hŒ ___set_bit”h]”hŒ ___set_bit”…”�”}”(hj­òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©òubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjˆòh²hh³jšòh´Kubjœ)�”}”(hŒ0(unsigned long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒunsigned long nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÉòh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÅòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×òh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅòubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjåòh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÅòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅòubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁòubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj5óh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjQóh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjmóh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjóubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjzóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁòubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjˆòh²hh³jšòh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj„òh²hh³jšòh´Kubah}”(h]”jòah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jšòh´Khj�òh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒSet a bit in memory”h]”hŒSet a bit in memory”…”�”}”(hj¤óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Khj¡óh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�òh²hh³jšòh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¼ójæj¼ójç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hX,**Parameters** ``unsigned long nr`` the bit to set ``volatile unsigned long *addr`` the address to start counting from **Description** Unlike set_bit(), this function is non-atomic. If it is called on the same region of memory concurrently, the effect may be that only one operation succeeds.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÆóh]”hŒ Parameters”…”�”}”(hjÈóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÄóubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´KhjÀóubj )�”}”(hhh]”(j)�”}”(hŒ$``unsigned long nr`` the bit to set ”h]”(j)�”}”(hŒ``unsigned long nr``”h]”j)�”}”(hjåóh]”hŒunsigned long nr”…”�”}”(hjçóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjãóubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Khjßóubj2)�”}”(hhh]”hÝ)�”}”(hŒthe bit to set”h]”hŒthe bit to set”…”�”}”(hjþóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³júóh´Khjûóubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjßóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³júóh´KhjÜóubj)�”}”(hŒD``volatile unsigned long *addr`` the address to start counting from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjôh]”hŒvolatile unsigned long *addr”…”�”}”(hj ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Khjôubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the address to start counting from”h]”hŒ"the address to start counting from”…”�”}”(hj7ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3ôh´Khj4ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3ôh´KhjÜóubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÀóubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjYôh]”hŒ Description”…”�”}”(hj[ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjWôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´KhjÀóubhÝ)�”}”(hŒ�Unlike set_bit(), this function is non-atomic. If it is called on the same region of memory concurrently, the effect may be that only one operation succeeds.”h]”hŒ�Unlike set_bit(), this function is non-atomic. If it is called on the same region of memory concurrently, the effect may be that only one operation succeeds.”…”�”}”(hjoôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´KhjÀóubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ___clear_bit (C function)”Œc.___clear_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBvoid ___clear_bit (unsigned long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒAvoid ___clear_bit(unsigned long nr, volatile unsigned long *addr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjžôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjšôh²hh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšôh²hh³j¬ôh´K!ubj{)�”}”(hŒ ___clear_bit”h]”j�)�”}”(hŒ ___clear_bit”h]”hŒ ___clear_bit”…”�”}”(hj¿ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»ôubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjšôh²hh³j¬ôh´K!ubjœ)�”}”(hŒ0(unsigned long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒunsigned long nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÛôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj×ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×ôubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj÷ôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj×ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×ôubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓôubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hj,õh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj(õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9õh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(õubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjGõh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj(õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(õubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjcõh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj(õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(õubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj(õubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjŒõh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓôubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjšôh²hh³j¬ôh´K!ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj–ôh²hh³j¬ôh´K!ubah}”(h]”j‘ôah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¬ôh´K!hj“ôh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒClears a bit in memory”h]”hŒClears a bit in memory”…”�”}”(hj¶õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K!hj³õh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj“ôh²hh³j¬ôh´K!ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÎõjæjÎõjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hX0**Parameters** ``unsigned long nr`` the bit to clear ``volatile unsigned long *addr`` the address to start counting from **Description** Unlike clear_bit(), this function is non-atomic. If it is called on the same region of memory concurrently, the effect may be that only one operation succeeds.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjØõh]”hŒ Parameters”…”�”}”(hjÚõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖõubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K%hjÒõubj )�”}”(hhh]”(j)�”}”(hŒ&``unsigned long nr`` the bit to clear ”h]”(j)�”}”(hŒ``unsigned long nr``”h]”j)�”}”(hj÷õh]”hŒunsigned long nr”…”�”}”(hjùõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõõubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K"hjñõubj2)�”}”(hhh]”hÝ)�”}”(hŒthe bit to clear”h]”hŒthe bit to clear”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j öh´K"hj öubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjñõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j öh´K"hjîõubj)�”}”(hŒD``volatile unsigned long *addr`` the address to start counting from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hj0öh]”hŒvolatile unsigned long *addr”…”�”}”(hj2öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.öubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K#hj*öubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the address to start counting from”h]”hŒ"the address to start counting from”…”�”}”(hjIöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jEöh´K#hjFöubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj*öubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jEöh´K#hjîõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÒõubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjköh]”hŒ Description”…”�”}”(hjmöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjiöubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K%hjÒõubhÝ)�”}”(hŒŸUnlike clear_bit(), this function is non-atomic. If it is called on the same region of memory concurrently, the effect may be that only one operation succeeds.”h]”hŒŸUnlike clear_bit(), this function is non-atomic. If it is called on the same region of memory concurrently, the effect may be that only one operation succeeds.”…”�”}”(hj�öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K$hjÒõubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ___change_bit (C function)”Œc.___change_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCvoid ___change_bit (unsigned long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒBvoid ___change_bit(unsigned long nr, volatile unsigned long *addr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj°öh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¬öh²hh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿öh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬öh²hh³j¾öh´K1ubj{)�”}”(hŒ ___change_bit”h]”j�)�”}”(hŒ ___change_bit”h]”hŒ ___change_bit”…”�”}”(hjÑöh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍöubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¬öh²hh³j¾öh´K1ubjœ)�”}”(hŒ0(unsigned long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒunsigned long nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjíöh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjéöubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûöh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéöubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj ÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjéöubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéöubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hj%÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjåöubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hj>÷h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj:÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:÷ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjY÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:÷ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hju÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:÷ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‘÷h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj:÷ubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjž÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjåöubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¬öh²hh³j¾öh´K1ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¨öh²hh³j¾öh´K1ubah}”(h]”j£öah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¾öh´K1hj¥öh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒToggle a bit in memory”h]”hŒToggle a bit in memory”…”�”}”(hjÈ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K1hjÅ÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¥öh²hh³j¾öh´K1ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjà÷jæjà÷jç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hX2**Parameters** ``unsigned long nr`` the bit to change ``volatile unsigned long *addr`` the address to start counting from **Description** Unlike change_bit(), this function is non-atomic. If it is called on the same region of memory concurrently, the effect may be that only one operation succeeds.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjê÷h]”hŒ Parameters”…”�”}”(hjì÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjè÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K5hjä÷ubj )�”}”(hhh]”(j)�”}”(hŒ'``unsigned long nr`` the bit to change ”h]”(j)�”}”(hŒ``unsigned long nr``”h]”j)�”}”(hj øh]”hŒunsigned long nr”…”�”}”(hj øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K2hjøubj2)�”}”(hhh]”hÝ)�”}”(hŒthe bit to change”h]”hŒthe bit to change”…”�”}”(hj"øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jøh´K2hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jøh´K2hjøubj)�”}”(hŒD``volatile unsigned long *addr`` the address to start counting from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjBøh]”hŒvolatile unsigned long *addr”…”�”}”(hjDøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K3hj<øubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the address to start counting from”h]”hŒ"the address to start counting from”…”�”}”(hj[øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jWøh´K3hjXøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj<øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jWøh´K3hjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjä÷ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj}øh]”hŒ Description”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{øubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K5hjä÷ubhÝ)�”}”(hŒ Unlike change_bit(), this function is non-atomic. If it is called on the same region of memory concurrently, the effect may be that only one operation succeeds.”h]”hŒ Unlike change_bit(), this function is non-atomic. If it is called on the same region of memory concurrently, the effect may be that only one operation succeeds.”…”�”}”(hj“øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K4hjä÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ ___test_and_set_bit (C function)”Œc.___test_and_set_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIbool ___test_and_set_bit (unsigned long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒHbool ___test_and_set_bit(unsigned long nr, volatile unsigned long *addr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjÂøh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¾øh²hh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´KYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐøh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾øh²hh³jÏøh´KYubj{)�”}”(hŒ___test_and_set_bit”h]”j�)�”}”(hŒ___test_and_set_bit”h]”hŒ___test_and_set_bit”…”�”}”(hjâøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞøubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¾øh²hh³jÏøh´KYubjœ)�”}”(hŒ0(unsigned long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒunsigned long nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjþøh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjúøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúøubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjúøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúøubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hj6ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjöøubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjOùh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjKùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKùubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjjùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjKùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKùubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj†ùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjKùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKùubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¢ùh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjKùubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj¯ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjöøubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¾øh²hh³jÏøh´KYubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjºøh²hh³jÏøh´KYubah}”(h]”jµøah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÏøh´KYhj·øh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Set a bit and return its old value”h]”hŒ"Set a bit and return its old value”…”�”}”(hjÙùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´KYhjÖùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj·øh²hh³jÏøh´KYubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjñùjæjñùjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒñ**Parameters** ``unsigned long nr`` Bit to set ``volatile unsigned long *addr`` Address to count from **Description** This operation is non-atomic. If two instances of this operation race, one can appear to succeed but actually fail.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjûùh]”hŒ Parameters”…”�”}”(hjýùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjùùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K]hjõùubj )�”}”(hhh]”(j)�”}”(hŒ ``unsigned long nr`` Bit to set ”h]”(j)�”}”(hŒ``unsigned long nr``”h]”j)�”}”(hjúh]”hŒunsigned long nr”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´KZhjúubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to set”h]”hŒ Bit to set”…”�”}”(hj3úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j/úh´KZhj0úubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j/úh´KZhjúubj)�”}”(hŒ7``volatile unsigned long *addr`` Address to count from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjSúh]”hŒvolatile unsigned long *addr”…”�”}”(hjUúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQúubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K[hjMúubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to count from”h]”hŒAddress to count from”…”�”}”(hjlúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jhúh´K[hjiúubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjMúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jhúh´K[hjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjõùubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŽúh]”hŒ Description”…”�”}”(hj�úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒúubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K]hjõùubhÝ)�”}”(hŒsThis operation is non-atomic. If two instances of this operation race, one can appear to succeed but actually fail.”h]”hŒsThis operation is non-atomic. If two instances of this operation race, one can appear to succeed but actually fail.”…”�”}”(hj¤úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K\hjõùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"___test_and_clear_bit (C function)”Œc.___test_and_clear_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒKbool ___test_and_clear_bit (unsigned long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒJbool ___test_and_clear_bit(unsigned long nr, volatile unsigned long *addr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjÓúh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÏúh²hh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Khubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏúh²hh³jàúh´Khubj{)�”}”(hŒ___test_and_clear_bit”h]”j�)�”}”(hŒ___test_and_clear_bit”h]”hŒ___test_and_clear_bit”…”�”}”(hjóúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïúubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÏúh²hh³jàúh´Khubjœ)�”}”(hŒ0(unsigned long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒunsigned long nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ûubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj+ûh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ûubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjGûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjûubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hj`ûh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj\ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\ûubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj{ûh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj\ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\ûubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj—ûh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj\ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\ûubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj³ûh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\ûubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÀûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjûubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÏúh²hh³jàúh´Khubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjËúh²hh³jàúh´Khubah}”(h]”jÆúah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jàúh´KhhjÈúh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Clear a bit and return its old value”h]”hŒ$Clear a bit and return its old value”…”�”}”(hjêûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Khhjçûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÈúh²hh³jàúh´Khubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjüjæjüjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒó**Parameters** ``unsigned long nr`` Bit to clear ``volatile unsigned long *addr`` Address to count from **Description** This operation is non-atomic. If two instances of this operation race, one can appear to succeed but actually fail.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj üh]”hŒ Parameters”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj üubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Klhjüubj )�”}”(hhh]”(j)�”}”(hŒ"``unsigned long nr`` Bit to clear ”h]”(j)�”}”(hŒ``unsigned long nr``”h]”j)�”}”(hj+üh]”hŒunsigned long nr”…”�”}”(hj-üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)üubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kihj%üubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to clear”h]”hŒ Bit to clear”…”�”}”(hjDüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@üh´KihjAüubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@üh´Kihj"üubj)�”}”(hŒ7``volatile unsigned long *addr`` Address to count from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjdüh]”hŒvolatile unsigned long *addr”…”�”}”(hjfüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjbüubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kjhj^üubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to count from”h]”hŒAddress to count from”…”�”}”(hj}üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jyüh´Kjhjzüubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jyüh´Kjhj"üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjüubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŸüh]”hŒ Description”…”�”}”(hj¡üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�üubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´KlhjüubhÝ)�”}”(hŒsThis operation is non-atomic. If two instances of this operation race, one can appear to succeed but actually fail.”h]”hŒsThis operation is non-atomic. If two instances of this operation race, one can appear to succeed but actually fail.”…”�”}”(hjµüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kkhjüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#___test_and_change_bit (C function)”Œc.___test_and_change_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLbool ___test_and_change_bit (unsigned long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒKbool ___test_and_change_bit(unsigned long nr, volatile unsigned long *addr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjäüh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjàüh²hh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàüh²hh³jñüh´Kwubj{)�”}”(hŒ___test_and_change_bit”h]”j�)�”}”(hŒ___test_and_change_bit”h]”hŒ___test_and_change_bit”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjàüh²hh³jñüh´Kwubjœ)�”}”(hŒ0(unsigned long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒunsigned long nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj ýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjýubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj<ýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjýubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjXýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjýubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjqýh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjmýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmýubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŒýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjmýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmýubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¨ýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjmýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmýubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÄýh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjmýubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÑýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjýubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjàüh²hh³jñüh´Kwubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÜüh²hh³jñüh´Kwubah}”(h]”j×üah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jñüh´KwhjÙüh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Change a bit and return its old value”h]”hŒ%Change a bit and return its old value”…”�”}”(hjûýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kwhjøýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÙüh²hh³jñüh´Kwubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjþjæjþjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒô**Parameters** ``unsigned long nr`` Bit to change ``volatile unsigned long *addr`` Address to count from **Description** This operation is non-atomic. If two instances of this operation race, one can appear to succeed but actually fail.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjþh]”hŒ Parameters”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K{hjþubj )�”}”(hhh]”(j)�”}”(hŒ#``unsigned long nr`` Bit to change ”h]”(j)�”}”(hŒ``unsigned long nr``”h]”j)�”}”(hj<þh]”hŒunsigned long nr”…”�”}”(hj>þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:þubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kxhj6þubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to change”h]”hŒ Bit to change”…”�”}”(hjUþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQþh´KxhjRþubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6þubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQþh´Kxhj3þubj)�”}”(hŒ7``volatile unsigned long *addr`` Address to count from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjuþh]”hŒvolatile unsigned long *addr”…”�”}”(hjwþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsþubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kyhjoþubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to count from”h]”hŒAddress to count from”…”�”}”(hjŽþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠþh´Kyhj‹þubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjoþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠþh´Kyhj3þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjþubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj°þh]”hŒ Description”…”�”}”(hj²þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®þubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K{hjþubhÝ)�”}”(hŒsThis operation is non-atomic. If two instances of this operation race, one can appear to succeed but actually fail.”h]”hŒsThis operation is non-atomic. If two instances of this operation race, one can appear to succeed but actually fail.”…”�”}”(hjÆþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kzhjþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ_test_bit (C function)”Œ c._test_bit”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEbool _test_bit (unsigned long nr, const volatile unsigned long *addr)”h]”j)�”}”(hŒDbool _test_bit(unsigned long nr, volatile const unsigned long *addr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjõþh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñþh²hh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñþh²hh³jÿh´K†ubj{)�”}”(hŒ _test_bit”h]”j�)�”}”(hŒ _test_bit”h]”hŒ _test_bit”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjñþh²hh³jÿh´K†ubjœ)�”}”(hŒ6(unsigned long nr, volatile const unsigned long *addr)”h]”(j¢)�”}”(hŒunsigned long nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj1ÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj-ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-ÿubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjMÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj-ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-ÿubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjiÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj)ÿubj¢)�”}”(hŒ"volatile const unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hj‚ÿh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj~ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~ÿubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hj�ÿh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj~ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~ÿubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¸ÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~ÿubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÔÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~ÿubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjðÿh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj~ÿubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjýÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj)ÿubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjñþh²hh³jÿh´K†ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjíþh²hh³jÿh´K†ubah}”(h]”jèþah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÿh´K†hjêþh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒDetermine whether a bit is set”h]”hŒDetermine whether a bit is set”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K†hj$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjêþh²hh³jÿh´K†ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj?jæj?jç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒ‚**Parameters** ``unsigned long nr`` bit number to test ``const volatile unsigned long *addr`` Address to start counting from”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjIh]”hŒ Parameters”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´KŠhjCubj )�”}”(hhh]”(j)�”}”(hŒ(``unsigned long nr`` bit number to test ”h]”(j)�”}”(hŒ``unsigned long nr``”h]”j)�”}”(hjhh]”hŒunsigned long nr”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K‡hjbubj2)�”}”(hhh]”hÝ)�”}”(hŒbit number to test”h]”hŒbit number to test”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}h´K‡hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}h´K‡hj_ubj)�”}”(hŒE``const volatile unsigned long *addr`` Address to start counting from”h]”(j)�”}”(hŒ&``const volatile unsigned long *addr``”h]”j)�”}”(hj¡h]”hŒ"const volatile unsigned long *addr”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K‰hj›ubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to start counting from”h]”hŒAddress to start counting from”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´Kˆhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶h´K‰hj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ_test_bit_acquire (C function)”Œc._test_bit_acquire”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒMbool _test_bit_acquire (unsigned long nr, const volatile unsigned long *addr)”h]”j)�”}”(hŒLbool _test_bit_acquire(unsigned long nr, volatile const unsigned long *addr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj÷h²hh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷h²hh³jh´K’ubj{)�”}”(hŒ_test_bit_acquire”h]”j�)�”}”(hŒ_test_bit_acquire”h]”hŒ_test_bit_acquire”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj÷h²hh³jh´K’ubjœ)�”}”(hŒ6(unsigned long nr, volatile const unsigned long *addr)”h]”(j¢)�”}”(hŒunsigned long nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3ubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/ubj¢)�”}”(hŒ"volatile const unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„ubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj„ubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj÷h²hh³jh´K’ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjóh²hh³jh´K’ubah}”(h]”jîah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´K’hjðh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7Determine, with acquire semantics, whether a bit is set”h]”hŒ7Determine, with acquire semantics, whether a bit is set”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K’hj*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjðh²hh³jh´K’ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjEjæjEjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒ‚**Parameters** ``unsigned long nr`` bit number to test ``const volatile unsigned long *addr`` Address to start counting from”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjOh]”hŒ Parameters”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K–hjIubj )�”}”(hhh]”(j)�”}”(hŒ(``unsigned long nr`` bit number to test ”h]”(j)�”}”(hŒ``unsigned long nr``”h]”j)�”}”(hjnh]”hŒunsigned long nr”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K“hjhubj2)�”}”(hhh]”hÝ)�”}”(hŒbit number to test”h]”hŒbit number to test”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒh´K“hj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒh´K“hjeubj)�”}”(hŒE``const volatile unsigned long *addr`` Address to start counting from”h]”(j)�”}”(hŒ&``const volatile unsigned long *addr``”h]”j)�”}”(hj§h]”hŒ"const volatile unsigned long *addr”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K•hj¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to start counting from”h]”hŒAddress to start counting from”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œx/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:57: ./include/asm-generic/bitops/instrumented-non-atomic.h”h´K”hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼h´K•hjeubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclear_bit_unlock (C function)”Œc.clear_bit_unlock”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=void clear_bit_unlock (long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hjýh²hh³jh´Kubj{)�”}”(hŒclear_bit_unlock”h]”j�)�”}”(hŒclear_bit_unlock”h]”hŒclear_bit_unlock”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjýh²hh³jh´Kubjœ)�”}”(hŒ'(long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒlong nr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:ubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6ubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjoubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjoubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjoubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjoubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjýh²hh³jh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjùh²hh³jh´Kubah}”(h]”jôah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´Khjöh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!Clear a bit in memory, for unlock”h]”hŒ!Clear a bit in memory, for unlock”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´Khjúh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjöh²hh³jh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒÆ**Parameters** ``long nr`` the bit to set ``volatile unsigned long *addr`` the address to start counting from **Description** This operation is atomic and provides release barrier semantics.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjh]”hŒ Parameters”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´Khjubj )�”}”(hhh]”(j)�”}”(hŒ``long nr`` the bit to set ”h]”(j)�”}”(hŒ ``long nr``”h]”j)�”}”(hj>h]”hŒlong nr”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´Khj8ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe bit to set”h]”hŒthe bit to set”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jSh´KhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jSh´Khj5ubj)�”}”(hŒD``volatile unsigned long *addr`` the address to start counting from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjwh]”hŒvolatile unsigned long *addr”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´Khjqubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the address to start counting from”h]”hŒ"the address to start counting from”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŒh´Khj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒh´Khj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj²h]”hŒ Description”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´KhjubhÝ)�”}”(hŒ@This operation is atomic and provides release barrier semantics.”h]”hŒ@This operation is atomic and provides release barrier semantics.”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´Khjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__clear_bit_unlock (C function)”Œc.__clear_bit_unlock”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ?void __clear_bit_unlock (long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒ>void __clear_bit_unlock(long nr, volatile unsigned long *addr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjóh²hh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóh²hh³jh´Kubj{)�”}”(hŒ__clear_bit_unlock”h]”j�)�”}”(hŒ__clear_bit_unlock”h]”hŒ__clear_bit_unlock”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjóh²hh³jh´Kubjœ)�”}”(hŒ'(long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒlong nr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0ubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,ubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjeubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjóh²hh³jh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjïh²hh³jh´Kubah}”(h]”jêah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´Khjìh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒClears a bit in memory”h]”hŒClears a bit in memory”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´Khjðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjìh²hh³jh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj jæj jç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hX7**Parameters** ``long nr`` Bit to clear ``volatile unsigned long *addr`` Address to start counting from **Description** This is a non-atomic operation but implies a release barrier before the memory operation. It can be used for an unlock if no other CPUs can concurrently modify other bits in the word.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K#hjubj )�”}”(hhh]”(j)�”}”(hŒ``long nr`` Bit to clear ”h]”(j)�”}”(hŒ ``long nr``”h]”j)�”}”(hj4h]”hŒlong nr”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K hj.ubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to clear”h]”hŒ Bit to clear”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jIh´K hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIh´K hj+ubj)�”}”(hŒ@``volatile unsigned long *addr`` Address to start counting from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjmh]”hŒvolatile unsigned long *addr”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K!hjgubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to start counting from”h]”hŒAddress to start counting from”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚h´K!hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚h´K!hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¨h]”hŒ Description”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K#hjubhÝ)�”}”(hŒ·This is a non-atomic operation but implies a release barrier before the memory operation. It can be used for an unlock if no other CPUs can concurrently modify other bits in the word.”h]”hŒ·This is a non-atomic operation but implies a release barrier before the memory operation. It can be used for an unlock if no other CPUs can concurrently modify other bits in the word.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K"hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"test_and_set_bit_lock (C function)”Œc.test_and_set_bit_lock”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBbool test_and_set_bit_lock (long nr, volatile unsigned long *addr)”h]”j)�”}”(hŒAbool test_and_set_bit_lock(long nr, volatile unsigned long *addr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjéh²hh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K/ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéh²hh³júh´K/ubj{)�”}”(hŒtest_and_set_bit_lock”h]”j�)�”}”(hŒtest_and_set_bit_lock”h]”hŒtest_and_set_bit_lock”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjéh²hh³júh´K/ubjœ)�”}”(hŒ'(long nr, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒlong nr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%ubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!ubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j>a•'h"]”h$]”h&]”uh1j1hjZubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjéh²hh³júh´K/ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjåh²hh³júh´K/ubah}”(h]”jàah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³júh´K/hjâh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Set a bit and return its old value, for lock”h]”hŒ,Set a bit and return its old value, for lock”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K/hjåh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjâh²hh³júh´K/ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hŒ÷**Parameters** ``long nr`` Bit to set ``volatile unsigned long *addr`` Address to count from **Description** This operation is atomic and provides acquire barrier semantics if the returned value is 0. It can be used to implement bit locks.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K3hjubj )�”}”(hhh]”(j)�”}”(hŒ``long nr`` Bit to set ”h]”(j)�”}”(hŒ ``long nr``”h]”j)�”}”(hj)h]”hŒlong nr”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K0hj#ubj2)�”}”(hhh]”hÝ)�”}”(hŒ Bit to set”h]”hŒ Bit to set”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j>h´K0hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>h´K0hj ubj)�”}”(hŒ7``volatile unsigned long *addr`` Address to count from ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjbh]”hŒvolatile unsigned long *addr”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K1hj\ubj2)�”}”(hhh]”hÝ)�”}”(hŒAddress to count from”h]”hŒAddress to count from”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jwh´K1hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jwh´K1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�h]”hŒ Description”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K3hjubhÝ)�”}”(hŒ‚This operation is atomic and provides acquire barrier semantics if the returned value is 0. It can be used to implement bit locks.”h]”hŒ‚This operation is atomic and provides acquire barrier semantics if the returned value is 0. It can be used to implement bit locks.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K2hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(xor_unlock_is_negative_byte (C function)”Œc.xor_unlock_is_negative_byte”hNt”auh1hýhj^æh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒSbool xor_unlock_is_negative_byte (unsigned long mask, volatile unsigned long *addr)”h]”j)�”}”(hŒRbool xor_unlock_is_negative_byte(unsigned long mask, volatile unsigned long *addr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞh²hh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞh²hh³jïh´K>ubj{)�”}”(hŒxor_unlock_is_negative_byte”h]”j�)�”}”(hŒxor_unlock_is_negative_byte”h]”hŒxor_unlock_is_negative_byte”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÞh²hh³jïh´K>ubjœ)�”}”(hŒ2(unsigned long mask, volatile unsigned long *addr)”h]”(j¢)�”}”(hŒunsigned long mask”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj�)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubj¢)�”}”(hŒvolatile unsigned long *addr”h]”(j¨)�”}”(hjüæh]”hŒvolatile”…”�”}”(hjo h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjk ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjk ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¦ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjk ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjk ubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjk ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÞh²hh³jïh´K>ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÚh²hh³jïh´K>ubah}”(h]”jÕah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jïh´K>hj×h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCXOR a single byte in memory and test if it is negative, for unlock.”h]”hŒCXOR a single byte in memory and test if it is negative, for unlock.”…”�”}”(hjù h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K>hjö h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj×h²hh³jïh´K>ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj jæj jç‰jè‰jé‰uh1jh²hhj^æh³Nh´Nubjë)�”}”(hX-**Parameters** ``unsigned long mask`` Change the bits which are set in this mask. ``volatile unsigned long *addr`` The address of the word containing the byte to change. **Description** Changes some of bits 0-6 in the word pointed to by **addr**. This operation is atomic and provides release barrier semantics. Used to optimise some folio operations which are commonly paired with an unlock or end of writeback. Bit 7 is used as PG_waiters to indicate whether anybody is waiting for the unlock. **Return** Whether the top bit of the byte is set.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´KBhj ubj )�”}”(hhh]”(j)�”}”(hŒC``unsigned long mask`` Change the bits which are set in this mask. ”h]”(j)�”}”(hŒ``unsigned long mask``”h]”j)�”}”(hj: h]”hŒunsigned long mask”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´K@hj4 ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+Change the bits which are set in this mask.”h]”hŒ+Change the bits which are set in this mask.”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jO h´K@hjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jO h´K@hj1 ubj)�”}”(hŒX``volatile unsigned long *addr`` The address of the word containing the byte to change. ”h]”(j)�”}”(hŒ ``volatile unsigned long *addr``”h]”j)�”}”(hjs h]”hŒvolatile unsigned long *addr”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjq ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´KAhjm ubj2)�”}”(hhh]”hÝ)�”}”(hŒ6The address of the word containing the byte to change.”h]”hŒ6The address of the word containing the byte to change.”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆ h´KAhj‰ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjm ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆ h´KAhj1 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj® h]”hŒ Description”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¬ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´KChj ubhÝ)�”}”(hX6Changes some of bits 0-6 in the word pointed to by **addr**. This operation is atomic and provides release barrier semantics. Used to optimise some folio operations which are commonly paired with an unlock or end of writeback. Bit 7 is used as PG_waiters to indicate whether anybody is waiting for the unlock.”h]”(hŒ3Changes some of bits 0-6 in the word pointed to by ”…”�”}”(hjÄ h²hh³Nh´Nubjõ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÄ ubhŒû. This operation is atomic and provides release barrier semantics. Used to optimise some folio operations which are commonly paired with an unlock or end of writeback. Bit 7 is used as PG_waiters to indicate whether anybody is waiting for the unlock.”…”�”}”(hjÄ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´KBhj ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjç h]”hŒReturn”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjå ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´KHhj ubhÝ)�”}”(hŒ'Whether the top bit of the byte is set.”h]”hŒ'Whether the top bit of the byte is set.”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œr/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:60: ./include/asm-generic/bitops/instrumented-lock.h”h´KIhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj^æh²hh³Nh´Nubeh}”(h]”Œbit-operations”ah ]”h"]”Œbit operations”ah$]”h&]”uh1hµhj?æh²hh³hÊh´K4ubh¶)�”}”(hhh]”(h»)�”}”(hŒBitmap Operations”h]”hŒBitmap Operations”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj h²hh³hÊh´K@ubhÝ)�”}”(hŒµbitmaps provide an array of bits, implemented using an array of unsigned longs. The number of valid bits in a given bitmap does _not_ need to be an exact multiple of BITS_PER_LONG.”h]”hŒµbitmaps provide an array of bits, implemented using an array of unsigned longs. The number of valid bits in a given bitmap does _not_ need to be an exact multiple of BITS_PER_LONG.”…”�”}”(hj, h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:66: ./lib/bitmap.c”h´Khj h²hubhÝ)�”}”(hXžThe possible unused bits in the last, partially used word of a bitmap are 'don't care'. The implementation makes no particular effort to keep them zero. It ensures that their value will not affect the results of any operation. The bitmap operations that return Boolean (bitmap_empty, for example) or scalar (bitmap_weight, for example) results carefully filter out these unused bits from impacting their results.”h]”hX¤The possible unused bits in the last, partially used word of a bitmap are ‘don’t care’. The implementation makes no particular effort to keep them zero. It ensures that their value will not affect the results of any operation. The bitmap operations that return Boolean (bitmap_empty, for example) or scalar (bitmap_weight, for example) results carefully filter out these unused bits from impacting their results.”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:66: ./lib/bitmap.c”h´Khj h²hubhÝ)�”}”(hŒÍThe byte ordering of bitmaps is more natural on little endian architectures. See the big-endian headers include/asm-ppc64/bitops.h and include/asm-s390/bitops.h for the best explanations of this ordering.”h]”hŒÍThe byte ordering of bitmaps is more natural on little endian architectures. See the big-endian headers include/asm-ppc64/bitops.h and include/asm-s390/bitops.h for the best explanations of this ordering.”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:66: ./lib/bitmap.c”h´Khj h²hubhÝ)�”}”(hŒ´The DECLARE_BITMAP(name,bits) macro, in linux/types.h, can be used to declare an array named 'name' of just enough unsigned longs to contain all bit positions from 0 to 'bits' - 1.”h]”hŒ¼The DECLARE_BITMAP(name,bits) macro, in linux/types.h, can be used to declare an array named ‘name’ of just enough unsigned longs to contain all bit positions from 0 to ‘bits’ - 1.”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:69: ./include/linux/bitmap.h”h´K}hj h²hubhÝ)�”}”(hŒwThe available bitmap operations and their rough meaning in the case that the bitmap is a single unsigned long are thus:”h]”hŒwThe available bitmap operations and their rough meaning in the case that the bitmap is a single unsigned long are thus:”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:72: ./include/linux/bitmap.h”h´K!hj h²hubhÝ)�”}”(hŒcThe generated code is more efficient when nbits is known at compile-time and at most BITS_PER_LONG.”h]”hŒcThe generated code is more efficient when nbits is known at compile-time and at most BITS_PER_LONG.”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:72: ./include/linux/bitmap.h”h´K$hj h²hubj‘H)�”}”(hXbitmap_zero(dst, nbits) *dst = 0UL bitmap_fill(dst, nbits) *dst = ~0UL bitmap_copy(dst, src, nbits) *dst = *src bitmap_and(dst, src1, src2, nbits) *dst = *src1 & *src2 bitmap_or(dst, src1, src2, nbits) *dst = *src1 | *src2 bitmap_weighted_or(dst, src1, src2, nbits) *dst = *src1 | *src2. Returns Hamming Weight of dst bitmap_weighted_xor(dst, src1, src2, nbits) *dst = *src1 ^ *src2. Returns Hamming Weight of dst bitmap_xor(dst, src1, src2, nbits) *dst = *src1 ^ *src2 bitmap_andnot(dst, src1, src2, nbits) *dst = *src1 & ~(*src2) bitmap_complement(dst, src, nbits) *dst = ~(*src) bitmap_equal(src1, src2, nbits) Are *src1 and *src2 equal? bitmap_intersects(src1, src2, nbits) Do *src1 and *src2 overlap? bitmap_subset(src1, src2, nbits) Is *src1 a subset of *src2? bitmap_empty(src, nbits) Are all bits zero in *src? bitmap_full(src, nbits) Are all bits set in *src? bitmap_weight(src, nbits) Hamming Weight: number set bits bitmap_weight_and(src1, src2, nbits) Hamming Weight of and'ed bitmap bitmap_weight_andnot(src1, src2, nbits) Hamming Weight of andnot'ed bitmap bitmap_weight_from(src, start, end) Hamming Weight starting from **start** bitmap_set(dst, pos, nbits) Set specified bit area bitmap_clear(dst, pos, nbits) Clear specified bit area bitmap_find_next_zero_area(buf, len, pos, n, mask) Find bit free area bitmap_find_next_zero_area_off(buf, len, pos, n, mask, mask_off) as above bitmap_shift_right(dst, src, n, nbits) *dst = *src >> n bitmap_shift_left(dst, src, n, nbits) *dst = *src << n bitmap_cut(dst, src, first, n, nbits) Cut n bits from first, copy rest bitmap_replace(dst, old, new, mask, nbits) *dst = (*old & ~(*mask)) | (*new & *mask) bitmap_scatter(dst, src, mask, nbits) *dst = map(dense, sparse)(src) bitmap_gather(dst, src, mask, nbits) *dst = map(sparse, dense)(src) bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) bitmap_bitremap(oldbit, old, new, nbits) newbit = map(old, new)(oldbit) bitmap_onto(dst, orig, relmap, nbits) *dst = orig relative to relmap bitmap_fold(dst, orig, sz, nbits) dst bits = orig bits mod sz bitmap_parse(buf, buflen, dst, nbits) Parse bitmap dst from kernel buf bitmap_parse_user(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf bitmap_parselist(buf, dst, nbits) Parse bitmap dst from kernel buf bitmap_parselist_user(buf, dst, nbits) Parse bitmap dst from user buf bitmap_find_free_region(bitmap, bits, order) Find and allocate bit region bitmap_release_region(bitmap, pos, order) Free specified bit region bitmap_allocate_region(bitmap, pos, order) Allocate specified bit region bitmap_from_arr32(dst, buf, nbits) Copy nbits from u32[] buf to dst bitmap_from_arr64(dst, buf, nbits) Copy nbits from u64[] buf to dst bitmap_to_arr32(buf, src, nbits) Copy nbits from buf to u32[] dst bitmap_to_arr64(buf, src, nbits) Copy nbits from buf to u64[] dst bitmap_get_value8(map, start) Get 8bit value from map at start bitmap_set_value8(map, value, start) Set 8bit value to map at start bitmap_read(map, start, nbits) Read an nbits-sized value from map at start bitmap_write(map, value, start, nbits) Write an nbits-sized value to map at start”h]”hXbitmap_zero(dst, nbits) *dst = 0UL bitmap_fill(dst, nbits) *dst = ~0UL bitmap_copy(dst, src, nbits) *dst = *src bitmap_and(dst, src1, src2, nbits) *dst = *src1 & *src2 bitmap_or(dst, src1, src2, nbits) *dst = *src1 | *src2 bitmap_weighted_or(dst, src1, src2, nbits) *dst = *src1 | *src2. Returns Hamming Weight of dst bitmap_weighted_xor(dst, src1, src2, nbits) *dst = *src1 ^ *src2. Returns Hamming Weight of dst bitmap_xor(dst, src1, src2, nbits) *dst = *src1 ^ *src2 bitmap_andnot(dst, src1, src2, nbits) *dst = *src1 & ~(*src2) bitmap_complement(dst, src, nbits) *dst = ~(*src) bitmap_equal(src1, src2, nbits) Are *src1 and *src2 equal? bitmap_intersects(src1, src2, nbits) Do *src1 and *src2 overlap? bitmap_subset(src1, src2, nbits) Is *src1 a subset of *src2? bitmap_empty(src, nbits) Are all bits zero in *src? bitmap_full(src, nbits) Are all bits set in *src? bitmap_weight(src, nbits) Hamming Weight: number set bits bitmap_weight_and(src1, src2, nbits) Hamming Weight of and'ed bitmap bitmap_weight_andnot(src1, src2, nbits) Hamming Weight of andnot'ed bitmap bitmap_weight_from(src, start, end) Hamming Weight starting from **start** bitmap_set(dst, pos, nbits) Set specified bit area bitmap_clear(dst, pos, nbits) Clear specified bit area bitmap_find_next_zero_area(buf, len, pos, n, mask) Find bit free area bitmap_find_next_zero_area_off(buf, len, pos, n, mask, mask_off) as above bitmap_shift_right(dst, src, n, nbits) *dst = *src >> n bitmap_shift_left(dst, src, n, nbits) *dst = *src << n bitmap_cut(dst, src, first, n, nbits) Cut n bits from first, copy rest bitmap_replace(dst, old, new, mask, nbits) *dst = (*old & ~(*mask)) | (*new & *mask) bitmap_scatter(dst, src, mask, nbits) *dst = map(dense, sparse)(src) bitmap_gather(dst, src, mask, nbits) *dst = map(sparse, dense)(src) bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src) bitmap_bitremap(oldbit, old, new, nbits) newbit = map(old, new)(oldbit) bitmap_onto(dst, orig, relmap, nbits) *dst = orig relative to relmap bitmap_fold(dst, orig, sz, nbits) dst bits = orig bits mod sz bitmap_parse(buf, buflen, dst, nbits) Parse bitmap dst from kernel buf bitmap_parse_user(ubuf, ulen, dst, nbits) Parse bitmap dst from user buf bitmap_parselist(buf, dst, nbits) Parse bitmap dst from kernel buf bitmap_parselist_user(buf, dst, nbits) Parse bitmap dst from user buf bitmap_find_free_region(bitmap, bits, order) Find and allocate bit region bitmap_release_region(bitmap, pos, order) Free specified bit region bitmap_allocate_region(bitmap, pos, order) Allocate specified bit region bitmap_from_arr32(dst, buf, nbits) Copy nbits from u32[] buf to dst bitmap_from_arr64(dst, buf, nbits) Copy nbits from u64[] buf to dst bitmap_to_arr32(buf, src, nbits) Copy nbits from buf to u32[] dst bitmap_to_arr64(buf, src, nbits) Copy nbits from buf to u64[] dst bitmap_get_value8(map, start) Get 8bit value from map at start bitmap_set_value8(map, value, start) Set 8bit value to map at start bitmap_read(map, start, nbits) Read an nbits-sized value from map at start bitmap_write(map, value, start, nbits) Write an nbits-sized value to map at start”…”�”}”hj† sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:72: ./include/linux/bitmap.h”h´K)hj h²hubhÝ)�”}”(hXNote, bitmap_zero() and bitmap_fill() operate over the region of unsigned longs, that is, bits behind bitmap till the unsigned long boundary will be zeroed or filled as well. Consider to use bitmap_clear() or bitmap_set() to make explicit zeroing or filling respectively.”h]”hXNote, bitmap_zero() and bitmap_fill() operate over the region of unsigned longs, that is, bits behind bitmap till the unsigned long boundary will be zeroed or filled as well. Consider to use bitmap_clear() or bitmap_set() to make explicit zeroing or filling respectively.”…”�”}”(hj• h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:72: ./include/linux/bitmap.h”h´K\hj h²hubhÝ)�”}”(hŒAAlso the following operations in asm/bitops.h apply to bitmaps.::”h]”hŒ@Also the following operations in asm/bitops.h apply to bitmaps.:”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:75: ./include/linux/bitmap.h”h´Kfhj h²hubj‘H)�”}”(hX{set_bit(bit, addr) *addr |= bit clear_bit(bit, addr) *addr &= ~bit change_bit(bit, addr) *addr ^= bit test_bit(bit, addr) Is bit set in *addr? test_and_set_bit(bit, addr) Set bit and return old value test_and_clear_bit(bit, addr) Clear bit and return old value test_and_change_bit(bit, addr) Change bit and return old value find_first_zero_bit(addr, nbits) Position first zero bit in *addr find_first_bit(addr, nbits) Position first set bit in *addr find_next_zero_bit(addr, nbits, bit) Position next zero bit in *addr >= bit find_next_bit(addr, nbits, bit) Position next set bit in *addr >= bit find_next_and_bit(addr1, addr2, nbits, bit) Same as find_next_bit, but in (*addr1 & *addr2)”h]”hX{set_bit(bit, addr) *addr |= bit clear_bit(bit, addr) *addr &= ~bit change_bit(bit, addr) *addr ^= bit test_bit(bit, addr) Is bit set in *addr? test_and_set_bit(bit, addr) Set bit and return old value test_and_clear_bit(bit, addr) Clear bit and return old value test_and_change_bit(bit, addr) Change bit and return old value find_first_zero_bit(addr, nbits) Position first zero bit in *addr find_first_bit(addr, nbits) Position first set bit in *addr find_next_zero_bit(addr, nbits, bit) Position next zero bit in *addr >= bit find_next_bit(addr, nbits, bit) Position next set bit in *addr >= bit find_next_and_bit(addr1, addr2, nbits, bit) Same as find_next_bit, but in (*addr1 & *addr2)”…”�”}”hj³ sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:75: ./include/linux/bitmap.h”h´Khhj h²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!__bitmap_shift_right (C function)”Œc.__bitmap_shift_right”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhvoid __bitmap_shift_right (unsigned long *dst, const unsigned long *src, unsigned shift, unsigned nbits)”h]”j)�”}”(hŒgvoid __bitmap_shift_right(unsigned long *dst, const unsigned long *src, unsigned shift, unsigned nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj× h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´KSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj× h²hh³jé h´KSubj{)�”}”(hŒ__bitmap_shift_right”h]”j�)�”}”(hŒ__bitmap_shift_right”h]”hŒ__bitmap_shift_right”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjø ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj× h²hh³jé h´KSubjœ)�”}”(hŒN(unsigned long *dst, const unsigned long *src, unsigned shift, unsigned nbits)”h]”(j¢)�”}”(hŒunsigned long *dst”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubj¢)�”}”(hŒconst unsigned long *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjr ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjr ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjr ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjr ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjr ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjr ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjr ubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjr ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubj¢)�”}”(hŒunsigned shift”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjë ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjë ubj�)�”}”(hŒshift”h]”hŒshift”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjë ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubj¢)�”}”(hŒunsigned nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2 h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj× h²hh³jé h´KSubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÓ h²hh³jé h´KSubah}”(h]”jÎ ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jé h´KShjÐ h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+logical right shift of the bits in a bitmap”h]”hŒ+logical right shift of the bits in a bitmap”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´KShjg h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÐ h²hh³jé h´KSubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‚ jæj‚ jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX}**Parameters** ``unsigned long *dst`` destination bitmap ``const unsigned long *src`` source bitmap ``unsigned shift`` shift by this many bits ``unsigned nbits`` bitmap size, in bits **Description** Shifting right (dividing) means moving bits in the MS -> LS bit direction. Zeros are fed into the vacated MS positions and the LS bits shifted off the bottom are lost.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŒ h]”hŒ Parameters”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŠ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´KWhj† ubj )�”}”(hhh]”(j)�”}”(hŒ*``unsigned long *dst`` destination bitmap ”h]”(j)�”}”(hŒ``unsigned long *dst``”h]”j)�”}”(hj« h]”hŒunsigned long *dst”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj© ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´KThj¥ ubj2)�”}”(hhh]”hÝ)�”}”(hŒdestination bitmap”h]”hŒdestination bitmap”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÀ h´KThjÁ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¥ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÀ h´KThj¢ ubj)�”}”(hŒ+``const unsigned long *src`` source bitmap ”h]”(j)�”}”(hŒ``const unsigned long *src``”h]”j)�”}”(hjä h]”hŒconst unsigned long *src”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´KUhjÞ ubj2)�”}”(hhh]”hÝ)�”}”(hŒ source bitmap”h]”hŒ source bitmap”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jù h´KUhjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÞ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jù h´KUhj¢ ubj)�”}”(hŒ+``unsigned shift`` shift by this many bits ”h]”(j)�”}”(hŒ``unsigned shift``”h]”j)�”}”(hjh]”hŒunsigned shift”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´KVhjubj2)�”}”(hhh]”hÝ)�”}”(hŒshift by this many bits”h]”hŒshift by this many bits”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j2h´KVhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2h´KVhj¢ ubj)�”}”(hŒ(``unsigned nbits`` bitmap size, in bits ”h]”(j)�”}”(hŒ``unsigned nbits``”h]”j)�”}”(hjVh]”hŒunsigned nbits”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´KWhjPubj2)�”}”(hhh]”hÝ)�”}”(hŒbitmap size, in bits”h]”hŒbitmap size, in bits”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jkh´KWhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jkh´KWhj¢ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj† ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‘h]”hŒ Description”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´KYhj† ubhÝ)�”}”(hŒ¨Shifting right (dividing) means moving bits in the MS -> LS bit direction. Zeros are fed into the vacated MS positions and the LS bits shifted off the bottom are lost.”h]”hŒ¨Shifting right (dividing) means moving bits in the MS -> LS bit direction. Zeros are fed into the vacated MS positions and the LS bits shifted off the bottom are lost.”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´KXhj† ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ __bitmap_shift_left (C function)”Œc.__bitmap_shift_left”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒovoid __bitmap_shift_left (unsigned long *dst, const unsigned long *src, unsigned int shift, unsigned int nbits)”h]”j)�”}”(hŒnvoid __bitmap_shift_left(unsigned long *dst, const unsigned long *src, unsigned int shift, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÒh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒh²hh³jäh´Kubj{)�”}”(hŒ__bitmap_shift_left”h]”j�)�”}”(hŒ__bitmap_shift_left”h]”hŒ__bitmap_shift_left”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÒh²hh³jäh´Kubjœ)�”}”(hŒV(unsigned long *dst, const unsigned long *src, unsigned int shift, unsigned int nbits)”h]”(j¢)�”}”(hŒunsigned long *dst”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubj¢)�”}”(hŒconst unsigned long *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjmubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubj¢)�”}”(hŒunsigned int shift”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæubj�)�”}”(hŒshift”h]”hŒshift”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7ubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÒh²hh³jäh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÎh²hh³jäh´Kubah}”(h]”jÉah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jäh´KhjËh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*logical left shift of the bits in a bitmap”h]”hŒ*logical left shift of the bits in a bitmap”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Khjšh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjËh²hh³jäh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjµjæjµjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX†**Parameters** ``unsigned long *dst`` destination bitmap ``const unsigned long *src`` source bitmap ``unsigned int shift`` shift by this many bits ``unsigned int nbits`` bitmap size, in bits **Description** Shifting left (multiplying) means moving bits in the LS -> MS direction. Zeros are fed into the vacated LS bit positions and those MS bits shifted off the top are lost.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¿h]”hŒ Parameters”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Kƒhj¹ubj )�”}”(hhh]”(j)�”}”(hŒ*``unsigned long *dst`` destination bitmap ”h]”(j)�”}”(hŒ``unsigned long *dst``”h]”j)�”}”(hjÞh]”hŒunsigned long *dst”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´K€hjØubj2)�”}”(hhh]”hÝ)�”}”(hŒdestination bitmap”h]”hŒdestination bitmap”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jóh´K€hjôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jóh´K€hjÕubj)�”}”(hŒ+``const unsigned long *src`` source bitmap ”h]”(j)�”}”(hŒ``const unsigned long *src``”h]”j)�”}”(hjh]”hŒconst unsigned long *src”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´K�hjubj2)�”}”(hhh]”hÝ)�”}”(hŒ source bitmap”h]”hŒ source bitmap”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,h´K�hj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,h´K�hjÕubj)�”}”(hŒ/``unsigned int shift`` shift by this many bits ”h]”(j)�”}”(hŒ``unsigned int shift``”h]”j)�”}”(hjPh]”hŒunsigned int shift”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´K‚hjJubj2)�”}”(hhh]”hÝ)�”}”(hŒshift by this many bits”h]”hŒshift by this many bits”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jeh´K‚hjfubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jeh´K‚hjÕubj)�”}”(hŒ,``unsigned int nbits`` bitmap size, in bits ”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hj‰h]”hŒunsigned int nbits”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Kƒhjƒubj2)�”}”(hhh]”hÝ)�”}”(hŒbitmap size, in bits”h]”hŒbitmap size, in bits”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jžh´KƒhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jžh´KƒhjÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÄh]”hŒ Description”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´K…hj¹ubhÝ)�”}”(hŒ©Shifting left (multiplying) means moving bits in the LS -> MS direction. Zeros are fed into the vacated LS bit positions and those MS bits shifted off the top are lost.”h]”hŒ©Shifting left (multiplying) means moving bits in the LS -> MS direction. Zeros are fed into the vacated LS bit positions and those MS bits shifted off the top are lost.”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´K„hj¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_cut (C function)”Œ c.bitmap_cut”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒxvoid bitmap_cut (unsigned long *dst, const unsigned long *src, unsigned int first, unsigned int cut, unsigned int nbits)”h]”j)�”}”(hŒwvoid bitmap_cut(unsigned long *dst, const unsigned long *src, unsigned int first, unsigned int cut, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjh²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´K¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³jh´K¤ubj{)�”}”(hŒ bitmap_cut”h]”j�)�”}”(hŒ bitmap_cut”h]”hŒ bitmap_cut”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjh²hh³jh´K¤ubjœ)�”}”(hŒh(unsigned long *dst, const unsigned long *src, unsigned int first, unsigned int cut, unsigned int nbits)”h]”(j¢)�”}”(hŒunsigned long *dst”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjBubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj>ubj¢)�”}”(hŒconst unsigned long *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj>ubj¢)�”}”(hŒunsigned int first”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒfirst”h]”hŒfirst”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj>ubj¢)�”}”(hŒunsigned int cut”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjubj�)�”}”(hŒcut”h]”hŒcut”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj>ubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»ubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj>ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³jh´K¤ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³jh´K¤ubah}”(h]”jüah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´K¤hjþh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjh²hh³j'h´M ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjh²hh³j'h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³j'h´M ubj{)�”}”(hŒbitmap_find_next_zero_area_off”h]”j�)�”}”(hŒbitmap_find_next_zero_area_off”h]”hŒbitmap_find_next_zero_area_off”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjh²hh³j'h´M ubjœ)�”}”(hŒ„(unsigned long *map, unsigned long size, unsigned long start, unsigned int nr, unsigned long align_mask, unsigned long align_offset)”h]”(j¢)�”}”(hŒunsigned long *map”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjnubj�)�”}”(hŒmap”h]”hŒmap”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubj¢)�”}”(hŒunsigned long size”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubj¢)�”}”(hŒunsigned long start”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubj¢)�”}”(hŒunsigned int nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubj¢)�”}”(hŒunsigned long align_mask”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿ubj�)�”}”(hŒ align_mask”h]”hŒ align_mask”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubj¢)�”}”(hŒunsigned long align_offset”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒ align_offset”h]”hŒ align_offset”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³j'h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³j'h´M ubah}”(h]”j ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j'h´M hjh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#find a contiguous aligned zero area”h]”hŒ#find a contiguous aligned zero area”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”•h´M hjsh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³j'h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŽjæjŽjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX¶**Parameters** ``unsigned long *map`` The address to base the search on ``unsigned long size`` The bitmap size in bits ``unsigned long start`` The bitnumber to start searching at ``unsigned int nr`` The number of zeroed bits we're looking for ``unsigned long align_mask`` Alignment mask for zero area ``unsigned long align_offset`` Alignment offset for zero area. **Description** The **align_mask** should be one less than a power of 2; the effect is that the bit offset of all zero areas this function finds plus **align_offset** is multiple of that power of 2. **Return** The bit offset of the found area or a value greater than or equal to **size** if no area is found.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M¤hj’ubj )�”}”(hhh]”(j)�”}”(hŒ9``unsigned long *map`` The address to base the search on ”h]”(j)�”}”(hŒ``unsigned long *map``”h]”j)�”}”(hj·h]”hŒunsigned long *map”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M¡hj±ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!The address to base the search on”h]”hŒ!The address to base the search on”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌh´M¡hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌh´M¡hj®ubj)�”}”(hŒ/``unsigned long size`` The bitmap size in bits ”h]”(j)�”}”(hŒ``unsigned long size``”h]”j)�”}”(hjðh]”hŒunsigned long size”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M¢hjêubj2)�”}”(hhh]”hÝ)�”}”(hŒThe bitmap size in bits”h]”hŒThe bitmap size in bits”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M¢hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M¢hj®ubj)�”}”(hŒ<``unsigned long start`` The bitnumber to start searching at ”h]”(j)�”}”(hŒ``unsigned long start``”h]”j)�”}”(hj)h]”hŒunsigned long start”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M£hj#ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The bitnumber to start searching at”h]”hŒ#The bitnumber to start searching at”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j>h´M£hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>h´M£hj®ubj)�”}”(hŒ@``unsigned int nr`` The number of zeroed bits we're looking for ”h]”(j)�”}”(hŒ``unsigned int nr``”h]”j)�”}”(hjbh]”hŒunsigned int nr”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M¤hj\ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The number of zeroed bits we're looking for”h]”hŒ-The number of zeroed bits we’re looking for”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jwh´M¤hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jwh´M¤hj®ubj)�”}”(hŒ:``unsigned long align_mask`` Alignment mask for zero area ”h]”(j)�”}”(hŒ``unsigned long align_mask``”h]”j)�”}”(hj›h]”hŒunsigned long align_mask”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M¥hj•ubj2)�”}”(hhh]”hÝ)�”}”(hŒAlignment mask for zero area”h]”hŒAlignment mask for zero area”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j°h´M¥hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j°h´M¥hj®ubj)�”}”(hŒ?``unsigned long align_offset`` Alignment offset for zero area. ”h]”(j)�”}”(hŒ``unsigned long align_offset``”h]”j)�”}”(hjÔh]”hŒunsigned long align_offset”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M¦hjÎubj2)�”}”(hhh]”hÝ)�”}”(hŒAlignment offset for zero area.”h]”hŒAlignment offset for zero area.”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jéh´M¦hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jéh´M¦hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj’ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M¨hj’ubhÝ)�”}”(hŒ¶The **align_mask** should be one less than a power of 2; the effect is that the bit offset of all zero areas this function finds plus **align_offset** is multiple of that power of 2.”h]”(hŒThe ”…”�”}”(hj%h²hh³Nh´Nubjõ)�”}”(hŒ**align_mask**”h]”hŒ align_mask”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%ubhŒt should be one less than a power of 2; the effect is that the bit offset of all zero areas this function finds plus ”…”�”}”(hj%h²hh³Nh´Nubjõ)�”}”(hŒ**align_offset**”h]”hŒ align_offset”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%ubhŒ is multiple of that power of 2.”…”�”}”(hj%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M§hj’ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjZh]”hŒReturn”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M«hj’ubhÝ)�”}”(hŒbThe bit offset of the found area or a value greater than or equal to **size** if no area is found.”h]”(hŒEThe bit offset of the found area or a value greater than or equal to ”…”�”}”(hjph²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjpubhŒ if no area is found.”…”�”}”(hjph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M¬hj’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_remap (C function)”Œc.bitmap_remap”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒˆvoid bitmap_remap (unsigned long *dst, const unsigned long *src, const unsigned long *old, const unsigned long *new, unsigned int nbits)”h]”j)�”}”(hŒ‡void bitmap_remap(unsigned long *dst, const unsigned long *src, const unsigned long *old, const unsigned long *new, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Måubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­h²hh³j¿h´Måubj{)�”}”(hŒ bitmap_remap”h]”j�)�”}”(hŒ bitmap_remap”h]”hŒ bitmap_remap”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj­h²hh³j¿h´Måubjœ)�”}”(hŒv(unsigned long *dst, const unsigned long *src, const unsigned long *old, const unsigned long *new, unsigned int nbits)”h]”(j¢)�”}”(hŒunsigned long *dst”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjêubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæubj¢)�”}”(hŒconst unsigned long *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjHubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæubj¢)�”}”(hŒconst unsigned long *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÁubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÁubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæubj¢)�”}”(hŒconst unsigned long *new”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj:ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³ubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj­h²hh³j¿h´Måubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj©h²hh³j¿h´Måubah}”(h]”j¤ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¿h´Måhj¦h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ8Apply map defined by a pair of bitmaps to another bitmap”h]”hŒ8Apply map defined by a pair of bitmaps to another bitmap”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Måhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¦h²hh³j¿h´Måubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj1jæj1jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hXŠ**Parameters** ``unsigned long *dst`` remapped result ``const unsigned long *src`` subset to be remapped ``const unsigned long *old`` defines domain of map ``const unsigned long *new`` defines range of map ``unsigned int nbits`` number of bits in each of these bitmaps **Description** Let **old** and **new** define a mapping of bit positions, such that whatever position is held by the n-th set bit in **old** is mapped to the n-th set bit in **new**. In the more general case, allowing for the possibility that the weight 'w' of **new** is less than the weight of **old**, map the position of the n-th set bit in **old** to the position of the m-th set bit in **new**, where m == n % w. If either of the **old** and **new** bitmaps are empty, or if **src** and **dst** point to the same location, then this routine copies **src** to **dst**. The positions of unset bits in **old** are mapped to themselves (the identity map). Apply the above specified mapping to **src**, placing the result in **dst**, clearing any bits previously set in **dst**. For example, lets say that **old** has bits 4 through 7 set, and **new** has bits 12 through 15 set. This defines the mapping of bit position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other bit positions unchanged. So if say **src** comes into this routine with bits 1, 5 and 7 set, then **dst** should leave with bits 1, 13 and 15 set.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj;h]”hŒ Parameters”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Méhj5ubj )�”}”(hhh]”(j)�”}”(hŒ'``unsigned long *dst`` remapped result ”h]”(j)�”}”(hŒ``unsigned long *dst``”h]”j)�”}”(hjZh]”hŒunsigned long *dst”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MæhjTubj2)�”}”(hhh]”hÝ)�”}”(hŒremapped result”h]”hŒremapped result”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³joh´Mæhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³joh´MæhjQubj)�”}”(hŒ3``const unsigned long *src`` subset to be remapped ”h]”(j)�”}”(hŒ``const unsigned long *src``”h]”j)�”}”(hj“h]”hŒconst unsigned long *src”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mçhj�ubj2)�”}”(hhh]”hÝ)�”}”(hŒsubset to be remapped”h]”hŒsubset to be remapped”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¨h´Mçhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¨h´MçhjQubj)�”}”(hŒ3``const unsigned long *old`` defines domain of map ”h]”(j)�”}”(hŒ``const unsigned long *old``”h]”j)�”}”(hjÌh]”hŒconst unsigned long *old”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MèhjÆubj2)�”}”(hhh]”hÝ)�”}”(hŒdefines domain of map”h]”hŒdefines domain of map”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jáh´Mèhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jáh´MèhjQubj)�”}”(hŒ2``const unsigned long *new`` defines range of map ”h]”(j)�”}”(hŒ``const unsigned long *new``”h]”j)�”}”(hjh]”hŒconst unsigned long *new”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Méhjÿubj2)�”}”(hhh]”hÝ)�”}”(hŒdefines range of map”h]”hŒdefines range of map”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Méhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´MéhjQubj)�”}”(hŒ?``unsigned int nbits`` number of bits in each of these bitmaps ”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hj>h]”hŒunsigned int nbits”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mêhj8ubj2)�”}”(hhh]”hÝ)�”}”(hŒ'number of bits in each of these bitmaps”h]”hŒ'number of bits in each of these bitmaps”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jSh´MêhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jSh´MêhjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj5ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjyh]”hŒ Description”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mìhj5ubhÝ)�”}”(hX”Let **old** and **new** define a mapping of bit positions, such that whatever position is held by the n-th set bit in **old** is mapped to the n-th set bit in **new**. In the more general case, allowing for the possibility that the weight 'w' of **new** is less than the weight of **old**, map the position of the n-th set bit in **old** to the position of the m-th set bit in **new**, where m == n % w.”h]”(hŒLet ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ and ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ_ define a mapping of bit positions, such that whatever position is held by the n-th set bit in ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ" is mapped to the n-th set bit in ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒU. In the more general case, allowing for the possibility that the weight ‘w’ of ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ is less than the weight of ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ*, map the position of the n-th set bit in ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ( to the position of the m-th set bit in ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ, where m == n % w.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mëhj5ubhÝ)�”}”(hŒšIf either of the **old** and **new** bitmaps are empty, or if **src** and **dst** point to the same location, then this routine copies **src** to **dst**.”h]”(hŒIf either of the ”…”�”}”(hj. h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj. ubhŒ and ”…”�”}”(hj. h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hjH h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj. ubhŒ bitmaps are empty, or if ”…”�”}”(hj. h²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjZ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj. ubhŒ and ”…”�”}”(hj. h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjl h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj. ubhŒ6 point to the same location, then this routine copies ”…”�”}”(hj. h²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj. ubhŒ to ”…”�”}”(hj. h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj. ubhŒ.”…”�”}”(hj. h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mòhj5ubhÝ)�”}”(hŒSThe positions of unset bits in **old** are mapped to themselves (the identity map).”h]”(hŒThe positions of unset bits in ”…”�”}”(hj© h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj© ubhŒ- are mapped to themselves (the identity map).”…”�”}”(hj© h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Möhj5ubhÝ)�”}”(hŒyApply the above specified mapping to **src**, placing the result in **dst**, clearing any bits previously set in **dst**.”h]”(hŒ%Apply the above specified mapping to ”…”�”}”(hjÊ h²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊ ubhŒ, placing the result in ”…”�”}”(hjÊ h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjä h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊ ubhŒ&, clearing any bits previously set in ”…”�”}”(hjÊ h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊ ubhŒ.”…”�”}”(hjÊ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mùhj5ubhÝ)�”}”(hXZFor example, lets say that **old** has bits 4 through 7 set, and **new** has bits 12 through 15 set. This defines the mapping of bit position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other bit positions unchanged. So if say **src** comes into this routine with bits 1, 5 and 7 set, then **dst** should leave with bits 1, 13 and 15 set.”h]”(hŒFor example, lets say that ”…”�”}”(hj!h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!ubhŒ has bits 4 through 7 set, and ”…”�”}”(hj!h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj)!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!ubhŒ£ has bits 12 through 15 set. This defines the mapping of bit position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other bit positions unchanged. So if say ”…”�”}”(hj!h²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj;!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!ubhŒ8 comes into this routine with bits 1, 5 and 7 set, then ”…”�”}”(hj!h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjM!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!ubhŒ) should leave with bits 1, 13 and 15 set.”…”�”}”(hj!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mühj5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_bitremap (C function)”Œc.bitmap_bitremap”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ^int bitmap_bitremap (int oldbit, const unsigned long *old, const unsigned long *new, int bits)”h]”j)�”}”(hŒ]int bitmap_bitremap(int oldbit, const unsigned long *old, const unsigned long *new, int bits)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj†!h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‚!h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚!h²hh³j”!h´Mubj{)�”}”(hŒbitmap_bitremap”h]”j�)�”}”(hŒbitmap_bitremap”h]”hŒbitmap_bitremap”…”�”}”(hj§!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£!ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‚!h²hh³j”!h´Mubjœ)�”}”(hŒJ(int oldbit, const unsigned long *old, const unsigned long *new, int bits)”h]”(j¢)�”}”(hŒ int oldbit”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÃ!h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿!ubj�)�”}”(hŒoldbit”h]”hŒoldbit”…”�”}”(hjß!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»!ubj¢)�”}”(hŒconst unsigned long *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjø!h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjô!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô!ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjô!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô!ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj/"h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjô!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj="h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô!ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjK"h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjô!ubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hjX"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»!ubj¢)�”}”(hŒconst unsigned long *new”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjq"h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjm"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm"ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŒ"h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjm"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm"ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¨"h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjm"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm"ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÄ"h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjm"ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjÑ"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjm"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»!ubj¢)�”}”(hŒint bits”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjê"h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjæ"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæ"ubj�)�”}”(hŒbits”h]”hŒbits”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæ"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»!ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‚!h²hh³j”!h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj~!h²hh³j”!h´Mubah}”(h]”jy!ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j”!h´Mhj{!h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6Apply map defined by a pair of bitmaps to a single bit”h]”hŒ6Apply map defined by a pair of bitmaps to a single bit”…”�”}”(hj0#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mhj-#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj{!h²hh³j”!h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjH#jæjH#jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hXS**Parameters** ``int oldbit`` bit position to be mapped ``const unsigned long *old`` defines domain of map ``const unsigned long *new`` defines range of map ``int bits`` number of bits in each of these bitmaps **Description** Let **old** and **new** define a mapping of bit positions, such that whatever position is held by the n-th set bit in **old** is mapped to the n-th set bit in **new**. In the more general case, allowing for the possibility that the weight 'w' of **new** is less than the weight of **old**, map the position of the n-th set bit in **old** to the position of the m-th set bit in **new**, where m == n % w. The positions of unset bits in **old** are mapped to themselves (the identity map). Apply the above specified mapping to bit position **oldbit**, returning the new bit position. For example, lets say that **old** has bits 4 through 7 set, and **new** has bits 12 through 15 set. This defines the mapping of bit position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other bit positions unchanged. So if say **oldbit** is 5, then this routine returns 13.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjR#h]”hŒ Parameters”…”�”}”(hjT#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjP#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MhjL#ubj )�”}”(hhh]”(j)�”}”(hŒ)``int oldbit`` bit position to be mapped ”h]”(j)�”}”(hŒ``int oldbit``”h]”j)�”}”(hjq#h]”hŒ int oldbit”…”�”}”(hjs#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mhjk#ubj2)�”}”(hhh]”hÝ)�”}”(hŒbit position to be mapped”h]”hŒbit position to be mapped”…”�”}”(hjŠ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†#h´Mhj‡#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjk#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†#h´Mhjh#ubj)�”}”(hŒ3``const unsigned long *old`` defines domain of map ”h]”(j)�”}”(hŒ``const unsigned long *old``”h]”j)�”}”(hjª#h]”hŒconst unsigned long *old”…”�”}”(hj¬#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mhj¤#ubj2)�”}”(hhh]”hÝ)�”}”(hŒdefines domain of map”h]”hŒdefines domain of map”…”�”}”(hjÃ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¿#h´MhjÀ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¤#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿#h´Mhjh#ubj)�”}”(hŒ2``const unsigned long *new`` defines range of map ”h]”(j)�”}”(hŒ``const unsigned long *new``”h]”j)�”}”(hjã#h]”hŒconst unsigned long *new”…”�”}”(hjå#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjá#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MhjÝ#ubj2)�”}”(hhh]”hÝ)�”}”(hŒdefines range of map”h]”hŒdefines range of map”…”�”}”(hjü#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jø#h´Mhjù#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÝ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jø#h´Mhjh#ubj)�”}”(hŒ5``int bits`` number of bits in each of these bitmaps ”h]”(j)�”}”(hŒ ``int bits``”h]”j)�”}”(hj$h]”hŒint bits”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mhj$ubj2)�”}”(hhh]”hÝ)�”}”(hŒ'number of bits in each of these bitmaps”h]”hŒ'number of bits in each of these bitmaps”…”�”}”(hj5$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j1$h´Mhj2$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1$h´Mhjh#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjL#ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjW$h]”hŒ Description”…”�”}”(hjY$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjU$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M!hjL#ubhÝ)�”}”(hX”Let **old** and **new** define a mapping of bit positions, such that whatever position is held by the n-th set bit in **old** is mapped to the n-th set bit in **new**. In the more general case, allowing for the possibility that the weight 'w' of **new** is less than the weight of **old**, map the position of the n-th set bit in **old** to the position of the m-th set bit in **new**, where m == n % w.”h]”(hŒLet ”…”�”}”(hjm$h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hju$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm$ubhŒ and ”…”�”}”(hjm$h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj‡$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm$ubhŒ_ define a mapping of bit positions, such that whatever position is held by the n-th set bit in ”…”�”}”(hjm$h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj™$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm$ubhŒ" is mapped to the n-th set bit in ”…”�”}”(hjm$h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj«$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm$ubhŒU. In the more general case, allowing for the possibility that the weight ‘w’ of ”…”�”}”(hjm$h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj½$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm$ubhŒ is less than the weight of ”…”�”}”(hjm$h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjÏ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm$ubhŒ*, map the position of the n-th set bit in ”…”�”}”(hjm$h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjá$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm$ubhŒ( to the position of the m-th set bit in ”…”�”}”(hjm$h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hjó$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm$ubhŒ, where m == n % w.”…”�”}”(hjm$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M hjL#ubhÝ)�”}”(hŒSThe positions of unset bits in **old** are mapped to themselves (the identity map).”h]”(hŒThe positions of unset bits in ”…”�”}”(hj %h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj %ubhŒ- are mapped to themselves (the identity map).”…”�”}”(hj %h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M'hjL#ubhÝ)�”}”(hŒ]Apply the above specified mapping to bit position **oldbit**, returning the new bit position.”h]”(hŒ2Apply the above specified mapping to bit position ”…”�”}”(hj-%h²hh³Nh´Nubjõ)�”}”(hŒ **oldbit**”h]”hŒoldbit”…”�”}”(hj5%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-%ubhŒ!, returning the new bit position.”…”�”}”(hj-%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M*hjL#ubhÝ)�”}”(hXFor example, lets say that **old** has bits 4 through 7 set, and **new** has bits 12 through 15 set. This defines the mapping of bit position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other bit positions unchanged. So if say **oldbit** is 5, then this routine returns 13.”h]”(hŒFor example, lets say that ”…”�”}”(hjN%h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjV%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjN%ubhŒ has bits 4 through 7 set, and ”…”�”}”(hjN%h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hjh%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjN%ubhŒ£ has bits 12 through 15 set. This defines the mapping of bit position 4 to 12, 5 to 13, 6 to 14 and 7 to 15, and of all other bit positions unchanged. So if say ”…”�”}”(hjN%h²hh³Nh´Nubjõ)�”}”(hŒ **oldbit**”h]”hŒoldbit”…”�”}”(hjz%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjN%ubhŒ$ is 5, then this routine returns 13.”…”�”}”(hjN%h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M-hjL#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_from_arr32 (C function)”Œc.bitmap_from_arr32”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRvoid bitmap_from_arr32 (unsigned long *bitmap, const u32 *buf, unsigned int nbits)”h]”j)�”}”(hŒQvoid bitmap_from_arr32(unsigned long *bitmap, const u32 *buf, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj³%h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¯%h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯%h²hh³jÁ%h´M"ubj{)�”}”(hŒbitmap_from_arr32”h]”j�)�”}”(hŒbitmap_from_arr32”h]”hŒbitmap_from_arr32”…”�”}”(hjÔ%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐ%ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¯%h²hh³jÁ%h´M"ubjœ)�”}”(hŒ;(unsigned long *bitmap, const u32 *buf, unsigned int nbits)”h]”(j¢)�”}”(hŒunsigned long *bitmap”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjð%h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjì%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjì%ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj &h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjì%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjì%ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj(&h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjì%ubj�)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hj5&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjè%ubj¢)�”}”(hŒconst u32 *buf”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjN&h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJ&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ&ubh)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjl&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hji&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jn&Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÖ%sbŒc.bitmap_from_arr32”†”asbuh1hhjJ&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ&ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjš&h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjJ&ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj§&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJ&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjè%ubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÀ&h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¼&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼&ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÜ&h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¼&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼&ubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hjø&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjè%ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¯%h²hh³jÁ%h´M"ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj«%h²hh³jÁ%h´M"ubah}”(h]”j¦%ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÁ%h´M"hj¨%h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0copy the contents of u32 array of bits to bitmap”h]”hŒ0copy the contents of u32 array of bits to bitmap”…”�”}”(hj"'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M"hj'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¨%h²hh³jÁ%h´M"ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj:'jæj:'jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hŒÝ**Parameters** ``unsigned long *bitmap`` array of unsigned longs, the destination bitmap ``const u32 *buf`` array of u32 (in host byte order), the source bitmap ``unsigned int nbits`` number of bits in **bitmap**”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjD'h]”hŒ Parameters”…”�”}”(hjF'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjB'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M&hj>'ubj )�”}”(hhh]”(j)�”}”(hŒJ``unsigned long *bitmap`` array of unsigned longs, the destination bitmap ”h]”(j)�”}”(hŒ``unsigned long *bitmap``”h]”j)�”}”(hjc'h]”hŒunsigned long *bitmap”…”�”}”(hje'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M#hj]'ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/array of unsigned longs, the destination bitmap”h]”hŒ/array of unsigned longs, the destination bitmap”…”�”}”(hj|'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jx'h´M#hjy'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj]'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jx'h´M#hjZ'ubj)�”}”(hŒH``const u32 *buf`` array of u32 (in host byte order), the source bitmap ”h]”(j)�”}”(hŒ``const u32 *buf``”h]”j)�”}”(hjœ'h]”hŒconst u32 *buf”…”�”}”(hjž'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjš'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M$hj–'ubj2)�”}”(hhh]”hÝ)�”}”(hŒ4array of u32 (in host byte order), the source bitmap”h]”hŒ4array of u32 (in host byte order), the source bitmap”…”�”}”(hjµ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±'h´M$hj²'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±'h´M$hjZ'ubj)�”}”(hŒ3``unsigned int nbits`` number of bits in **bitmap**”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hjÕ'h]”hŒunsigned int nbits”…”�”}”(hj×'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M&hjÏ'ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bits in **bitmap**”h]”(hŒnumber of bits in ”…”�”}”(hjî'h²hh³Nh´Nubjõ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hjö'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjî'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M%hjë'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jê'h´M&hjZ'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj>'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_to_arr32 (C function)”Œc.bitmap_to_arr32”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPvoid bitmap_to_arr32 (u32 *buf, const unsigned long *bitmap, unsigned int nbits)”h]”j)�”}”(hŒOvoid bitmap_to_arr32(u32 *buf, const unsigned long *bitmap, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj=(h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj9(h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9(h²hh³jK(h´M9ubj{)�”}”(hŒbitmap_to_arr32”h]”j�)�”}”(hŒbitmap_to_arr32”h]”hŒbitmap_to_arr32”…”�”}”(hj^(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ(ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj9(h²hh³jK(h´M9ubjœ)�”}”(hŒ;(u32 *buf, const unsigned long *bitmap, unsigned int nbits)”h]”(j¢)�”}”(hŒu32 *buf”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj}(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjz(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j(Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j`(sbŒc.bitmap_to_arr32”†”asbuh1hhjv(ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjv(ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj«(h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjv(ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj¸(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjv(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjr(ubj¢)�”}”(hŒconst unsigned long *bitmap”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÑ(h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÍ(ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍ(ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjì(h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÍ(ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍ(ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÍ(ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍ(ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$)h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÍ(ubj�)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hj1)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍ(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjr(ubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjJ)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjF)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjF)ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjf)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjF)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjF)ubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj‚)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjF)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjr(ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj9(h²hh³jK(h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj5(h²hh³jK(h´M9ubah}”(h]”j0(ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jK(h´M9hj2(h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2copy the contents of bitmap to a u32 array of bits”h]”hŒ2copy the contents of bitmap to a u32 array of bits”…”�”}”(hj¬)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M9hj©)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj2(h²hh³jK(h´M9ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÄ)jæjÄ)jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hŒÖ**Parameters** ``u32 *buf`` array of u32 (in host byte order), the dest bitmap ``const unsigned long *bitmap`` array of unsigned longs, the source bitmap ``unsigned int nbits`` number of bits in **bitmap**”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÎ)h]”hŒ Parameters”…”�”}”(hjÐ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÌ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M=hjÈ)ubj )�”}”(hhh]”(j)�”}”(hŒ@``u32 *buf`` array of u32 (in host byte order), the dest bitmap ”h]”(j)�”}”(hŒ ``u32 *buf``”h]”j)�”}”(hjí)h]”hŒu32 *buf”…”�”}”(hjï)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjë)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M:hjç)ubj2)�”}”(hhh]”hÝ)�”}”(hŒ2array of u32 (in host byte order), the dest bitmap”h]”hŒ2array of u32 (in host byte order), the dest bitmap”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j*h´M:hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjç)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j*h´M:hjä)ubj)�”}”(hŒK``const unsigned long *bitmap`` array of unsigned longs, the source bitmap ”h]”(j)�”}”(hŒ``const unsigned long *bitmap``”h]”j)�”}”(hj&*h]”hŒconst unsigned long *bitmap”…”�”}”(hj(*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M;hj *ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*array of unsigned longs, the source bitmap”h]”hŒ*array of unsigned longs, the source bitmap”…”�”}”(hj?*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;*h´M;hj<*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj *ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;*h´M;hjä)ubj)�”}”(hŒ3``unsigned int nbits`` number of bits in **bitmap**”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hj_*h]”hŒunsigned int nbits”…”�”}”(hja*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M=hjY*ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bits in **bitmap**”h]”(hŒnumber of bits in ”…”�”}”(hjx*h²hh³Nh´Nubjõ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hj€*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´M<hju*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjY*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jt*h´M=hjä)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÈ)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_from_arr64 (C function)”Œc.bitmap_from_arr64”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRvoid bitmap_from_arr64 (unsigned long *bitmap, const u64 *buf, unsigned int nbits)”h]”j)�”}”(hŒQvoid bitmap_from_arr64(unsigned long *bitmap, const u64 *buf, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÇ*h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÃ*h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃ*h²hh³jÕ*h´MRubj{)�”}”(hŒbitmap_from_arr64”h]”j�)�”}”(hŒbitmap_from_arr64”h]”hŒbitmap_from_arr64”…”�”}”(hjè*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjä*ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÃ*h²hh³jÕ*h´MRubjœ)�”}”(hŒ;(unsigned long *bitmap, const u64 *buf, unsigned int nbits)”h]”(j¢)�”}”(hŒunsigned long *bitmap”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj<+h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj+ubj�)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hjI+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjü*ubj¢)�”}”(hŒconst u64 *buf”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjb+h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj^+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj^+ubh)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj€+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‚+Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jê*sbŒc.bitmap_from_arr64”†”asbuh1hhj^+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj^+ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj®+h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj^+ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj»+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjü*ubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÔ+h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÐ+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÐ+ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjð+h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÐ+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÐ+ubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐ+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjü*ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÃ*h²hh³jÕ*h´MRubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¿*h²hh³jÕ*h´MRubah}”(h]”jº*ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÕ*h´MRhj¼*h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0copy the contents of u64 array of bits to bitmap”h]”hŒ0copy the contents of u64 array of bits to bitmap”…”�”}”(hj6,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MRhj3,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¼*h²hh³jÕ*h´MRubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjN,jæjN,jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hŒÝ**Parameters** ``unsigned long *bitmap`` array of unsigned longs, the destination bitmap ``const u64 *buf`` array of u64 (in host byte order), the source bitmap ``unsigned int nbits`` number of bits in **bitmap**”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjX,h]”hŒ Parameters”…”�”}”(hjZ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjV,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MVhjR,ubj )�”}”(hhh]”(j)�”}”(hŒJ``unsigned long *bitmap`` array of unsigned longs, the destination bitmap ”h]”(j)�”}”(hŒ``unsigned long *bitmap``”h]”j)�”}”(hjw,h]”hŒunsigned long *bitmap”…”�”}”(hjy,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MShjq,ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/array of unsigned longs, the destination bitmap”h]”hŒ/array of unsigned longs, the destination bitmap”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŒ,h´MShj�,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjq,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒ,h´MShjn,ubj)�”}”(hŒH``const u64 *buf`` array of u64 (in host byte order), the source bitmap ”h]”(j)�”}”(hŒ``const u64 *buf``”h]”j)�”}”(hj°,h]”hŒconst u64 *buf”…”�”}”(hj²,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MThjª,ubj2)�”}”(hhh]”hÝ)�”}”(hŒ4array of u64 (in host byte order), the source bitmap”h]”hŒ4array of u64 (in host byte order), the source bitmap”…”�”}”(hjÉ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÅ,h´MThjÆ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjª,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÅ,h´MThjn,ubj)�”}”(hŒ3``unsigned int nbits`` number of bits in **bitmap**”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hjé,h]”hŒunsigned int nbits”…”�”}”(hjë,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjç,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MVhjã,ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bits in **bitmap**”h]”(hŒnumber of bits in ”…”�”}”(hj-h²hh³Nh´Nubjõ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MUhjÿ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjã,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþ,h´MVhjn,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjR,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_to_arr64 (C function)”Œc.bitmap_to_arr64”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPvoid bitmap_to_arr64 (u64 *buf, const unsigned long *bitmap, unsigned int nbits)”h]”j)�”}”(hŒOvoid bitmap_to_arr64(u64 *buf, const unsigned long *bitmap, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjQ-h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjM-h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`-h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjM-h²hh³j_-h´Mpubj{)�”}”(hŒbitmap_to_arr64”h]”j�)�”}”(hŒbitmap_to_arr64”h]”hŒbitmap_to_arr64”…”�”}”(hjr-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjn-ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjM-h²hh³j_-h´Mpubjœ)�”}”(hŒ;(u64 *buf, const unsigned long *bitmap, unsigned int nbits)”h]”(j¢)�”}”(hŒu64 *buf”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj‘-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽ-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j“-Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jt-sbŒc.bitmap_to_arr64”†”asbuh1hhjŠ-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±-h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŠ-ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¿-h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjŠ-ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjÌ-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŠ-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj†-ubj¢)�”}”(hŒconst unsigned long *bitmap”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjå-h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjá-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò-h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjá-ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjá-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjá-ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjá-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjá-ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj8.h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjá-ubj�)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hjE.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjá-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj†-ubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj^.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZ.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ.ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjz.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZ.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ.ubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj–.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj†-ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjM-h²hh³j_-h´Mpubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjI-h²hh³j_-h´Mpubah}”(h]”jD-ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j_-h´MphjF-h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2copy the contents of bitmap to a u64 array of bits”h]”hŒ2copy the contents of bitmap to a u64 array of bits”…”�”}”(hjÀ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mphj½.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjF-h²hh³j_-h´Mpubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjØ.jæjØ.jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hŒÖ**Parameters** ``u64 *buf`` array of u64 (in host byte order), the dest bitmap ``const unsigned long *bitmap`` array of unsigned longs, the source bitmap ``unsigned int nbits`` number of bits in **bitmap**”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjâ.h]”hŒ Parameters”…”�”}”(hjä.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjà.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´MthjÜ.ubj )�”}”(hhh]”(j)�”}”(hŒ@``u64 *buf`` array of u64 (in host byte order), the dest bitmap ”h]”(j)�”}”(hŒ ``u64 *buf``”h]”j)�”}”(hj/h]”hŒu64 *buf”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:78: ./lib/bitmap.c”h´Mqhjû.ubj2)�”}”(hhh]”hÝ)�”}”(hŒ2array of u64 (in host byte order), the dest bitmap”h]”hŒ2array of u64 (in host byte order), the dest bitmap”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j/h´Mqhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjû.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j/h´Mqhjø.ubj)�”}”(hŒK``const unsigned long *bitmap`` array of unsigned longs, the source bitmap ”h]”(j)�”}”(hŒ``const unsigned long *bitmap``”h]”j)�”}”(hj:/h]”hŒconst unsigned long *bitmap”…”�”}”(hjah"]”h$]”h&]”uh1j1hj×/h²hh³jé/h´MËubj{)�”}”(hŒbitmap_pos_to_ord”h]”j�)�”}”(hŒbitmap_pos_to_ord”h]”hŒbitmap_pos_to_ord”…”�”}”(hjü/h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjø/ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj×/h²hh³jé/h´MËubjœ)�”}”(hŒ@(const unsigned long *buf, unsigned int pos, unsigned int nbits)”h]”(j¢)�”}”(hŒconst unsigned long *buf”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj30h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjO0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjk0h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj0ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjx0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0ubj¢)�”}”(hŒunsigned int pos”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‘0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�0ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj­0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�0ubj�)�”}”(hŒpos”h]”hŒpos”…”�”}”(hjÉ0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0ubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjâ0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞ0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞ0ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjþ0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞ0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞ0ubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞ0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj×/h²hh³jé/h´MËubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÓ/h²hh³jé/h´MËubah}”(h]”jÎ/ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jé/h´MËhjÐ/h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3find ordinal of set bit at given position in bitmap”h]”hŒ3find ordinal of set bit at given position in bitmap”…”�”}”(hjD1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MËhjA1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÐ/h²hh³jé/h´MËubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj\1jæj\1jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX,**Parameters** ``const unsigned long *buf`` pointer to a bitmap ``unsigned int pos`` a bit position in **buf** (0 <= **pos** < **nbits**) ``unsigned int nbits`` number of valid bit positions in **buf** **Description** Map the bit at position **pos** in **buf** (of length **nbits**) to the ordinal of which set bit it is. If it is not set or if **pos** is not a valid bit position, map to -1. If for example, just bits 4 through 7 are set in **buf**, then **pos** values 4 through 7 will get mapped to 0 through 3, respectively, and other **pos** values will get mapped to -1. When **pos** value 7 gets mapped to (returns) **ord** value 3 in this example, that means that bit 7 is the 3rd (starting with 0th) set bit in **buf**. The bit positions 0 through **bits** are valid positions in **buf**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjf1h]”hŒ Parameters”…”�”}”(hjh1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjd1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÏhj`1ubj )�”}”(hhh]”(j)�”}”(hŒ1``const unsigned long *buf`` pointer to a bitmap ”h]”(j)�”}”(hŒ``const unsigned long *buf``”h]”j)�”}”(hj…1h]”hŒconst unsigned long *buf”…”�”}”(hj‡1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÌhj1ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to a bitmap”h]”hŒpointer to a bitmap”…”�”}”(hjž1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jš1h´MÌhj›1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jš1h´MÌhj|1ubj)�”}”(hŒJ``unsigned int pos`` a bit position in **buf** (0 <= **pos** < **nbits**) ”h]”(j)�”}”(hŒ``unsigned int pos``”h]”j)�”}”(hj¾1h]”hŒunsigned int pos”…”�”}”(hjÀ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÍhj¸1ubj2)�”}”(hhh]”hÝ)�”}”(hŒ4a bit position in **buf** (0 <= **pos** < **nbits**)”h]”(hŒa bit position in ”…”�”}”(hj×1h²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjß1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj×1ubhŒ (0 <= ”…”�”}”(hj×1h²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hjñ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj×1ubhŒ < ”…”�”}”(hj×1h²hh³Nh´Nubjõ)�”}”(hŒ **nbits**”h]”hŒnbits”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj×1ubhŒ)”…”�”}”(hj×1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÓ1h´MÍhjÔ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓ1h´MÍhj|1ubj)�”}”(hŒ@``unsigned int nbits`` number of valid bit positions in **buf** ”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hj-2h]”hŒunsigned int nbits”…”�”}”(hj/2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÎhj'2ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(number of valid bit positions in **buf**”h]”(hŒ!number of valid bit positions in ”…”�”}”(hjF2h²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjN2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjF2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jB2h´MÎhjC2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj'2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jB2h´MÎhj|1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj`1ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjv2h]”hŒ Description”…”�”}”(hjx2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjt2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÐhj`1ubhÝ)�”}”(hŒ¯Map the bit at position **pos** in **buf** (of length **nbits**) to the ordinal of which set bit it is. If it is not set or if **pos** is not a valid bit position, map to -1.”h]”(hŒMap the bit at position ”…”�”}”(hjŒ2h²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hj”2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒ2ubhŒ in ”…”�”}”(hjŒ2h²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hj¦2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒ2ubhŒ (of length ”…”�”}”(hjŒ2h²hh³Nh´Nubjõ)�”}”(hŒ **nbits**”h]”hŒnbits”…”�”}”(hj¸2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒ2ubhŒA) to the ordinal of which set bit it is. If it is not set or if ”…”�”}”(hjŒ2h²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hjÊ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒ2ubhŒ( is not a valid bit position, map to -1.”…”�”}”(hjŒ2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÏhj`1ubhÝ)�”}”(hXPIf for example, just bits 4 through 7 are set in **buf**, then **pos** values 4 through 7 will get mapped to 0 through 3, respectively, and other **pos** values will get mapped to -1. When **pos** value 7 gets mapped to (returns) **ord** value 3 in this example, that means that bit 7 is the 3rd (starting with 0th) set bit in **buf**.”h]”(hŒ1If for example, just bits 4 through 7 are set in ”…”�”}”(hjã2h²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjë2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã2ubhŒ, then ”…”�”}”(hjã2h²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hjý2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã2ubhŒL values 4 through 7 will get mapped to 0 through 3, respectively, and other ”…”�”}”(hjã2h²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã2ubhŒ% values will get mapped to -1. When ”…”�”}”(hjã2h²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hj!3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã2ubhŒ" value 7 gets mapped to (returns) ”…”�”}”(hjã2h²hh³Nh´Nubjõ)�”}”(hŒ**ord**”h]”hŒord”…”�”}”(hj33h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã2ubhŒZ value 3 in this example, that means that bit 7 is the 3rd (starting with 0th) set bit in ”…”�”}”(hjã2h²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjE3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã2ubhŒ.”…”�”}”(hjã2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÓhj`1ubhÝ)�”}”(hŒDThe bit positions 0 through **bits** are valid positions in **buf**.”h]”(hŒThe bit positions 0 through ”…”�”}”(hj^3h²hh³Nh´Nubjõ)�”}”(hŒ**bits**”h]”hŒbits”…”�”}”(hjf3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^3ubhŒ are valid positions in ”…”�”}”(hj^3h²hh³Nh´Nubjõ)�”}”(hŒ**buf**”h]”hŒbuf”…”�”}”(hjx3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^3ubhŒ.”…”�”}”(hj^3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÙhj`1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_onto (C function)”Œ c.bitmap_onto”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒpvoid bitmap_onto (unsigned long *dst, const unsigned long *orig, const unsigned long *relmap, unsigned int bits)”h]”j)�”}”(hŒovoid bitmap_onto(unsigned long *dst, const unsigned long *orig, const unsigned long *relmap, unsigned int bits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­3h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­3h²hh³j¿3h´MBubj{)�”}”(hŒ bitmap_onto”h]”j�)�”}”(hŒ bitmap_onto”h]”hŒ bitmap_onto”…”�”}”(hjÒ3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎ3ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj­3h²hh³j¿3h´MBubjœ)�”}”(hŒ_(unsigned long *dst, const unsigned long *orig, const unsigned long *relmap, unsigned int bits)”h]”(j¢)�”}”(hŒunsigned long *dst”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjî3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjê3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjê3ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjê3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjê3ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj&4h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjê3ubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj34h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjê3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæ3ubj¢)�”}”(hŒconst unsigned long *orig”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjL4h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjH4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH4ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjg4h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjH4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH4ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjƒ4h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjH4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH4ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŸ4h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH4ubj�)�”}”(hŒorig”h]”hŒorig”…”�”}”(hj¬4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjH4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæ3ubj¢)�”}”(hŒconst unsigned long *relmap”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÅ4h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÁ4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁ4ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjà4h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁ4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁ4ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjü4h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁ4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁ4ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÁ4ubj�)�”}”(hŒrelmap”h]”hŒrelmap”…”�”}”(hj%5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁ4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæ3ubj¢)�”}”(hŒunsigned int bits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj>5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:5ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjZ5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:5ubj�)�”}”(hŒbits”h]”hŒbits”…”�”}”(hjv5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæ3ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj­3h²hh³j¿3h´MBubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj©3h²hh³j¿3h´MBubah}”(h]”j¤3ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¿3h´MBhj¦3h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(translate one bitmap relative to another”h]”hŒ(translate one bitmap relative to another”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MBhj�5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¦3h²hh³j¿3h´MBubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¸5jæj¸5jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hXÍ**Parameters** ``unsigned long *dst`` resulting translated bitmap ``const unsigned long *orig`` original untranslated bitmap ``const unsigned long *relmap`` bitmap relative to which translated ``unsigned int bits`` number of bits in each of these bitmaps **Description** Set the n-th bit of **dst** iff there exists some m such that the n-th bit of **relmap** is set, the m-th bit of **orig** is set, and the n-th bit of **relmap** is also the m-th _set_ bit of **relmap**. (If you understood the previous sentence the first time your read it, you're overqualified for your current job.) In other words, **orig** is mapped onto (surjectively) **dst**, using the map { | the n-th bit of **relmap** is the m-th set bit of **relmap** }. Any set bits in **orig** above bit number W, where W is the weight of (number of set bits in) **relmap** are mapped nowhere. In particular, if for all bits m set in **orig**, m >= W, then **dst** will end up empty. In situations where the possibility of such an empty result is not desired, one way to avoid it is to use the bitmap_fold() operator, below, to first fold the **orig** bitmap over itself so that all its set bits x are in the range 0 <= x < W. The bitmap_fold() operator does this by setting the bit (m % W) in **dst**, for each bit (m) set in **orig**. Example [1] for bitmap_onto(): Let's say **relmap** has bits 30-39 set, and **orig** has bits 1, 3, 5, 7, 9 and 11 set. Then on return from this routine, **dst** will have bits 31, 33, 35, 37 and 39 set. When bit 0 is set in **orig**, it means turn on the bit in **dst** corresponding to whatever is the first bit (if any) that is turned on in **relmap**. Since bit 0 was off in the above example, we leave off that bit (bit 30) in **dst**. When bit 1 is set in **orig** (as in the above example), it means turn on the bit in **dst** corresponding to whatever is the second bit that is turned on in **relmap**. The second bit in **relmap** that was turned on in the above example was bit 31, so we turned on bit 31 in **dst**. Similarly, we turned on bits 33, 35, 37 and 39 in **dst**, because they were the 4th, 6th, 8th and 10th set bits set in **relmap**, and the 4th, 6th, 8th and 10th bits of **orig** (i.e. bits 3, 5, 7 and 9) were also set. When bit 11 is set in **orig**, it means turn on the bit in **dst** corresponding to whatever is the twelfth bit that is turned on in **relmap**. In the above example, there were only ten bits turned on in **relmap** (30..39), so that bit 11 was set in **orig** had no affect on **dst**. Example [2] for bitmap_fold() + bitmap_onto(): Let's say **relmap** has these ten bits set:: 40 41 42 43 45 48 53 61 74 95 (for the curious, that's 40 plus the first ten terms of the Fibonacci sequence.) Further lets say we use the following code, invoking bitmap_fold() then bitmap_onto, as suggested above to avoid the possibility of an empty **dst** result:: unsigned long *tmp; // a temporary bitmap's bits bitmap_fold(tmp, orig, bitmap_weight(relmap, bits), bits); bitmap_onto(dst, tmp, relmap, bits); Then this table shows what various values of **dst** would be, for various **orig**'s. I list the zero-based positions of each set bit. The tmp column shows the intermediate result, as computed by using bitmap_fold() to fold the **orig** bitmap modulo ten (the weight of **relmap**): =============== ============== ================= **orig** tmp **dst** 0 0 40 1 1 41 9 9 95 10 0 40 [#f1]_ 1 3 5 7 1 3 5 7 41 43 48 61 0 1 2 3 4 0 1 2 3 4 40 41 42 43 45 0 9 18 27 0 9 8 7 40 61 74 95 0 10 20 30 0 40 0 11 22 33 0 1 2 3 40 41 42 43 0 12 24 36 0 2 4 6 40 42 45 53 78 102 211 1 2 8 41 42 74 [#f1]_ =============== ============== ================= .. [#f1] For these marked lines, if we hadn't first done bitmap_fold() into tmp, then the **dst** result would have been empty. If either of **orig** or **relmap** is empty (no set bits), then **dst** will be returned empty. If (as explained above) the only set bits in **orig** are in positions m where m >= W, (where W is the weight of **relmap**) then **dst** will once again be returned empty. All bits in **dst** not set by the above rule are cleared.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÂ5h]”hŒ Parameters”…”�”}”(hjÄ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÀ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MFhj¼5ubj )�”}”(hhh]”(j)�”}”(hŒ3``unsigned long *dst`` resulting translated bitmap ”h]”(j)�”}”(hŒ``unsigned long *dst``”h]”j)�”}”(hjá5h]”hŒunsigned long *dst”…”�”}”(hjã5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MChjÛ5ubj2)�”}”(hhh]”hÝ)�”}”(hŒresulting translated bitmap”h]”hŒresulting translated bitmap”…”�”}”(hjú5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jö5h´MChj÷5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÛ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jö5h´MChjØ5ubj)�”}”(hŒ;``const unsigned long *orig`` original untranslated bitmap ”h]”(j)�”}”(hŒ``const unsigned long *orig``”h]”j)�”}”(hj6h]”hŒconst unsigned long *orig”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MDhj6ubj2)�”}”(hhh]”hÝ)�”}”(hŒoriginal untranslated bitmap”h]”hŒoriginal untranslated bitmap”…”�”}”(hj36h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j/6h´MDhj06ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j/6h´MDhjØ5ubj)�”}”(hŒD``const unsigned long *relmap`` bitmap relative to which translated ”h]”(j)�”}”(hŒ``const unsigned long *relmap``”h]”j)�”}”(hjS6h]”hŒconst unsigned long *relmap”…”�”}”(hjU6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MEhjM6ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#bitmap relative to which translated”h]”hŒ#bitmap relative to which translated”…”�”}”(hjl6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh6h´MEhji6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjM6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh6h´MEhjØ5ubj)�”}”(hŒ>``unsigned int bits`` number of bits in each of these bitmaps ”h]”(j)�”}”(hŒ``unsigned int bits``”h]”j)�”}”(hjŒ6h]”hŒunsigned int bits”…”�”}”(hjŽ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MFhj†6ubj2)�”}”(hhh]”hÝ)�”}”(hŒ'number of bits in each of these bitmaps”h]”hŒ'number of bits in each of these bitmaps”…”�”}”(hj¥6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¡6h´MFhj¢6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj†6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡6h´MFhjØ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¼5ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÇ6h]”hŒ Description”…”�”}”(hjÉ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MHhj¼5ubhÝ)�”}”(hX<Set the n-th bit of **dst** iff there exists some m such that the n-th bit of **relmap** is set, the m-th bit of **orig** is set, and the n-th bit of **relmap** is also the m-th _set_ bit of **relmap**. (If you understood the previous sentence the first time your read it, you're overqualified for your current job.)”h]”(hŒSet the n-th bit of ”…”�”}”(hjÝ6h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjå6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝ6ubhŒ3 iff there exists some m such that the n-th bit of ”…”�”}”(hjÝ6h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj÷6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝ6ubhŒ is set, the m-th bit of ”…”�”}”(hjÝ6h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝ6ubhŒ is set, and the n-th bit of ”…”�”}”(hjÝ6h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝ6ubhŒ is also the m-th _set_ bit of ”…”�”}”(hjÝ6h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj-7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝ6ubhŒu. (If you understood the previous sentence the first time your read it, you’re overqualified for your current job.)”…”�”}”(hjÝ6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MGhj¼5ubhÝ)�”}”(hŒ˜In other words, **orig** is mapped onto (surjectively) **dst**, using the map { | the n-th bit of **relmap** is the m-th set bit of **relmap** }.”h]”(hŒIn other words, ”…”�”}”(hjF7h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hjN7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjF7ubhŒ is mapped onto (surjectively) ”…”�”}”(hjF7h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj`7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjF7ubhŒ+, using the map { | the n-th bit of ”…”�”}”(hjF7h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hjr7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjF7ubhŒ is the m-th set bit of ”…”�”}”(hjF7h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj„7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjF7ubhŒ }.”…”�”}”(hjF7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MMhj¼5ubhÝ)�”}”(hX9Any set bits in **orig** above bit number W, where W is the weight of (number of set bits in) **relmap** are mapped nowhere. In particular, if for all bits m set in **orig**, m >= W, then **dst** will end up empty. In situations where the possibility of such an empty result is not desired, one way to avoid it is to use the bitmap_fold() operator, below, to first fold the **orig** bitmap over itself so that all its set bits x are in the range 0 <= x < W. The bitmap_fold() operator does this by setting the bit (m % W) in **dst**, for each bit (m) set in **orig**.”h]”(hŒAny set bits in ”…”�”}”(hj�7h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hj¥7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�7ubhŒF above bit number W, where W is the weight of (number of set bits in) ”…”�”}”(hj�7h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj·7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�7ubhŒ= are mapped nowhere. In particular, if for all bits m set in ”…”�”}”(hj�7h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hjÉ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�7ubhŒ, m >= W, then ”…”�”}”(hj�7h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjÛ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�7ubhŒ´ will end up empty. In situations where the possibility of such an empty result is not desired, one way to avoid it is to use the bitmap_fold() operator, below, to first fold the ”…”�”}”(hj�7h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hjí7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�7ubhŒ� bitmap over itself so that all its set bits x are in the range 0 <= x < W. The bitmap_fold() operator does this by setting the bit (m % W) in ”…”�”}”(hj�7h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjÿ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�7ubhŒ, for each bit (m) set in ”…”�”}”(hj�7h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�7ubhŒ.”…”�”}”(hj�7h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MQhj¼5ubj )�”}”(hhh]”(j)�”}”(hXÜExample [1] for bitmap_onto(): Let's say **relmap** has bits 30-39 set, and **orig** has bits 1, 3, 5, 7, 9 and 11 set. Then on return from this routine, **dst** will have bits 31, 33, 35, 37 and 39 set. When bit 0 is set in **orig**, it means turn on the bit in **dst** corresponding to whatever is the first bit (if any) that is turned on in **relmap**. Since bit 0 was off in the above example, we leave off that bit (bit 30) in **dst**. When bit 1 is set in **orig** (as in the above example), it means turn on the bit in **dst** corresponding to whatever is the second bit that is turned on in **relmap**. The second bit in **relmap** that was turned on in the above example was bit 31, so we turned on bit 31 in **dst**. Similarly, we turned on bits 33, 35, 37 and 39 in **dst**, because they were the 4th, 6th, 8th and 10th set bits set in **relmap**, and the 4th, 6th, 8th and 10th bits of **orig** (i.e. bits 3, 5, 7 and 9) were also set. When bit 11 is set in **orig**, it means turn on the bit in **dst** corresponding to whatever is the twelfth bit that is turned on in **relmap**. In the above example, there were only ten bits turned on in **relmap** (30..39), so that bit 11 was set in **orig** had no affect on **dst**. ”h]”(j)�”}”(hŒExample [1] for bitmap_onto():”h]”hŒExample [1] for bitmap_onto():”…”�”}”(hj18h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´Mthj-8ubj2)�”}”(hhh]”(hÝ)�”}”(hŒ­Let's say **relmap** has bits 30-39 set, and **orig** has bits 1, 3, 5, 7, 9 and 11 set. Then on return from this routine, **dst** will have bits 31, 33, 35, 37 and 39 set.”h]”(hŒ Let’s say ”…”�”}”(hjC8h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hjK8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjC8ubhŒ has bits 30-39 set, and ”…”�”}”(hjC8h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hj]8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjC8ubhŒG has bits 1, 3, 5, 7, 9 and 11 set. Then on return from this routine, ”…”�”}”(hjC8h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjo8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjC8ubhŒ* will have bits 31, 33, 35, 37 and 39 set.”…”�”}”(hjC8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M\hj@8ubhÝ)�”}”(hŒíWhen bit 0 is set in **orig**, it means turn on the bit in **dst** corresponding to whatever is the first bit (if any) that is turned on in **relmap**. Since bit 0 was off in the above example, we leave off that bit (bit 30) in **dst**.”h]”(hŒWhen bit 0 is set in ”…”�”}”(hjˆ8h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hj�8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ8ubhŒ, it means turn on the bit in ”…”�”}”(hjˆ8h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj¢8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ8ubhŒJ corresponding to whatever is the first bit (if any) that is turned on in ”…”�”}”(hjˆ8h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj´8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ8ubhŒO. Since bit 0 was off in the above example, we leave off that bit (bit 30) in ”…”�”}”(hjˆ8h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjÆ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ8ubhŒ.”…”�”}”(hjˆ8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M`hj@8ubhÝ)�”}”(hXWhen bit 1 is set in **orig** (as in the above example), it means turn on the bit in **dst** corresponding to whatever is the second bit that is turned on in **relmap**. The second bit in **relmap** that was turned on in the above example was bit 31, so we turned on bit 31 in **dst**.”h]”(hŒWhen bit 1 is set in ”…”�”}”(hjß8h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hjç8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjß8ubhŒ8 (as in the above example), it means turn on the bit in ”…”�”}”(hjß8h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjù8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjß8ubhŒB corresponding to whatever is the second bit that is turned on in ”…”�”}”(hjß8h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjß8ubhŒ. The second bit in ”…”�”}”(hjß8h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjß8ubhŒO that was turned on in the above example was bit 31, so we turned on bit 31 in ”…”�”}”(hjß8h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj/9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjß8ubhŒ.”…”�”}”(hjß8h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´Mehj@8ubhÝ)�”}”(hŒÜSimilarly, we turned on bits 33, 35, 37 and 39 in **dst**, because they were the 4th, 6th, 8th and 10th set bits set in **relmap**, and the 4th, 6th, 8th and 10th bits of **orig** (i.e. bits 3, 5, 7 and 9) were also set.”h]”(hŒ2Similarly, we turned on bits 33, 35, 37 and 39 in ”…”�”}”(hjH9h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjP9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjH9ubhŒ?, because they were the 4th, 6th, 8th and 10th set bits set in ”…”�”}”(hjH9h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hjb9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjH9ubhŒ), and the 4th, 6th, 8th and 10th bits of ”…”�”}”(hjH9h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hjt9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjH9ubhŒ) (i.e. bits 3, 5, 7 and 9) were also set.”…”�”}”(hjH9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´Mkhj@8ubhÝ)�”}”(hX When bit 11 is set in **orig**, it means turn on the bit in **dst** corresponding to whatever is the twelfth bit that is turned on in **relmap**. In the above example, there were only ten bits turned on in **relmap** (30..39), so that bit 11 was set in **orig** had no affect on **dst**.”h]”(hŒWhen bit 11 is set in ”…”�”}”(hj�9h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hj•9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�9ubhŒ, it means turn on the bit in ”…”�”}”(hj�9h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj§9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�9ubhŒC corresponding to whatever is the twelfth bit that is turned on in ”…”�”}”(hj�9h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj¹9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�9ubhŒ?. In the above example, there were only ten bits turned on in ”…”�”}”(hj�9h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hjË9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�9ubhŒ% (30..39), so that bit 11 was set in ”…”�”}”(hj�9h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hjÝ9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�9ubhŒ had no affect on ”…”�”}”(hj�9h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjï9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�9ubhŒ.”…”�”}”(hj�9h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´Mphj@8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1hj-8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j?8h´Mthj*8ubj)�”}”(hX¹Example [2] for bitmap_fold() + bitmap_onto(): Let's say **relmap** has these ten bits set:: 40 41 42 43 45 48 53 61 74 95 (for the curious, that's 40 plus the first ten terms of the Fibonacci sequence.) Further lets say we use the following code, invoking bitmap_fold() then bitmap_onto, as suggested above to avoid the possibility of an empty **dst** result:: unsigned long *tmp; // a temporary bitmap's bits bitmap_fold(tmp, orig, bitmap_weight(relmap, bits), bits); bitmap_onto(dst, tmp, relmap, bits); Then this table shows what various values of **dst** would be, for various **orig**'s. I list the zero-based positions of each set bit. The tmp column shows the intermediate result, as computed by using bitmap_fold() to fold the **orig** bitmap modulo ten (the weight of **relmap**): =============== ============== ================= **orig** tmp **dst** 0 0 40 1 1 41 9 9 95 10 0 40 [#f1]_ 1 3 5 7 1 3 5 7 41 43 48 61 0 1 2 3 4 0 1 2 3 4 40 41 42 43 45 0 9 18 27 0 9 8 7 40 61 74 95 0 10 20 30 0 40 0 11 22 33 0 1 2 3 40 41 42 43 0 12 24 36 0 2 4 6 40 42 45 53 78 102 211 1 2 8 41 42 74 [#f1]_ =============== ============== ================= ”h]”(j)�”}”(hŒ.Example [2] for bitmap_fold() + bitmap_onto():”h]”hŒ.Example [2] for bitmap_fold() + bitmap_onto():”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´Mšhj:ubj2)�”}”(hhh]”(hÝ)�”}”(hŒ-Let's say **relmap** has these ten bits set::”h]”(hŒ Let’s say ”…”�”}”(hj*:h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj2:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*:ubhŒ has these ten bits set:”…”�”}”(hj*:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´Mwhj':ubj‘H)�”}”(hŒ40 41 42 43 45 48 53 61 74 95”h]”hŒ40 41 42 43 45 48 53 61 74 95”…”�”}”hjK:sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´Myhj':ubhÝ)�”}”(hŒP(for the curious, that's 40 plus the first ten terms of the Fibonacci sequence.)”h]”hŒR(for the curious, that’s 40 plus the first ten terms of the Fibonacci sequence.)”…”�”}”(hjZ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M{hj':ubhÝ)�”}”(hŒ�Further lets say we use the following code, invoking bitmap_fold() then bitmap_onto, as suggested above to avoid the possibility of an empty **dst** result::”h]”(hŒ�Further lets say we use the following code, invoking bitmap_fold() then bitmap_onto, as suggested above to avoid the possibility of an empty ”…”�”}”(hji:h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjq:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhji:ubhŒ result:”…”�”}”(hji:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M~hj':ubj‘H)�”}”(hŒ•unsigned long *tmp; // a temporary bitmap's bits bitmap_fold(tmp, orig, bitmap_weight(relmap, bits), bits); bitmap_onto(dst, tmp, relmap, bits);”h]”hŒ•unsigned long *tmp; // a temporary bitmap's bits bitmap_fold(tmp, orig, bitmap_weight(relmap, bits), bits); bitmap_onto(dst, tmp, relmap, bits);”…”�”}”hjŠ:sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M‚hj':ubhÝ)�”}”(hXThen this table shows what various values of **dst** would be, for various **orig**'s. I list the zero-based positions of each set bit. The tmp column shows the intermediate result, as computed by using bitmap_fold() to fold the **orig** bitmap modulo ten (the weight of **relmap**):”h]”(hŒ-Then this table shows what various values of ”…”�”}”(hj™:h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj¡:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™:ubhŒ would be, for various ”…”�”}”(hj™:h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hj³:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™:ubhŒ•’s. I list the zero-based positions of each set bit. The tmp column shows the intermediate result, as computed by using bitmap_fold() to fold the ”…”�”}”(hj™:h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hjÅ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™:ubhŒ" bitmap modulo ten (the weight of ”…”�”}”(hj™:h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj×:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™:ubhŒ):”…”�”}”(hj™:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M‡hj':ubj•)�”}”(hXF=============== ============== ================= **orig** tmp **dst** 0 0 40 1 1 41 9 9 95 10 0 40 [#f1]_ 1 3 5 7 1 3 5 7 41 43 48 61 0 1 2 3 4 0 1 2 3 4 40 41 42 43 45 0 9 18 27 0 9 8 7 40 61 74 95 0 10 20 30 0 40 0 11 22 33 0 1 2 3 40 41 42 43 0 12 24 36 0 2 4 6 40 42 45 53 78 102 211 1 2 8 41 42 74 [#f1]_ =============== ============== ================= ”h]”hŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jþ:hjû:ubjÿ:)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jþ:hjû:ubjÿ:)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”Kuh1jþ:hjû:ubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÝ)�”}”(hŒ**orig**”h]”jõ)�”}”(hj/;h]”hŒorig”…”�”}”(hj1;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MŽhj*;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj%;ubj);)�”}”(hhh]”hÝ)�”}”(hŒtmp”h]”hŒtmp”…”�”}”(hjN;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jD;h´MŽhjK;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj%;ubj);)�”}”(hhh]”hÝ)�”}”(hŒ**dst**”h]”jõ)�”}”(hjg;h]”hŒdst”…”�”}”(hji;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhje;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jD;h´MŽhjb;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj%;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ0”h]”hŒ0”…”�”}”(hjŽ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M�hj‹;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjˆ;ubj);)�”}”(hhh]”hÝ)�”}”(hj�;h]”hŒ0”…”�”}”(hj¦;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœ;h´M�hj£;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjˆ;ubj);)�”}”(hhh]”hÝ)�”}”(hŒ40”h]”hŒ40”…”�”}”(hj¼;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœ;h´M�hj¹;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjˆ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ1”h]”hŒ1”…”�”}”(hjÜ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M�hjÙ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjÖ;ubj);)�”}”(hhh]”hÝ)�”}”(hjÞ;h]”hŒ1”…”�”}”(hjô;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jê;h´M�hjñ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjÖ;ubj);)�”}”(hhh]”hÝ)�”}”(hŒ41”h]”hŒ41”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jê;h´M�hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjÖ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ9”h]”hŒ9”…”�”}”(hj*<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M‘hj'<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj$<ubj);)�”}”(hhh]”hÝ)�”}”(hj,<h]”hŒ9”…”�”}”(hjB<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j8<h´M‘hj?<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj$<ubj);)�”}”(hhh]”hÝ)�”}”(hŒ95”h]”hŒ95”…”�”}”(hjX<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j8<h´M‘hjU<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj$<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ10”h]”hŒ10”…”�”}”(hjx<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M’hju<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjr<ubj);)�”}”(hhh]”hÝ)�”}”(hj�;h]”hŒ0”…”�”}”(hj�<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†<h´M’hj�<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjr<ubj);)�”}”(hhh]”hÝ)�”}”(hŒ 40 [#f1]_”h]”(hŒ40 ”…”�”}”(hj¦<h²hh³Nh´NubhŒfootnote_reference”“”)�”}”(hŒ[#f1]_”h]”hŒ1”…”�”}”(hj°<h²hh³Nh´Nubah}”(h]”Œid1”ah ]”h"]”h$]”h&]”Œauto”KŒrefid”Œf1”Œdocname”Œcore-api/kernel-api”uh1j®<hj¦<Œresolved”Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†<h´M’hj£<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjr<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ1 3 5 7”h]”hŒ1 3 5 7”…”�”}”(hjÝ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M“hjÚ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj×<ubj);)�”}”(hhh]”hÝ)�”}”(hŒ1 3 5 7”h]”hŒ1 3 5 7”…”�”}”(hjõ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jë<h´M“hjò<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj×<ubj);)�”}”(hhh]”hÝ)�”}”(hŒ 41 43 48 61”h]”hŒ 41 43 48 61”…”�”}”(hj =h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jë<h´M“hj =ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj×<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ 0 1 2 3 4”h]”hŒ 0 1 2 3 4”…”�”}”(hj,=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M”hj)=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj&=ubj);)�”}”(hhh]”hÝ)�”}”(hŒ 0 1 2 3 4”h]”hŒ 0 1 2 3 4”…”�”}”(hjD=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:=h´M”hjA=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj&=ubj);)�”}”(hhh]”hÝ)�”}”(hŒ40 41 42 43 45”h]”hŒ40 41 42 43 45”…”�”}”(hj[=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:=h´M”hjX=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj&=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ 0 9 18 27”h]”hŒ 0 9 18 27”…”�”}”(hj{=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M•hjx=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hju=ubj);)�”}”(hhh]”hÝ)�”}”(hŒ0 9 8 7”h]”hŒ0 9 8 7”…”�”}”(hj“=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰=h´M•hj�=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hju=ubj);)�”}”(hhh]”hÝ)�”}”(hŒ 40 61 74 95”h]”hŒ 40 61 74 95”…”�”}”(hjª=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰=h´M•hj§=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hju=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ 0 10 20 30”h]”hŒ 0 10 20 30”…”�”}”(hjÊ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M–hjÇ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjÄ=ubj);)�”}”(hhh]”hÝ)�”}”(hj�;h]”hŒ0”…”�”}”(hjâ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØ=h´M–hjß=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjÄ=ubj);)�”}”(hhh]”hÝ)�”}”(hŒ40”h]”hŒ40”…”�”}”(hjø=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØ=h´M–hjõ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hjÄ=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ 0 11 22 33”h]”hŒ 0 11 22 33”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M—hj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj>ubj);)�”}”(hhh]”hÝ)�”}”(hŒ0 1 2 3”h]”hŒ0 1 2 3”…”�”}”(hj0>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j&>h´M—hj->ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj>ubj);)�”}”(hhh]”hÝ)�”}”(hŒ 40 41 42 43”h]”hŒ 40 41 42 43”…”�”}”(hjG>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j&>h´M—hjD>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ 0 12 24 36”h]”hŒ 0 12 24 36”…”�”}”(hjg>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M˜hjd>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hja>ubj);)�”}”(hhh]”hÝ)�”}”(hŒ0 2 4 6”h]”hŒ0 2 4 6”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ju>h´M˜hj|>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hja>ubj);)�”}”(hhh]”hÝ)�”}”(hŒ 40 42 45 53”h]”hŒ 40 42 45 53”…”�”}”(hj–>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ju>h´M˜hj“>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hja>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubj$;)�”}”(hhh]”(j);)�”}”(hhh]”hÝ)�”}”(hŒ 78 102 211”h]”hŒ 78 102 211”…”�”}”(hj¶>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M™hj³>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj°>ubj);)�”}”(hhh]”hÝ)�”}”(hŒ1 2 8”h]”hŒ1 2 8”…”�”}”(hjÎ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄ>h´M™hjË>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj°>ubj);)�”}”(hhh]”hÝ)�”}”(hŒ41 42 74 [#f1]_”h]”(hŒ 41 42 74 ”…”�”}”(hjå>h²hh³Nh´Nubj¯<)�”}”(hŒ[#f1]_”h]”hŒ1”…”�”}”(hjí>h²hh³Nh´Nubah}”(h]”Œid2”ah ]”h"]”h$]”h&]”j¿<KjÀ<jÁ<jÂ<jÃ<uh1j®<hjå>jÄ<Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄ>h´M™hjâ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j(;hj°>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j#;hj ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j;hjû:ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jù:hjö:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jô:hjð:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M�hj':ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j1hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&:h´Mšhj*8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¼5ubhŒfootnote”“”)�”}”(hŒwFor these marked lines, if we hadn't first done bitmap_fold() into tmp, then the **dst** result would have been empty. ”h]”(hŒlabel”“”)�”}”(hhh]”hŒ1”…”�”}”(hjB?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j@?hjej¿<KjÂ<jÃ<uh1j:?h³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´Mœhj¼5ubhÝ)�”}”(hŒ`If either of **orig** or **relmap** is empty (no set bits), then **dst** will be returned empty.”h]”(hŒ If either of ”…”�”}”(hjx?h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hj€?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx?ubhŒ or ”…”�”}”(hjx?h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj’?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx?ubhŒ is empty (no set bits), then ”…”�”}”(hjx?h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj¤?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx?ubhŒ will be returned empty.”…”�”}”(hjx?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M¡hj¼5ubhÝ)�”}”(hŒ¬If (as explained above) the only set bits in **orig** are in positions m where m >= W, (where W is the weight of **relmap**) then **dst** will once again be returned empty.”h]”(hŒ-If (as explained above) the only set bits in ”…”�”}”(hj½?h²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hjÅ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½?ubhŒ< are in positions m where m >= W, (where W is the weight of ”…”�”}”(hj½?h²hh³Nh´Nubjõ)�”}”(hŒ **relmap**”h]”hŒrelmap”…”�”}”(hj×?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½?ubhŒ) then ”…”�”}”(hj½?h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjé?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½?ubhŒ# will once again be returned empty.”…”�”}”(hj½?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M¤hj¼5ubhÝ)�”}”(hŒ:All bits in **dst** not set by the above rule are cleared.”h]”(hŒ All bits in ”…”�”}”(hj@h²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj @h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj@ubhŒ' not set by the above rule are cleared.”…”�”}”(hj@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´M¨hj¼5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_fold (C function)”Œ c.bitmap_fold”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒevoid bitmap_fold (unsigned long *dst, const unsigned long *orig, unsigned int sz, unsigned int nbits)”h]”j)�”}”(hŒdvoid bitmap_fold(unsigned long *dst, const unsigned long *orig, unsigned int sz, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjC@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?@h²hh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?@h²hh³jQ@h´MÈubj{)�”}”(hŒ bitmap_fold”h]”j�)�”}”(hŒ bitmap_fold”h]”hŒ bitmap_fold”…”�”}”(hjd@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`@ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj?@h²hh³jQ@h´MÈubjœ)�”}”(hŒT(unsigned long *dst, const unsigned long *orig, unsigned int sz, unsigned int nbits)”h]”(j¢)�”}”(hŒunsigned long *dst”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj€@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj|@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|@ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjœ@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj|@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|@ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¸@h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj|@ubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjÅ@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjx@ubj¢)�”}”(hŒconst unsigned long *orig”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÞ@h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÚ@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚ@ubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjù@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚ@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚ@ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚ@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚ@ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj1Ah²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÚ@ubj�)�”}”(hŒorig”h]”hŒorig”…”�”}”(hj>Ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjx@ubj¢)�”}”(hŒunsigned int sz”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjWAh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjSAubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeAh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSAubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjsAh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjSAubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSAubj�)�”}”(hŒsz”h]”hŒsz”…”�”}”(hj�Ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjx@ubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¨Ah²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤Aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤Aubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÄAh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤Aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒAh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤Aubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hjàAh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤Aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjx@ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj?@h²hh³jQ@h´MÈubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj;@h²hh³jQ@h´MÈubah}”(h]”j6@ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jQ@h´MÈhj8@h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6fold larger bitmap into smaller, modulo specified size”h]”hŒ6fold larger bitmap into smaller, modulo specified size”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÈhjBh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj8@h²hh³jQ@h´MÈubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj"Bjæj"Bjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX³**Parameters** ``unsigned long *dst`` resulting smaller bitmap ``const unsigned long *orig`` original larger bitmap ``unsigned int sz`` specified size ``unsigned int nbits`` number of bits in each of these bitmaps **Description** For each bit oldbit in **orig**, set bit oldbit mod **sz** in **dst**. Clear all other bits in **dst**. See further the comment and Example [2] for bitmap_onto() for why and how to use this.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj,Bh]”hŒ Parameters”…”�”}”(hj.Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*Bubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÌhj&Bubj )�”}”(hhh]”(j)�”}”(hŒ0``unsigned long *dst`` resulting smaller bitmap ”h]”(j)�”}”(hŒ``unsigned long *dst``”h]”j)�”}”(hjKBh]”hŒunsigned long *dst”…”�”}”(hjMBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIBubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÉhjEBubj2)�”}”(hhh]”hÝ)�”}”(hŒresulting smaller bitmap”h]”hŒresulting smaller bitmap”…”�”}”(hjdBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j`Bh´MÉhjaBubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjEBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`Bh´MÉhjBBubj)�”}”(hŒ5``const unsigned long *orig`` original larger bitmap ”h]”(j)�”}”(hŒ``const unsigned long *orig``”h]”j)�”}”(hj„Bh]”hŒconst unsigned long *orig”…”�”}”(hj†Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÊhj~Bubj2)�”}”(hhh]”hÝ)�”}”(hŒoriginal larger bitmap”h]”hŒoriginal larger bitmap”…”�”}”(hj�Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™Bh´MÊhjšBubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™Bh´MÊhjBBubj)�”}”(hŒ#``unsigned int sz`` specified size ”h]”(j)�”}”(hŒ``unsigned int sz``”h]”j)�”}”(hj½Bh]”hŒunsigned int sz”…”�”}”(hj¿Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MËhj·Bubj2)�”}”(hhh]”hÝ)�”}”(hŒspecified size”h]”hŒspecified size”…”�”}”(hjÖBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒBh´MËhjÓBubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·Bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒBh´MËhjBBubj)�”}”(hŒ?``unsigned int nbits`` number of bits in each of these bitmaps ”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hjöBh]”hŒunsigned int nbits”…”�”}”(hjøBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôBubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÌhjðBubj2)�”}”(hhh]”hÝ)�”}”(hŒ'number of bits in each of these bitmaps”h]”hŒ'number of bits in each of these bitmaps”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Ch´MÌhj Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Ch´MÌhjBBubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj&BubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj1Ch]”hŒ Description”…”�”}”(hj3Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÎhj&BubhÝ)�”}”(hŒ¿For each bit oldbit in **orig**, set bit oldbit mod **sz** in **dst**. Clear all other bits in **dst**. See further the comment and Example [2] for bitmap_onto() for why and how to use this.”h]”(hŒFor each bit oldbit in ”…”�”}”(hjGCh²hh³Nh´Nubjõ)�”}”(hŒ**orig**”h]”hŒorig”…”�”}”(hjOCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGCubhŒ, set bit oldbit mod ”…”�”}”(hjGCh²hh³Nh´Nubjõ)�”}”(hŒ**sz**”h]”hŒsz”…”�”}”(hjaCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGCubhŒ in ”…”�”}”(hjGCh²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjsCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGCubhŒ. Clear all other bits in ”…”�”}”(hjGCh²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj…Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGCubhŒY. See further the comment and Example [2] for bitmap_onto() for why and how to use this.”…”�”}”(hjGCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒP/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:81: ./lib/bitmap.c”h´MÍhj&Bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'bitmap_find_next_zero_area (C function)”Œc.bitmap_find_next_zero_area”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ‘unsigned long bitmap_find_next_zero_area (unsigned long *map, unsigned long size, unsigned long start, unsigned int nr, unsigned long align_mask)”h]”j)�”}”(hŒ�unsigned long bitmap_find_next_zero_area(unsigned long *map, unsigned long size, unsigned long start, unsigned int nr, unsigned long align_mask)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¾Ch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjºCh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºCh²hh³jÌCh´KÊubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÛCh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjºCh²hh³jÌCh´KÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºCh²hh³jÌCh´KÊubj{)�”}”(hŒbitmap_find_next_zero_area”h]”j�)�”}”(hŒbitmap_find_next_zero_area”h]”hŒbitmap_find_next_zero_area”…”�”}”(hjûCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷Cubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjºCh²hh³jÌCh´KÊubjœ)�”}”(hŒh(unsigned long *map, unsigned long size, unsigned long start, unsigned int nr, unsigned long align_mask)”h]”(j¢)�”}”(hŒunsigned long *map”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Dh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjDubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj3Dh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjADh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjDubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjODh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjDubj�)�”}”(hŒmap”h]”hŒmap”…”�”}”(hj\Dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDubeh}”(h•]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDubj¢)�”}”(hŒunsigned long size”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjuDh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjqDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqDubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‘Dh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjqDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqDubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj­Dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDubj¢)�”}”(hŒunsigned long start”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÆDh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÂDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂDubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjâDh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÂDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂDubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjþDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDubj¢)�”}”(hŒunsigned int nr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj3Eh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEubj�)�”}”(hŒnr”h]”hŒnr”…”�”}”(hjOEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDubj¢)�”}”(hŒunsigned long align_mask”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjhEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdEubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj„Eh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’Eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdEubj�)�”}”(hŒ align_mask”h]”hŒ align_mask”…”�”}”(hj Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjºCh²hh³jÌCh´KÊubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¶Ch²hh³jÌCh´KÊubah}”(h]”j±Cah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÌCh´KÊhj³Ch²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#find a contiguous aligned zero area”h]”hŒ#find a contiguous aligned zero area”…”�”}”(hjÊEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÊhjÇEh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj³Ch²hh³jÌCh´KÊubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjâEjæjâEjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX**Parameters** ``unsigned long *map`` The address to base the search on ``unsigned long size`` The bitmap size in bits ``unsigned long start`` The bitnumber to start searching at ``unsigned int nr`` The number of zeroed bits we're looking for ``unsigned long align_mask`` Alignment mask for zero area **Description** The **align_mask** should be one less than a power of 2; the effect is that the bit offset of all zero areas this function finds is multiples of that power of 2. A **align_mask** of 0 means no alignment is required. **Return** The bit offset of the found area or a value >= **size** if no area is found.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjìEh]”hŒ Parameters”…”�”}”(hjîEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjêEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÎhjæEubj )�”}”(hhh]”(j)�”}”(hŒ9``unsigned long *map`` The address to base the search on ”h]”(j)�”}”(hŒ``unsigned long *map``”h]”j)�”}”(hj Fh]”hŒunsigned long *map”…”�”}”(hj Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KËhjFubj2)�”}”(hhh]”hÝ)�”}”(hŒ!The address to base the search on”h]”hŒ!The address to base the search on”…”�”}”(hj$Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Fh´KËhj!Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Fh´KËhjFubj)�”}”(hŒ/``unsigned long size`` The bitmap size in bits ”h]”(j)�”}”(hŒ``unsigned long size``”h]”j)�”}”(hjDFh]”hŒunsigned long size”…”�”}”(hjFFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÌhj>Fubj2)�”}”(hhh]”hÝ)�”}”(hŒThe bitmap size in bits”h]”hŒThe bitmap size in bits”…”�”}”(hj]Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jYFh´KÌhjZFubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj>Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jYFh´KÌhjFubj)�”}”(hŒ<``unsigned long start`` The bitnumber to start searching at ”h]”(j)�”}”(hŒ``unsigned long start``”h]”j)�”}”(hj}Fh]”hŒunsigned long start”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÍhjwFubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The bitnumber to start searching at”h]”hŒ#The bitnumber to start searching at”…”�”}”(hj–Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j’Fh´KÍhj“Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjwFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j’Fh´KÍhjFubj)�”}”(hŒ@``unsigned int nr`` The number of zeroed bits we're looking for ”h]”(j)�”}”(hŒ``unsigned int nr``”h]”j)�”}”(hj¶Fh]”hŒunsigned int nr”…”�”}”(hj¸Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÎhj°Fubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The number of zeroed bits we're looking for”h]”hŒ-The number of zeroed bits we’re looking for”…”�”}”(hjÏFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jËFh´KÎhjÌFubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj°Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jËFh´KÎhjFubj)�”}”(hŒ:``unsigned long align_mask`` Alignment mask for zero area ”h]”(j)�”}”(hŒ``unsigned long align_mask``”h]”j)�”}”(hjïFh]”hŒunsigned long align_mask”…”�”}”(hjñFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÏhjéFubj2)�”}”(hhh]”hÝ)�”}”(hŒAlignment mask for zero area”h]”hŒAlignment mask for zero area”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jGh´KÏhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjéFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jGh´KÏhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjæEubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj*Gh]”hŒ Description”…”�”}”(hj,Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÑhjæEubhÝ)�”}”(hŒ×The **align_mask** should be one less than a power of 2; the effect is that the bit offset of all zero areas this function finds is multiples of that power of 2. A **align_mask** of 0 means no alignment is required.”h]”(hŒThe ”…”�”}”(hj@Gh²hh³Nh´Nubjõ)�”}”(hŒ**align_mask**”h]”hŒ align_mask”…”�”}”(hjHGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj@GubhŒ’ should be one less than a power of 2; the effect is that the bit offset of all zero areas this function finds is multiples of that power of 2. A ”…”�”}”(hj@Gh²hh³Nh´Nubjõ)�”}”(hŒ**align_mask**”h]”hŒ align_mask”…”�”}”(hjZGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj@GubhŒ% of 0 means no alignment is required.”…”�”}”(hj@Gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÐhjæEubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjuGh]”hŒReturn”…”�”}”(hjwGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsGubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÔhjæEubhÝ)�”}”(hŒLThe bit offset of the found area or a value >= **size** if no area is found.”h]”(hŒ/The bit offset of the found area or a value >= ”…”�”}”(hj‹Gh²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj“Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹GubhŒ if no area is found.”…”�”}”(hj‹Gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´KÕhjæEubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_or_equal (C function)”Œc.bitmap_or_equal”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒzbool bitmap_or_equal (const unsigned long *src1, const unsigned long *src2, const unsigned long *src3, unsigned int nbits)”h]”j)�”}”(hŒybool bitmap_or_equal(const unsigned long *src1, const unsigned long *src2, const unsigned long *src3, unsigned int nbits)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjÌGh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÈGh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈGh²hh³jÙGh´M¥ubj{)�”}”(hŒbitmap_or_equal”h]”j�)�”}”(hŒbitmap_or_equal”h]”hŒbitmap_or_equal”…”�”}”(hjìGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèGubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÈGh²hh³jÙGh´M¥ubjœ)�”}”(hŒe(const unsigned long *src1, const unsigned long *src2, const unsigned long *src3, unsigned int nbits)”h]”(j¢)�”}”(hŒconst unsigned long *src1”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj#Hh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1Hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj?Hh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj[Hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjHubj�)�”}”(hŒsrc1”h]”hŒsrc1”…”�”}”(hjhHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjHubj¢)�”}”(hŒconst unsigned long *src2”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj}Hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}Hubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjœHh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj}Hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}Hubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¸Hh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj}Hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}Hubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÔHh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj}Hubj�)�”}”(hŒsrc2”h]”hŒsrc2”…”�”}”(hjáHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}Hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjHubj¢)�”}”(hŒconst unsigned long *src3”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjúHh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjöHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöHubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjöHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöHubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj1Ih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjöHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöHubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjMIh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjöHubj�)�”}”(hŒsrc3”h]”hŒsrc3”…”�”}”(hjZIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjHubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjsIh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjoIubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoIubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjoIubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoIubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj«Ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjHubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÈGh²hh³jÙGh´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÄGh²hh³jÙGh´M¥ubah}”(h]”j¿Gah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÙGh´M¥hjÁGh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7Check whether the or of two bitmaps is equal to a third”h]”hŒ7Check whether the or of two bitmaps is equal to a third”…”�”}”(hjÕIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M¥hjÒIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÁGh²hh³jÙGh´M¥ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjíIjæjíIjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX†**Parameters** ``const unsigned long *src1`` Pointer to bitmap 1 ``const unsigned long *src2`` Pointer to bitmap 2 will be or'ed with bitmap 1 ``const unsigned long *src3`` Pointer to bitmap 3. Compare to the result of ***src1** | ***src2** ``unsigned int nbits`` number of bits in each of these bitmaps **Return** True if (***src1** | ***src2**) == ***src3**, false otherwise”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj÷Ih]”hŒ Parameters”…”�”}”(hjùIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M©hjñIubj )�”}”(hhh]”(j)�”}”(hŒ2``const unsigned long *src1`` Pointer to bitmap 1 ”h]”(j)�”}”(hŒ``const unsigned long *src1``”h]”j)�”}”(hjJh]”hŒconst unsigned long *src1”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M¦hjJubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to bitmap 1”h]”hŒPointer to bitmap 1”…”�”}”(hj/Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+Jh´M¦hj,Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+Jh´M¦hj Jubj)�”}”(hŒN``const unsigned long *src2`` Pointer to bitmap 2 will be or'ed with bitmap 1 ”h]”(j)�”}”(hŒ``const unsigned long *src2``”h]”j)�”}”(hjOJh]”hŒconst unsigned long *src2”…”�”}”(hjQJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMJubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M§hjIJubj2)�”}”(hhh]”hÝ)�”}”(hŒ/Pointer to bitmap 2 will be or'ed with bitmap 1”h]”hŒ1Pointer to bitmap 2 will be or’ed with bitmap 1”…”�”}”(hjhJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jdJh´M§hjeJubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjIJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jdJh´M§hj Jubj)�”}”(hŒb``const unsigned long *src3`` Pointer to bitmap 3. Compare to the result of ***src1** | ***src2** ”h]”(j)�”}”(hŒ``const unsigned long *src3``”h]”j)�”}”(hjˆJh]”hŒconst unsigned long *src3”…”�”}”(hjŠJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†Jubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M¨hj‚Jubj2)�”}”(hhh]”hÝ)�”}”(hŒCPointer to bitmap 3. Compare to the result of ***src1** | ***src2**”h]”(hŒ.Pointer to bitmap 3. Compare to the result of ”…”�”}”(hj¡Jh²hh³Nh´Nubjõ)�”}”(hŒ ***src1**”h]”hŒ*src1”…”�”}”(hj©Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡JubhŒ | ”…”�”}”(hj¡Jh²hh³Nh´Nubjõ)�”}”(hŒ ***src2**”h]”hŒ*src2”…”�”}”(hj»Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�Jh´M¨hjžJubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‚Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�Jh´M¨hj Jubj)�”}”(hŒ?``unsigned int nbits`` number of bits in each of these bitmaps ”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hjáJh]”hŒunsigned int nbits”…”�”}”(hjãJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßJubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M©hjÛJubj2)�”}”(hhh]”hÝ)�”}”(hŒ'number of bits in each of these bitmaps”h]”hŒ'number of bits in each of these bitmaps”…”�”}”(hjúJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jöJh´M©hj÷Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÛJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jöJh´M©hj Jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjñIubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjKh]”hŒReturn”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M«hjñIubhÝ)�”}”(hŒ=True if (***src1** | ***src2**) == ***src3**, false otherwise”h]”(hŒ True if (”…”�”}”(hj2Kh²hh³Nh´Nubjõ)�”}”(hŒ ***src1**”h]”hŒ*src1”…”�”}”(hj:Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj2KubhŒ | ”…”�”}”(hj2Kh²hh³Nh´Nubjõ)�”}”(hŒ ***src2**”h]”hŒ*src2”…”�”}”(hjLKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj2KubhŒ) == ”…”�”}”(hj2Kh²hh³Nh´Nubjõ)�”}”(hŒ ***src3**”h]”hŒ*src3”…”�”}”(hj^Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj2KubhŒ, false otherwise”…”�”}”(hj2Kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M«hjñIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_weight_from (C function)”Œc.bitmap_weight_from”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒdunsigned long bitmap_weight_from (const unsigned long *bitmap, unsigned int start, unsigned int end)”h]”j)�”}”(hŒcunsigned long bitmap_weight_from(const unsigned long *bitmap, unsigned int start, unsigned int end)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj—Kh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“Kh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Möubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“Kh²hh³j¥Kh´Möubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj´Kh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“Kh²hh³j¥Kh´Möubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂKh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“Kh²hh³j¥Kh´Möubj{)�”}”(hŒbitmap_weight_from”h]”j�)�”}”(hŒbitmap_weight_from”h]”hŒbitmap_weight_from”…”�”}”(hjÔKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐKubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj“Kh²hh³j¥Kh´Möubjœ)�”}”(hŒC(const unsigned long *bitmap, unsigned int start, unsigned int end)”h]”(j¢)�”}”(hŒconst unsigned long *bitmap”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjðKh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjìKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýKh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìKubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjìKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìKubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj'Lh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjìKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìKubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjCLh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjìKubj�)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hjPLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjèKubj¢)�”}”(hŒunsigned int start”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjiLh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjeLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeLubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj…Lh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjeLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeLubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj¡Lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjèKubj¢)�”}”(hŒunsigned int end”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjºLh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶Lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶Lubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÖLh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶Lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶Lubj�)�”}”(hŒend”h]”hŒend”…”�”}”(hjòLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjèKubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj“Kh²hh³j¥Kh´Möubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�Kh²hh³j¥Kh´Möubah}”(h]”jŠKah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¥Kh´MöhjŒKh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Hamming weight for a memory region”h]”hŒ"Hamming weight for a memory region”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MöhjMh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŒKh²hh³j¥Kh´Möubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj4Mjæj4Mjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX**Parameters** ``const unsigned long *bitmap`` The base address ``unsigned int start`` The bitnumber to starts weighting ``unsigned int end`` the bitmap size in bits **Description** Returns the number of set bits in the region. If **start** >= **end**, return >= end.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj>Mh]”hŒ Parameters”…”�”}”(hj@Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj= **end**, return >= end.”h]”(hŒ1Returns the number of set bits in the region. If ”…”�”}”(hj Nh²hh³Nh´Nubjõ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj(Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj NubhŒ >= ”…”�”}”(hj Nh²hh³Nh´Nubjõ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hj:Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj NubhŒ, return >= end.”…”�”}”(hj Nh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Múhj8Mubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_scatter (C function)”Œc.bitmap_scatter”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒqvoid bitmap_scatter (unsigned long *dst, const unsigned long *src, const unsigned long *mask, unsigned int nbits)”h]”j)�”}”(hŒpvoid bitmap_scatter(unsigned long *dst, const unsigned long *src, const unsigned long *mask, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjsNh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjoNh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚Nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoNh²hh³j�Nh´MWubj{)�”}”(hŒbitmap_scatter”h]”j�)�”}”(hŒbitmap_scatter”h]”hŒbitmap_scatter”…”�”}”(hj”Nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Nubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjoNh²hh³j�Nh´MWubjœ)�”}”(hŒ](unsigned long *dst, const unsigned long *src, const unsigned long *mask, unsigned int nbits)”h]”(j¢)�”}”(hŒunsigned long *dst”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj°Nh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¬Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬Nubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÌNh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¬Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚNh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬Nubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjèNh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¬Nubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hjõNh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬Nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨Nubj¢)�”}”(hŒconst unsigned long *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj Oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Oubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj)Oh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Oubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjEOh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Oubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjaOh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj Oubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hjnOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨Nubj¢)�”}”(hŒconst unsigned long *mask”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj‡Oh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjƒOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒOubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¢Oh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjƒOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒOubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¾Oh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjƒOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒOubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÚOh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjƒOubj�)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjçOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨Nubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjüOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjüOubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjüOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Ph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjüOubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj8Ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjüOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨Nubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjoNh²hh³j�Nh´MWubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjkNh²hh³j�Nh´MWubah}”(h]”jfNah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�Nh´MWhjhNh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Scatter a bitmap according to the given mask”h]”hŒ,Scatter a bitmap according to the given mask”…”�”}”(hjbPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MWhj_Ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjhNh²hh³j�Nh´MWubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjzPjæjzPjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX¥**Parameters** ``unsigned long *dst`` scattered bitmap ``const unsigned long *src`` gathered bitmap ``const unsigned long *mask`` mask representing bits to assign to in the scattered bitmap ``unsigned int nbits`` number of bits in each of these bitmaps **Description** Scatters bitmap with sequential bits according to the given **mask**. **Example** If **src** bitmap = 0x005a, with **mask** = 0x1313, **dst** will be 0x0302. Or in binary form **src** **mask** **dst** 0000000001011010 0001001100010011 0000001100000010 (Bits 0, 1, 2, 3, 4, 5 are copied to the bits 0, 1, 4, 8, 9, 12) A more 'visual' description of the operation:: src: 0000000001011010 |||||| +------+||||| | +----+|||| | |+----+||| | || +-+|| | || | || mask: ...v..vv...v..vv ...0..11...0..10 dst: 0000001100000010 A relationship exists between bitmap_scatter() and bitmap_gather(). See bitmap_gather() for the bitmap gather detailed operations. TL;DR: bitmap_gather() can be seen as the 'reverse' bitmap_scatter() operation.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj„Ph]”hŒ Parameters”…”�”}”(hj†Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚Pubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M[hj~Pubj )�”}”(hhh]”(j)�”}”(hŒ(``unsigned long *dst`` scattered bitmap ”h]”(j)�”}”(hŒ``unsigned long *dst``”h]”j)�”}”(hj£Ph]”hŒunsigned long *dst”…”�”}”(hj¥Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MXhj�Pubj2)�”}”(hhh]”hÝ)�”}”(hŒscattered bitmap”h]”hŒscattered bitmap”…”�”}”(hj¼Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¸Ph´MXhj¹Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¸Ph´MXhjšPubj)�”}”(hŒ-``const unsigned long *src`` gathered bitmap ”h]”(j)�”}”(hŒ``const unsigned long *src``”h]”j)�”}”(hjÜPh]”hŒconst unsigned long *src”…”�”}”(hjÞPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MYhjÖPubj2)�”}”(hhh]”hÝ)�”}”(hŒgathered bitmap”h]”hŒgathered bitmap”…”�”}”(hjõPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jñPh´MYhjòPubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÖPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñPh´MYhjšPubj)�”}”(hŒZ``const unsigned long *mask`` mask representing bits to assign to in the scattered bitmap ”h]”(j)�”}”(hŒ``const unsigned long *mask``”h]”j)�”}”(hjQh]”hŒconst unsigned long *mask”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MZhjQubj2)�”}”(hhh]”hÝ)�”}”(hŒ;mask representing bits to assign to in the scattered bitmap”h]”hŒ;mask representing bits to assign to in the scattered bitmap”…”�”}”(hj.Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j*Qh´MZhj+Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j*Qh´MZhjšPubj)�”}”(hŒ?``unsigned int nbits`` number of bits in each of these bitmaps ”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hjNQh]”hŒunsigned int nbits”…”�”}”(hjPQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLQubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M[hjHQubj2)�”}”(hhh]”hÝ)�”}”(hŒ'number of bits in each of these bitmaps”h]”hŒ'number of bits in each of these bitmaps”…”�”}”(hjgQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jcQh´M[hjdQubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjHQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jcQh´M[hjšPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj~PubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‰Qh]”hŒ Description”…”�”}”(hj‹Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‡Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M]hj~PubhÝ)�”}”(hŒEScatters bitmap with sequential bits according to the given **mask**.”h]”(hŒ 0000000001011010 0001001100010011 0000001100000010”…”�”}”(hjRh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mahj~PubhÝ)�”}”(hŒ@(Bits 0, 1, 2, 3, 4, 5 are copied to the bits 0, 1, 4, 8, 9, 12)”h]”hŒ@(Bits 0, 1, 2, 3, 4, 5 are copied to the bits 0, 1, 4, 8, 9, 12)”…”�”}”(hjbRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mehj~PubhÝ)�”}”(hŒ.A more 'visual' description of the operation::”h]”hŒ1A more ‘visual’ description of the operation:”…”�”}”(hjqRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mghj~Pubj‘H)�”}”(hŒåsrc: 0000000001011010 |||||| +------+||||| | +----+|||| | |+----+||| | || +-+|| | || | || mask: ...v..vv...v..vv ...0..11...0..10 dst: 0000001100000010”h]”hŒåsrc: 0000000001011010 |||||| +------+||||| | +----+|||| | |+----+||| | || +-+|| | || | || mask: ...v..vv...v..vv ...0..11...0..10 dst: 0000001100000010”…”�”}”hj€Rsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mihj~PubhÝ)�”}”(hŒÒA relationship exists between bitmap_scatter() and bitmap_gather(). See bitmap_gather() for the bitmap gather detailed operations. TL;DR: bitmap_gather() can be seen as the 'reverse' bitmap_scatter() operation.”h]”hŒÖA relationship exists between bitmap_scatter() and bitmap_gather(). See bitmap_gather() for the bitmap gather detailed operations. TL;DR: bitmap_gather() can be seen as the ‘reverse’ bitmap_scatter() operation.”…”�”}”(hj�Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mthj~Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_gather (C function)”Œc.bitmap_gather”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒpvoid bitmap_gather (unsigned long *dst, const unsigned long *src, const unsigned long *mask, unsigned int nbits)”h]”j)�”}”(hŒovoid bitmap_gather(unsigned long *dst, const unsigned long *src, const unsigned long *mask, unsigned int nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¾Rh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjºRh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M‡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºRh²hh³jÌRh´M‡ubj{)�”}”(hŒ bitmap_gather”h]”j�)�”}”(hŒ bitmap_gather”h]”hŒ bitmap_gather”…”�”}”(hjßRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛRubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjºRh²hh³jÌRh´M‡ubjœ)�”}”(hŒ](unsigned long *dst, const unsigned long *src, const unsigned long *mask, unsigned int nbits)”h]”(j¢)�”}”(hŒunsigned long *dst”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjûRh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj÷Rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷Rubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj÷Rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Sh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷Rubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj3Sh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷Rubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj@Sh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóRubj¢)�”}”(hŒconst unsigned long *src”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjYSh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjUSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUSubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjtSh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjUSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚Sh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUSubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj�Sh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjUSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUSubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¬Sh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjUSubj�)�”}”(hŒsrc”h]”hŒsrc”…”�”}”(hj¹Sh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjUSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóRubj¢)�”}”(hŒconst unsigned long *mask”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÒSh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÎSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎSubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjíSh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÎSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎSubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÎSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎSubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj%Th²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÎSubj�)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj2Th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóRubj¢)�”}”(hŒunsigned int nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjKTh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjGTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGTubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjgTh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjGTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGTubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hjƒTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjGTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóRubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjºRh²hh³jÌRh´M‡ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¶Rh²hh³jÌRh´M‡ubah}”(h]”j±Rah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÌRh´M‡hj³Rh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Gather a bitmap according to given mask”h]”hŒ'Gather a bitmap according to given mask”…”�”}”(hj­Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M‡hjªTh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj³Rh²hh³jÌRh´M‡ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÅTjæjÅTjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hXV**Parameters** ``unsigned long *dst`` gathered bitmap ``const unsigned long *src`` scattered bitmap ``const unsigned long *mask`` mask representing bits to extract from in the scattered bitmap ``unsigned int nbits`` number of bits in each of these bitmaps **Description** Gathers bitmap with sparse bits according to the given **mask**. **Example** If **src** bitmap = 0x0302, with **mask** = 0x1313, **dst** will be 0x001a. Or in binary form **src** **mask** **dst** 0000001100000010 0001001100010011 0000000000011010 (Bits 0, 1, 4, 8, 9, 12 are copied to the bits 0, 1, 2, 3, 4, 5) A more 'visual' description of the operation:: mask: ...v..vv...v..vv src: 0000001100000010 ^ ^^ ^ 0 | || | 10 | || > 010 | |+--> 1010 | +--> 11010 +----> 011010 dst: 0000000000011010 A relationship exists between bitmap_gather() and bitmap_scatter(). See bitmap_scatter() for the bitmap scatter detailed operations. TL;DR: bitmap_scatter() can be seen as the 'reverse' bitmap_gather() operation. Suppose scattered computed using bitmap_scatter(scattered, src, mask, n). The operation bitmap_gather(result, scattered, mask, n) leads to a result equal or equivalent to src. The result can be 'equivalent' because bitmap_scatter() and bitmap_gather() are not bijective. The result and src values are equivalent in that sense that a call to bitmap_scatter(res, src, mask, n) and a call to bitmap_scatter(res, result, mask, n) will lead to the same res value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÏTh]”hŒ Parameters”…”�”}”(hjÑTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÍTubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M‹hjÉTubj )�”}”(hhh]”(j)�”}”(hŒ'``unsigned long *dst`` gathered bitmap ”h]”(j)�”}”(hŒ``unsigned long *dst``”h]”j)�”}”(hjîTh]”hŒunsigned long *dst”…”�”}”(hjðTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjìTubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MˆhjèTubj2)�”}”(hhh]”hÝ)�”}”(hŒgathered bitmap”h]”hŒgathered bitmap”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jUh´MˆhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjèTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jUh´MˆhjåTubj)�”}”(hŒ.``const unsigned long *src`` scattered bitmap ”h]”(j)�”}”(hŒ``const unsigned long *src``”h]”j)�”}”(hj'Uh]”hŒconst unsigned long *src”…”�”}”(hj)Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M‰hj!Uubj2)�”}”(hhh]”hÝ)�”}”(hŒscattered bitmap”h]”hŒscattered bitmap”…”�”}”(hj@Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jmask representing bits to extract from in the scattered bitmap”h]”hŒ>mask representing bits to extract from in the scattered bitmap”…”�”}”(hjyUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³juUh´MŠhjvUubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjZUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³juUh´MŠhjåTubj)�”}”(hŒ?``unsigned int nbits`` number of bits in each of these bitmaps ”h]”(j)�”}”(hŒ``unsigned int nbits``”h]”j)�”}”(hj™Uh]”hŒunsigned int nbits”…”�”}”(hj›Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M‹hj“Uubj2)�”}”(hhh]”hÝ)�”}”(hŒ'number of bits in each of these bitmaps”h]”hŒ'number of bits in each of these bitmaps”…”�”}”(hj²Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j®Uh´M‹hj¯Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj“Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j®Uh´M‹hjåTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÉTubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÔUh]”hŒ Description”…”�”}”(hjÖUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÒUubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M�hjÉTubhÝ)�”}”(hŒ@Gathers bitmap with sparse bits according to the given **mask**.”h]”(hŒ7Gathers bitmap with sparse bits according to the given ”…”�”}”(hjêUh²hh³Nh´Nubjõ)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hjòUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjêUubhŒ.”…”�”}”(hjêUh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MŒhjÉTubhÝ)�”}”(hŒ **Example**”h]”jõ)�”}”(hj Vh]”hŒExample”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MŽhjÉTubhÝ)�”}”(hŒKIf **src** bitmap = 0x0302, with **mask** = 0x1313, **dst** will be 0x001a.”h]”(hŒIf ”…”�”}”(hj#Vh²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hj+Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#VubhŒ bitmap = 0x0302, with ”…”�”}”(hj#Vh²hh³Nh´Nubjõ)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hj=Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#VubhŒ = 0x1313, ”…”�”}”(hj#Vh²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hjOVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#VubhŒ will be 0x001a.”…”�”}”(hj#Vh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M�hjÉTubhÝ)�”}”(hŒŠOr in binary form **src** **mask** **dst** 0000001100000010 0001001100010011 0000000000011010”h]”(hŒOr in binary form ”…”�”}”(hjhVh²hh³Nh´Nubjõ)�”}”(hŒ**src**”h]”hŒsrc”…”�”}”(hjpVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhVubhŒ ”…”�”}”(hjhVh²hh³Nh´Nubjõ)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hj‚Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhVubhŒ ”…”�”}”(hjhVh²hh³Nh´Nubjõ)�”}”(hŒ**dst**”h]”hŒdst”…”�”}”(hj”Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhVubhŒ> 0000001100000010 0001001100010011 0000000000011010”…”�”}”(hjhVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M‘hjÉTubhÝ)�”}”(hŒ@(Bits 0, 1, 4, 8, 9, 12 are copied to the bits 0, 1, 2, 3, 4, 5)”h]”hŒ@(Bits 0, 1, 4, 8, 9, 12 are copied to the bits 0, 1, 2, 3, 4, 5)”…”�”}”(hj­Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M•hjÉTubhÝ)�”}”(hŒ.A more 'visual' description of the operation::”h]”hŒ1A more ‘visual’ description of the operation:”…”�”}”(hj¼Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M—hjÉTubj‘H)�”}”(hŒÎmask: ...v..vv...v..vv src: 0000001100000010 ^ ^^ ^ 0 | || | 10 | || > 010 | |+--> 1010 | +--> 11010 +----> 011010 dst: 0000000000011010”h]”hŒÎmask: ...v..vv...v..vv src: 0000001100000010 ^ ^^ ^ 0 | || | 10 | || > 010 | |+--> 1010 | +--> 11010 +----> 011010 dst: 0000000000011010”…”�”}”hjËVsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M™hjÉTubhÝ)�”}”(hŒÔA relationship exists between bitmap_gather() and bitmap_scatter(). See bitmap_scatter() for the bitmap scatter detailed operations. TL;DR: bitmap_scatter() can be seen as the 'reverse' bitmap_gather() operation.”h]”hŒØA relationship exists between bitmap_gather() and bitmap_scatter(). See bitmap_scatter() for the bitmap scatter detailed operations. TL;DR: bitmap_scatter() can be seen as the ‘reverse’ bitmap_gather() operation.”…”�”}”(hjÚVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M£hjÉTubhÝ)�”}”(hŒ¯Suppose scattered computed using bitmap_scatter(scattered, src, mask, n). The operation bitmap_gather(result, scattered, mask, n) leads to a result equal or equivalent to src.”h]”hŒ¯Suppose scattered computed using bitmap_scatter(scattered, src, mask, n). The operation bitmap_gather(result, scattered, mask, n) leads to a result equal or equivalent to src.”…”�”}”(hjéVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M§hjÉTubhÝ)�”}”(hXThe result can be 'equivalent' because bitmap_scatter() and bitmap_gather() are not bijective. The result and src values are equivalent in that sense that a call to bitmap_scatter(res, src, mask, n) and a call to bitmap_scatter(res, result, mask, n) will lead to the same res value.”h]”hXThe result can be ‘equivalent’ because bitmap_scatter() and bitmap_gather() are not bijective. The result and src values are equivalent in that sense that a call to bitmap_scatter(res, src, mask, n) and a call to bitmap_scatter(res, result, mask, n) will lead to the same res value.”…”�”}”(hjøVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M«hjÉTubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"bitmap_release_region (C function)”Œc.bitmap_release_region”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOvoid bitmap_release_region (unsigned long *bitmap, unsigned int pos, int order)”h]”j)�”}”(hŒNvoid bitmap_release_region(unsigned long *bitmap, unsigned int pos, int order)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj'Wh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj#Wh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÀubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6Wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#Wh²hh³j5Wh´MÀubj{)�”}”(hŒbitmap_release_region”h]”j�)�”}”(hŒbitmap_release_region”h]”hŒbitmap_release_region”…”�”}”(hjHWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDWubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj#Wh²hh³j5Wh´MÀubjœ)�”}”(hŒ4(unsigned long *bitmap, unsigned int pos, int order)”h]”(j¢)�”}”(hŒunsigned long *bitmap”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjdWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj`Wubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`Wubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj€Wh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj`Wubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`Wubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjœWh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj`Wubj�)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hj©Wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj\Wubj¢)�”}”(hŒunsigned int pos”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÂWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¾Wubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾Wubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÞWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¾Wubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾Wubj�)�”}”(hŒpos”h]”hŒpos”…”�”}”(hjúWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾Wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj\Wubj¢)�”}”(hŒ int order”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXubj�)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj/Xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj\Wubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj#Wh²hh³j5Wh´MÀubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjWh²hh³j5Wh´MÀubah}”(h]”jWah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j5Wh´MÀhjWh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒrelease allocated bitmap region”h]”hŒrelease allocated bitmap region”…”�”}”(hjYXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÀhjVXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjWh²hh³j5Wh´MÀubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjqXjæjqXjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hXg**Parameters** ``unsigned long *bitmap`` array of unsigned longs corresponding to the bitmap ``unsigned int pos`` beginning of bit region to release ``int order`` region size (log base 2 of number of bits) to release **Description** This is the complement to __bitmap_find_free_region() and releases the found region (by clearing it in the bitmap).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj{Xh]”hŒ Parameters”…”�”}”(hj}Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjyXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÄhjuXubj )�”}”(hhh]”(j)�”}”(hŒN``unsigned long *bitmap`` array of unsigned longs corresponding to the bitmap ”h]”(j)�”}”(hŒ``unsigned long *bitmap``”h]”j)�”}”(hjšXh]”hŒunsigned long *bitmap”…”�”}”(hjœXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜Xubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÁhj”Xubj2)�”}”(hhh]”hÝ)�”}”(hŒ3array of unsigned longs corresponding to the bitmap”h]”hŒ3array of unsigned longs corresponding to the bitmap”…”�”}”(hj³Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¯Xh´MÁhj°Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj”Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¯Xh´MÁhj‘Xubj)�”}”(hŒ8``unsigned int pos`` beginning of bit region to release ”h]”(j)�”}”(hŒ``unsigned int pos``”h]”j)�”}”(hjÓXh]”hŒunsigned int pos”…”�”}”(hjÕXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑXubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÂhjÍXubj2)�”}”(hhh]”hÝ)�”}”(hŒ"beginning of bit region to release”h]”hŒ"beginning of bit region to release”…”�”}”(hjìXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèXh´MÂhjéXubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèXh´MÂhj‘Xubj)�”}”(hŒD``int order`` region size (log base 2 of number of bits) to release ”h]”(j)�”}”(hŒ ``int order``”h]”j)�”}”(hj Yh]”hŒ int order”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÃhjYubj2)�”}”(hhh]”hÝ)�”}”(hŒ5region size (log base 2 of number of bits) to release”h]”hŒ5region size (log base 2 of number of bits) to release”…”�”}”(hj%Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!Yh´MÃhj"Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!Yh´MÃhj‘Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjuXubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjGYh]”hŒ Description”…”�”}”(hjIYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÅhjuXubhÝ)�”}”(hŒsThis is the complement to __bitmap_find_free_region() and releases the found region (by clearing it in the bitmap).”h]”hŒsThis is the complement to __bitmap_find_free_region() and releases the found region (by clearing it in the bitmap).”…”�”}”(hj]Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÄhjuXubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#bitmap_allocate_region (C function)”Œc.bitmap_allocate_region”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOint bitmap_allocate_region (unsigned long *bitmap, unsigned int pos, int order)”h]”j)�”}”(hŒNint bitmap_allocate_region(unsigned long *bitmap, unsigned int pos, int order)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŒYh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjˆYh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆYh²hh³jšYh´MÏubj{)�”}”(hŒbitmap_allocate_region”h]”j�)�”}”(hŒbitmap_allocate_region”h]”hŒbitmap_allocate_region”…”�”}”(hj­Yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©Yubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjˆYh²hh³jšYh´MÏubjœ)�”}”(hŒ4(unsigned long *bitmap, unsigned int pos, int order)”h]”(j¢)�”}”(hŒunsigned long *bitmap”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÉYh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÅYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×Yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅYubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjåYh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÅYubj2)�”}”(hŒ ”•h]”hŒ ”…”�”}”(hjóYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅYubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÅYubj�)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁYubj¢)�”}”(hŒunsigned int pos”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj'Zh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj#Zubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#Zubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjCZh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj#Zubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#Zubj�)�”}”(hŒpos”h]”hŒpos”…”�”}”(hj_Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#Zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁYubj¢)�”}”(hŒ int order”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjxZh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjtZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjtZubj�)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj”Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjtZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁYubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjˆYh²hh³jšYh´MÏubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj„Yh²hh³jšYh´MÏubah}”(h]”jYah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jšYh´MÏhj�Yh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate bitmap region”h]”hŒallocate bitmap region”…”�”}”(hj¾Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÏhj»Zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�Yh²hh³jšYh´MÏubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÖZjæjÖZjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX�**Parameters** ``unsigned long *bitmap`` array of unsigned longs corresponding to the bitmap ``unsigned int pos`` beginning of bit region to allocate ``int order`` region size (log base 2 of number of bits) to allocate **Description** Allocate (set bits in) a specified region of a bitmap. **Return** 0 on success, or ``-EBUSY`` if specified region wasn't free (not all bits were zero).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjàZh]”hŒ Parameters”…”�”}”(hjâZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞZubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÓhjÚZubj )�”}”(hhh]”(j)�”}”(hŒN``unsigned long *bitmap`` array of unsigned longs corresponding to the bitmap ”h]”(j)�”}”(hŒ``unsigned long *bitmap``”h]”j)�”}”(hjÿZh]”hŒunsigned long *bitmap”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýZubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÐhjùZubj2)�”}”(hhh]”hÝ)�”}”(hŒ3array of unsigned longs corresponding to the bitmap”h]”hŒ3array of unsigned longs corresponding to the bitmap”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[h´MÐhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[h´MÐhjöZubj)�”}”(hŒ9``unsigned int pos`` beginning of bit region to allocate ”h]”(j)�”}”(hŒ``unsigned int pos``”h]”j)�”}”(hj8[h]”hŒunsigned int pos”…”�”}”(hj:[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÑhj2[ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#beginning of bit region to allocate”h]”hŒ#beginning of bit region to allocate”…”�”}”(hjQ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jM[h´MÑhjN[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jM[h´MÑhjöZubj)�”}”(hŒE``int order`` region size (log base 2 of number of bits) to allocate ”h]”(j)�”}”(hŒ ``int order``”h]”j)�”}”(hjq[h]”hŒ int order”…”�”}”(hjs[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÒhjk[ubj2)�”}”(hhh]”hÝ)�”}”(hŒ6region size (log base 2 of number of bits) to allocate”h]”hŒ6region size (log base 2 of number of bits) to allocate”…”�”}”(hjŠ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†[h´MÒhj‡[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjk[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†[h´MÒhjöZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÚZubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¬[h]”hŒ Description”…”�”}”(hj®[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjª[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÔhjÚZubhÝ)�”}”(hŒ6Allocate (set bits in) a specified region of a bitmap.”h]”hŒ6Allocate (set bits in) a specified region of a bitmap.”…”�”}”(hjÂ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÓhjÚZubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÓ[h]”hŒReturn”…”�”}”(hjÕ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÕhjÚZubhÝ)�”}”(hŒU0 on success, or ``-EBUSY`` if specified region wasn't free (not all bits were zero).”h]”(hŒ0 on success, or ”…”�”}”(hjé[h²hh³Nh´Nubj)�”}”(hŒ ``-EBUSY``”h]”hŒ-EBUSY”…”�”}”(hjñ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé[ubhŒ< if specified region wasn’t free (not all bits were zero).”…”�”}”(hjé[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MÖhjÚZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$bitmap_find_free_region (C function)”Œc.bitmap_find_free_region”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒQint bitmap_find_free_region (unsigned long *bitmap, unsigned int bits, int order)”h]”j)�”}”(hŒPint bitmap_find_free_region(unsigned long *bitmap, unsigned int bits, int order)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj*\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj&\h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Måubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&\h²hh³j8\h´Måubj{)�”}”(hŒbitmap_find_free_region”h]”j�)�”}”(hŒbitmap_find_free_region”h]”hŒbitmap_find_free_region”…”�”}”(hjK\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjG\ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj&\h²hh³j8\h´Måubjœ)�”}”(hŒ5(unsigned long *bitmap, unsigned int bits, int order)”h]”(j¢)�”}”(hŒunsigned long *bitmap”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjg\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjc\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjc\ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjƒ\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjc\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjc\ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŸ\h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjc\ubj�)�”}”(hŒbitmap”h]”hŒbitmap”…”�”}”(hj¬\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjc\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_\ubj¢)�”}”(hŒunsigned int bits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÅ\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁ\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁ\ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjá\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁ\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁ\ubj�)�”}”(hŒbits”h]”hŒbits”…”�”}”(hjý\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁ\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_\ubj¢)�”}”(hŒ int order”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]ubj�)�”}”(hŒorder”h]”hŒorder”…”�”}”(hj2]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj&\h²hh³j8\h´Måubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj"\h²hh³j8\h´Måubah}”(h]”j\ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j8\h´Måhj\h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$find a contiguous aligned mem region”h]”hŒ$find a contiguous aligned mem region”…”�”}”(hj\]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MåhjY]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj\h²hh³j8\h´Måubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjt]jæjt]jç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX1**Parameters** ``unsigned long *bitmap`` array of unsigned longs corresponding to the bitmap ``unsigned int bits`` number of bits in the bitmap ``int order`` region size (log base 2 of number of bits) to find **Description** Find a region of free (zero) bits in a **bitmap** of **bits** bits and allocate them (set them to one). Only consider regions of length a power (**order**) of two, aligned to that power of two, which makes the search algorithm much faster. **Return** the bit offset in bitmap of the allocated region, or -errno on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj~]h]”hŒ Parameters”…”�”}”(hj€]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Méhjx]ubj )�”}”(hhh]”(j)�”}”(hŒN``unsigned long *bitmap`` array of unsigned longs corresponding to the bitmap ”h]”(j)�”}”(hŒ``unsigned long *bitmap``”h]”j)�”}”(hj�]h]”hŒunsigned long *bitmap”…”�”}”(hjŸ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mæhj—]ubj2)�”}”(hhh]”hÝ)�”}”(hŒ3array of unsigned longs corresponding to the bitmap”h]”hŒ3array of unsigned longs corresponding to the bitmap”…”�”}”(hj¶]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j²]h´Mæhj³]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj—]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²]h´Mæhj”]ubj)�”}”(hŒ3``unsigned int bits`` number of bits in the bitmap ”h]”(j)�”}”(hŒ``unsigned int bits``”h]”j)�”}”(hjÖ]h]”hŒunsigned int bits”…”�”}”(hjØ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MçhjÐ]ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bits in the bitmap”h]”hŒnumber of bits in the bitmap”…”�”}”(hjï]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jë]h´Mçhjì]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÐ]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jë]h´Mçhj”]ubj)�”}”(hŒA``int order`` region size (log base 2 of number of bits) to find ”h]”(j)�”}”(hŒ ``int order``”h]”j)�”}”(hj^h]”hŒ int order”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mèhj ^ubj2)�”}”(hhh]”hÝ)�”}”(hŒ2region size (log base 2 of number of bits) to find”h]”hŒ2region size (log base 2 of number of bits) to find”…”�”}”(hj(^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j$^h´Mèhj%^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$^h´Mèhj”]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjx]ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjJ^h]”hŒ Description”…”�”}”(hjL^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjH^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mêhjx]ubhÝ)�”}”(hŒðFind a region of free (zero) bits in a **bitmap** of **bits** bits and allocate them (set them to one). Only consider regions of length a power (**order**) of two, aligned to that power of two, which makes the search algorithm much faster.”h]”(hŒ'Find a region of free (zero) bits in a ”…”�”}”(hj`^h²hh³Nh´Nubjõ)�”}”(hŒ **bitmap**”h]”hŒbitmap”…”�”}”(hjh^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`^ubhŒ of ”…”�”}”(hj`^h²hh³Nh´Nubjõ)�”}”(hŒ**bits**”h]”hŒbits”…”�”}”(hjz^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`^ubhŒU bits and allocate them (set them to one). Only consider regions of length a power (”…”�”}”(hj`^h²hh³Nh´Nubjõ)�”}”(hŒ **order**”h]”hŒorder”…”�”}”(hjŒ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`^ubhŒU) of two, aligned to that power of two, which makes the search algorithm much faster.”…”�”}”(hj`^h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Méhjx]ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj§^h]”hŒReturn”…”�”}”(hj©^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mîhjx]ubhÝ)�”}”(hŒGthe bit offset in bitmap of the allocated region, or -errno on failure.”h]”hŒGthe bit offset in bitmap of the allocated region, or -errno on failure.”…”�”}”(hj½^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mïhjx]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒBITMAP_FROM_U64 (C macro)”Œc.BITMAP_FROM_U64”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBITMAP_FROM_U64”h]”j)�”}”(hŒBITMAP_FROM_U64”h]”j{)�”}”(hŒBITMAP_FROM_U64”h]”j�)�”}”(hjæ^h]”hŒBITMAP_FROM_U64”…”�”}”(hjð^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì^ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjè^h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mÿubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjä^h²hh³j_h´Mÿubah}”(h]”jß^ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j_h´Mÿhjá^h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjá^h²hh³j_h´Mÿubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj_jæj_jç‰jè‰jé‰uh1jh²hhj h³Nh´NubhÝ)�”}”(hŒ``BITMAP_FROM_U64 (n)``”h]”j)�”}”(hj"_h]”hŒBITMAP_FROM_U64 (n)”…”�”}”(hj$_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj _ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mhj h²hubj•)�”}”(hŒ7Represent u64 value in the format suitable for bitmap. ”h]”hÝ)�”}”(hŒ6Represent u64 value in the format suitable for bitmap.”h]”hŒ6Represent u64 value in the format suitable for bitmap.”…”�”}”(hj<_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mÿhj8_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jJ_h´Mÿhj h²hubjë)�”}”(hX**Parameters** ``n`` u64 value **Description** Linux bitmaps are internally arrays of unsigned longs, i.e. 32-bit integers in 32-bit environment, and 64-bit integers in 64-bit one. There are four combinations of endianness and length of the word in linux ABIs: LE64, BE64, LE32 and BE32. On 64-bit kernels 64-bit LE and BE numbers are naturally ordered in bitmaps and therefore don't require any special handling. On 32-bit kernels 32-bit LE ABI orders lo word of 64-bit number in memory prior to hi, and 32-bit BE orders hi word prior to lo. The bitmap on the other hand is represented as an array of 32-bit words and the position of bit N may therefore be calculated as: word #(N/32) and bit #(N``32``) in that word. For example, bit #42 is located at 10th position of 2nd word. It matches 32-bit LE ABI, and we can simply let the compiler store 64-bit values in memory as it usually does. But for BE we need to swap hi and lo words manually. With all that, the macro BITMAP_FROM_U64() does explicit reordering of hi and lo parts of u64. For LE32 it does nothing, and for BE environment it swaps hi and lo words, as is expected by bitmap.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjW_h]”hŒ Parameters”…”�”}”(hjY_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjU_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MhjQ_ubj )�”}”(hhh]”j)�”}”(hŒ``n`` u64 value ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hjv_h]”hŒn”…”�”}”(hjx_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjt_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´Mhjp_ubj2)�”}”(hhh]”hÝ)�”}”(hŒ u64 value”h]”hŒ u64 value”…”�”}”(hj�_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‹_h´MhjŒ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjp_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹_h´Mhjm_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjQ_ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj±_h]”hŒ Description”…”�”}”(hj³_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MhjQ_ubhÝ)�”}”(hŒ…Linux bitmaps are internally arrays of unsigned longs, i.e. 32-bit integers in 32-bit environment, and 64-bit integers in 64-bit one.”h]”hŒ…Linux bitmaps are internally arrays of unsigned longs, i.e. 32-bit integers in 32-bit environment, and 64-bit integers in 64-bit one.”…”�”}”(hjÇ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MhjQ_ubhÝ)�”}”(hŒjThere are four combinations of endianness and length of the word in linux ABIs: LE64, BE64, LE32 and BE32.”h]”hŒjThere are four combinations of endianness and length of the word in linux ABIs: LE64, BE64, LE32 and BE32.”…”�”}”(hjÖ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MhjQ_ubhÝ)�”}”(hŒ}On 64-bit kernels 64-bit LE and BE numbers are naturally ordered in bitmaps and therefore don't require any special handling.”h]”hŒOn 64-bit kernels 64-bit LE and BE numbers are naturally ordered in bitmaps and therefore don’t require any special handling.”…”�”}”(hjå_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MhjQ_ubhÝ)�”}”(hXOn 32-bit kernels 32-bit LE ABI orders lo word of 64-bit number in memory prior to hi, and 32-bit BE orders hi word prior to lo. The bitmap on the other hand is represented as an array of 32-bit words and the position of bit N may therefore be calculated as: word #(N/32) and bit #(N``32``) in that word. For example, bit #42 is located at 10th position of 2nd word. It matches 32-bit LE ABI, and we can simply let the compiler store 64-bit values in memory as it usually does. But for BE we need to swap hi and lo words manually.”h]”hXOn 32-bit kernels 32-bit LE ABI orders lo word of 64-bit number in memory prior to hi, and 32-bit BE orders hi word prior to lo. The bitmap on the other hand is represented as an array of 32-bit words and the position of bit N may therefore be calculated as: word #(N/32) and bit #(N``32``) in that word. For example, bit #42 is located at 10th position of 2nd word. It matches 32-bit LE ABI, and we can simply let the compiler store 64-bit values in memory as it usually does. But for BE we need to swap hi and lo words manually.”…”�”}”(hjô_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M hjQ_ubhÝ)�”}”(hŒÄWith all that, the macro BITMAP_FROM_U64() does explicit reordering of hi and lo parts of u64. For LE32 it does nothing, and for BE environment it swaps hi and lo words, as is expected by bitmap.”h]”hŒÄWith all that, the macro BITMAP_FROM_U64() does explicit reordering of hi and lo parts of u64. For LE32 it does nothing, and for BE environment it swaps hi and lo words, as is expected by bitmap.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MhjQ_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_from_u64 (C function)”Œc.bitmap_from_u64”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3void bitmap_from_u64 (unsigned long *dst, u64 mask)”h]”j)�”}”(hŒ2void bitmap_from_u64(unsigned long *dst, u64 mask)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj2`h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj.`h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.`h²hh³j@`h´M ubj{)�”}”(hŒbitmap_from_u64”h]”j�)�”}”(hŒbitmap_from_u64”h]”hŒbitmap_from_u64”…”�”}”(hjS`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjO`ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj.`h²hh³j@`h´M ubjœ)�”}”(hŒ(unsigned long *dst, u64 mask)”h]”(j¢)�”}”(hŒunsigned long *dst”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjo`h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjk`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk`ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‹`h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjk`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk`ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj§`h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjk`ubj�)�”}”(hŒdst”h]”hŒdst”…”�”}”(hj´`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjk`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjg`ubj¢)�”}”(hŒu64 mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjÐ`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍ`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÒ`Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jU`sbŒc.bitmap_from_u64”†”asbuh1hhjÉ`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉ`ubj�)�”}”(hŒmask”h]”hŒmask”…”�”}”(hjþ`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉ`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjg`ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj.`h²hh³j@`h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj*`h²hh³j@`h´M ubah}”(h]”j%`ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j@`h´M hj'`h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ Check and swap words within u64.”h]”hŒ Check and swap words within u64.”…”�”}”(hj(ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M hj%ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj'`h²hh³j@`h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj@ajæj@ajç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hXE**Parameters** ``unsigned long *dst`` destination bitmap ``u64 mask`` source bitmap **Description** In 32-bit Big Endian kernel, when using ``(u32 *)(:c:type:`val`)[*]`` to read u64 mask, we will get the wrong word. That is ``(u32 *)(:c:type:`val`)[0]`` gets the upper 32 bits, but we expect the lower 32-bits of u64.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjJah]”hŒ Parameters”…”�”}”(hjLah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjHaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M$hjDaubj )�”}”(hhh]”(j)�”}”(hŒ*``unsigned long *dst`` destination bitmap ”h]”(j)�”}”(hŒ``unsigned long *dst``”h]”j)�”}”(hjiah]”hŒunsigned long *dst”…”�”}”(hjkah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjgaubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M"hjcaubj2)�”}”(hhh]”hÝ)�”}”(hŒdestination bitmap”h]”hŒdestination bitmap”…”�”}”(hj‚ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j~ah´M"hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjcaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~ah´M"hj`aubj)�”}”(hŒ``u64 mask`` source bitmap ”h]”(j)�”}”(hŒ ``u64 mask``”h]”j)�”}”(hj¢ah]”hŒu64 mask”…”�”}”(hj¤ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M!hjœaubj2)�”}”(hhh]”hÝ)�”}”(hŒ source bitmap”h]”hŒ source bitmap”…”�”}”(hj»ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·ah´M!hj¸aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·ah´M!hj`aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjDaubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÝah]”hŒ Description”…”�”}”(hjßah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M#hjDaubhÝ)�”}”(hŒÙIn 32-bit Big Endian kernel, when using ``(u32 *)(:c:type:`val`)[*]`` to read u64 mask, we will get the wrong word. That is ``(u32 *)(:c:type:`val`)[0]`` gets the upper 32 bits, but we expect the lower 32-bits of u64.”h]”(hŒ(In 32-bit Big Endian kernel, when using ”…”�”}”(hjóah²hh³Nh´Nubj)�”}”(hŒ``(u32 *)(:c:type:`val`)[*]``”h]”hŒ(u32 *)(:c:type:`val`)[*]”…”�”}”(hjûah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjóaubhŒ7 to read u64 mask, we will get the wrong word. That is ”…”�”}”(hjóah²hh³Nh´Nubj)�”}”(hŒ``(u32 *)(:c:type:`val`)[0]``”h]”hŒ(u32 *)(:c:type:`val`)[0]”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjóaubhŒ@ gets the upper 32 bits, but we expect the lower 32-bits of u64.”…”�”}”(hjóah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M#hjDaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_read (C function)”Œ c.bitmap_read”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ^unsigned long bitmap_read (const unsigned long *map, unsigned long start, unsigned long nbits)”h]”j)�”}”(hŒ]unsigned long bitmap_read(const unsigned long *map, unsigned long start, unsigned long nbits)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjFbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjBbh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M/ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBbh²hh³jTbh´M/ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjcbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjBbh²hh³jTbh´M/ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBbh²hh³jTbh´M/ubj{)�”}”(hŒ bitmap_read”h]”j�)�”}”(hŒ bitmap_read”h]”hŒ bitmap_read”…”�”}”(hjƒbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjBbh²hh³jTbh´M/ubjœ)�”}”(hŒD(const unsigned long *map, unsigned long start, unsigned long nbits)”h]”(j¢)�”}”(hŒconst unsigned long *map”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjŸbh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj›bubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›bubj )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjºbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›bubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›bubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÖbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›bubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›bubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjòbh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj›bubj�)�”}”(hŒmap”h]”hŒmap”…”�”}”(hjÿbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj—bubj¢)�”}”(hŒunsigned long start”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjcubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj4ch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjcubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjPch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj—bubj¢)�”}”(hŒunsigned long nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjich²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjecubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjecubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj…ch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjecubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjecubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hj¡ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjecubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj—bubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjBbh²hh³jTbh´M/ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj>bh²hh³jTbh´M/ubah}”(h]”j9bah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jTbh´M/hj;bh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-read a value of n-bits from the memory region”h]”hŒ-read a value of n-bits from the memory region”…”�”}”(hjËch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M/hjÈch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj;bh²hh³jTbh´M/ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjãcjæjãcjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hX”**Parameters** ``const unsigned long *map`` address to the bitmap memory region ``unsigned long start`` bit offset of the n-bit value ``unsigned long nbits`` size of value in bits, nonzero, up to BITS_PER_LONG **Return** value of **nbits** bits located at the **start** bit offset within the **map** memory region. For **nbits** = 0 and **nbits** > BITS_PER_LONG the return value is undefined.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjích]”hŒ Parameters”…”�”}”(hjïch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjëcubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M3hjçcubj )�”}”(hhh]”(j)�”}”(hŒA``const unsigned long *map`` address to the bitmap memory region ”h]”(j)�”}”(hŒ``const unsigned long *map``”h]”j)�”}”(hj dh]”hŒconst unsigned long *map”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj dubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M0hjdubj2)�”}”(hhh]”hÝ)�”}”(hŒ#address to the bitmap memory region”h]”hŒ#address to the bitmap memory region”…”�”}”(hj%dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!dh´M0hj"dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!dh´M0hjdubj)�”}”(hŒ6``unsigned long start`` bit offset of the n-bit value ”h]”(j)�”}”(hŒ``unsigned long start``”h]”j)�”}”(hjEdh]”hŒunsigned long start”…”�”}”(hjGdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCdubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M1hj?dubj2)�”}”(hhh]”hÝ)�”}”(hŒbit offset of the n-bit value”h]”hŒbit offset of the n-bit value”…”�”}”(hj^dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jZdh´M1hj[dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj?dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZdh´M1hjdubj)�”}”(hŒL``unsigned long nbits`` size of value in bits, nonzero, up to BITS_PER_LONG ”h]”(j)�”}”(hŒ``unsigned long nbits``”h]”j)�”}”(hj~dh]”hŒunsigned long nbits”…”�”}”(hj€dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|dubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M2hjxdubj2)�”}”(hhh]”hÝ)�”}”(hŒ3size of value in bits, nonzero, up to BITS_PER_LONG”h]”hŒ3size of value in bits, nonzero, up to BITS_PER_LONG”…”�”}”(hj—dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j“dh´M2hj”dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjxdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j“dh´M2hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjçcubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¹dh]”hŒReturn”…”�”}”(hj»dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·dubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M4hjçcubhÝ)�”}”(hŒ¬value of **nbits** bits located at the **start** bit offset within the **map** memory region. For **nbits** = 0 and **nbits** > BITS_PER_LONG the return value is undefined.”h]”(hŒ value of ”…”�”}”(hjÏdh²hh³Nh´Nubjõ)�”}”(hŒ **nbits**”h]”hŒnbits”…”�”}”(hj×dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏdubhŒ bits located at the ”…”�”}”(hjÏdh²hh³Nh´Nubjõ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjédh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏdubhŒ bit offset within the ”…”�”}”(hjÏdh²hh³Nh´Nubjõ)�”}”(hŒ**map**”h]”hŒmap”…”�”}”(hjûdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏdubhŒ memory region. For ”…”�”}”(hjÏdh²hh³Nh´Nubjõ)�”}”(hŒ **nbits**”h]”hŒnbits”…”�”}”(hj eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏdubhŒ = 0 and ”…”�”}”(hjÏdh²hh³Nh´Nubjõ)�”}”(hŒ **nbits**”h]”hŒnbits”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏdubhŒ/ > BITS_PER_LONG the return value is undefined.”…”�”}”(hjÏdh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´M4hjçcubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbitmap_write (C function)”Œc.bitmap_write”hNt”auh1hýhj h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒevoid bitmap_write (unsigned long *map, unsigned long value, unsigned long start, unsigned long nbits)”h]”j)�”}”(hŒdvoid bitmap_write(unsigned long *map, unsigned long value, unsigned long start, unsigned long nbits)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjXeh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjTeh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTeh²hh³jfeh´MLubj{)�”}”(hŒ bitmap_write”h]”j�)�”}”(hŒ bitmap_write”h]”hŒ bitmap_write”…”�”}”(hjyeh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjueubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjTeh²hh³jfeh´MLubjœ)�”}”(hŒS(unsigned long *map, unsigned long value, unsigned long start, unsigned long nbits)”h]”(j¢)�”}”(hŒunsigned long *map”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj•eh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘eubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj±eh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘eubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÍeh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‘eubj�)�”}”(hŒmap”h]”hŒmap”…”�”}”(hjÚeh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�eubj¢)�”}”(hŒunsigned long value”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjóeh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjïeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïeubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjïeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïeubj�)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hj+fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�eubj¢)�”}”(hŒunsigned long start”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjDfh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@fubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj`fh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@fubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj|fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�eubj¢)�”}”(hŒunsigned long nbits”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj•fh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘fubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj±fh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘fubj�)�”}”(hŒnbits”h]”hŒnbits”…”�”}”(hjÍfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�eubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjTeh²hh³jfeh´MLubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjPeh²hh³jfeh´MLubah}”(h]”jKeah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jfeh´MLhjMeh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(write n-bit value within a memory region”h]”hŒ(write n-bit value within a memory region”…”�”}”(hj÷fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MLhjôfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjMeh²hh³jfeh´MLubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjgjæjgjç‰jè‰jé‰uh1jh²hhj h³Nh´Nubjë)�”}”(hXG**Parameters** ``unsigned long *map`` address to the bitmap memory region ``unsigned long value`` value to write, clamped to nbits ``unsigned long start`` bit offset of the n-bit value ``unsigned long nbits`` size of value in bits, nonzero, up to BITS_PER_LONG. **Description** bitmap_write() behaves as-if implemented as **nbits** calls of __assign_bit(), i.e. bits beyond **nbits** are ignored: for (bit = 0; bit < nbits; bit++) __assign_bit(start + bit, bitmap, val & BIT(bit)); For **nbits** == 0 and **nbits** > BITS_PER_LONG no writes are performed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjgh]”hŒ Parameters”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MPhjgubj )�”}”(hhh]”(j)�”}”(hŒ;``unsigned long *map`` address to the bitmap memory region ”h]”(j)�”}”(hŒ``unsigned long *map``”h]”j)�”}”(hj8gh]”hŒunsigned long *map”…”�”}”(hj:gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6gubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MMhj2gubj2)�”}”(hhh]”hÝ)�”}”(hŒ#address to the bitmap memory region”h]”hŒ#address to the bitmap memory region”…”�”}”(hjQgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jMgh´MMhjNgubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jMgh´MMhj/gubj)�”}”(hŒ9``unsigned long value`` value to write, clamped to nbits ”h]”(j)�”}”(hŒ``unsigned long value``”h]”j)�”}”(hjqgh]”hŒunsigned long value”…”�”}”(hjsgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjogubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MNhjkgubj2)�”}”(hhh]”hÝ)�”}”(hŒ value to write, clamped to nbits”h]”hŒ value to write, clamped to nbits”…”�”}”(hjŠgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†gh´MNhj‡gubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjkgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†gh´MNhj/gubj)�”}”(hŒ6``unsigned long start`` bit offset of the n-bit value ”h]”(j)�”}”(hŒ``unsigned long start``”h]”j)�”}”(hjªgh]”hŒunsigned long start”…”�”}”(hj¬gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨gubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MOhj¤gubj2)�”}”(hhh]”hÝ)�”}”(hŒbit offset of the n-bit value”h]”hŒbit offset of the n-bit value”…”�”}”(hjÃgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¿gh´MOhjÀgubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¤gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿gh´MOhj/gubj)�”}”(hŒM``unsigned long nbits`` size of value in bits, nonzero, up to BITS_PER_LONG. ”h]”(j)�”}”(hŒ``unsigned long nbits``”h]”j)�”}”(hjãgh]”hŒunsigned long nbits”…”�”}”(hjågh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjágubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MPhjÝgubj2)�”}”(hhh]”hÝ)�”}”(hŒ4size of value in bits, nonzero, up to BITS_PER_LONG.”h]”hŒ4size of value in bits, nonzero, up to BITS_PER_LONG.”…”�”}”(hjügh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jøgh´MPhjùgubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÝgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jøgh´MPhj/gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjgubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjhh]”hŒ Description”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MRhjgubhÝ)�”}”(hŒvbitmap_write() behaves as-if implemented as **nbits** calls of __assign_bit(), i.e. bits beyond **nbits** are ignored:”h]”(hŒ,bitmap_write() behaves as-if implemented as ”…”�”}”(hj4hh²hh³Nh´Nubjõ)�”}”(hŒ **nbits**”h]”hŒnbits”…”�”}”(hj BITS_PER_LONG no writes are performed.”h]”(hŒFor ”…”�”}”(hj«hh²hh³Nh´Nubjõ)�”}”(hŒ **nbits**”h]”hŒnbits”…”�”}”(hj³hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj«hubhŒ == 0 and ”…”�”}”(hj«hh²hh³Nh´Nubjõ)�”}”(hŒ **nbits**”h]”hŒnbits”…”�”}”(hjÅhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj«hubhŒ) > BITS_PER_LONG no writes are performed.”…”�”}”(hj«hh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:84: ./include/linux/bitmap.h”h´MWhjgubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj h²hh³Nh´Nubeh}”(h]”Œbitmap-operations”ah ]”h"]”Œbitmap operations”ah$]”h&]”uh1hµhj?æh²hh³hÊh´K@ubh¶)�”}”(hhh]”(h»)�”}”(hŒCommand-line Parsing”h]”hŒCommand-line Parsing”…”�”}”(hjðhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjíhh²hh³hÊh´KXubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œget_option (C function)”Œ c.get_option”hNt”auh1hýhjíhh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ&int get_option (char **str, int *pint)”h]”j)�”}”(hŒ%int get_option(char **str, int *pint)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjih²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjih²hh³j%ih´K$ubj{)�”}”(hŒ get_option”h]”j�)�”}”(hŒ get_option”h]”hŒ get_option”…”�”}”(hj8ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4iubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjih²hh³j%ih´K$ubjœ)�”}”(hŒ(char **str, int *pint)”h]”(j¢)�”}”(hŒ char **str”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjTih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjPiubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPiubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjpih²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjPiubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj}ih²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjPiubj�)�”}”(hŒstr”h]”hŒstr”…”�”}”(hjŠih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjLiubj¢)�”}”(hŒ int *pint”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj£ih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŸiubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŸiubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¿ih²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjŸiubj�)�”}”(hŒpint”h]”hŒpint”…”�”}”(hjÌih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjLiubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjih²hh³j%ih´K$ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjih²hh³j%ih´K$ubah}”(h]”j iah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j%ih´K$hj ih²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Parse integer from an option string”h]”hŒ#Parse integer from an option string”…”�”}”(hjöih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K$hjóih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj ih²hh³j%ih´K$ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjjæjjjç‰jè‰jé‰uh1jh²hhjíhh³Nh´Nubjë)�”}”(hXT**Parameters** ``char **str`` option string ``int *pint`` (optional output) integer value parsed from **str** **Description** Read an int from an option string; if available accept a subsequent comma as well. When **pint** is NULL the function can be used as a validator of the current option in the string. Leading hyphen without integer is no integer case, but we consume it for the sake of simplification. **Return** 0 - no int in string 1 - int found, no subsequent comma 2 - int found including a subsequent comma 3 - hyphen found to denote a range”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjjh]”hŒ Parameters”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K(hjjubj )�”}”(hhh]”(j)�”}”(hŒ``char **str`` option string ”h]”(j)�”}”(hŒ``char **str``”h]”j)�”}”(hj7jh]”hŒ char **str”…”�”}”(hj9jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5jubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K%hj1jubj2)�”}”(hhh]”hÝ)�”}”(hŒ option string”h]”hŒ option string”…”�”}”(hjPjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jLjh´K%hjMjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1jubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jLjh´K%hj.jubj)�”}”(hŒB``int *pint`` (optional output) integer value parsed from **str** ”h]”(j)�”}”(hŒ ``int *pint``”h]”j)�”}”(hjpjh]”hŒ int *pint”…”�”}”(hjrjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjnjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K&hjjjubj2)�”}”(hhh]”hÝ)�”}”(hŒ3(optional output) integer value parsed from **str**”h]”(hŒ,(optional output) integer value parsed from ”…”�”}”(hj‰jh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hj‘jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‰jubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j…jh´K&hj†jubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…jh´K&hj.jubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¹jh]”hŒ Description”…”�”}”(hj»jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K(hjjubj•)�”}”(hXRead an int from an option string; if available accept a subsequent comma as well. When **pint** is NULL the function can be used as a validator of the current option in the string. Leading hyphen without integer is no integer case, but we consume it for the sake of simplification. ”h]”(hÝ)�”}”(hŒRRead an int from an option string; if available accept a subsequent comma as well.”h]”hŒRRead an int from an option string; if available accept a subsequent comma as well.”…”�”}”(hjÓjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K'hjÏjubhÝ)�”}”(hŒbWhen **pint** is NULL the function can be used as a validator of the current option in the string.”h]”(hŒWhen ”…”�”}”(hjâjh²hh³Nh´Nubjõ)�”}”(hŒ**pint**”h]”hŒpint”…”�”}”(hjêjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâjubhŒU is NULL the function can be used as a validator of the current option in the string.”…”�”}”(hjâjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K*hjÏjubhÝ)�”}”(hŒdLeading hyphen without integer is no integer case, but we consume it for the sake of simplification.”h]”hŒdLeading hyphen without integer is no integer case, but we consume it for the sake of simplification.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K.hjÏjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jájh´K'hjjubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjkh]”hŒReturn”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K1hjjubhÝ)�”}”(hŒ…0 - no int in string 1 - int found, no subsequent comma 2 - int found including a subsequent comma 3 - hyphen found to denote a range”h]”hŒ…0 - no int in string 1 - int found, no subsequent comma 2 - int found including a subsequent comma 3 - hyphen found to denote a range”…”�”}”(hj0kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K.hjjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjíhh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œget_options (C function)”Œ c.get_options”hNt”auh1hýhjíhh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:char * get_options (const char *str, int nints, int *ints)”h]”j)�”}”(hŒ8char *get_options(const char *str, int nints, int *ints)”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj_kh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj[kh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´KSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[kh²hh³jmkh´KSubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj|kh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj[kh²hh³jmkh´KSubj{)�”}”(hŒ get_options”h]”j�)�”}”(hŒ get_options”h]”hŒ get_options”…”�”}”(hj�kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰kubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj[kh²hh³jmkh´KSubjœ)�”}”(hŒ'(const char *str, int nints, int *ints)”h]”(j¢)�”}”(hŒconst char *str”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj©kh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¥kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥kubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÄkh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¥kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥kubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjàkh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¥kubj�)�”}”(hŒstr”h]”hŒstr”…”�”}”(hjíkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¡kubj¢)�”}”(hŒ int nints”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjlubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjlubj�)�”}”(hŒnints”h]”hŒnints”…”�”}”(hj"lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¡kubj¢)�”}”(hŒ int *ints”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj;lh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj7lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7lubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjWlh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj7lubj�)�”}”(hŒints”h]”hŒints”…”�”}”(hjdlh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¡kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj[kh²hh³jmkh´KSubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjWkh²hh³jmkh´KSubah}”(h]”jRkah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jmkh´KShjTkh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Parse a string into a list of integers”h]”hŒ&Parse a string into a list of integers”…”�”}”(hjŽlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´KShj‹lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjTkh²hh³jmkh´KSubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¦ljæj¦ljç‰jè‰jé‰uh1jh²hhjíhh³Nh´Nubjë)�”}”(hXƒ**Parameters** ``const char *str`` String to be parsed ``int nints`` size of integer array ``int *ints`` integer array (must have room for at least one element) **Description** This function parses a string containing a comma-separated list of integers, a hyphen-separated range of _positive_ integers, or a combination of both. The parse halts when the array is full, or when no more numbers can be retrieved from the string. When **nints** is 0, the function just validates the given **str** and returns the amount of parseable integers as described below. The first element is filled by the number of collected integers in the range. The rest is what was parsed from the **str**. Return value is the character in the string which caused the parse to end (typically a null terminator, if **str** is completely parseable).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj°lh]”hŒ Parameters”…”�”}”(hj²lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®lubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´KWhjªlubj )�”}”(hhh]”(j)�”}”(hŒ(``const char *str`` String to be parsed ”h]”(j)�”}”(hŒ``const char *str``”h]”j)�”}”(hjÏlh]”hŒconst char *str”…”�”}”(hjÑlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍlubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´KThjÉlubj2)�”}”(hhh]”hÝ)�”}”(hŒString to be parsed”h]”hŒString to be parsed”…”�”}”(hjèlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jälh´KThjålubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÉlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jälh´KThjÆlubj)�”}”(hŒ$``int nints`` size of integer array ”h]”(j)�”}”(hŒ ``int nints``”h]”j)�”}”(hjmh]”hŒ int nints”…”�”}”(hj mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´KUhjmubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of integer array”h]”hŒsize of integer array”…”�”}”(hj!mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jmh´KUhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmh´KUhjÆlubj)�”}”(hŒF``int *ints`` integer array (must have room for at least one element) ”h]”(j)�”}”(hŒ ``int *ints``”h]”j)�”}”(hjAmh]”hŒ int *ints”…”�”}”(hjCmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?mubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´KVhj;mubj2)�”}”(hhh]”hÝ)�”}”(hŒ7integer array (must have room for at least one element)”h]”hŒ7integer array (must have room for at least one element)”…”�”}”(hjZmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jVmh´KVhjWmubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj;mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jVmh´KVhjÆlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjªlubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj|mh]”hŒ Description”…”�”}”(hj~mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjzmubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´KXhjªlubj•)�”}”(hX‹This function parses a string containing a comma-separated list of integers, a hyphen-separated range of _positive_ integers, or a combination of both. The parse halts when the array is full, or when no more numbers can be retrieved from the string. When **nints** is 0, the function just validates the given **str** and returns the amount of parseable integers as described below. The first element is filled by the number of collected integers in the range. The rest is what was parsed from the **str**. Return value is the character in the string which caused the parse to end (typically a null terminator, if **str** is completely parseable).”h]”(hÝ)�”}”(hŒúThis function parses a string containing a comma-separated list of integers, a hyphen-separated range of _positive_ integers, or a combination of both. The parse halts when the array is full, or when no more numbers can be retrieved from the string.”h]”hŒúThis function parses a string containing a comma-separated list of integers, a hyphen-separated range of _positive_ integers, or a combination of both. The parse halts when the array is full, or when no more numbers can be retrieved from the string.”…”�”}”(hj–mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´KWhj’mubhÝ)�”}”(hŒƒWhen **nints** is 0, the function just validates the given **str** and returns the amount of parseable integers as described below.”h]”(hŒWhen ”…”�”}”(hj¥mh²hh³Nh´Nubjõ)�”}”(hŒ **nints**”h]”hŒnints”…”�”}”(hj­mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥mubhŒ- is 0, the function just validates the given ”…”�”}”(hj¥mh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hj¿mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥mubhŒA and returns the amount of parseable integers as described below.”…”�”}”(hj¥mh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´K]hj’mubhÝ)�”}”(hŒ{The first element is filled by the number of collected integers in the range. The rest is what was parsed from the **str**.”h]”(hŒsThe first element is filled by the number of collected integers in the range. The rest is what was parsed from the ”…”�”}”(hjØmh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hjàmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØmubhŒ.”…”�”}”(hjØmh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´Kahj’mubhÝ)�”}”(hŒŒReturn value is the character in the string which caused the parse to end (typically a null terminator, if **str** is completely parseable).”h]”(hŒkReturn value is the character in the string which caused the parse to end (typically a null terminator, if ”…”�”}”(hjùmh²hh³Nh´Nubjõ)�”}”(hŒ**str**”h]”hŒstr”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjùmubhŒ is completely parseable).”…”�”}”(hjùmh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:90: ./lib/cmdline.c”h´Kdhj’mubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¤mh´KWhjªlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjíhh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemparse (C function)”Œ c.memparse”hNt”auh1hýhjíh•h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjah"]”h$]”h&]”uh1j1hjah"]”h$]”h&]”uh1j1hjah"]”h$]”h&]”uh1j1hj±nubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÐnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj±nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±nubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjình²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj±nubj�)�”}”(hŒptr”h]”hŒptr”…”�”}”(hjùnh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj­nubj¢)�”}”(hŒ char **retptr”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjoubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj.oh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjoubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj;oh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjoubj�)�”}”(hŒretptr”h]”hŒretptr”…”�”}”(hjHoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj­nubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjah"]”h$]”h&]”uh1j1hjÎqh²hh³jàqh´Kubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjïqh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÎqh²hh³jàqh´Kubj{)�”}”(hŒERR_PTR”h]”j�)�”}”(hŒERR_PTR”h]”hŒERR_PTR”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjüqubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÎqh²hh³jàqh´Kubjœ)�”}”(hŒ (long error)”h]”j¢)�”}”(hŒ long error”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjrubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjrubj�)�”}”(hŒerror”h]”hŒerror”…”�”}”(hj8rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjrubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÎqh²hh³jàqh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÊqh²hh³jàqh´Kubah}”(h]”jÅqah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jàqh´KhjÇqh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCreate an error pointer.”h]”hŒCreate an error pointer.”…”�”}”(hjbrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Khj_rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÇqh²hh³jàqh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjzrjæjzrjç‰jè‰jé‰uh1jh²hhjžph³Nh´Nubjë)�”}”(hX**Parameters** ``long error`` A negative error code. **Description** Encodes **error** into a pointer value. Users should consider the result opaque and not assume anything about how the error is encoded. **Return** A pointer with **error** encoded within its value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj„rh]”hŒ Parameters”…”�”}”(hj†rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚rubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K#hj~rubj )�”}”(hhh]”j)�”}”(hŒ&``long error`` A negative error code. ”h]”(j)�”}”(hŒ``long error``”h]”j)�”}”(hj£rh]”hŒ long error”…”�”}”(hj¥rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡rubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K hj�rubj2)�”}”(hhh]”hÝ)�”}”(hŒA negative error code.”h]”hŒA negative error code.”…”�”}”(hj¼rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¸rh´K hj¹rubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�rubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¸rh´K hjšrubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj~rubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÞrh]”hŒ Description”…”�”}”(hjàrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜrubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K"hj~rubhÝ)�”}”(hŒ‡Encodes **error** into a pointer value. Users should consider the result opaque and not assume anything about how the error is encoded.”h]”(hŒEncodes ”…”�”}”(hjôrh²hh³Nh´Nubjõ)�”}”(hŒ **error**”h]”hŒerror”…”�”}”(hjürh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjôrubhŒv into a pointer value. Users should consider the result opaque and not assume anything about how the error is encoded.”…”�”}”(hjôrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K!hj~rubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjsh]”hŒReturn”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K$hj~rubhÝ)�”}”(hŒ2A pointer with **error** encoded within its value.”h]”(hŒA pointer with ”…”�”}”(hj-sh²hh³Nh´Nubjõ)�”}”(hŒ **error**”h]”hŒerror”…”�”}”(hj5sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-subhŒ encoded within its value.”…”�”}”(hj-sh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K%hj~rubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjžph²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒINIT_ERR_PTR (C macro)”Œc.INIT_ERR_PTR”hNt”auh1hýhjžph²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ INIT_ERR_PTR”h]”j)�”}”(hŒ INIT_ERR_PTR”h]”j{)�”}”(hŒ INIT_ERR_PTR”h]”j�)�”}”(hjhsh]”hŒ INIT_ERR_PTR”…”�”}”(hjrsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnsubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjjsh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K-ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjfsh²hh³j…sh´K-ubah}”(h]”jasah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j…sh´K-hjcsh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjcsh²hh³j…sh´K-ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjžsjæjžsjç‰jè‰jé‰uh1jh²hhjžph³Nh´NubhÝ)�”}”(hŒ``INIT_ERR_PTR (error)``”h]”j)�”}”(hj¤sh]”hŒINIT_ERR_PTR (error)”…”�”}”(hj¦sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢subah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K/hjžph²hubj•)�”}”(hŒInit a const error pointer. ”h]”hÝ)�”}”(hŒInit a const error pointer.”h]”hŒInit a const error pointer.”…”�”}”(hj¾sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K-hjºsubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÌsh´K-hjžph²hubjë)�”}”(hŒ**Parameters** ``error`` A negative error code. **Description** Like ERR_PTR(), but usable to initialize static variables.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÙsh]”hŒ Parameters”…”�”}”(hjÛsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj×subah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K1hjÓsubj )�”}”(hhh]”j)�”}”(hŒ!``error`` A negative error code. ”h]”(j)�”}”(hŒ ``error``”h]”j)�”}”(hjøsh]”hŒerror”…”�”}”(hjúsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjösubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K.hjòsubj2)�”}”(hhh]”hÝ)�”}”(hŒA negative error code.”h]”hŒA negative error code.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j th´K.hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjòsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j th´K.hjïsubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÓsubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj3th]”hŒ Description”…”�”}”(hj5th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1tubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K0hjÓsubhÝ)�”}”(hŒ:Like ERR_PTR(), but usable to initialize static variables.”h]”hŒ:Like ERR_PTR(), but usable to initialize static variables.”…”�”}”(hjIth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K/hjÓsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjžph²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒPTR_ERR (C function)”Œ c.PTR_ERR”hNt”auh1hýhjžph²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ&long PTR_ERR (__force const void *ptr)”h]”j)�”}”(hŒ%long PTR_ERR(__force const void *ptr)”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjxth²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjtth²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjtth²hh³j†th´K;ubj{)�”}”(hŒPTR_ERR”h]”j�)�”}”(hŒPTR_ERR”h]”hŒPTR_ERR”…”�”}”(hj™th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•tubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjtth²hh³j†th´K;ubjœ)�”}”(hŒ(__force const void *ptr)”h]”j¢)�”}”(hŒ__force const void *ptr”h]”(hŒ__force”…”�”}”(hj±th²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±tubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÇth²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj±tubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔth²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±tubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjâth²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj±tubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðth²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±tubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjþth²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj±tubj�)�”}”(hŒptr”h]”hŒptr”…”�”}”(hj uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj­tubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjtth²hh³j†th´K;ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjpth²hh³j†th´K;ubah}”(h]”jktah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j†th´K;hjmth²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Extract the error code from an error pointer.”h]”hŒ-Extract the error code from an error pointer.”…”�”}”(hj5uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K;hj2uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjmth²hh³j†th´K;ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjMujæjMujç‰jè‰jé‰uh1jh²hhjžph³Nh´Nubjë)�”}”(hŒk**Parameters** ``__force const void *ptr`` An error pointer. **Return** The error code within **ptr**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjWuh]”hŒ Parameters”…”�”}”(hjYuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjUuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K?hjQuubj )�”}”(hhh]”j)�”}”(hŒ.``__force const void *ptr`` An error pointer. ”h]”(j)�”}”(hŒ``__force const void *ptr``”h]”j)�”}”(hjvuh]”hŒ__force const void *ptr”…”�”}”(hjxuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtuubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KhjQuubhÝ)�”}”(hŒThe error code within **ptr**.”h]”(hŒThe error code within ”…”�”}”(hjÇuh²hh³Nh´Nubjõ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjÏuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÇuubhŒ.”…”�”}”(hjÇuh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K=hjQuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjžph²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒIS_ERR (C function)”Œc.IS_ERR”hNt”auh1hýhjžph²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%bool IS_ERR (__force const void *ptr)”h]”j)�”}”(hŒ$bool IS_ERR(__force const void *ptr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjvh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvh²hh³jvh´KHubj{)�”}”(hŒIS_ERR”h]”j�)�”}”(hŒIS_ERR”h]”hŒIS_ERR”…”�”}”(hj(vh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$vubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjvh²hh³jvh´KHubjœ)�”}”(hŒ(__force const void *ptr)”h]”j¢)�”}”(hŒ__force const void *ptr”h]”(hŒ__force”…”�”}”(hj@vh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@vubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjVvh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj@vubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@vubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjqvh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@vubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@vubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�vh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj@vubj�)�”}”(hŒptr”h]”hŒptr”…”�”}”(hjšvh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KKhjàvubhÝ)�”}”(hŒ5true if **ptr** is an error pointer, false otherwise.”h]”(hŒtrue if ”…”�”}”(hjVwh²hh³Nh´Nubjõ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hj^wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVwubhŒ& is an error pointer, false otherwise.”…”�”}”(hjVwh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KJhjàvubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjžph²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒIS_ERR_OR_NULL (C function)”Œc.IS_ERR_OR_NULL”hNt”auh1hýhjžph²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-bool IS_ERR_OR_NULL (__force const void *ptr)”h]”j)�”}”(hŒ,bool IS_ERR_OR_NULL(__force const void *ptr)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj—wh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“wh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“wh²hh³j¤wh´KUubj{)�”}”(hŒIS_ERR_OR_NULL”h]”j�)�”}”(hŒIS_ERR_OR_NULL”h]”hŒIS_ERR_OR_NULL”…”�”}”(hj·wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³wubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj“wh²hh³j¤wh´KUubjœ)�”}”(hŒ(__force const void *ptr)”h]”j¢)�”}”(hŒ__force const void *ptr”h]”(hŒ__force”…”�”}”(hjÏwh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏwubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjåwh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÏwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏwubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÏwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏwubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÏwubj�)�”}”(hŒptr”h]”hŒptr”…”�”}”(hj)xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjËwubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj“wh²hh³j¤wh´KUubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�wh²hh³j¤wh´KUubah}”(h]”jŠwah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¤wh´KUhjŒwh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Detect an error pointer or a null pointer.”h]”hŒ*Detect an error pointer or a null pointer.”…”�”}”(hjSxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KUhjPxh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŒwh²hh³j¤wh´KUubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjkxjæjkxjç‰jè‰jé‰uh1jh²hhjžph³Nh´Nubjë)�”}”(hŒŽ**Parameters** ``__force const void *ptr`` The pointer to check. **Description** Like IS_ERR(), but also returns true for a null pointer.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjuxh]”hŒ Parameters”…”�”}”(hjwxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KYhjoxubj )�”}”(hhh]”j)�”}”(hŒ2``__force const void *ptr`` The pointer to check. ”h]”(j)�”}”(hŒ``__force const void *ptr``”h]”j)�”}”(hj”xh]”hŒ__force const void *ptr”…”�”}”(hj–xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’xubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KVhjŽxubj2)�”}”(hhh]”hÝ)�”}”(hŒThe pointer to check.”h]”hŒThe pointer to check.”…”�”}”(hj­xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©xh´KVhjªxubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŽxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©xh´KVhj‹xubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjoxubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÏxh]”hŒ Description”…”�”}”(hjÑxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÍxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KXhjoxubhÝ)�”}”(hŒ8Like IS_ERR(), but also returns true for a null pointer.”h]”hŒ8Like IS_ERR(), but also returns true for a null pointer.”…”�”}”(hjåxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KWhjoxubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjžph²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒERR_CAST (C function)”Œ c.ERR_CAST”hNt”auh1hýhjžph²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)void * ERR_CAST (__force const void *ptr)”h]”j)�”}”(hŒ'void *ERR_CAST(__force const void *ptr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjyh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyh²hh³j"yh´K`ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj1yh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjyh²hh³j"yh´K`ubj{)�”}”(hŒERR_CAST”h]”j�)�”}”(hŒERR_CAST”h]”hŒERR_CAST”…”�”}”(hjByh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>yubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjyh²hh³j"yh´K`ubjœ)�”}”(hŒ(__force const void *ptr)”h]”j¢)�”}”(hŒ__force const void *ptr”h]”(hŒ__force”…”�”}”(hjZyh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZyubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjpyh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZyubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‹yh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZyubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj§yh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZyubj�)�”}”(hŒptr”h]”hŒptr”…”�”}”(hj´yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVyubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjyh²hh³j"yh´K`ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj yh²hh³j"yh´K`ubah}”(h]”jyah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j"yh´K`hj yh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ?Explicitly cast an error-valued pointer to another pointer type”h]”hŒ?Explicitly cast an error-valued pointer to another pointer type”…”�”}”(hjÞyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K`hjÛyh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj yh²hh³j"yh´K`ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjöyjæjöyjç‰jè‰jé‰uh1jh²hhjžph³Nh´Nubjë)�”}”(hŒÎ**Parameters** ``__force const void *ptr`` The pointer to cast. **Description** Explicitly cast an error-valued pointer to another pointer type in such a way as to make it clear that's what's going on.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjzh]”hŒ Parameters”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþyubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Kdhjúyubj )�”}”(hhh]”j)�”}”(hŒ1``__force const void *ptr`` The pointer to cast. ”h]”(j)�”}”(hŒ``__force const void *ptr``”h]”j)�”}”(hjzh]”hŒ__force const void *ptr”…”�”}”(hj!zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Kahjzubj2)�”}”(hhh]”hÝ)�”}”(hŒThe pointer to cast.”h]”hŒThe pointer to cast.”…”�”}”(hj8zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j4zh´Kahj5zubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4zh´Kahjzubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjúyubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjZzh]”hŒ Description”…”�”}”(hj\zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXzubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KchjúyubhÝ)�”}”(hŒyExplicitly cast an error-valued pointer to another pointer type in such a way as to make it clear that's what's going on.”h]”hŒ}Explicitly cast an error-valued pointer to another pointer type in such a way as to make it clear that’s what’s going on.”…”�”}”(hjpzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Kbhjúyubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjžph²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒPTR_ERR_OR_ZERO (C function)”Œc.PTR_ERR_OR_ZERO”hNt”auh1hýhjžph²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-int PTR_ERR_OR_ZERO (__force const void *ptr)”h]”j)�”}”(hŒ,int PTR_ERR_OR_ZERO(__force const void *ptr)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŸzh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›zh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Kmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›zh²hh³j­zh´Kmubj{)�”}”(hŒPTR_ERR_OR_ZERO”h]”j�)�”}”(hŒPTR_ERR_OR_ZERO”h]”hŒPTR_ERR_OR_ZERO”…”�”}”(hjÀzh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼zubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj›zh²hh³j­zh´Kmubjœ)�”}”(hŒ(__force const void *ptr)”h]”j¢)�”}”(hŒ__force const void *ptr”h]”(hŒ__force”…”�”}”(hjØzh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØzubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hjîzh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjØzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØzubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj {h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjØzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØzubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj%{h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjØzubj�)�”}”(hŒptr”h]”hŒptr”…”�”}”(hj2{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔzubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj›zh²hh³j­zh´Kmubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—zh²hh³j­zh´Kmubah}”(h]”j’zah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­zh´Kmhj”zh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4Extract the error code from a pointer if it has one.”h]”hŒ4Extract the error code from a pointer if it has one.”…”�”}”(hj\{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´KmhjY{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”zh²hh³j­zh´Kmubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjt{jæjt{jç‰jè‰jé‰uh1jh²hhjžph³Nh´Nubjë)�”}”(hXÕ**Parameters** ``__force const void *ptr`` A potential error pointer. **Description** Convenience function that can be used inside a function that returns an error code to propagate errors received as error pointers. For example, ``return PTR_ERR_OR_ZERO(ptr);`` replaces: .. code-block:: c if (IS_ERR(ptr)) return PTR_ERR(ptr); else return 0; **Return** The error code within **ptr** if it is an error pointer; 0 otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj~{h]”hŒ Parameters”…”�”}”(hj€{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Kqhjx{ubj )�”}”(hhh]”j)�”}”(hŒ7``__force const void *ptr`` A potential error pointer. ”h]”(j)�”}”(hŒ``__force const void *ptr``”h]”j)�”}”(hj�{h]”hŒ__force const void *ptr”…”�”}”(hjŸ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Knhj—{ubj2)�”}”(hhh]”hÝ)�”}”(hŒA potential error pointer.”h]”hŒA potential error pointer.”…”�”}”(hj¶{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j²{h´Knhj³{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj—{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²{h´Knhj”{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjx{ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjØ{h]”hŒ Description”…”�”}”(hjÚ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖ{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Kphjx{ubhÝ)�”}”(hŒºConvenience function that can be used inside a function that returns an error code to propagate errors received as error pointers. For example, ``return PTR_ERR_OR_ZERO(ptr);`` replaces:”h]”(hŒ�Convenience function that can be used inside a function that returns an error code to propagate errors received as error pointers. For example, ”…”�”}”(hjî{h²hh³Nh´Nubj)�”}”(hŒ ``return PTR_ERR_OR_ZERO(ptr);``”h]”hŒreturn PTR_ERR_OR_ZERO(ptr);”…”�”}”(hjö{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjî{ubhŒ replaces:”…”�”}”(hjî{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Kohjx{ubj‘H)�”}”(hŒDif (IS_ERR(ptr)) return PTR_ERR(ptr); else return 0;”h]”hŒDif (IS_ERR(ptr)) return PTR_ERR(ptr); else return 0;”…”�”}”hj|sbah}”(h]”h ]”h"]”h$]”h&]”j™jšŒforce”‰Œlanguage”jߌhighlight_args”}”uh1j�Hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Kshjx{ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj$|h]”hŒReturn”…”�”}”(hj&|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´Kzhjx{ubhÝ)�”}”(hŒEThe error code within **ptr** if it is an error pointer; 0 otherwise.”h]”(hŒThe error code within ”…”�”}”(hj:|h²hh³Nh´Nubjõ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hjB|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:|ubhŒ( if it is an error pointer; 0 otherwise.”…”�”}”(hj:|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:96: ./include/linux/err.h”h´K{hjx{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjžph²hh³Nh´Nubeh}”(h]”Œerror-pointers”ah ]”h"]”Œerror pointers”ah$]”h&]”uh1hµhj?æh²hh³hÊh´K^ubh¶)�”}”(hhh]”(h»)�”}”(hŒSorting”h]”hŒSorting”…”�”}”(hjm|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjj|h²hh³hÊh´Kdubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsort_r (C function)”Œc.sort_r”hNt”auh1hýhjj|h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒsvoid sort_r (void *base, size_t num, size_t size, cmp_r_func_t cmp_func, swap_r_func_t swap_func, const void *priv)”h]”j)�”}”(hŒrvoid sort_r(void *base, size_t num, size_t size, cmp_r_func_t cmp_func, swap_r_func_t swap_func, const void *priv)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj”|h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�|h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�|h²hh³j¢|h´Mubj{)�”}”(hŒsort_r”h]”j�)�”}”(hŒsort_r”h]”hŒsort_r”…”�”}”(hjµ|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±|ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�|h²hh³j¢|h´Mubjœ)�”}”(hŒg(void *base, size_t num, size_t size, cmp_r_func_t cmp_func, swap_r_func_t swap_func, const void *priv)”h]”(j¢)�”}”(hŒ void *base”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÑ|h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÍ|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍ|ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjí|h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÍ|ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hjú|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍ|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÉ|ubj¢)�”}”(hŒ size_t num”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j}Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j·|sbŒc.sort_r”†”asbuh1hhj}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}ubj�)�”}”(hŒnum”h]”hŒnum”…”�”}”(hjD}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÉ|ubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj`}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jb}Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j2}Œc.sort_r”†”asbuh1hhjY}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjY}ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjŒ}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjY}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÉ|ubj¢)�”}”(hŒcmp_r_func_t cmp_func”h]”(h)�”}”(hhh]”j�)�”}”(hŒ cmp_r_func_t”h]”hŒ cmp_r_func_t”…”�”}”(hj¨}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jª}Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j2}Œc.sort_r”†”asbuh1hhj¡}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡}ubj�)�”}”(hŒcmp_func”h]”hŒcmp_func”…”�”}”(hjÔ}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÉ|ubj¢)�”}”(hŒswap_r_func_t swap_func”h]”(h)�”}”(hhh]”j�)�”}”(hŒ swap_r_func_t”h]”hŒ swap_r_func_t”…”�”}”(hjð}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjí}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jò}Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j2}Œc.sort_r”†”asbuh1hhjé}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjé}ubj�)�”}”(hŒ swap_func”h]”hŒ swap_func”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjé}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÉ|ubj¢)�”}”(hŒconst void *priv”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj5~h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj1~ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1~ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjP~h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1~ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1~ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjl~h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj1~ubj�)�”}”(hŒpriv”h]”hŒpriv”…”�”}”(hjy~h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1~ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÉ|ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�|h²hh³j¢|h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŒ|h²hh³j¢|h´Mubah}”(h]”j‡|ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¢|h´Mhj‰|h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒsort an array of elements”h]”hŒsort an array of elements”…”�”}”(hj£~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´Mhj ~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‰|h²hh³j¢|h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj»~jæj»~jç‰jè‰jé‰uh1jh²hhjj|h³Nh´Nubjë)�”}”(hX`**Parameters** ``void *base`` pointer to data to sort ``size_t num`` number of elements ``size_t size`` size of each element ``cmp_r_func_t cmp_func`` pointer to comparison function ``swap_r_func_t swap_func`` pointer to swap function or NULL ``const void *priv`` third argument passed to comparison function **Description** This function does a heapsort on the given array. You may provide a swap_func function if you need to do something more than a memory copy (e.g. fix up pointers or auxiliary data), but the built-in swap avoids a slow retpoline and so is significantly faster. The comparison function must adhere to specific mathematical properties to ensure correct and stable sorting: - Antisymmetry: cmp_func(a, b) must return the opposite sign of cmp_func(b, a). - Transitivity: if cmp_func(a, b) <= 0 and cmp_func(b, c) <= 0, then cmp_func(a, c) <= 0. Sorting time is O(n log n) both on average and worst-case. While quicksort is slightly faster on average, it suffers from exploitable O(n*n) worst-case behavior and extra memory requirements that make it less suitable for kernel use.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÅ~h]”hŒ Parameters”…”�”}”(hjÇ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´Mhj¿~ubj )�”}”(hhh]”(j)�”}”(hŒ'``void *base`` pointer to data to sort ”h]”(j)�”}”(hŒ``void *base``”h]”j)�”}”(hjä~h]”hŒ void *base”…”�”}”(hjæ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´MhjÞ~ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to data to sort”h]”hŒpointer to data to sort”…”�”}”(hjý~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jù~h´Mhjú~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÞ~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jù~h´MhjÛ~ubj)�”}”(hŒ"``size_t num`` number of elements ”h]”(j)�”}”(hŒ``size_t num``”h]”j)�”}”(hjh]”hŒ size_t num”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´Mhjubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of elements”h]”hŒnumber of elements”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j2h´Mhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2h´MhjÛ~ubj)�”}”(hŒ%``size_t size`` size of each element ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjVh]”hŒ size_t size”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´MhjPubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of each element”h]”hŒsize of each element”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jkh´Mhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jkh´MhjÛ~ubj)�”}”(hŒ9``cmp_r_func_t cmp_func`` pointer to comparison function ”h]”(j)�”}”(hŒ``cmp_r_func_t cmp_func``”h]”j)�”}”(hj�h]”hŒcmp_r_func_t cmp_func”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´Mhj‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to comparison function”h]”hŒpointer to comparison function”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤h´Mhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤h´MhjÛ~ubj)�”}”(hŒ=``swap_r_func_t swap_func`` pointer to swap function or NULL ”h]”(j)�”}”(hŒ``swap_r_func_t swap_func``”h]”j)�”}”(hjÈh]”hŒswap_r_func_t swap_func”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´MhjÂubj2)�”}”(hhh]”hÝ)�”}”(hŒ pointer to swap function or NULL”h]”hŒ pointer to swap function or NULL”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝh´MhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝh´MhjÛ~ubj)�”}”(hŒB``const void *priv`` third argument passed to comparison function ”h]”(j)�”}”(hŒ``const void *priv``”h]”j)�”}”(hj€h]”hŒconst void *priv”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´Mhjûubj2)�”}”(hhh]”hÝ)�”}”(hŒ,third argument passed to comparison function”h]”hŒ,third argument passed to comparison function”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j€h´Mhj€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€h´MhjÛ~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿~ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj<€h]”hŒ Description”…”�”}”(hj>€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´Mhj¿~ubhÝ)�”}”(hXThis function does a heapsort on the given array. You may provide a swap_func function if you need to do something more than a memory copy (e.g. fix up pointers or auxiliary data), but the built-in swap avoids a slow retpoline and so is significantly faster.”h]”hXThis function does a heapsort on the given array. You may provide a swap_func function if you need to do something more than a memory copy (e.g. fix up pointers or auxiliary data), but the built-in swap avoids a slow retpoline and so is significantly faster.”…”�”}”(hjR€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´Mhj¿~ubhÝ)�”}”(hXThe comparison function must adhere to specific mathematical properties to ensure correct and stable sorting: - Antisymmetry: cmp_func(a, b) must return the opposite sign of cmp_func(b, a). - Transitivity: if cmp_func(a, b) <= 0 and cmp_func(b, c) <= 0, then cmp_func(a, c) <= 0.”h]”hXThe comparison function must adhere to specific mathematical properties to ensure correct and stable sorting: - Antisymmetry: cmp_func(a, b) must return the opposite sign of cmp_func(b, a). - Transitivity: if cmp_func(a, b) <= 0 and cmp_func(b, c) <= 0, then cmp_func(a, c) <= 0.”…”�”}”(hja€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M"hj¿~ubhÝ)�”}”(hŒéSorting time is O(n log n) both on average and worst-case. While quicksort is slightly faster on average, it suffers from exploitable O(n*n) worst-case behavior and extra memory requirements that make it less suitable for kernel use.”h]”hŒéSorting time is O(n log n) both on average and worst-case. While quicksort is slightly faster on average, it suffers from exploitable O(n*n) worst-case behavior and extra memory requirements that make it less suitable for kernel use.”…”�”}”(hjp€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M)hj¿~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjj|h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsort_r_nonatomic (C function)”Œc.sort_r_nonatomic”hNt”auh1hýhjj|h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ}void sort_r_nonatomic (void *base, size_t num, size_t size, cmp_r_func_t cmp_func, swap_r_func_t swap_func, const void *priv)”h]”j)�”}”(hŒ|void sort_r_nonatomic(void *base, size_t num, size_t size, cmp_r_func_t cmp_func, swap_r_func_t swap_func, const void *priv)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŸ€h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›€h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›€h²hh³j­€h´M9ubj{)�”}”(hŒsort_r_nonatomic”h]”j�)�”}”(hŒsort_r_nonatomic”h]”hŒsort_r_nonatomic”…”�”}”(hjÀ€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼€ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj›€h²hh³j­€h´M9ubjœ)�”}”(hŒg(void *base, size_t num, size_t size, cmp_r_func_t cmp_func, swap_r_func_t swap_func, const void *priv)”h]”(j¢)�”}”(hŒ void *base”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÜ€h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjØ€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØ€ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjø€h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjØ€ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØ€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ€ubj¢)�”}”(hŒ size_t num”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj!�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j#�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j€sbŒc.sort_r_nonatomic”†”asbuh1hhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubj�)�”}”(hŒnum”h]”hŒnum”…”�”}”(hjO�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ€ubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjk�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjh�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jm�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j=�Œc.sort_r_nonatomic”†”asbuh1hhjd�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjd�ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj—�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjd�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ€ubj¢)�”}”(hŒcmp_r_func_t cmp_func”h]”(h)�”}”(hhh]”j�)�”}”(hŒ cmp_r_func_t”h]”hŒ cmp_r_func_t”…”�”}”(hj³�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jµ�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j=�Œc.sort_r_nonatomic”†”asbuh1hhj¬�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬�ubj�)�”}”(hŒcmp_func”h]”hŒcmp_func”…”�”}”(hjß�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ€ubj¢)�”}”(hŒswap_r_func_t swap_func”h]”(h)�”}”(hhh]”j�)�”}”(hŒ swap_r_func_t”h]”hŒ swap_r_func_t”…”�”}”(hjû�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjø�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jý�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j=�Œc.sort_r_nonatomic”†”asbuh1hhjô�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô�ubj�)�”}”(hŒ swap_func”h]”hŒ swap_func”…”�”}”(hj'‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ€ubj¢)�”}”(hŒconst void *priv”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj@‚h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj<‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj<‚ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj[‚h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj<‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj<‚ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjw‚h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj<‚ubj�)�”}”(hŒpriv”h]”hŒpriv”…”�”}”(hj„‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ€ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj›€h²hh³j­€h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—€h²hh³j­€h´M9ubah}”(h]”j’€ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­€h´M9hj”€h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,sort an array of elements, with cond_resched”h]”hŒ,sort an array of elements, with cond_resched”…”�”}”(hj®‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M9hj«‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”€h²hh³j­€h´M9ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÆ‚jæjÆ‚jç‰jè‰jé‰uh1jh²hhjj|h³Nh´Nubjë)�”}”(hX®**Parameters** ``void *base`` pointer to data to sort ``size_t num`` number of elements ``size_t size`` size of each element ``cmp_r_func_t cmp_func`` pointer to comparison function ``swap_r_func_t swap_func`` pointer to swap function or NULL ``const void *priv`` third argument passed to comparison function **Description** Same as sort_r, but preferred for larger arrays as it does a periodic cond_resched().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjЂh]”hŒ Parameters”…”�”}”(hjÒ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj΂ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M=hjÊ‚ubj )�”}”(hhh]”(j)�”}”(hŒ'``void *base`` pointer to data to sort ”h]”(j)�”}”(hŒ``void *base``”h]”j)�”}”(hjï‚h]”hŒ void *base”…”�”}”(hjñ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjí‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M:hjé‚ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to data to sort”h]”hŒpointer to data to sort”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒh´M:hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjé‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒh´M:hjæ‚ubj)�”}”(hŒ"``size_t num`` number of elements ”h]”(j)�”}”(hŒ``size_t num``”h]”j)�”}”(hj(ƒh]”hŒ size_t num”…”�”}”(hj*ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M;hj"ƒubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of elements”h]”hŒnumber of elements”…”�”}”(hjAƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j=ƒh´M;hj>ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj"ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j=ƒh´M;hjæ‚ubj)�”}”(hŒ%``size_t size`` size of each element ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjaƒh]”hŒ size_t size”…”�”}”(hjcƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M<hj[ƒubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of each element”h]”hŒsize of each element”…”�”}”(hjzƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jvƒh´M<hjwƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj[ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jvƒh´M<hjæ‚ubj)�”}”(hŒ9``cmp_r_func_t cmp_func`` pointer to comparison function ”h]”(j)�”}”(hŒ``cmp_r_func_t cmp_func``”h]”j)�”}”(hjšƒh]”hŒcmp_r_func_t cmp_func”…”�”}”(hjœƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M=hj”ƒubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to comparison function”h]”hŒpointer to comparison function”…”�”}”(hj³ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¯ƒh´M=hj°ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj”ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¯ƒh´M=hjæ‚ubj)�”}”(hŒ=``swap_r_func_t swap_func`` pointer to swap function or NULL ”h]”(j)�”}”(hŒ``swap_r_func_t swap_func``”h]”j)�”}”(hjÓƒh]”hŒswap_r_func_t swap_func”…”�”}”(hjÕƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjуubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M>hj̓ubj2)�”}”(hhh]”hÝ)�”}”(hŒ pointer to swap function or NULL”h]”hŒ pointer to swap function or NULL”…”�”}”(hjìƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèƒh´M>hjéƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj̓ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèƒh´M>hjæ‚ubj)�”}”(hŒB``const void *priv`` third argument passed to comparison function ”h]”(j)�”}”(hŒ``const void *priv``”h]”j)�”}”(hj „h]”hŒconst void *priv”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj „ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M?hj„ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,third argument passed to comparison function”h]”hŒ,third argument passed to comparison function”…”�”}”(hj%„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!„h´M?hj"„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!„h´M?hjæ‚ube•h}”(h]”h ]”h"]”h$]”h&]”uh1j hjÊ‚ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjG„h]”hŒ Description”…”�”}”(hjI„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjE„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´MAhjÊ‚ubhÝ)�”}”(hŒUSame as sort_r, but preferred for larger arrays as it does a periodic cond_resched().”h]”hŒUSame as sort_r, but preferred for larger arrays as it does a periodic cond_resched().”…”�”}”(hj]„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:102: ./lib/sort.c”h´M@hjÊ‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjj|h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_sort (C function)”Œ c.list_sort”hNt”auh1hýhjj|h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHvoid list_sort (void *priv, struct list_head *head, list_cmp_func_t cmp)”h]”j)�”}”(hŒGvoid list_sort(void *priv, struct list_head *head, list_cmp_func_t cmp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŒ„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjˆ„h²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´KYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆ„h²hh³jš„h´KYubj{)�”}”(hŒ list_sort”h]”j�)�”}”(hŒ list_sort”h]”hŒ list_sort”…”�”}”(hj­„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©„ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjˆ„h²hh³jš„h´KYubjœ)�”}”(hŒ9(void *priv, struct list_head *head, list_cmp_func_t cmp)”h]”(j¢)�”}”(hŒ void *priv”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÉ„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÅ„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjׄh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅ„ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjå„h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÅ„ubj�)�”}”(hŒpriv”h]”hŒpriv”…”�”}”(hjò„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅ„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁ„ubj¢)�”}”(hŒstruct list_head *head”h]”(j¨)�”}”(hŒstruct”h]”hŒstruct”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj*…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j,…Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¯„sbŒ c.list_sort”†”asbuh1hhj…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjX…h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj…ubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hje…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁ„ubj¢)�”}”(hŒlist_cmp_func_t cmp”h]”(h)�”}”(hhh]”j�)�”}”(hŒlist_cmp_func_t”h]”hŒlist_cmp_func_t”…”�”}”(hj�…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jƒ…Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jF…Œ c.list_sort”†”asbuh1hhjz…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjz…ubj�)�”}”(hŒcmp”h]”hŒcmp”…”�”}”(hj­…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjz…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁ„ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjˆ„h²hh³jš„h´KYubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj„„h²hh³jš„h´KYubah}”(h]”j„ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jš„h´KYhj�„h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ sort a list”h]”hŒ sort a list”…”�”}”(hj×…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´KYhjÔ…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�„h²hh³jš„h´KYubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjï…jæjï…jç‰jè‰jé‰uh1jh²hhjj|h³Nh´Nubjë)�”}”(hX**Parameters** ``void *priv`` private data, opaque to list_sort(), passed to **cmp** ``struct list_head *head`` the list to sort ``list_cmp_func_t cmp`` the elements comparison function **Description** The comparison function **cmp** must return > 0 if **a** should sort after **b** ("**a** > **b**" if you want an ascending sort), and <= 0 if **a** should sort before **b** *or* their original order should be preserved. It is always called with the element that came first in the input in **a**, and list_sort is a stable sort, so it is not necessary to distinguish the **a** < **b** and **a** == **b** cases. The comparison function must adhere to specific mathematical properties to ensure correct and stable sorting: - Antisymmetry: cmp(**a**, **b**) must return the opposite sign of cmp(**b**, **a**). - Transitivity: if cmp(**a**, **b**) <= 0 and cmp(**b**, **c**) <= 0, then cmp(**a**, **c**) <= 0. This is compatible with two styles of **cmp** function: - The traditional style which returns <0 / =0 / >0, or - Returning a boolean 0/1. The latter offers a chance to save a few cycles in the comparison (which is used by e.g. plug_ctx_cmp() in block/blk-mq.c). A good way to write a multi-word comparison is:: if (a->high != b->high) return a->high > b->high; if (a->middle != b->middle) return a->middle > b->middle; return a->low > b->low; This mergesort is as eager as possible while always performing at least 2:1 balanced merges. Given two pending sublists of size 2^k, they are merged to a size-2^(k+1) list as soon as we have 2^k following elements. Thus, it will avoid cache thrashing as long as 3*2^k elements can fit into the cache. Not quite as good as a fully-eager bottom-up mergesort, but it does use 0.2*n fewer comparisons, so is faster in the common case that everything fits into L1. The merging is controlled by "count", the number of elements in the pending lists. This is beautifully simple code, but rather subtle. Each time we increment "count", we set one bit (bit k) and clear bits k-1 .. 0. Each time this happens (except the very first time for each bit, when count increments to 2^k), we merge two lists of size 2^k into one list of size 2^(k+1). This merge happens exactly when the count reaches an odd multiple of 2^k, which is when we have 2^k elements pending in smaller lists, so it's safe to merge away two lists of size 2^k. After this happens twice, we have created two lists of size 2^(k+1), which will be merged into a list of size 2^(k+2) before we create a third list of size 2^(k+1), so there are never more than two pending. The number of pending lists of size 2^k is determined by the state of bit k of "count" plus two extra pieces of information: - The state of bit k-1 (when k == 0, consider bit -1 always set), and - Whether the higher-order bits are zero or non-zero (i.e. is count >= 2^(k+1)). There are six states we distinguish. "x" represents some arbitrary bits, and "y" represents some arbitrary non-zero bits: 0: 00x: 0 pending of size 2^k; x pending of sizes < 2^k 1: 01x: 0 pending of size 2^k; 2^(k-1) + x pending of sizes < 2^k 2: x10x: 0 pending of size 2^k; 2^k + x pending of sizes < 2^k 3: x11x: 1 pending of size 2^k; 2^(k-1) + x pending of sizes < 2^k 4: y00x: 1 pending of size 2^k; 2^k + x pending of sizes < 2^k 5: y01x: 2 pending of size 2^k; 2^(k-1) + x pending of sizes < 2^k (merge and loop back to state 2) We gain lists of size 2^k in the 2->3 and 4->5 transitions (because bit k-1 is set while the more significant bits are non-zero) and merge them away in the 5->2 transition. Note in particular that just before the 5->2 transition, all lower-order bits are 11 (state 3), so there is one list of each smaller size. When we reach the end of the input, we merge all the pending lists, from smallest to largest. If you work through cases 2 to 5 above, you can see that the number of elements we merge with a list of size 2^k varies from 2^(k-1) (cases 3 and 5 when x == 0) to 2^(k+1) - 1 (second merge of case 5 when x == 2^(k-1) - 1).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjù…h]”hŒ Parameters”…”�”}”(hjû…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K]hjó…ubj )�”}”(hhh]”(j)�”}”(hŒF``void *priv`` private data, opaque to list_sort(), passed to **cmp** ”h]”(j)�”}”(hŒ``void *priv``”h]”j)�”}”(hj†h]”hŒ void *priv”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´KZhj†ubj2)�”}”(hhh]”hÝ)�”}”(hŒ6private data, opaque to list_sort(), passed to **cmp**”h]”(hŒ/private data, opaque to list_sort(), passed to ”…”�”}”(hj1†h²hh³Nh´Nubjõ)�”}”(hŒ**cmp**”h]”hŒcmp”…”�”}”(hj9†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j-†h´KZhj.†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-†h´KZhj†ubj)�”}”(hŒ,``struct list_head *head`` the list to sort ”h]”(j)�”}”(hŒ``struct list_head *head``”h]”j)�”}”(hj_†h]”hŒstruct list_head *head”…”�”}”(hja†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K[hjY†ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe list to sort”h]”hŒthe list to sort”…”�”}”(hjx†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jt†h´K[hju†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjY†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jt†h´K[hj†ubj)�”}”(hŒ9``list_cmp_func_t cmp`` the elements comparison function ”h]”(j)�”}”(hŒ``list_cmp_func_t cmp``”h]”j)�”}”(hj˜†h]”hŒlist_cmp_func_t cmp”…”�”}”(hjš†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K\hj’†ubj2)�”}”(hhh]”hÝ)�”}”(hŒ the elements comparison function”h]”hŒ the elements comparison function”…”�”}”(hj±†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j­†h´K\hj®†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj’†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­†h´K\hj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjó…ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÓ†h]”hŒ Description”…”�”}”(hjÕ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjцubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K^hjó…ubhÝ)�”}”(hXšThe comparison function **cmp** must return > 0 if **a** should sort after **b** ("**a** > **b**" if you want an ascending sort), and <= 0 if **a** should sort before **b** *or* their original order should be preserved. It is always called with the element that came first in the input in **a**, and list_sort is a stable sort, so it is not necessary to distinguish the **a** < **b** and **a** == **b** cases.”h]”(hŒThe comparison function ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**cmp**”h]”hŒcmp”…”�”}”(hjñ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ must return > 0 if ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ should sort after ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ (â€�”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj'‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ > ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hj9‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ0â€� if you want an ascending sort), and <= 0 if ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hjK‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ should sort before ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hj]‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ ”…”�”}”(hjé†h²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*or*”h]”hŒor”…”�”}”(hjq‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hjé†ubhŒq their original order should be preserved. It is always called with the element that came first in the input in ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hjƒ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒL, and list_sort is a stable sort, so it is not necessary to distinguish the ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj•‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ < ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hj§‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ and ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj¹‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ == ”…”�”}”(hjé†h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjˇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé†ubhŒ cases.”…”�”}”(hjé†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K]hjó…ubhÝ)�”}”(hX&The comparison function must adhere to specific mathematical properties to ensure correct and stable sorting: - Antisymmetry: cmp(**a**, **b**) must return the opposite sign of cmp(**b**, **a**). - Transitivity: if cmp(**a**, **b**) <= 0 and cmp(**b**, **c**) <= 0, then cmp(**a**, **c**) <= 0.”h]”(hŒ‚The comparison function must adhere to specific mathematical properties to ensure correct and stable sorting: - Antisymmetry: cmp(”…”�”}”(hjä‡h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hjì‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ, ”…”�”}”(hjä‡h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjþ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ') must return the opposite sign of cmp(”…”�”}”(hjä‡h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ, ”…”�”}”hjä‡sbjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj"ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ). - Transitivity: if cmp(”…”�”}”(hjä‡h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj4ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ, ”…”�”}”hjä‡sbjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjFˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ) <= 0 and cmp(”…”�”}”(hjä‡h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjXˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ, ”…”�”}”hjä‡sbjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ) <= 0, then cmp(”…”�”}”(hjä‡h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj|ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ, ”…”�”}”hjä‡sbjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjŽˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä‡ubhŒ) <= 0.”…”�”}”(hjä‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´Kdhjó…ubhÝ)�”}”(hXThis is compatible with two styles of **cmp** function: - The traditional style which returns <0 / =0 / >0, or - Returning a boolean 0/1. The latter offers a chance to save a few cycles in the comparison (which is used by e.g. plug_ctx_cmp() in block/blk-mq.c).”h]”(hŒ&This is compatible with two styles of ”…”�”}”(hj§ˆh²hh³Nh´Nubjõ)�”}”(hŒ**cmp**”h]”hŒcmp”…”�”}”(hj¯ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§ˆubhŒØ function: - The traditional style which returns <0 / =0 / >0, or - Returning a boolean 0/1. The latter offers a chance to save a few cycles in the comparison (which is used by e.g. plug_ctx_cmp() in block/blk-mq.c).”…”�”}”(hj§ˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´Kkhjó…ubhÝ)�”}”(hŒ0A good way to write a multi-word comparison is::”h]”hŒ/A good way to write a multi-word comparison is:”…”�”}”(hjȈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´Kqhjó…ubj‘H)�”}”(hŒ“if (a->high != b->high) return a->high > b->high; if (a->middle != b->middle) return a->middle > b->middle; return a->low > b->low;”h]”hŒ“if (a->high != b->high) return a->high > b->high; if (a->middle != b->middle) return a->middle > b->middle; return a->low > b->low;”…”�”}”hj׈sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´Kshjó…ubhÝ)�”}”(hŒ×This mergesort is as eager as possible while always performing at least 2:1 balanced merges. Given two pending sublists of size 2^k, they are merged to a size-2^(k+1) list as soon as we have 2^k following elements.”h]”hŒ×This mergesort is as eager as possible while always performing at least 2:1 balanced merges. Given two pending sublists of size 2^k, they are merged to a size-2^(k+1) list as soon as we have 2^k following elements.”…”�”}”(hjæˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´Kzhjó…ubhÝ)�”}”(hŒõThus, it will avoid cache thrashing as long as 3*2^k elements can fit into the cache. Not quite as good as a fully-eager bottom-up mergesort, but it does use 0.2*n fewer comparisons, so is faster in the common case that everything fits into L1.”h]”hŒõThus, it will avoid cache thrashing as long as 3*2^k elements can fit into the cache. Not quite as good as a fully-eager bottom-up mergesort, but it does use 0.2*n fewer comparisons, so is faster in the common case that everything fits into L1.”…”�”}”(hjõˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K~hjó…ubhÝ)�”}”(hŒ‡The merging is controlled by "count", the number of elements in the pending lists. This is beautifully simple code, but rather subtle.”h]”hŒ‹The merging is controlled by “countâ€�, the number of elements in the pending lists. This is beautifully simple code, but rather subtle.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K„hjó…ubhÝ)�”}”(hŒîEach time we increment "count", we set one bit (bit k) and clear bits k-1 .. 0. Each time this happens (except the very first time for each bit, when count increments to 2^k), we merge two lists of size 2^k into one list of size 2^(k+1).”h]”hŒòEach time we increment “countâ€�, we set one bit (bit k) and clear bits k-1 .. 0. Each time this happens (except the very first time for each bit, when count increments to 2^k), we merge two lists of size 2^k into one list of size 2^(k+1).”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K‡hjó…ubhÝ)�”}”(hŒ¸This merge happens exactly when the count reaches an odd multiple of 2^k, which is when we have 2^k elements pending in smaller lists, so it's safe to merge away two lists of size 2^k.”h]”hŒºThis merge happens exactly when the count reaches an odd multiple of 2^k, which is when we have 2^k elements pending in smaller lists, so it’s safe to merge away two lists of size 2^k.”…”�”}”(hj"‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´KŒhjó…ubhÝ)�”}”(hŒÎAfter this happens twice, we have created two lists of size 2^(k+1), which will be merged into a list of size 2^(k+2) before we create a third list of size 2^(k+1), so there are never more than two pending.”h]”hŒÎAfter this happens twice, we have created two lists of size 2^(k+1), which will be merged into a list of size 2^(k+2) before we create a third list of size 2^(k+1), so there are never more than two pending.”…”�”}”(hj1‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K�hjó…ubhÝ)�”}”(hŒ|The number of pending lists of size 2^k is determined by the state of bit k of "count" plus two extra pieces of information:”h]”hŒ€The number of pending lists of size 2^k is determined by the state of bit k of “countâ€� plus two extra pieces of information:”…”�”}”(hj@‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K”hjó…ubj›)�”}”(hhh]”(j )�”}”(hŒCThe state of bit k-1 (when k == 0, consider bit -1 always set), and”h]”hÝ)�”}”(hjT‰h]”hŒCThe state of bit k-1 (when k == 0, consider bit -1 always set), and”…”�”}”(hjV‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K—hjR‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjO‰ubj )�”}”(hŒOWhether the higher-order bits are zero or non-zero (i.e. is count >= 2^(k+1)). ”h]”hÝ)�”}”(hŒNWhether the higher-order bits are zero or non-zero (i.e. is count >= 2^(k+1)).”h]”hŒNWhether the higher-order bits are zero or non-zero (i.e. is count >= 2^(k+1)).”…”�”}”(hjn‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K˜hjj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjO‰ubeh}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³jc‰h´K—hjó…ubhÝ)�”}”(hX-There are six states we distinguish. "x" represents some arbitrary bits, and "y" represents some arbitrary non-zero bits: 0: 00x: 0 pending of size 2^k; x pending of sizes < 2^k 1: 01x: 0 pending of size 2^k; 2^(k-1) + x pending of sizes < 2^k 2: x10x: 0 pending of size 2^k; 2^k + x pending of sizes < 2^k 3: x11x: 1 pending of size 2^k; 2^(k-1) + x pending of sizes < 2^k 4: y00x: 1 pending of size 2^k; 2^k + x pending of sizes < 2^k 5: y01x: 2 pending of size 2^k; 2^(k-1) + x pending of sizes < 2^k (merge and loop back to state 2)”h]”hX5There are six states we distinguish. “xâ€� represents some arbitrary bits, and “yâ€� represents some arbitrary non-zero bits: 0: 00x: 0 pending of size 2^k; x pending of sizes < 2^k 1: 01x: 0 pending of size 2^k; 2^(k-1) + x pending of sizes < 2^k 2: x10x: 0 pending of size 2^k; 2^k + x pending of sizes < 2^k 3: x11x: 1 pending of size 2^k; 2^(k-1) + x pending of sizes < 2^k 4: y00x: 1 pending of size 2^k; 2^k + x pending of sizes < 2^k 5: y01x: 2 pending of size 2^k; 2^(k-1) + x pending of sizes < 2^k (merge and loop back to state 2)”…”�”}”(hj‰‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K›hjó…ubhÝ)�”}”(hX8We gain lists of size 2^k in the 2->3 and 4->5 transitions (because bit k-1 is set while the more significant bits are non-zero) and merge them away in the 5->2 transition. Note in particular that just before the 5->2 transition, all lower-order bits are 11 (state 3), so there is one list of each smaller size.”h]”hX8We gain lists of size 2^k in the 2->3 and 4->5 transitions (because bit k-1 is set while the more significant bits are non-zero) and merge them away in the 5->2 transition. Note in particular that just before the 5->2 transition, all lower-order bits are 11 (state 3), so there is one list of each smaller size.”…”�”}”(hj˜‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K¥hjó…ubhÝ)�”}”(hX>When we reach the end of the input, we merge all the pending lists, from smallest to largest. If you work through cases 2 to 5 above, you can see that the number of elements we merge with a list of size 2^k varies from 2^(k-1) (cases 3 and 5 when x == 0) to 2^(k+1) - 1 (second merge of case 5 when x == 2^(k-1) - 1).”h]”hX>When we reach the end of the input, we merge all the pending lists, from smallest to largest. If you work through cases 2 to 5 above, you can see that the number of elements we merge with a list of size 2^k varies from 2^(k-1) (cases 3 and 5 when x == 0) to 2^(k+1) - 1 (second merge of case 5 when x == 2^(k-1) - 1).”…”�”}”(hj§‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:105: ./lib/list_sort.c”h´K«hjó…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjj|h²hh³Nh´Nubeh}”(h]”Œsorting”ah ]”h"]”Œsorting”ah$]”h&]”uh1hµhj?æh²hh³hÊh´Kdubh¶)�”}”(hhh]”(h»)�”}”(hŒText Searching”h]”hŒText Searching”…”�”}”(hjȉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjʼnh²hh³hÊh´KmubhÝ)�”}”(hŒ INTRODUCTION”h]”hŒ INTRODUCTION”…”�”}”(hjÖ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´K hjʼnh²hubj•)�”}”(hŒ¶The textsearch infrastructure provides text searching facilities for both linear and non-linear data. Individual search algorithms are implemented in modules and chosen by the user. ”h]”hÝ)�”}”(hŒµThe textsearch infrastructure provides text searching facilities for both linear and non-linear data. Individual search algorithms are implemented in modules and chosen by the user.”h]”hŒµThe textsearch infrastructure provides text searching facilities for both linear and non-linear data. Individual search algorithms are implemented in modules and chosen by the user.”…”�”}”(hjé‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´Khjå‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j÷‰h´Khjʼnh²hubhÝ)�”}”(hŒ ARCHITECTURE”h]”hŒ ARCHITECTURE”…”�”}”(hjþ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´Khjʼnh²hubj‘H)�”}”(hXð User +----------------+ | finish()|<--------------(6)-----------------+ |get_next_block()|<--------------(5)---------------+ | | | Algorithm | | | | +------------------------------+ | | | init() find() destroy() | | | +------------------------------+ | | Core API ^ ^ ^ | | +---------------+ (2) (4) (8) | (1)|----->| prepare() |---+ | | | (3)|----->| find()/next() |-----------+ | | (7)|----->| destroy() |----------------------+ +----------------+ +---------------+ (1) User configures a search by calling textsearch_prepare() specifying the search parameters such as the pattern and algorithm name. (2) Core requests the algorithm to allocate and initialize a search configuration according to the specified parameters. (3) User starts the search(es) by calling textsearch_find() or textsearch_next() to fetch subsequent occurrences. A state variable is provided to the algorithm to store persistent variables. (4) Core eventually resets the search offset and forwards the find() request to the algorithm. (5) Algorithm calls get_next_block() provided by the user continuously to fetch the data to be searched in block by block. (6) Algorithm invokes finish() after the last call to get_next_block to clean up any leftovers from get_next_block. (Optional) (7) User destroys the configuration by calling textsearch_destroy(). (8) Core notifies the algorithm to destroy algorithm specific allocations. (Optional)”h]”hXð User +----------------+ | finish()|<--------------(6)-----------------+ |get_next_block()|<--------------(5)---------------+ | | | Algorithm | | | | +------------------------------+ | | | init() find() destroy() | | | +------------------------------+ | | Core API ^ ^ ^ | | +---------------+ (2) (4) (8) | (1)|----->| prepare() |---+ | | | (3)|----->| find()/next() |-----------+ | | (7)|----->| destroy() |----------------------+ +----------------+ +---------------+ (1) User configures a search by calling textsearch_prepare() specifying the search parameters such as the pattern and algorithm name. (2) Core requests the algorithm to allocate and initialize a search configuration according to the specified parameters. (3) User starts the search(es) by calling textsearch_find() or textsearch_next() to fetch subsequent occurrences. A state variable is provided to the algorithm to store persistent variables. (4) Core eventually resets the search offset and forwards the find() request to the algorithm. (5) Algorithm calls get_next_block() provided by the user continuously to fetch the data to be searched in block by block. (6) Algorithm invokes finish() after the last call to get_next_block to clean up any leftovers from get_next_block. (Optional) (7) User destroys the configuration by calling textsearch_destroy(). (8) Core notifies the algorithm to destroy algorithm specific allocations. (Optional)”…”�”}”hj Šsbah}”(h]”h ]”h"]”h$]”h&]”j™jšj|‰j|Œnone”j|}”uh1j�Hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´Khjʼnh²hubhÝ)�”}”(hŒUSAGE”h]”hŒUSAGE”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´K6hjʼnh²hubj•)�”}”(hXÞBefore a search can be performed, a configuration must be created by calling textsearch_prepare() specifying the searching algorithm, the pattern to look for and flags. As a flag, you can set TS_IGNORECASE to perform case insensitive matching. But it might slow down performance of algorithm, so you should use it at own your risk. The returned configuration may then be used for an arbitrary amount of times and even in parallel as long as a separate struct ts_state variable is provided to every instance. The actual search is performed by either calling textsearch_find_continuous() for linear data or by providing an own get_next_block() implementation and calling textsearch_find(). Both functions return the position of the first occurrence of the pattern or UINT_MAX if no match was found. Subsequent occurrences can be found by calling textsearch_next() regardless of the linearity of the data. Once you're done using a configuration it must be given back via textsearch_destroy. ”h]”(hÝ)�”}”(hXûBefore a search can be performed, a configuration must be created by calling textsearch_prepare() specifying the searching algorithm, the pattern to look for and flags. As a flag, you can set TS_IGNORECASE to perform case insensitive matching. But it might slow down performance of algorithm, so you should use it at own your risk. The returned configuration may then be used for an arbitrary amount of times and even in parallel as long as a separate struct ts_state variable is provided to every instance.”h]”hXûBefore a search can be performed, a configuration must be created by calling textsearch_prepare() specifying the searching algorithm, the pattern to look for and flags. As a flag, you can set TS_IGNORECASE to perform case insensitive matching. But it might slow down performance of algorithm, so you should use it at own your risk. The returned configuration may then be used for an arbitrary amount of times and even in parallel as long as a separate struct ts_state variable is provided to every instance.”…”�”}”(hj1Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´K8hj-ŠubhÝ)�”}”(hXŠThe actual search is performed by either calling textsearch_find_continuous() for linear data or by providing an own get_next_block() implementation and calling textsearch_find(). Both functions return the position of the first occurrence of the pattern or UINT_MAX if no match was found. Subsequent occurrences can be found by calling textsearch_next() regardless of the linearity of the data.”h]”hXŠThe actual search is performed by either calling textsearch_find_continuous() for linear data or by providing an own get_next_block() implementation and calling textsearch_find(). Both functions return the position of the first occurrence of the pattern or UINT_MAX if no match was found. Subsequent occurrences can be found by calling textsearch_next() regardless of the linearity of the data.”…”�”}”(hj@Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´KAhj-ŠubhÝ)�”}”(hŒTOnce you're done using a configuration it must be given back via textsearch_destroy.”h]”hŒVOnce you’re done using a configuration it must be given back via textsearch_destroy.”…”�”}”(hjOŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´KIhj-Šubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j?Šh´K8hjʼnh²hubhÝ)�”}”(hŒ EXAMPLE::”h]”hŒEXAMPLE:”…”�”}”(hjdŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´KLhjʼnh²hubj‘H)�”}”(hXîint pos; struct ts_config *conf; struct ts_state state; const char *pattern = "chicken"; const char *example = "We dance the funky chicken"; conf = textsearch_prepare("kmp", pattern, strlen(pattern), GFP_KERNEL, TS_AUTOLOAD); if (IS_ERR(conf)) { err = PTR_ERR(conf); goto errout; } pos = textsearch_find_continuous(conf, &state, example, strlen(example)); if (pos != UINT_MAX) panic("Oh my god, dancing chickens at %d\n", pos); textsearch_destroy(conf);”h]”hXîint pos; struct ts_config *conf; struct ts_state state; const char *pattern = "chicken"; const char *example = "We dance the funky chicken"; conf = textsearch_prepare("kmp", pattern, strlen(pattern), GFP_KERNEL, TS_AUTOLOAD); if (IS_ERR(conf)) { err = PTR_ERR(conf); goto errout; } pos = textsearch_find_continuous(conf, &state, example, strlen(example)); if (pos != UINT_MAX) panic("Oh my god, dancing chickens at %d\n", pos); textsearch_destroy(conf);”…”�”}”hjsŠsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:111: ./lib/textsearch.c”h´KNhjʼnh²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ textsearch_register (C function)”Œc.textsearch_register”hNt”auh1hýhjʼnh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,int textsearch_register (struct ts_ops *ops)”h]”j)�”}”(hŒ+int textsearch_register(struct ts_ops *ops)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj›Šh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj—Šh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—Šh²hh³j©Šh´K„ubj{)�”}”(hŒtextsearch_register”h]”j�)�”}”(hŒtextsearch_register”h]”hŒtextsearch_register”…”�”}”(hj¼Šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸Šubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—Šh²hh³j©Šh´K„ubjœ)�”}”(hŒ(struct ts_ops *ops)”h]”j¢)�”}”(hŒstruct ts_ops *ops”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjØŠh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÔŠubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔŠubh)�”}”(hhh]”j�)�”}”(hŒts_ops”h]”hŒts_ops”…”�”}”(hjöŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jøŠŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¾ŠsbŒc.textsearch_register”†”asbuh1hhjÔŠubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔŠubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$‹h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔŠubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hj1‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjЊubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj—Šh²hh³j©Šh´K„ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj“Šh²hh³j©Šh´K„ubah}”(h]”jŽŠah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j©Šh´K„hj�Šh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒregister a textsearch module”h]”hŒregister a textsearch module”…”�”}”(hj[‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K„hjX‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�Šh²hh³j©Šh´K„ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjs‹jæjs‹jç‰jè‰jé‰uh1jh²hhjʼnh³Nh´Nubjë)�”}”(hX’**Parameters** ``struct ts_ops *ops`` operations lookup table **Description** This function must be called by textsearch modules to announce their presence. The specified &**ops** must have ``name`` set to a unique identifier and the callbacks find(), init(), get_pattern(), and get_pattern_len() must be implemented. Returns 0 or -EEXISTS if another module has already registered with same name.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj}‹h]”hŒ Parameters”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kˆhjw‹ubj )�”}”(hhh]”j)�”}”(hŒ/``struct ts_ops *ops`` operations lookup table ”h]”(j)�”}”(hŒ``struct ts_ops *ops``”h]”j)�”}”(hjœ‹h]”hŒstruct ts_ops *ops”…”�”}”(hjž‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjš‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K…hj–‹ubj2)�”}”(hhh]”hÝ)�”}”(hŒoperations lookup table”h]”hŒoperations lookup table”…”�”}”(hjµ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±‹h´K…hj²‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±‹h´K…hj“‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjw‹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj׋h]”hŒ Description”…”�”}”(hjÙ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÕ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K‡hjw‹ubhÝ)�”}”(hŒïThis function must be called by textsearch modules to announce their presence. The specified &**ops** must have ``name`` set to a unique identifier and the callbacks find(), init(), get_pattern(), and get_pattern_len() must be implemented.”h]”(hŒpThis function must be called by textsearch modules to announce their presence. The specified &**ops** must have ”…”�”}”(hjí‹h²hh³Nh´Nubj)�”}”(hŒ``name``”h]”hŒname”…”�”}”(hjõ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjí‹ubhŒw set to a unique identifier and the callbacks find(), init(), get_pattern(), and get_pattern_len() must be implemented.”…”�”}”(hjí‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K†hjw‹ubhÝ)�”}”(hŒNReturns 0 or -EEXISTS if another module has already registered with same name.”h]”hŒNReturns 0 or -EEXISTS if another module has already registered with same name.”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K‹hjw‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjʼnh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"textsearch_unregister (C function)”Œc.textsearch_unregister”hNt”auh1hýhjʼnh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.int textsearch_unregister (struct ts_ops *ops)”h]”j)�”}”(hŒ-int textsearch_unregister(struct ts_ops *ops)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj=Œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj9Œh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9Œh²hh³jKŒh´K§ubj{)�”}”(hŒtextsearch_unregister”h]”j�)�”}”(hŒtextsearch_unregister”h]”hŒtextsearch_unregister”…”�”}”(hj^Œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZŒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj9Œh²hh³jKŒh´K§ubjœ)�”}”(hŒ(struct ts_ops *ops)”h]”j¢)�”}”(hŒstruct ts_ops *ops”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjzŒh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjvŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvŒubh)�”}”(hhh]”j�)�”}”(hŒts_ops”h]”hŒts_ops”…”�”}”(hj˜Œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•Œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jšŒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j`ŒsbŒc.textsearch_unregister”†”asbuh1hhjvŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvŒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÆŒh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjvŒubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hjÓŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjrŒubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj9Œh²hh³jKŒh´K§ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj5Œh²hh³jKŒh´K§ubah}”(h]”j0Œah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jKŒh´K§hj2Œh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒunregister a textsearch module”h]”hŒunregister a textsearch module”…”�”}”(hjýŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K§hjúŒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj2Œh²hh³jKŒh´K§ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�jæj�jç‰jè‰jé‰uh1jh²hhjʼnh³Nh´Nubjë)�”}”(hXu**Parameters** ``struct ts_ops *ops`` operations lookup table **Description** This function must be called by textsearch modules to announce their disappearance for examples when the module gets unloaded. The :c:type:`ops` parameter must be the same as the one during the registration. Returns 0 on success or -ENOENT if no matching textsearch registration was found.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�h]”hŒ Parameters”…”�”}”(hj!�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K«hj�ubj )�”}”(hhh]”j)�”}”(hŒ/``struct ts_ops *ops`` operations lookup table ”h]”(j)�”}”(hŒ``struct ts_ops *ops``”h]”j)�”}”(hj>�h]”hŒstruct ts_ops *ops”…”�”}”(hj@�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K¨hj8�ubj2)�”}”(hhh]”hÝ)�”}”(hŒoperations lookup table”h]”hŒoperations lookup table”…”�”}”(hjW�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jS�h´K¨hjT�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj8�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jS�h´K¨hj5�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjy�h]”hŒ Description”…”�”}”(hj{�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjw�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kªhj�ubhÝ)�”}”(hŒÏThis function must be called by textsearch modules to announce their disappearance for examples when the module gets unloaded. The :c:type:`ops` parameter must be the same as the one during the registration.”h]”(hŒƒThis function must be called by textsearch modules to announce their disappearance for examples when the module gets unloaded. The ”…”�”}”(hj��h²hh³Nh´Nubh)�”}”(hŒ :c:type:`ops`”h]”j)�”}”(hj™�h]”hŒops”…”�”}”(hj›�h²hh³Nh´Nubah}”(h]”h ]”(Œxref”jߌc-type”eh"]”h$]”h&]”uh1jhj—�ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j] j` )�”}”jc ]”sbŒ reftarget”Œops”uh1hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K©hj��ubhŒ? parameter must be the same as the one during the registration.”…”�”}”(hj��h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»�h´K©hj�ubhÝ)�”}”(hŒQReturns 0 on success or -ENOENT if no matching textsearch registration was found.”h]”hŒQReturns 0 on success or -ENOENT if no matching textsearch registration was found.”…”�”}”(hjÆ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K®hj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjʼnh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'textsearch_find_continuous (C function)”Œc.textsearch_find_continuous”hNt”auh1hýhjʼnh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ|unsigned int textsearch_find_continuous (struct ts_config *conf, struct ts_state *state, const void *data, unsigned int len)”h]”j)�”}”(hŒ{unsigned int textsearch_find_continuous(struct ts_config *conf, struct ts_state *state, const void *data, unsigned int len)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjõ�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñ�h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´KÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñ�h²hh³jŽh´KÛubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñ�h²hh³jŽh´KÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Žh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñ�h²hh³jŽh´KÛubj{)�”}”(hŒtextsearch_find_continuous”h]”j�)�”}”(hŒtextsearch_find_continuous”h]”hŒtextsearch_find_continuous”…”�”}”(hj2Žh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.Žubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjñ�h²hh³jŽh´KÛubjœ)�”}”(hŒT(struct ts_config *conf, struct ts_state *state, const void *data, unsigned int len)”h]”(j¢)�”}”(hŒstruct ts_config *conf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjNŽh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Žh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJŽubh)�”}”(hhh]”j�)�”}”(hŒ ts_config”h]”hŒ ts_config”…”�”}”(hjlŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jnŽŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j4ŽsbŒc.textsearch_find_continuous”†”asbuh1hhjJŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJŽubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjšŽh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjJŽubj�)�”}”(hŒconf”h]”hŒconf”…”�”}”(hj§Žh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjFŽubj¢)�”}”(hŒstruct ts_state *state”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÀŽh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¼Žubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼Žubh)�”}”(hhh]”j�)�”}”(hŒts_state”h]”hŒts_state”…”�”}”(hjÞŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jàŽŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jˆŽŒc.textsearch_find_continuous”†”asbuh1hhj¼Žubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼Žubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¼Žubj�)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjFŽubj¢)�”}”(hŒconst void *data”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj0�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj,�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,�ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjK�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj,�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj,�ubj�)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjt�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjFŽubj¢)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‰�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰�ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj©�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‰�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰�ubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjÅ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjFŽubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjñ�h²hh³jŽh´KÛubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjí�h²hh³jŽh´KÛubah}”(h]”jè�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŽh´KÛhjê�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*search a pattern in continuous/linear data”h]”hŒ*search a pattern in continuous/linear data”…”�”}”(hjï�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´KÛhjì�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjê�h²hh³jŽh´KÛubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�jæj�jç‰jè‰jé‰uh1jh²hhjʼnh³Nh´Nubjë)�”}”(hX±**Parameters** ``struct ts_config *conf`` search configuration ``struct ts_state *state`` search state ``const void *data`` data to search in ``unsigned int len`` length of data **Description** A simplified version of textsearch_find() for continuous/linear data. Call textsearch_next() to retrieve subsequent matches. Returns the position of first occurrence of the pattern or ``UINT_MAX`` if no occurrence was found.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�h]”hŒ Parameters”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kßhj �ubj )�”}”(hhh]”(j)�”}”(hŒ0``struct ts_config *conf`` search configuration ”h]”(j)�”}”(hŒ``struct ts_config *conf``”h]”j)�”}”(hj0�h]”hŒstruct ts_config *conf”…”�”}”(hj2�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´KÜhj*�ubj2)�”}”(hhh]”hÝ)�”}”(hŒsearch configuration”h]”hŒsearch configuration”…”�”}”(hjI�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jE�h´KÜhjF�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj*�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jE�h´KÜhj'�ubj)�”}”(hŒ(``struct ts_state *state`` search state ”h]”(j)�”}”(hŒ``struct ts_state *state``”h]”j)�”}”(hji�h]”hŒstruct ts_state *state”…”�”}”(hjk�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjg�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´KÝhjc�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ search state”h]”hŒ search state”…”�”}”(hj‚�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j~�h´KÝhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjc�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~�h´KÝhj'�ubj)�”}”(hŒ'``const void *data`` data to search in ”h]”(j)�”}”(hŒ``const void *data``”h]”j)�”}”(hj¢�h]”hŒconst void *data”…”�”}”(hj¤�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj �ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´KÞhjœ�ubj2)�”}”(hhh]”hÝ)�”}”(hŒdata to search in”h]”hŒdata to search in”…”�”}”(hj»�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·�h´KÞhj¸�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·�h´KÞhj'�ubj)�”}”(hŒ$``unsigned int len`` length of data ”h]”(j)�”}”(hŒ``unsigned int len``”h]”j)�”}”(hjÛ�h]”hŒunsigned int len”…”�”}”(hjÝ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´KßhjÕ�ubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of data”h]”hŒlength of data”…”�”}”(hjô�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jð�h´Kßhjñ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð�h´Kßhj'�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj �ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‘h]”hŒ Description”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Káhj �ubhÝ)�”}”(hŒ|A simplified version of textsearch_find() for continuous/linear data. Call textsearch_next() to retrieve subsequent matches.”h]”hŒ|A simplified version of textsearch_find() for continuous/linear data. Call textsearch_next() to retrieve subsequent matches.”…”�”}”(hj,‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kàhj �ubhÝ)�”}”(hŒcReturns the position of first occurrence of the pattern or ``UINT_MAX`` if no occurrence was found.”h]”(hŒ;Returns the position of first occurrence of the pattern or ”…”�”}”(hj;‘h²hh³Nh´Nubj)�”}”(hŒ ``UINT_MAX``”h]”hŒUINT_MAX”…”�”}”(hjC‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;‘ubhŒ if no occurrence was found.”…”�”}”(hj;‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kãhj �ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjʼnh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œtextsearch_prepare (C function)”Œc.textsearch_prepare”hNt”auh1hýhjʼnh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒzstruct ts_config * textsearch_prepare (const char *algo, const void *pattern, unsigned int len, gfp_t gfp_mask, int flags)”h]”j)�”}”(hŒxstruct ts_config *textsearch_prepare(const char *algo, const void *pattern, unsigned int len, gfp_t gfp_mask, int flags)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj|‘h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjx‘h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Köubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjx‘h²hh³j‰‘h´Köubh)�”}”(hhh]”j�)�”}”(hŒ ts_config”h]”hŒ ts_config”…”�”}”(hj›‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�‘Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œtextsearch_prepare”sbŒc.textsearch_prepare”†”asbuh1hhjx‘h²hh³j‰‘h´Köubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjx‘h²hh³j‰‘h´Köubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÊ‘h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjx‘h²hh³j‰‘h´Köubj{)�”}”(hŒtextsearch_prepare”h]”j�)�”}”(hj¹‘h]”hŒtextsearch_prepare”…”�”}”(hjÛ‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjבubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjx‘h²hh³j‰‘h´Köubjœ)�”}”(hŒT(const char *algo, const void *pattern, unsigned int len, gfp_t gfp_mask, int flags)”h]”(j¢)�”}”(hŒconst char *algo”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjö‘h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjò‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò‘ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjò‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò‘ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj-’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjò‘ubj�)�”}”(hŒalgo”h]”hŒalgo”…”�”}”(hj:’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjò‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî‘ubj¢)�”}”(hŒconst void *pattern”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjS’h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjO’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjO’ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjn’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjO’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjO’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŠ’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjO’ubj�)�”}”(hŒpattern”h]”hŒpattern”…”�”}”(hj—’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjO’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî‘ubj¢)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj°’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¬’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬’ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÌ’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¬’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬’ubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjè’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî‘ubj¢)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j“Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j·‘Œc.textsearch_prepare”†”asbuh1hhjý’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjý’ubj�)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj0“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjý’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî‘ubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjI“h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjE“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjE“ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hje“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjE“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî‘ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjx‘h²hh³j‰‘h´Köubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjt‘h²hh³j‰‘h´Köubah}”(h]”jo‘ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‰‘h´Köhjq‘h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒPrepare a search”h]”hŒPrepare a search”…”�”}”(hj�“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´KöhjŒ“h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjq‘h²hh³j‰‘h´Köubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj§“jæj§“jç‰jè‰jé‰uh1jh²hhjʼnh³Nh´Nubjë)�”}”(hXZ**Parameters** ``const char *algo`` name of search algorithm ``const void *pattern`` pattern data ``unsigned int len`` length of pattern ``gfp_t gfp_mask`` allocation mask ``int flags`` search flags **Description** Looks up the search algorithm module and creates a new textsearch configuration for the specified pattern. **Note** The format of the pattern may not be compatible between the various search algorithms. Returns a new textsearch configuration according to the specified parameters or a ERR_PTR(). If a zero length pattern is passed, this function returns EINVAL.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj±“h]”hŒ Parameters”…”�”}”(hj³“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kúhj«“ubj )�”}”(hhh]”(j)�”}”(hŒ.``const char *algo`` name of search algorithm ”h]”(j)�”}”(hŒ``const char *algo``”h]”j)�”}”(hjГh]”hŒconst char *algo”…”�”}”(hjÒ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjΓubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´K÷hjÊ“ubj2)�”}”(hhh]”hÝ)�”}”(hŒname of search algorithm”h]”hŒname of search algorithm”…”�”}”(hjé“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jå“h´K÷hjæ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÊ“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jå“h´K÷hjÇ“ubj)�”}”(hŒ%``const void *pattern`` pattern data ”h]”(j)�”}”(hŒ``const void *pattern``”h]”j)�”}”(hj ”h]”hŒconst void *pattern”…”�”}”(hj ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Køhj”ubj2)�”}”(hhh]”hÝ)�”}”(hŒ pattern data”h]”hŒ pattern data”…”�”}”(hj"”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”h´Køhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”h´KøhjÇ“ubj)�”}”(hŒ'``unsigned int len`` length of pattern ”h]”(j)�”}”(hŒ``unsigned int len``”h]”j)�”}”(hjB”h]”hŒunsigned int len”…”�”}”(hjD”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kùhj<”ubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of pattern”h]”hŒlength of pattern”…”�”}”(hj[”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jW”h´KùhjX”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj<”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jW”h´KùhjÇ“ubj)�”}”(hŒ#``gfp_t gfp_mask`` allocation mask ”h]”(j)�”}”(hŒ``gfp_t gfp_mask``”h]”j)�”}”(hj{”h]”hŒgfp_t gfp_mask”…”�”}”(hj}”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjy”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kúhju”ubj2)�”}”(hhh]”hÝ)�”}”(hŒallocation mask”h]”hŒallocation mask”…”�”}”(hj””h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�”h´Kúhj‘”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hju”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�”h´KúhjÇ“ubj)�”}”(hŒ``int flags`` search flags ”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hj´”h]”hŒ int flags”…”�”}”(hj¶”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&• ]”uh1jhj²”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kûhj®”ubj2)�”}”(hhh]”hÝ)�”}”(hŒ search flags”h]”hŒ search flags”…”�”}”(hjÍ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÉ”h´KûhjÊ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj®”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÉ”h´KûhjÇ“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj«“ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjï”h]”hŒ Description”…”�”}”(hjñ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjí”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kýhj«“ubhÝ)�”}”(hŒjLooks up the search algorithm module and creates a new textsearch configuration for the specified pattern.”h]”hŒjLooks up the search algorithm module and creates a new textsearch configuration for the specified pattern.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kühj«“ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj•h]”hŒNote”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Kÿhj«“ubj )�”}”(hhh]”j)�”}”(hŒWThe format of the pattern may not be compatible between the various search algorithms. ”h]”(j)�”}”(hŒ7The format of the pattern may not be compatible between”h]”hŒ7The format of the pattern may not be compatible between”…”�”}”(hj3•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Mhj/•ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe various search algorithms.”h]”hŒthe various search algorithms.”…”�”}”(hjE•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jA•h´MhjB•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jA•h´Mhj,•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj«“ubhÝ)�”}”(hŒžReturns a new textsearch configuration according to the specified parameters or a ERR_PTR(). If a zero length pattern is passed, this function returns EINVAL.”h]”hŒžReturns a new textsearch configuration according to the specified parameters or a ERR_PTR(). If a zero length pattern is passed, this function returns EINVAL.”…”�”}”(hje•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´Mhj«“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjʼnh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œtextsearch_destroy (C function)”Œc.textsearch_destroy”hNt”auh1hýhjʼnh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ0void textsearch_destroy (struct ts_config *conf)”h]”j)�”}”(hŒ/void textsearch_destroy(struct ts_config *conf)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj”•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�•h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´M3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�•h²hh³j¢•h´M3ubj{)�”}”(hŒtextsearch_destroy”h]”j�)�”}”(hŒtextsearch_destroy”h]”hŒtextsearch_destroy”…”�”}”(hjµ•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±•ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�•h²hh³j¢•h´M3ubjœ)�”}”(hŒ(struct ts_config *conf)”h]”j¢)�”}”(hŒstruct ts_config *conf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÑ•h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÍ•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍ•ubh)�”}”(hhh]”j�)�”}”(hŒ ts_config”h]”hŒ ts_config”…”�”}”(hjï•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jñ•Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j·•sbŒc.textsearch_destroy”†”asbuh1hhjÍ•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍ•ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÍ•ubj�)�”}”(hŒconf”h]”hŒconf”…”�”}”(hj*–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍ•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÉ•ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�•h²hh³j¢•h´M3ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŒ•h²hh³j¢•h´M3ubah}”(h]”j‡•ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¢•h´M3hj‰•h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒdestroy a search configuration”h]”hŒdestroy a search configuration”…”�”}”(hjT–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´M3hjQ–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‰•h²hh³j¢•h´M3ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjl–jæjl–jç‰jè‰jé‰uh1jh²hhjʼnh³Nh´Nubjë)�”}”(hŒ™**Parameters** ``struct ts_config *conf`` search configuration **Description** Releases all references of the configuration and frees up the memory.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjv–h]”hŒ Parameters”…”�”}”(hjx–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjt–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´M7hjp–ubj )�”}”(hhh]”j)�”}”(hŒ0``struct ts_config *conf`` search configuration ”h]”(j)�”}”(hŒ``struct ts_config *conf``”h]”j)�”}”(hj•–h]”hŒstruct ts_config *conf”…”�”}”(hj—–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´M4hj�–ubj2)�”}”(hhh]”hÝ)�”}”(hŒsearch configuration”h]”hŒsearch configuration”…”�”}”(hj®–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jª–h´M4hj«–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jª–h´M4hjŒ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjp–ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjЖh]”hŒ Description”…”�”}”(hjÒ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjΖubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´M6hjp–ubhÝ)�”}”(hŒEReleases all references of the configuration and frees up the memory.”h]”hŒEReleases all references of the configuration and frees up the memory.”…”�”}”(hjæ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:114: ./lib/textsearch.c”h´M5hjp–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjʼnh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œtextsearch_next (C function)”Œc.textsearch_next”hNt”auh1hýhjʼnh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒMunsigned int textsearch_next (struct ts_config *conf, struct ts_state *state)”h]”j)�”}”(hŒLunsigned int textsearch_next(struct ts_config *conf, struct ts_state *state)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj—h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—h²hh³j#—h´K_ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj2—h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj—h²hh³j#—h´K_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—h²hh³j#—h´K_ubj{)�”}”(hŒtextsearch_next”h]”j�)�”}”(hŒtextsearch_next”h]”hŒtextsearch_next”…”�”}”(hjR—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN—ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—h²hh³j#—h´K_ubjœ)�”}”(hŒ0(struct ts_config *conf, struct ts_state *state)”h]”(j¢)�”}”(hŒstruct ts_config *conf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjn—h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjj—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj—ubh)�”}”(hhh]”j�)�”}”(hŒ ts_config”h]”hŒ ts_config”…”�”}”(hjŒ—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŽ—Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jT—sbŒc.textsearch_next”†”asbuh1hhjj—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj—ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjº—h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjj—ubj�)�”}”(hŒconf”h]”hŒconf”…”�”}”(hjÇ—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjj—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjf—ubj¢)�”}”(hŒstruct ts_state *state”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjà—h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÜ—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜ—ubh)�”}”(hhh]”j�)�”}”(hŒts_state”h]”hŒts_state”…”�”}”(hjþ—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjû—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j˜Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¨—Œc.textsearch_next”†”asbuh1hhjÜ—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜ—ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj*˜h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÜ—ubj�)�”}”(hŒstate”h]”hŒstate”…”�”}”(hj7˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜ—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjf—ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj—h²hh³j#—h´K_ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj —h²hh³j#—h´K_ubah}”(h]”j—ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j#—h´K_hj —h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ continue searching for a pattern”h]”hŒ continue searching for a pattern”…”�”}”(hja˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K_hj^˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj —h²hh³j#—h´K_ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjy˜jæjy˜jç‰jè‰jé‰uh1jh²hhjʼnh³Nh´Nubjë)�”}”(hXy**Parameters** ``struct ts_config *conf`` search configuration ``struct ts_state *state`` search state **Description** Continues a search looking for more occurrences of the pattern. textsearch_find() must be called to find the first occurrence in order to reset the state. Returns the position of the next occurrence of the pattern or UINT_MAX if not match was found.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjƒ˜h]”hŒ Parameters”…”�”}”(hj…˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´Kchj}˜ubj )�”}”(hhh]”(j)�”}”(hŒ0``struct ts_config *conf`` search configuration ”h]”(j)�”}”(hŒ``struct ts_config *conf``”h]”j)�”}”(hj¢˜h]”hŒstruct ts_config *conf”…”�”}”(hj¤˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K`hjœ˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒsearch configuration”h]”hŒsearch configuration”…”�”}”(hj»˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·˜h´K`hj¸˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœ˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·˜h´K`hj™˜ubj)�”}”(hŒ(``struct ts_state *state`` search state ”h]”(j)�”}”(hŒ``struct ts_state *state``”h]”j)�”}”(hjÛ˜h]”hŒstruct ts_state *state”…”�”}”(hjݘh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´KahjÕ˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒ search state”h]”hŒ search state”…”�”}”(hjô˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jð˜h´Kahjñ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕ˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð˜h´Kahj™˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj}˜ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj™h]”hŒ Description”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´Kchj}˜ubhÝ)�”}”(hŒšContinues a search looking for more occurrences of the pattern. textsearch_find() must be called to find the first occurrence in order to reset the state.”h]”hŒšContinues a search looking for more occurrences of the pattern. textsearch_find() must be called to find the first occurrence in order to reset the state.”…”�”}”(hj,™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´Kbhj}˜ubhÝ)�”}”(hŒ^Returns the position of the next occurrence of the pattern or UINT_MAX if not match was found.”h]”hŒ^Returns the position of the next occurrence of the pattern or UINT_MAX if not match was found.”…”�”}”(hj;™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´Kfhj}˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjʼnh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œtextsearch_find (C function)”Œc.textsearch_find”hNt”auh1hýhjʼnh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒMunsigned int textsearch_find (struct ts_config *conf, struct ts_state *state)”h]”j)�”}”(hŒLunsigned int textsearch_find(struct ts_config *conf, struct ts_state *state)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjj™h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjf™h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´Kvubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjf™h²hh³jx™h´Kvubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj‡™h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjf™h²hh³jx™h´Kvubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjf™h²hh³jx™h´Kvubj{)�”}”(hŒtextsearch_find”h]”j�)�”}”(hŒtextsearch_find”h]”hŒtextsearch_find”…”�”}”(hj§™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£™ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjf™h²hh³jx™h´Kvubjœ)�”}”(hŒ0(struct ts_config *conf, struct ts_state *state)”h]”(j¢)�”}”(hŒstruct ts_config *conf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¿™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjЙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿™ubh)�”}”(hhh]”j�)�”}”(hŒ ts_config”h]”hŒ ts_config”…”�”}”(hjá™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞ™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j㙌modname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j©™sbŒc.textsearch_find”†”asbuh1hhj¿™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿™ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¿™ubj�)�”}”(hŒconf”h]”hŒconf”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»™ubj¢)�”}”(hŒstruct ts_state *state”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj5šh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj1šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1šubh)�”}”(hhh]”j�)�”}”(hŒts_state”h]”hŒts_state”…”�”}”(hjSšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jUšŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jý™Œc.textsearch_find”†”asbuh1hhj1šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1šubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj1šubj�)�”}”(hŒstate”h]”hŒstate”…”�”}”(hjŒšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»™ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjf™h²hh³jx™h´Kvubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjb™h²hh³jx™h´Kvubah}”(h]”j]™ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jx™h´Kvhj_™h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒstart searching for a pattern”h]”hŒstart searching for a pattern”…”�”}”(hj¶šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´Kvhj³šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj_™h²hh³jx™h´Kvubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjΚjæjΚjç‰jè‰jé‰uh1jh²hhjʼnh³Nh´Nubjë)�”}”(hŒÙ**Parameters** ``struct ts_config *conf`` search configuration ``struct ts_state *state`` search state **Description** Returns the position of first occurrence of the pattern or UINT_MAX if no match was found.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjØšh]”hŒ Parameters”…”�”}”(hjÚšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´KzhjÒšubj )�”}”(hhh]”(j)�”}”(hŒ0``struct ts_config *conf`` search configuration ”h]”(j)�”}”(hŒ``struct ts_config *conf``”h]”j)�”}”(hj÷šh]”hŒstruct ts_config *conf”…”�”}”(hjùšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõšubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´Kwhjñšubj2)�”}”(hhh]”hÝ)�”}”(hŒsearch configuration”h]”hŒsearch configuration”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ›h´Kwhj ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjñšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ›h´Kwhjîšubj)�”}”(hŒ(``struct ts_state *state`` search state ”h]”(j)�”}”(hŒ``struct ts_state *state``”h]”j)�”}”(hj0›h]”hŒstruct ts_state *state”…”�”}”(hj2›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´Kxhj*›ubj2)�”}”(hhh]”hÝ)�”}”(hŒ search state”h]”hŒ search state”…”�”}”(hjI›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jE›h´KxhjF›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj*›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jE›h´Kxhjîšubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÒšubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjk›h]”hŒ Description”…”�”}”(hjm›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhji›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´KzhjÒšubhÝ)�”}”(hŒZReturns the position of first occurrence of the pattern or UINT_MAX if no match was found.”h]”hŒZReturns the position of first occurrence of the pattern or UINT_MAX if no match was found.”…”�”}”(hj�›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´KyhjÒšubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjʼnh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#textsearch_get_pattern (C function)”Œc.textsearch_get_pattern”hNt”auh1hýhjʼnh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6void * textsearch_get_pattern (struct ts_config *conf)”h]”j)�”}”(hŒ4void *textsearch_get_pattern(struct ts_config *conf)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj°›h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¬›h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬›h²hh³j¾›h´K…ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÍ›h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¬›h²hh³j¾›h´K…ubj{)�”}”(hŒtextsearch_get_pattern”h]”j�)�”}”(hŒtextsearch_get_pattern”h]”hŒtextsearch_get_pattern”…”�”}”(hjÞ›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚ›ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¬›h²hh³j¾›h´K…ubjœ)�”}”(hŒ(struct ts_config *conf)”h]”j¢)�”}”(hŒstruct ts_config *conf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjú›h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjö›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjö›ubh)�”}”(hhh]”j�)�”}”(hŒ ts_config”h]”hŒ ts_config”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jœŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jà›sbŒc.textsearch_get_pattern”†”asbuh1hhjö›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjö›ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjFœh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjö›ubj�)�”}”(hŒconf”h]”hŒconf”…”�”}”(hjSœh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjö›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjò›ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¬›h²hh³j¾›h´K…ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¨›h²hh³j¾›h´K…ubah}”(h]”j£›ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¾›h´K…hj¥›h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒreturn head of the pattern”h]”hŒreturn head of the pattern”…”�”}”(hj}œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K…hjzœh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¥›h²hh³j¾›h´K…ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj•œjæj•œjç‰jè‰jé‰uh1jh²hhjʼnh³Nh´Nubjë)�”}”(hŒA**Parameters** ``struct ts_config *conf`` search configuration”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŸœh]”hŒ Parameters”…”�”}”(hj¡œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K‰hj™œubj )�”}”(hhh]”j)�”}”(hŒ/``struct ts_config *conf`` search configuration”h]”(j)�”}”(hŒ``struct ts_config *conf``”h]”j)�”}”(hj¾œh]”hŒstruct ts_config *conf”…”�”}”(hjÀœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼œubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K‹hj¸œubj2)�”}”(hhh]”hÝ)�”}”(hŒsearch configuration”h]”hŒsearch configuration”…”�”}”(hjלh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K†hjÔœubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓœh´K‹hjµœubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj™œubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjʼnh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'textsearch_get_pattern_len (C function)”Œc.textsearch_get_pattern_len”hNt”auh1hýhjʼnh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@unsigned int textsearch_get_pattern_len (struct ts_config *conf)”h]”j)�”}”(hŒ?unsigned int textsearch_get_pattern_len(struct ts_config *conf)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´KŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�h²hh³j&�h´KŽubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj5�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�h²hh³j&�h´KŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�h²hh³j&�h´KŽubj{)�”}”(hŒtextsearch_get_pattern_len”h]”j�)�”}”(hŒtextsearch_get_pattern_len”h]”hŒtextsearch_get_pattern_len”…”�”}”(hjU�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQ�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�h²hh³j&�h´KŽubjœ)�”}”(hŒ(struct ts_config *conf)”h]”j¢)�”}”(hŒstruct ts_config *conf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjq�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjm�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm�ubh)�”}”(hhh]”j�)�”}”(hŒ ts_config”h]”hŒ ts_config”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‘�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jW�sbŒc.textsearch_get_pattern_len”†”asbuh1hhjm�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj½�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjm�ubj�)�”}”(hŒconf”h]”hŒconf”…”�”}”(hjÊ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjm�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hji�ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�h²hh³j&�h´KŽubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�h²hh³j&�h´KŽubah}”(h]”j �ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j&�h´KŽhj �h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒreturn length of the pattern”h]”hŒreturn length of the pattern”…”�”}”(hjô�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´KŽhjñ�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj �h²hh³j&�h´KŽubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj žjæj žjç‰jè‰jé‰uh1jh²hhjʼnh³Nh´Nubjë)�”}”(hŒA**Parameters** ``struct ts_config *conf`` search configuration”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjžh]”hŒ Parameters”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K’hjžubj )�”}”(hhh]”j)�”}”(hŒ/``struct ts_config *conf`` search configuration”h]”(j)�”}”(hŒ``struct ts_config *conf``”h]”j)�”}”(hj5žh]”hŒstruct ts_config *conf”…”�”}”(hj7žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3žubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K”hj/žubj2)�”}”(hhh]”hÝ)�”}”(hŒsearch configuration”h]”hŒsearch configuration”…”�”}”(hjNžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:117: ./include/linux/textsearch.h”h´K�hjKžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJžh´K”hj,žubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjʼnh²hh³Nh´Nubeh}”(h]”Œtext-searching”ah ]”h"]”Œtext searching”ah$]”h&]”uh1hµhj?æh²hh³hÊh´Kmubeh}”(h]”Œbasic-kernel-library-functions”ah ]”h"]”Œbasic kernel library functions”ah$]”h&]”uh1hµhh·h²hh³hÊh´K/ubh¶)�”}”(hhh]”(h»)�”}”(hŒCRC and Math Functions in Linux”h]”hŒCRC and Math Functions in Linux”…”�”}”(hj‰žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj†žh²hh³hÊh´Kzubh¶)�”}”(hhh]”(h»)�”}”(hŒArithmetic Overflow Checking”h]”hŒArithmetic Overflow Checking”…”�”}”(hjšžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj—žh²hh³hÊh´K}ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcheck_add_overflow (C macro)”Œc.check_add_overflow”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒcheck_add_overflow”h]”j)�”}”(hŒcheck_add_overflow”h]”j{)�”}”(hŒcheck_add_overflow”h]”j�)�”}”(hj»žh]”hŒcheck_add_overflow”…”�”}”(hjÅžh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁžubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj½žh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K3ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¹žh²hh³jØžh´K3ubah}”(h]”j´žah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jØžh´K3hj¶žh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¶žh²hh³jØžh´K3ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjñžjæjñžjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ ``check_add_overflow (a, b, d)``”h]”j)�”}”(hj÷žh]”hŒcheck_add_overflow (a, b, d)”…”�”}”(hjùžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõžubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K5hj—žh²hubj•)�”}”(hŒ*Calculate addition with overflow checking ”h]”hÝ)�”}”(hŒ)Calculate addition with overflow checking”h]”hŒ)Calculate addition with overflow checking”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K3hj Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jŸh´K3hj—žh²hubjë)�”}”(hŒú**Parameters** ``a`` first addend ``b`` second addend ``d`` pointer to store sum **Description** Returns true on wrap-around, false otherwise. ***d** holds the results of the attempted addition, regardless of whether wrap-around occurred.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj,Ÿh]”hŒ Parameters”…”�”}”(hj.Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K7hj&Ÿubj )�”}”(hhh]”(j)�”}”(hŒ``a`` first addend ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hjKŸh]”hŒa”…”�”}”(hjMŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K4hjEŸubj2)�”}”(hhh]”hÝ)�”}”(hŒ first addend”h]”hŒ first addend”…”�”}”(hjdŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j`Ÿh´K4hjaŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjEŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`Ÿh´K4hjBŸubj)�”}”(hŒ``b`` second addend ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hj„Ÿh]”hŒb”…”�”}”(hj†Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K5hj~Ÿubj2)�”}”(hhh]”hÝ)�”}”(hŒ second addend”h]”hŒ second addend”…”�”}”(hj�Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™Ÿh´K5hjšŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™Ÿh´K5hjBŸubj)�”}”(hŒ``d`` pointer to store sum ”h]”(j)�”}”(hŒ``d``”h]”j)�”}”(hj½Ÿh]”hŒd”…”�”}”(hj¿Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K6hj·Ÿubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to store sum”h]”hŒpointer to store sum”…”�”}”(hjÖŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒŸh´K6hjÓŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒŸh´K6hjBŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj&ŸubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjøŸh]”hŒ Description”…”�”}”(hjúŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjöŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K8hj&ŸubhÝ)�”}”(hŒ-Returns true on wrap-around, false otherwise.”h]”hŒ-Returns true on wrap-around, false otherwise.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K7hj&ŸubhÝ)�”}”(hŒ_***d** holds the results of the attempted addition, regardless of whether wrap-around occurred.”h]”(jõ)�”}”(hŒ***d**”h]”hŒ*d”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubhŒY holds the results of the attempted addition, regardless of whether wrap-around occurred.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K9hj&Ÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œwrapping_add (C macro)”Œc.wrapping_add”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ wrapping_add”h]”j)�”}”(hŒ wrapping_add”h]”j{)�”}”(hŒ wrapping_add”h]”j�)�”}”(hjT h]”hŒ wrapping_add”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjV h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KAubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjR h²hh³jq h´KAubah}”(h]”jM ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jq h´KAhjO h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjO h²hh³jq h´KAubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjŠ jæjŠ jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ``wrapping_add (type, a, b)``”h]”j)�”}”(hj� h]”hŒwrapping_add (type, a, b)”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KChj—žh²hubj•)�”}”(hŒ*Intentionally perform a wrapping addition ”h]”hÝ)�”}”(hŒ)Intentionally perform a wrapping addition”h]”hŒ)Intentionally perform a wrapping addition”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KAhj¦ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¸ h´KAhj—žh²hubjë)�”}”(hŒè**Parameters** ``type`` type for result of calculation ``a`` first addend ``b`` second addend **Description** Return the potentially wrapped-around addition without tripping any wrap-around sanitizers that may be enabled.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÅ h]”hŒ Parameters”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KEhj¿ ubj )�”}”(hhh]”(j)�”}”(hŒ(``type`` type for result of calculation ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hjä h]”hŒtype”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KBhjÞ ubj2)�”}”(hhh]”hÝ)�”}”(hŒtype for result of calculation”h]”hŒtype for result of calculation”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jù h´KBhjú ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÞ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jù h´KBhjÛ ubj)�”}”(hŒ``a`` first addend ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hj¡h]”hŒa”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KChj¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒ first addend”h]”hŒ first addend”…”�”}”(hj6¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j2¡h´KChj3¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2¡h´KChjÛ ubj)�”}”(hŒ``b`` second addend ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hjV¡h]”hŒb”…”�”}”(hjX¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KDhjP¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒ second addend”h]”hŒ second addend”…”�”}”(hjo¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jk¡h´KDhjl¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjP¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jk¡h´KDhjÛ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‘¡h]”hŒ Description”…”�”}”(hj“¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KFhj¿ ubhÝ)�”}”(hŒoReturn the potentially wrapped-around addition without tripping any wrap-around sanitizers that may be enabled.”h]”hŒoReturn the potentially wrapped-around addition without tripping any wrap-around sanitizers that may be enabled.”…”�”}”(hj§¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KEhj¿ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œwrapping_assign_add (C macro)”Œc.wrapping_assign_add”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒwrapping_assign_add”h]”j)�”}”(hŒwrapping_assign_add”h]”j{)�”}”(hŒwrapping_assign_add”h]”j�)�”}”(hjСh]”hŒwrapping_assign_add”…”�”}”(hjÚ¡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖ¡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÒ¡h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KQubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjΡh²hh³jí¡h´KQubah}”(h]”jÉ¡ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jí¡h´KQhjË¡h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjË¡h²hh³jí¡h´KQubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj¢jæj¢jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ%``wrapping_assign_add (var, offset)``”h]”j)�”}”(hj ¢h]”hŒ!wrapping_assign_add (var, offset)”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KShj—žh²hubj•)�”}”(hŒ6Intentionally perform a wrapping increment assignment ”h]”hÝ)�”}”(hŒ5Intentionally perform a wrapping increment assignment”h]”hŒ5Intentionally perform a wrapping increment assignment”…”�”}”(hj&¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KQhj"¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j4¢h´KQhj—žh²hubjë)�”}”(hX **Parameters** ``var`` variable to be incremented ``offset`` amount to add **Description** Increments **var** by **offset** with wrap-around. Returns the resulting value of **var**. Will not trip any wrap-around sanitizers. Returns the new value of **var**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjA¢h]”hŒ Parameters”…”�”}”(hjC¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KUhj;¢ubj )�”}”(hhh]”(j)�”}”(hŒ#``var`` variable to be incremented ”h]”(j)�”}”(hŒ``var``”h]”j)�”}”(hj`¢h]”hŒvar”…”�”}”(hjb¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KRhjZ¢ubj2)�”}”(hhh]”hÝ)�”}”(hŒvariable to be incremented”h]”hŒvariable to be incremented”…”�”}”(hjy¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ju¢h´KRhjv¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjZ¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ju¢h´KRhjW¢ubj)�”}”(hŒ``offset`` amount to add ”h]”(j)�”}”(hŒ ``offset``”h]”j)�”}”(hj™¢h]”hŒoffset”…”�”}”(hj›¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KShj“¢ubj2)�”}”(hhh]”hÝ)�”}”(hŒ amount to add”h]”hŒ amount to add”…”�”}”(hj²¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j®¢h´KShj¯¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj“¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j®¢h´KShjW¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj;¢ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÔ¢h]”hŒ Description”…”�”}”(hjÖ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÒ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KUhj;¢ubhÝ)�”}”(hŒ„Increments **var** by **offset** with wrap-around. Returns the resulting value of **var**. Will not trip any wrap-around sanitizers.”h]”(hŒ Increments ”…”�”}”(hjê¢h²hh³Nh´Nubjõ)�”}”(hŒ**var**”h]”hŒvar”…”�”}”(hjò¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjê¢ubhŒ by ”…”�”}”(hjê¢h²hh³Nh´Nubjõ)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjê¢ubhŒ2 with wrap-around. Returns the resulting value of ”…”�”}”(hjê¢h²hh³Nh´Nubjõ)�”}”(hŒ**var**”h]”hŒvar”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjê¢ubhŒ+. Will not trip any wrap-around sanitizers.”…”�”}”(hjê¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KThj;¢ubhÝ)�”}”(hŒ!Returns the new value of **var**.”h]”(hŒReturns the new value of ”…”�”}”(hj/£h²hh³Nh´Nubjõ)�”}”(hŒ**var**”h]”hŒvar”…”�”}”(hj7£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/£ubhŒ.”…”�”}”(hj/£h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KWhj;¢ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcheck_sub_overflow (C macro)”Œc.check_sub_overflow”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒcheck_sub_overflow”h]”j)�”}”(hŒcheck_sub_overflow”h]”j{)�”}”(hŒcheck_sub_overflow”h]”j�)�”}”(hjj£h]”hŒcheck_sub_overflow”…”�”}”(hjt£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjp£ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjl£h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kaubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh£h²hh³j‡£h´Kaubah}”(h]”jc£ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‡£h´Kahje£h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhje£h²hh³j‡£h´Kaubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj £jæj £jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ ``check_sub_overflow (a, b, d)``”h]”j)�”}”(hj¦£h]”hŒcheck_sub_overflow (a, b, d)”…”�”}”(hj¨£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kchj—žh²hubj•)�”}”(hŒ-Calculate subtraction with overflow checking ”h]”hÝ)�”}”(hŒ,Calculate subtraction with overflow checking”h]”hŒ,Calculate subtraction with overflow checking”…”�”}”(hjÀ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kahj¼£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jΣh´Kahj—žh²hubjë)�”}”(hX2**Parameters** ``a`` minuend; value to subtract from ``b`` subtrahend; value to subtract from **a** ``d`` pointer to store difference **Description** Returns true on wrap-around, false otherwise. ***d** holds the results of the attempted subtraction, regardless of whether wrap-around occurred.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÛ£h]”hŒ Parameters”…”�”}”(hjÝ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KehjÕ£ubj )�”}”(hhh]”(j)�”}”(hŒ&``a`` minuend; value to subtract from ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hjú£h]”hŒa”…”�”}”(hjü£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjø£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kbhjô£ubj2)�”}”(hhh]”hÝ)�”}”(hŒminuend; value to subtract from”h]”hŒminuend; value to subtract from”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤h´Kbhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjô£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤h´Kbhjñ£ubj)�”}”(hŒ/``b`` subtrahend; value to subtract from **a** ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hj3¤h]”hŒb”…”�”}”(hj5¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kchj-¤ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(subtrahend; value to subtract from **a**”h]”(hŒ#subtrahend; value to subtract from ”…”�”}”(hjL¤h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hjT¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjL¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jH¤h´KchjI¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj-¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jH¤h´Kchjñ£ubj)�”}”(hŒ"``d`` pointer to store difference ”h]”(j)�”}”(hŒ``d``”h]”j)�”}”(hjz¤h]”hŒd”…”�”}”(hj|¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjx¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kdhjt¤ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to store difference”h]”hŒpointer to store difference”…”�”}”(hj“¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�¤h´Kdhj�¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjt¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�¤h´Kdhjñ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÕ£ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjµ¤h]”hŒ Description”…”�”}”(hj·¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj³¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KfhjÕ£ubhÝ)�”}”(hŒ-Returns true on wrap-around, false otherwise.”h]”hŒ-Returns true on wrap-around, false otherwise.”…”�”}”(hjˤh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KehjÕ£ubhÝ)�”}”(hŒb***d** holds the results of the attempted subtraction, regardless of whether wrap-around occurred.”h]”(jõ)�”}”(hŒ***d**”h]”hŒ*d”…”�”}”(hjÞ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚ¤ubhŒ\ holds the results of the attempted subtraction, regardless of whether wrap-around occurred.”…”�”}”(hjÚ¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KghjÕ£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œwrapping_sub (C macro)”Œc.wrapping_sub”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ wrapping_sub”h]”j)�”}”(hŒ wrapping_sub”h]”j{)�”}”(hŒ wrapping_sub”h]”j�)�”}”(hj¥h]”hŒ wrapping_sub”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¥h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Koubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¥h²hh³j.¥h´Koubah}”(h]”j ¥ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j.¥h´Kohj ¥h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj ¥h²hh³j.¥h´Koubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjG¥jæjG¥jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ``wrapping_sub (type, a, b)``”h]”j)�”}”(hjM¥h]”hŒwrapping_sub (type, a, b)”…”�”}”(hjO¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjK¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kqhj—žh²hubj•)�”}”(hŒ-Intentionally perform a wrapping subtraction ”h]”hÝ)�”}”(hŒ,Intentionally perform a wrapping subtraction”h]”hŒ,Intentionally perform a wrapping subtraction”…”�”}”(hjg¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kohjc¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³ju¥h´Kohj—žh²hubjë)�”}”(hX**Parameters** ``type`` type for result of calculation ``a`` minuend; value to subtract from ``b`` subtrahend; value to subtract from **a** **Description** Return the potentially wrapped-around subtraction without tripping any wrap-around sanitizers that may be enabled.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‚¥h]”hŒ Parameters”…”�”}”(hj„¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kshj|¥ubj )�”}”(hhh]”(j)�”}”(hŒ(``type`` type for result of calculation ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hj¡¥h]”hŒtype”…”�”}”(hj£¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kphj›¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒtype for result of calculation”h]”hŒtype for result of calculation”…”�”}”(hjº¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶¥h´Kphj·¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶¥h´Kphj˜¥ubj)�”}”(hŒ&``a`` minuend; value to subtract from ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hjÚ¥h]”hŒa”…”�”}”(hjÜ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KqhjÔ¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒminuend; value to subtract from”h]”hŒminuend; value to subtract from”…”�”}”(hjó¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jï¥h´Kqhjð¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔ¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jï¥h´Kqhj˜¥ubj)�”}”(hŒ/``b`` subtrahend; value to subtract from **a** ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hj¦h]”hŒb”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Krhj ¦ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(subtrahend; value to subtract from **a**”h]”(hŒ#subtrahend; value to subtract from ”…”�”}”(hj,¦h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj4¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(¦h´Krhj)¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(¦h´Krhj˜¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj|¥ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj\¦h]”hŒ Description”…”�”}”(hj^¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjZ¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kthj|¥ubhÝ)�”}”(hŒrReturn the potentially wrapped-around subtraction without tripping any wrap-around sanitizers that may be enabled.”h]”hŒrReturn the potentially wrapped-around subtraction without tripping any wrap-around sanitizers that may be enabled.”…”�”}”(hjr¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kshj|¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œwrapping_assign_sub (C macro)”Œc.wrapping_assign_sub”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒwrapping_assign_sub”h]”j)�”}”(hŒwrapping_assign_sub”h]”j{)�”}”(hŒwrapping_assign_sub”h]”j�)�”}”(hj›¦h]”hŒwrapping_assign_sub”…”�”}”(hj¥¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡¦ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�¦h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj™¦h²hh³j¸¦h´Kubah}”(h]”j”¦ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¸¦h´Khj–¦h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj–¦h²hh³j¸¦h´Kubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjѦjæjѦjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ%``wrapping_assign_sub (var, offset)``”h]”j)�”}”(hjצh]”hŒ!wrapping_assign_sub (var, offset)”…”�”}”(hjÙ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K�hj—žh²hubj•)�”}”(hŒ2Intentionally perform a wrapping decrement assign ”h]”hÝ)�”}”(hŒ1Intentionally perform a wrapping decrement assign”h]”hŒ1Intentionally perform a wrapping decrement assign”…”�”}”(hjñ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Khjí¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÿ¦h´Khj—žh²hubjë)�”}”(hX**Parameters** ``var`` variable to be decremented ``offset`` amount to subtract **Description** Decrements **var** by **offset** with wrap-around. Returns the resulting value of **var**. Will not trip any wrap-around sanitizers. Returns the new value of **var**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj §h]”hŒ Parameters”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj §ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kƒhj§ubj )�”}”(hhh]”(j)�”}”(hŒ#``var`` variable to be decremented ”h]”(j)�”}”(hŒ``var``”h]”j)�”}”(hj+§h]”hŒvar”…”�”}”(hj-§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K€hj%§ubj2)�”}”(hhh]”hÝ)�”}”(hŒvariable to be decremented”h]”hŒvariable to be decremented”…”�”}”(hjD§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@§h´K€hjA§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@§h´K€hj"§ubj)�”}”(hŒ``offset`` amount to subtract ”h]”(j)�”}”(hŒ ``offset``”h]”j)�”}”(hjd§h]”hŒoffset”…”�”}”(hjf§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K�hj^§ubj2)�”}”(hhh]”hÝ)�”}”(hŒamount to subtract”h]”hŒamount to subtract”…”�”}”(hj}§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jy§h´K�hjz§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jy§h´K�hj"§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj§ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŸ§h]”hŒ Description”…”�”}”(hj¡§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kƒhj§ubhÝ)�”}”(hŒ„Decrements **var** by **offset** with wrap-around. Returns the resulting value of **var**. Will not trip any wrap-around sanitizers.”h]”(hŒ Decrements ”…”�”}”(hjµ§h²hh³Nh´Nubjõ)�”}”(hŒ**var**”h]”hŒvar”…”�”}”(hj½§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµ§ubhŒ by ”…”�”}”(hjµ§h²hh³Nh´Nubjõ)�”}”(hŒ **offset**”h]”hŒoffset”…”�”}”(hjϧh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµ§ubhŒ2 with wrap-around. Returns the resulting value of ”…”�”}”(hjµ§h²hh³Nh´Nubjõ)�”}”(hŒ**var**”h]”hŒvar”…”�”}”(hjá§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµ§ubhŒ+. Will not trip any wrap-around sanitizers.”…”�”}”(hjµ§h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K‚hj§ubhÝ)�”}”(hŒ!Returns the new value of **var**.”h]”(hŒReturns the new value of ”…”�”}”(hjú§h²hh³Nh´Nubjõ)�”}”(hŒ**var**”h]”hŒvar”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjú§ubhŒ.”…”�”}”(hjú§h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K…hj§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcheck_mul_overflow (C macro)”Œc.check_mul_overflow”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒcheck_mul_overflow”h]”j)�”}”(hŒcheck_mul_overflow”h]”j{)�”}”(hŒcheck_mul_overflow”h]”j�)�”}”(hj5¨h]”hŒcheck_mul_overflow”…”�”}”(hj?¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;¨ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj7¨h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K�ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj3¨h²hh³jR¨h´K�ubah}”(h]”j.¨ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jR¨h´K�hj0¨h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj0¨h²hh³jR¨h´K�ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjk¨jæjk¨jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ ``check_mul_overflow (a, b, d)``”h]”j)�”}”(hjq¨h]”hŒcheck_mul_overflow (a, b, d)”…”�”}”(hjs¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K‘hj—žh²hubj•)�”}”(hŒ0Calculate multiplication with overflow checking ”h]”hÝ)�”}”(hŒ/Calculate multiplication with overflow checking”h]”hŒ/Calculate multiplication with overflow checking”…”�”}”(hj‹¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K�hj‡¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j™¨h´K�hj—žh²hubjë)�”}”(hX**Parameters** ``a`` first factor ``b`` second factor ``d`` pointer to store product **Description** Returns true on wrap-around, false otherwise. ***d** holds the results of the attempted multiplication, regardless of whether wrap-around occurred.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¦¨h]”hŒ Parameters”…”�”}”(hj¨¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K“hj ¨ubj )�”}”(hhh]”(j)�”}”(hŒ``a`` first factor ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hjŨh]”hŒa”…”�”}”(hjǨh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K�hj¿¨ubj2)�”}”(hhh]”hÝ)�”}”(hŒ first factor”h]”hŒ first factor”…”�”}”(hjÞ¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÚ¨h´K�hjÛ¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚ¨h´K�hj¼¨ubj)�”}”(hŒ``b`` second factor ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hjþ¨h]”hŒb”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjü¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K‘hjø¨ubj2)�”}”(hhh]”hÝ)�”}”(hŒ second factor”h]”hŒ second factor”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©h´K‘hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjø¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©h´K‘hj¼¨ubj)�”}”(hŒ``d`` pointer to store product ”h]”(j)�”}”(hŒ``d``”h]”j)�”}”(hj7©h]”hŒd”…”�”}”(hj9©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K’hj1©ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to store product”h]”hŒpointer to store product”…”�”}”(hjP©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jL©h´K’hjM©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jL©h´K’hj¼¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ¨ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjr©h]”hŒ Description”…”�”}”(hjt©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjp©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K”hj ¨ubhÝ)�”}”(hŒ-Returns true on wrap-around, false otherwise.”h]”hŒ-Returns true on wrap-around, false otherwise.”…”�”}”(hjˆ©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K“hj ¨ubhÝ)�”}”(hŒe***d** holds the results of the attempted multiplication, regardless of whether wrap-around occurred.”h]”(jõ)�”}”(hŒ***d**”h]”hŒ*d”…”�”}”(hj›©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—©ubhŒ_ holds the results of the attempted multiplication, regardless of whether wrap-around occurred.”…”�”}”(hj—©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K•hj ¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œwrapping_mul (C macro)”Œc.wrapping_mul”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ wrapping_mul”h]”j)�”}”(hŒ wrapping_mul”h]”j{)�”}”(hŒ wrapping_mul”h]”j�)�”}”(hjΩh]”hŒ wrapping_mul”…”�”}”(hjØ©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔ©ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjЩh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K�ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÌ©h²hh³jë©h´K�ubah}”(h]”jÇ©ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jë©h´K�hjÉ©h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÉ©h²hh³jë©h´K�ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjªjæjªjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ``wrapping_mul (type, a, b)``”h]”j)�”}”(hj ªh]”hŒwrapping_mul (type, a, b)”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”•h´KŸhj—žh²hubj•)�”}”(hŒ0Intentionally perform a wrapping multiplication ”h]”hÝ)�”}”(hŒ/Intentionally perform a wrapping multiplication”h]”hŒ/Intentionally perform a wrapping multiplication”…”�”}”(hj$ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K�hj ªubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j2ªh´K�hj—žh²hubjë)�”}”(hŒî**Parameters** ``type`` type for result of calculation ``a`` first factor ``b`` second factor **Description** Return the potentially wrapped-around multiplication without tripping any wrap-around sanitizers that may be enabled.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj?ªh]”hŒ Parameters”…”�”}”(hjAªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj=ªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K¡hj9ªubj )�”}”(hhh]”(j)�”}”(hŒ(``type`` type for result of calculation ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hj^ªh]”hŒtype”…”�”}”(hj`ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KžhjXªubj2)�”}”(hhh]”hÝ)�”}”(hŒtype for result of calculation”h]”hŒtype for result of calculation”…”�”}”(hjwªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jsªh´Kžhjtªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjXªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jsªh´KžhjUªubj)�”}”(hŒ``a`` first factor ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hj—ªh]”hŒa”…”�”}”(hj™ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•ªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KŸhj‘ªubj2)�”}”(hhh]”hÝ)�”}”(hŒ first factor”h]”hŒ first factor”…”�”}”(hj°ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¬ªh´KŸhj­ªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‘ªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬ªh´KŸhjUªubj)�”}”(hŒ``b`` second factor ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hjЪh]”hŒb”…”�”}”(hjÒªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjΪubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K hjʪubj2)�”}”(hhh]”hÝ)�”}”(hŒ second factor”h]”hŒ second factor”…”�”}”(hjéªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jåªh´K hjæªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjʪubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jåªh´K hjUªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj9ªubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj «h]”hŒ Description”…”�”}”(hj «h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj «ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K¢hj9ªubhÝ)�”}”(hŒuReturn the potentially wrapped-around multiplication without tripping any wrap-around sanitizers that may be enabled.”h]”hŒuReturn the potentially wrapped-around multiplication without tripping any wrap-around sanitizers that may be enabled.”…”�”}”(hj!«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K¡hj9ªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcheck_shl_overflow (C macro)”Œc.check_shl_overflow”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒcheck_shl_overflow”h]”j)�”}”(hŒcheck_shl_overflow”h]”j{)�”}”(hŒcheck_shl_overflow”h]”j�)�”}”(hjJ«h]”hŒcheck_shl_overflow”…”�”}”(hjT«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjP«ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjL«h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K­ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjH«h²hh³jg«h´K­ubah}”(h]”jC«ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jg«h´K­hjE«h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjE«h²hh³jg«h´K­ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj€«jæj€«jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ ``check_shl_overflow (a, s, d)``”h]”j)�”}”(hj†«h]”hŒcheck_shl_overflow (a, s, d)”…”�”}”(hjˆ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K¯hj—žh²hubj•)�”}”(hŒ2Calculate a left-shifted value and check overflow ”h]”hÝ)�”}”(hŒ1Calculate a left-shifted value and check overflow”h]”hŒ1Calculate a left-shifted value and check overflow”…”�”}”(hj «h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K­hjœ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j®«h´K­hj—žh²hubjë)�”}”(hX™**Parameters** ``a`` Value to be shifted ``s`` How many bits left to shift ``d`` Pointer to where to store the result **Description** Computes ***d** = (**a** << **s**) Returns true if '***d**' cannot hold the result or when '**a** << **s**' doesn't make sense. Example conditions: - '**a** << **s**' causes bits to be lost when stored in ***d**. - '**s**' is garbage (e.g. negative) or so large that the result of '**a** << **s**' is guaranteed to be 0. - '**a**' is negative. - '**a** << **s**' sets the sign bit, if any, in '***d**'. '***d**' will hold the results of the attempted shift, but is not considered "safe for use" if true is returned.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj»«h]”hŒ Parameters”…”�”}”(hj½«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¹«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K±hjµ«ubj )�”}”(hhh]”(j)�”}”(hŒ``a`` Value to be shifted ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hjÚ«h]”hŒa”…”�”}”(hjÜ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K®hjÔ«ubj2)�”}”(hhh]”hÝ)�”}”(hŒValue to be shifted”h]”hŒValue to be shifted”…”�”}”(hjó«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jï«h´K®hjð«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔ«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jï«h´K®hjÑ«ubj)�”}”(hŒ"``s`` How many bits left to shift ”h]”(j)�”}”(hŒ``s``”h]”j)�”}”(hj¬h]”hŒs”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K¯hj ¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒHow many bits left to shift”h]”hŒHow many bits left to shift”…”�”}”(hj,¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(¬h´K¯hj)¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(¬h´K¯hjÑ«ubj)�”}”(hŒ+``d`` Pointer to where to store the result ”h]”(j)�”}”(hŒ``d``”h]”j)�”}”(hjL¬h]”hŒd”…”�”}”(hjN¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K°hjF¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$Pointer to where to store the result”h]”hŒ$Pointer to where to store the result”…”�”}”(hje¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ja¬h´K°hjb¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjF¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ja¬h´K°hjÑ«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjµ«ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‡¬h]”hŒ Description”…”�”}”(hj‰¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K²hjµ«ubhÝ)�”}”(hŒ"Computes ***d** = (**a** << **s**)”h]”(hŒ Computes ”…”�”}”(hj�¬h²hh³Nh´Nubjõ)�”}”(hŒ***d**”h]”hŒ*d”…”�”}”(hj¥¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�¬ubhŒ = (”…”�”}”(hj�¬h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj·¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�¬ubhŒ << ”…”�”}”(hj�¬h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjɬh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�¬ubhŒ)”…”�”}”(hj�¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K±hjµ«ubhÝ)�”}”(hŒpReturns true if '***d**' cannot hold the result or when '**a** << **s**' doesn't make sense. Example conditions:”h]”(hŒReturns true if ‘”…”�”}”(hjâ¬h²hh³Nh´Nubjõ)�”}”(hŒ***d**”h]”hŒ*d”…”�”}”(hjê¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâ¬ubhŒ&’ cannot hold the result or when ‘”…”�”}”(hjâ¬h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hjü¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâ¬ubhŒ << ”…”�”}”(hjâ¬h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâ¬ubhŒ-’ doesn’t make sense. Example conditions:”…”�”}”(hjâ¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K³hjµ«ubj›)�”}”(hhh]”(j )�”}”(hŒ>'**a** << **s**' causes bits to be lost when stored in ***d**.”h]”hÝ)�”}”(hj,­h]”(hŒ‘”…”�”}”(hj.­h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj5­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.­ubhŒ << ”…”�”}”(hj.­h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hjG­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.­ubhŒ*’ causes bits to be lost when stored in ”…”�”}”(hj.­h²hh³Nh´Nubjõ)�”}”(hŒ***d**”h]”hŒ*d”…”�”}”(hjY­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.­ubhŒ.”…”�”}”(hj.­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K¶hj*­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj'­ubj )�”}”(hŒi'**s**' is garbage (e.g. negative) or so large that the result of '**a** << **s**' is guaranteed to be 0.”h]”hÝ)�”}”(hŒi'**s**' is garbage (e.g. negative) or so large that the result of '**a** << **s**' is guaranteed to be 0.”h]”(hŒ‘”…”�”}”(hj|­h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hj„­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|­ubhŒA’ is garbage (e.g. negative) or so large that the result of ‘”…”�”}”(hj|­h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj–­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|­ubhŒ << ”…”�”}”(hj|­h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hj¨­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|­ubhŒ’ is guaranteed to be 0.”…”�”}”(hj|­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K·hjx­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj'­ubj )�”}”(hŒ'**a**' is negative.”h]”hÝ)�”}”(hjÉ­h]”(hŒ‘”…”�”}”(hjË­h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hjÒ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjË­ubhŒ’ is negative.”…”�”}”(hjË­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K¹hjÇ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj'­ubj )�”}”(hŒ9'**a** << **s**' sets the sign bit, if any, in '***d**'. ”h]”hÝ)�”}”(hŒ8'**a** << **s**' sets the sign bit, if any, in '***d**'.”h]”(hŒ‘”…”�”}”(hjõ­h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hjý­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõ­ubhŒ << ”…”�”}”(hjõ­h²hh³Nh´Nubjõ)�”}”(hŒ**s**”h]”hŒs”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõ­ubhŒ%’ sets the sign bit, if any, in ‘”…”�”}”(hjõ­h²hh³Nh´Nubjõ)�”}”(hŒ***d**”h]”hŒ*d”…”�”}”(hj!®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõ­ubhŒ’.”…”�”}”(hjõ­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kºhjñ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj'­ubeh}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³jq­h´K¶hjµ«ubhÝ)�”}”(hŒp'***d**' will hold the results of the attempted shift, but is not considered "safe for use" if true is returned.”h]”(hŒ‘”…”�”}”(hjF®h²hh³Nh´Nubjõ)�”}”(hŒ***d**”h]”hŒ*d”…”�”}”(hjN®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjF®ubhŒo’ will hold the results of the attempted shift, but is not considered “safe for useâ€� if true is returned.”…”�”}”(hjF®h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´K¼hjµ«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œoverflows_type (C macro)”Œc.overflows_type”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒoverflows_type”h]”j)�”}”(hŒoverflows_type”h]”j{)�”}”(hŒoverflows_type”h]”j�)�”}”(hj�®h]”hŒoverflows_type”…”�”}”(hj‹®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡®ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjƒ®h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KÙubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj®h²hh³jž®h´KÙubah}”(h]”jz®ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jž®h´KÙhj|®h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj|®h²hh³jž®h´KÙubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj·®jæj·®jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ``overflows_type (n, T)``”h]”j)�”}”(hj½®h]”hŒoverflows_type (n, T)”…”�”}”(hj¿®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KÛhj—žh²hubj•)�”}”(hŒIhelper for checking the overflows between value, variables, or data type ”h]”hÝ)�”}”(hŒHhelper for checking the overflows between value, variables, or data type”h]”hŒHhelper for checking the overflows between value, variables, or data type”…”�”}”(hj×®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KÙhjÓ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jå®h´KÙhj—žh²hubjë)�”}”(hX¼**Parameters** ``n`` source constant value or variable to be checked ``T`` destination variable or data type proposed to store **x** **Description** Compares the **x** expression for whether or not it can safely fit in the storage of the type in **T**. **x** and **T** can have different types. If **x** is a constant expression, this will also resolve to a constant expression. **Return** true if overflow can occur, false otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjò®h]”hŒ Parameters”…”�”}”(hjô®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjð®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KÝhjì®ubj )�”}”(hhh]”(j)�”}”(hŒ6``n`` source constant value or variable to be checked ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hj¯h]”hŒn”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KÜhj ¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/source constant value or variable to be checked”h]”hŒ/source constant value or variable to be checked”…”�”}”(hj*¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j&¯h´KÜhj'¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&¯h´KÜhj¯ubj)�”}”(hŒ@``T`` destination variable or data type proposed to store **x** ”h]”(j)�”}”(hŒ``T``”h]”j)�”}”(hjJ¯h]”hŒT”…”�”}”(hjL¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KÝhjD¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒ9destination variable or data type proposed to store **x**”h]”(hŒ4destination variable or data type proposed to store ”…”�”}”(hjc¯h²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjk¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjc¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j_¯h´KÝhj`¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjD¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j_¯h´KÝhj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjì®ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj“¯h]”hŒ Description”…”�”}”(hj•¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‘¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kßhjì®ubhÝ)�”}”(hŒåCompares the **x** expression for whether or not it can safely fit in the storage of the type in **T**. **x** and **T** can have different types. If **x** is a constant expression, this will also resolve to a constant expression.”h]”(hŒ Compares the ”…”�”}”(hj©¯h²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hj±¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©¯ubhŒO expression for whether or not it can safely fit in the storage of the type in ”…”�”}”(hj©¯h²hh³Nh´Nubjõ)�”}”(hŒ**T**”h]”hŒT”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©¯ubhŒ. ”…”�”}”(hj©¯h²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjÕ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©¯ubhŒ and ”…”�”}”(hj©¯h²hh³Nh´Nubjõ)�”}”(hŒ**T**”h]”hŒT”…”�”}”(hjç¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©¯ubhŒ can have different types. If ”…”�”}”(hj©¯h²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjù¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©¯ubhŒK is a constant expression, this will also resolve to a constant expression.”…”�”}”(hj©¯h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KÞhjì®ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj°h]”hŒReturn”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kãhjì®ubhÝ)�”}”(hŒ,true if overflow can occur, false otherwise.”h]”hŒ,true if overflow can occur, false otherwise.”…”�”}”(hj*°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kähjì®ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrange_overflows (C macro)”Œc.range_overflows”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrange_overflows”h]”j)�”}”(hŒrange_overflows”h]”j{)�”}”(hŒrange_overflows”h]”j�)�”}”(hjS°h]”hŒrange_overflows”…”�”}”(hj]°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjY°ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjU°h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kìubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjQ°h²hh³jp°h´Kìubah}”(h]”jL°ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jp°h´KìhjN°h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjN°h²hh³jp°h´Kìubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj‰°jæj‰°jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ&``range_overflows (start, size, max)``”h]”j)�”}”(hj�°h]”hŒ"range_overflows (start, size, max)”…”�”}”(hj‘°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kîhj—žh²hubj•)�”}”(hŒ"Check if a range is out of bounds ”h]”hÝ)�”}”(hŒ!Check if a range is out of bounds”h]”hŒ!Check if a range is out of bounds”…”�”}”(hj©°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kìhj¥°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j·°h´Kìhj—žh²hubjë)�”}”(hX˜**Parameters** ``start`` Start of the range. ``size`` Size of the range. ``max`` Exclusive upper boundary. **Description** A strict check to determine if the range [**start**, **start** + **size**) is invalid with respect to the allowable range [0, **max**). Any range starting at or beyond **max** is considered an overflow, even if **size** is 0. **Return** true if the range is out of bounds.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjİh]”hŒ Parameters”…”�”}”(hjưh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kðhj¾°ubj )�”}”(hhh]”(j)�”}”(hŒ``start`` Start of the range. ”h]”(j)�”}”(hŒ ``start``”h]”j)�”}”(hjã°h]”hŒstart”…”�”}”(hjå°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjá°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kíhjݰubj2)�”}”(hhh]”hÝ)�”}”(hŒStart of the range.”h]”hŒStart of the range.”…”�”}”(hjü°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jø°h´Kíhjù°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjݰubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jø°h´KíhjÚ°ubj)�”}”(hŒ``size`` Size of the range. ”h]”(j)�”}”(hŒ``size``”h]”j)�”}”(hj±h]”hŒsize”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kîhj±ubj2)�”}”(hhh]”hÝ)�”}”(hŒSize of the range.”h]”hŒSize of the range.”…”�”}”(hj5±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j1±h´Kîhj2±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1±h´KîhjÚ°ubj)�”}”(hŒ"``max`` Exclusive upper boundary. ”h]”(j)�”}”(hŒ``max``”h]”j)�”}”(hjU±h]”hŒmax”…”�”}”(hjW±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjS±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´KïhjO±ubj2)�”}”(hhh]”hÝ)�”}”(hŒExclusive upper boundary.”h]”hŒExclusive upper boundary.”…”�”}”(hjn±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jj±h´Kïhjk±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjO±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jj±h´KïhjÚ°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¾°ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�±h]”hŒ Description”…”�”}”(hj’±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjޱubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kñhj¾°ubhÝ)�”}”(hŒáA strict check to determine if the range [**start**, **start** + **size**) is invalid with respect to the allowable range [0, **max**). Any range starting at or beyond **max** is considered an overflow, even if **size** is 0.”h]”(hŒ*A strict check to determine if the range [”…”�”}”(hj¦±h²hh³Nh´Nubjõ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj®±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦±ubhŒ, ”…”�”}”(hj¦±h²hh³Nh´Nubjõ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjÀ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦±ubhŒ + ”…”�”}”(hj¦±h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjÒ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦±ubhŒ5) is invalid with respect to the allowable range [0, ”…”�”}”(hj¦±h²hh³Nh´Nubjõ)�”}”(hŒ**max**”h]”hŒmax”…”�”}”(hjä±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦±ubhŒ#). Any range starting at or beyond ”…”�”}”(hj¦±h²hh³Nh´Nubjõ)�”}”(hŒ**max**”h]”hŒmax”…”�”}”(hjö±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦±ubhŒ$ is considered an overflow, even if ”…”�”}”(hj¦±h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦±ubhŒ is 0.”…”�”}”(hj¦±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kðhj¾°ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj#²h]”hŒReturn”…”�”}”(hj%²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kôhj¾°ubhÝ)�”}”(hŒ#true if the range is out of bounds.”h]”hŒ#true if the range is out of bounds.”…”�”}”(hj9²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Kõhj¾°ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrange_overflows_t (C macro)”Œc.range_overflows_t”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrange_overflows_t”h]”j)�”}”(hŒrange_overflows_t”h]”j{)�”}”(hŒrange_overflows_t”h]”j�)�”}”(hjb²h]”hŒrange_overflows_t”…”�”}”(hjl²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjh²ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjd²h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj`²h²hh³j²h´Mubah}”(h]”j[²ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²h´Mhj]²h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj]²h²hh³j²h´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj˜²jæj˜²jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ.``range_overflows_t (type, start, size, max)``”h]”j)�”}”(hjž²h]”hŒ*range_overflows_t (type, start, size, max)”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj—žh²hubj•)�”}”(hŒ"Check if a range is out of bounds ”h]”hÝ)�”}”(hŒ!Check if a range is out of bounds”h]”hŒ!Check if a range is out of bounds”…”�”}”(hj¸²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj´²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jƲh´Mhj—žh²hubjë)�”}”(hX**Parameters** ``type`` Data type to use. ``start`` Start of the range. ``size`` Size of the range. ``max`` Exclusive upper boundary. **Description** Same as range_overflows() but forcing the parameters to **type**. **Return** true if the range is out of bounds.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÓ²h]”hŒ Parameters”…”�”}”(hjÕ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjѲubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjͲubj )�”}”(hhh]”(j)�”}”(hŒ``type`` Data type to use. ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hjò²h]”hŒtype”…”�”}”(hjô²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjð²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhjì²ubj2)�”}”(hhh]”hÝ)�”}”(hŒData type to use.”h]”hŒData type to use.”…”�”}”(hj ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j³h´Mhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjì²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j³h´Mhjé²ubj)�”}”(hŒ``start`` Start of the range. ”h]”(j)�”}”(hŒ ``start``”h]”j)�”}”(hj+³h]”hŒstart”…”�”}”(hj-³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj%³ubj2)�”}”(hhh]”hÝ)�”}”(hŒStart of the range.”h]”hŒStart of the range.”…”�”}”(hjD³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@³h´MhjA³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@³h´Mhjé²ubj)�”}”(hŒ``size`` Size of the range. ”h]”(j)�”}”(hŒ``size``”h]”j)�”}”(hjd³h]”hŒsize”…”�”}”(hjf³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj^³ubj2)�”}”(hhh]”hÝ)�”}”(hŒSize of the range.”h]”hŒSize of the range.”…”�”}”(hj}³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jy³h´Mhjz³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jy³h´Mhjé²ubj)�”}”(hŒ"``max`` Exclusive upper boundary. ”h]”(j)�”}”(hŒ``max``”h]”j)�”}”(hj�³h]”hŒmax”…”�”}”(hjŸ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj—³ubj2)�”}”(hhh]”hÝ)�”}”(hŒExclusive upper boundary.”h]”hŒExclusive upper boundary.”…”�”}”(hj¶³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j²³h´Mhj³³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj—³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²³h´Mhjé²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjͲubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjسh]”hŒ Description”…”�”}”(hjÚ³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖ³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjͲubhÝ)�”}”(hŒASame as range_overflows() but forcing the parameters to **type**.”h]”(hŒ8Same as range_overflows() but forcing the parameters to ”…”�”}”(hjî³h²hh³Nh´Nubjõ)�”}”(hŒ**type**”h]”hŒtype”…”�”}”(hjö³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjî³ubhŒ.”…”�”}”(hjî³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjͲubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj´h]”hŒReturn”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjͲubhÝ)�”}”(hŒ#true if the range is out of bounds.”h]”hŒ#true if the range is out of bounds.”…”�”}”(hj'´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M hjͲubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrange_end_overflows (C macro)”Œc.range_end_overflows”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrange_end_overflows”h]”j)�”}”(hŒrange_end_overflows”h]”j{)�”}”(hŒrange_end_overflows”h]”j�)�”}”(hjP´h]”hŒrange_end_overflows”…”�”}”(hjZ´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjV´ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjR´h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjN´h²hh³jm´h´Mubah}”(h]”jI´ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jm´h´MhjK´h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjK´h²hh³jm´h´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj†´jæj†´jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ*``range_end_overflows (start, size, max)``”h]”j)�”}”(hjŒ´h]”hŒ&range_end_overflows (start, size, max)”…”�”}”(hjŽ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj—žh²hubj•)�”}”(hŒ-Check if a range's endpoint is out of bounds ”h]”hÝ)�”}”(hŒ,Check if a range's endpoint is out of bounds”h]”hŒ.Check if a range’s endpoint is out of bounds”…”�”}”(hj¦´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj¢´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j´´h´Mhj—žh²hubjë)�”}”(hX¡**Parameters** ``start`` Start of the range. ``size`` Size of the range. ``max`` Exclusive upper boundary. **Description** Checks only if the endpoint of a range (**start** + **size**) exceeds **max**. Unlike range_overflows(), a zero-sized range at the boundary (**start** == **max**) is not considered an overflow. Useful for iterator-style checks. **Return** true if the endpoint exceeds the boundary.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÁ´h]”hŒ Parameters”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¿´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj»´ubj )�”}”(hhh]”(j)�”}”(hŒ``start`` Start of the range. ”h]”(j)�”}”(hŒ ``start``”h]”j)�”}”(hjà´h]”hŒstart”…”�”}”(hjâ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjÚ´ubj2)�”}”(hhh]”hÝ)�”}”(hŒStart of the range.”h]”hŒStart of the range.”…”�”}”(hjù´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõ´h´Mhjö´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚ´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõ´h´Mhj×´ubj)�”}”(hŒ``size`` Size of the range. ”h]”(j)�”}”(hŒ``size``”h]”j)�”}”(hjµh]”hŒsize”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhjµubj2)�”}”(hhh]”hÝ)�”}”(hŒSize of the range.”h]”hŒSize of the range.”…”�”}”(hj2µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.µh´Mhj/µubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.µh´Mhj×´ubj)�”}”(hŒ"``max`` Exclusive upper boundary. ”h]”(j)�”}”(hŒ``max``”h]”j)�”}”(hjRµh]”hŒmax”…”�”}”(hjTµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjLµubj2)�”}”(hhh]”hÝ)�”}”(hŒExclusive upper boundary.”h]”hŒExclusive upper boundary.”…”�”}”(hjkµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jgµh´Mhjhµubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjLµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jgµh´Mhj×´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj»´ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�µh]”hŒ Description”…”�”}”(hj�µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹µubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj»´ubhÝ)�”}”(hŒãChecks only if the endpoint of a range (**start** + **size**) exceeds **max**. Unlike range_overflows(), a zero-sized range at the boundary (**start** == **max**) is not considered an overflow. Useful for iterator-style checks.”h]”(hŒ(Checks only if the endpoint of a range (”…”�”}”(hj£µh²hh³Nh´Nubjõ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj«µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£µubhŒ + ”…”�”}”(hj£µh²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj½µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£µubhŒ ) exceeds ”…”�”}”(hj£µh²hh³Nh´Nubjõ)�”}”(hŒ**max**”h]”hŒmax”…”�”}”(hjϵh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£µubhŒ@. Unlike range_overflows(), a zero-sized range at the boundary (”…”�”}”(hj£µh²hh³Nh´Nubjõ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjáµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£µubhŒ == ”…”�”}”(hj£µh²hh³Nh´Nubjõ)�”}”(hŒ**max**”h]”hŒmax”…”�”}”(hjóµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£µubhŒB) is not considered an overflow. Useful for iterator-style checks.”…”�”}”(hj£µh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj»´ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¶h]”hŒReturn”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj»´ubhÝ)�”}”(hŒ*true if the endpoint exceeds the boundary.”h]”hŒ*true if the endpoint exceeds the boundary.”…”�”}”(hj$¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj»´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrange_end_overflows_t (C macro)”Œc.range_end_overflows_t”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrange_end_overflows_t”h]”j)�”}”(hŒrange_end_overflows_t”h]”j{)�”}”(hŒrange_end_overflows_t”h]”j�)�”}”(hjM¶h]”hŒrange_end_overflows_t”…”�”}”(hjW¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjS¶ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjO¶h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M$ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjK¶h²hh³jj¶h´M$ubah}”(h]”jF¶ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jj¶h´M$hjH¶h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjH¶h²hh³jj¶h´M$ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjƒ¶jæjƒ¶jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ2``range_end_overflows_t (type, start, size, max)``”h]”j)�”}”(hj‰¶h]”hŒ.range_end_overflows_t (type, start, size, max)”…”�”}”(hj‹¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M&hj—žh²hubj•)�”}”(hŒ-Check if a range's endpoint is out of bounds ”h]”hÝ)�”}”(hŒ,Check if a range's endpoint is out of bounds”h]”hŒ.Check if a range’s endpoint is out of bounds”…”�”}”(hj£¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M$hjŸ¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j±¶h´M$hj—žh²hubjë)�”}”(hX!**Parameters** ``type`` Data type to use. ``start`` Start of the range. ``size`` Size of the range. ``max`` Exclusive upper boundary. **Description** Same as range_end_overflows() but forcing the parameters to **type**. **Return** true if the endpoint exceeds the boundary.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾¶h]”hŒ Parameters”…”�”}”(hjÀ¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M(hj¸¶ubj )�”}”(hhh]”(j)�”}”(hŒ``type`` Data type to use. ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hjݶh]”hŒtype”…”�”}”(hjß¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛ¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M%hj×¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒData type to use.”h]”hŒData type to use.”…”�”}”(hjö¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jò¶h´M%hjó¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj×¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jò¶h´M%hjÔ¶ubj)�”}”(hŒ``start`` Start of the range. ”h]”(j)�”}”(hŒ ``start``”h]”j)�”}”(hj·h]”hŒstart”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M&hj·ubj2)�”}”(hhh]”hÝ)�”}”(hŒStart of the range.”h]”hŒStart of the range.”…”�”}”(hj/·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+·h´M&hj,·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+·h´M&hjÔ¶ubj)�”}”(hŒ``size`` Size of the range. ”h]”(j)�”}”(hŒ``size``”h]”j)�”}”(hjO·h]”hŒsize”…”�”}”(hjQ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjM·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M'hjI·ubj2)�”}”(hhh]”hÝ)�”}”(hŒSize of the range.”h]”hŒSize of the range.”…”�”}”(hjh·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jd·h´M'hje·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjI·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jd·h´M'hjÔ¶ubj)�”}”(hŒ"``max`` Exclusive upper boundary. ”h]”(j)�”}”(hŒ``max``”h]”j)�”}”(hjˆ·h]”hŒmax”…”�”}”(hjŠ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M(hj‚·ubj2)�”}”(hhh]”hÝ)�”}”(hŒExclusive upper boundary.”h]”hŒExclusive upper boundary.”…”�”}”(hj¡·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�·h´M(hjž·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‚·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�·h´M(hjÔ¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¸¶ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj÷h]”hŒ Description”…”�”}”(hjÅ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M*hj¸¶ubhÝ)�”}”(hŒESame as range_end_overflows() but forcing the parameters to **type**.”h]”(hŒah"]”h$]”h&]”uh1j1hj€¹h²hh³j¨¹h´MBubj{)�”}”(hŒsize_mul”h]”j�)�”}”(hj¥¹h]”hŒsize_mul”…”�”}”(hj»¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·¹ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj€¹h²hh³j¨¹h´MBubjœ)�”}”(hŒ (size_t factor1, size_t factor2)”h]”(j¢)�”}”(hŒsize_t factor1”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÙ¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖ¹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÛ¹Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j£¹Œ c.size_mul”†”asbuh1hhjÒ¹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷¹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒ¹ubj�)�”}”(hŒfactor1”h]”hŒfactor1”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒ¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjιubj¢)�”}”(hŒsize_t factor2”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj!ºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j#ºŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j£¹Œ c.size_mul”†”asbuh1hhjºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?ºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºubj�)�”}”(hŒfactor2”h]”hŒfactor2”…”�”}”(hjMºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjιubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj€¹h²hh³j¨¹h´MBubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj|¹h²hh³j¨¹h´MBubah}”(h]”jw¹ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¨¹h´MBhjy¹h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ;Calculate size_t multiplication with saturation at SIZE_MAX”h]”hŒ;Calculate size_t multiplication with saturation at SIZE_MAX”…”�”}”(hjwºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MBhjtºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjy¹h²hh³j¨¹h´MBubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�ºjæj�ºjç‰jè‰jé‰uh1jh²hhj—žh³Nh´Nubjë)�”}”(hX**Parameters** ``size_t factor1`` first factor ``size_t factor2`` second factor **Return** calculate **factor1** * **factor2**, both promoted to size_t, with any overflow causing the return value to be SIZE_MAX. The lvalue must be size_t to avoid implicit type conversion.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj™ºh]”hŒ Parameters”…”�”}”(hj›ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—ºubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MFhj“ºubj )�”}”(hhh]”(j)�”}”(hŒ ``size_t factor1`` first factor ”h]”(j)�”}”(hŒ``size_t factor1``”h]”j)�”}”(hj¸ºh]”hŒsize_t factor1”…”�”}”(hjººh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶ºubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MChj²ºubj2)�”}”(hhh]”hÝ)�”}”(hŒ first factor”h]”hŒ first factor”…”�”}”(hjѺh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jͺh´MChjκubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj²ºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jͺh´MChj¯ºubj)�”}”(hŒ!``size_t factor2`` second factor ”h]”(j)�”}”(hŒ``size_t factor2``”h]”j)�”}”(hjñºh]”hŒsize_t factor2”…”�”}”(hjóºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïºubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MDhjëºubj2)�”}”(hhh]”hÝ)�”}”(hŒ second factor”h]”hŒ second factor”…”�”}”(hj »h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»h´MDhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjëºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»h´MDhj¯ºubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj“ºubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj,»h]”hŒReturn”…”�”}”(hj.»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MFhj“ºubhÝ)�”}”(hŒµcalculate **factor1** * **factor2**, both promoted to size_t, with any overflow causing the return value to be SIZE_MAX. The lvalue must be size_t to avoid implicit type conversion.”h]”(hŒ calculate ”…”�”}”(hjB»h²hh³Nh´Nubjõ)�”}”(hŒ **factor1**”h]”hŒfactor1”…”�”}”(hjJ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjB»ubhŒ * ”…”�”}”(hjB»h²hh³Nh´Nubjõ)�”}”(hŒ **factor2**”h]”hŒfactor2”…”�”}”(hj\»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjB»ubhŒ’, both promoted to size_t, with any overflow causing the return value to be SIZE_MAX. The lvalue must be size_t to avoid implicit type conversion.”…”�”}”(hjB»h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MFhj“ºubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsize_add (C function)”Œ c.size_add”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ0size_t size_add (size_t addend1, size_t addend2)”h]”j)�”}”(hŒ/size_t size_add(size_t addend1, size_t addend2)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj˜»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jš»Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œsize_add”sbŒ c.size_add”†”asbuh1hhj‘»h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘»h²hh³j¹»h´MUubj{)�”}”(hŒsize_add”h]”j�)�”}”(hj¶»h]”hŒsize_add”…”�”}”(hjÌ»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈ»ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‘»h²hh³j¹»h´MUubjœ)�”}”(hŒ (size_t addend1, size_t addend2)”h]”(j¢)�”}”(hŒsize_t addend1”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjê»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjç»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j컌modname”NŒ classname”Nj] j` )�”}”jc ]”j´»Œ c.size_add”†”asbuh1hhjã»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjã»ubj�)�”}”(hŒaddend1”h]”hŒaddend1”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjã»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjß»ubj¢)�”}”(hŒsize_t addend2”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj2¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j4¼Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j´»Œ c.size_add”†”asbuh1hhj+¼ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP¼h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+¼ubj�)�”}”(hŒaddend2”h]”hŒaddend2”…”�”}”(hj^¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjß»ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‘»h²hh³j¹»h´MUubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�»h²hh³j¹»h´MUubah}”(h]”jˆ»ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¹»h´MUhjŠ»h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5Calculate size_t addition with saturation at SIZE_MAX”h]”hŒ5Calculate size_t addition with saturation at SIZE_MAX”…”�”}”(hjˆ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MUhj…¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŠ»h²hh³j¹»h´MUubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj ¼jæj ¼jç‰jè‰jé‰uh1jh²hhj—žh³Nh´Nubjë)�”}”(hX**Parameters** ``size_t addend1`` first addend ``size_t addend2`` second addend **Return** calculate **addend1** + **addend2**, both promoted to size_t, with any overflow causing the return value to be SIZE_MAX. The lvalue must be size_t to avoid implicit type conversion.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjª¼h]”hŒ Parameters”…”�”}”(hj¬¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¨¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MYhj¤¼ubj )�”}”(hhh]”(j)�”}”(hŒ ``size_t addend1`` first addend ”h]”(j)�”}”(hŒ``size_t addend1``”h]”j)�”}”(hjɼh]”hŒsize_t addend1”…”�”}”(hj˼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjǼubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MVhjüubj2)�”}”(hhh]”hÝ)�”}”(hŒ first addend”h]”hŒ first addend”…”�”}”(hjâ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÞ¼h´MVhjß¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞ¼h´MVhjÀ¼ubj)�”}”(hŒ!``size_t addend2`` second addend ”h]”(j)�”}”(hŒ``size_t addend2``”h]”j)�”}”(hj½h]”hŒsize_t addend2”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MWhjü¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒ second addend”h]”hŒ second addend”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j½h´MWhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjü¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½h´MWhjÀ¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¤¼ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj=½h]”hŒReturn”…”�”}”(hj?½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MYhj¤¼ubhÝ)�”}”(hŒµcalculate **addend1** + **addend2**, both promoted to size_t, with any overflow causing the return value to be SIZE_MAX. The lvalue must be size_t to avoid implicit type conversion.”h]”(hŒ calculate ”…”�”}”(hjS½h²hh³Nh´Nubjõ)�”}”(hŒ **addend1**”h]”hŒaddend1”…”�”}”(hj[½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjS½ubhŒ + ”…”�”}”(hjS½h²hh³Nh´Nubjõ)�”}”(hŒ **addend2**”h]”hŒaddend2”…”�”}”(hjm½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjS½ubhŒ’, both promoted to size_t, with any overflow causing the return value to be SIZE_MAX. The lvalue must be size_t to avoid implicit type conversion.”…”�”}”(hjS½h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MYhj¤¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsize_sub (C function)”Œ c.size_sub”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3size_t size_sub (size_t minuend, size_t subtrahend)”h]”j)�”}”(hŒ2size_t size_sub(size_t minuend, size_t subtrahend)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj©½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j«½Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œsize_sub”sbŒ c.size_sub”†”asbuh1hhj¢½h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˽h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢½h²hh³jʽh´Mhubj{)�”}”(hŒsize_sub”h]”j�)�”}”(hjǽh]”hŒsize_sub”…”�”}”(hjݽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙ½ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¢½h²hh³jʽh´Mhubjœ)�”}”(hŒ#(size_t minuend, size_t subtrahend)”h]”(j¢)�”}”(hŒsize_t minuend”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjû½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjø½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jý½Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jŽŒ c.size_sub”†”asbuh1hhjô½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô½ubj�)�”}”(hŒminuend”h]”hŒminuend”…”�”}”(hj'¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjð½ubj¢)�”}”(hŒsize_t subtrahend”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjC¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jE¾Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jŽŒ c.size_sub”†”asbuh1hhj<¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj<¾ubj�)�”}”(hŒ subtrahend”h]”hŒ subtrahend”…”�”}”(hjo¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjð½ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¢½h²hh³jʽh´Mhubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjž½h²hh³jʽh´Mhubah}”(h]”j™½ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jʽh´Mhhj›½h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ8Calculate size_t subtraction with saturation at SIZE_MAX”h]”hŒ8Calculate size_t subtraction with saturation at SIZE_MAX”…”�”}”(hj™¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhhj–¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj›½h²hh³jʽh´Mhubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj±¾jæj±¾jç‰jè‰jé‰uh1jh²hhj—žh³Nh´Nubjë)�”}”(hXÆ**Parameters** ``size_t minuend`` value to subtract from ``size_t subtrahend`` value to subtract from **minuend** **Return** calculate **minuend** - **subtrahend**, both promoted to size_t, with any overflow causing the return value to be SIZE_MAX. For composition with the size_add() and size_mul() helpers, neither argument may be SIZE_MAX (or the result with be forced to SIZE_MAX). The lvalue must be size_t to avoid implicit type conversion.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj»¾h]”hŒ Parameters”…”�”}”(hj½¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¹¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mlhjµ¾ubj )�”}”(hhh]”(j)�”}”(hŒ*``size_t minuend`` value to subtract from ”h]”(j)�”}”(hŒ``size_t minuend``”h]”j)�”}”(hjÚ¾h]”hŒsize_t minuend”…”�”}”(hjܾh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjؾubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MihjÔ¾ubj2)�”}”(hhh]”hÝ)�”}”(hŒvalue to subtract from”h]”hŒvalue to subtract from”…”�”}”(hjó¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jï¾h´Mihjð¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔ¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jï¾h´MihjѾubj)�”}”(hŒ9``size_t subtrahend`` value to subtract from **minuend** ”h]”(j)�”}”(hŒ``size_t subtrahend``”h]”j)�”•}”(hj¿h]”hŒsize_t subtrahend”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mjhj ¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"value to subtract from **minuend**”h]”(hŒvalue to subtract from ”…”�”}”(hj,¿h²hh³Nh´Nubjõ)�”}”(hŒ **minuend**”h]”hŒminuend”…”�”}”(hj4¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(¿h´Mjhj)¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(¿h´MjhjѾubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjµ¾ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj\¿h]”hŒReturn”…”�”}”(hj^¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjZ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mlhjµ¾ubhÝ)�”}”(hXAcalculate **minuend** - **subtrahend**, both promoted to size_t, with any overflow causing the return value to be SIZE_MAX. For composition with the size_add() and size_mul() helpers, neither argument may be SIZE_MAX (or the result with be forced to SIZE_MAX). The lvalue must be size_t to avoid implicit type conversion.”h]”(hŒ calculate ”…”�”}”(hjr¿h²hh³Nh´Nubjõ)�”}”(hŒ **minuend**”h]”hŒminuend”…”�”}”(hjz¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjr¿ubhŒ - ”…”�”}”(hjr¿h²hh³Nh´Nubjõ)�”}”(hŒ**subtrahend**”h]”hŒ subtrahend”…”�”}”(hjŒ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjr¿ubhX, both promoted to size_t, with any overflow causing the return value to be SIZE_MAX. For composition with the size_add() and size_mul() helpers, neither argument may be SIZE_MAX (or the result with be forced to SIZE_MAX). The lvalue must be size_t to avoid implicit type conversion.”…”�”}”(hjr¿h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mlhjµ¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œarray_size (C macro)”Œ c.array_size”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ array_size”h]”j)�”}”(hŒ array_size”h]”j{)�”}”(hŒ array_size”h]”j�)�”}”(hj¿¿h]”hŒ array_size”…”�”}”(hjÉ¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅ¿ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÁ¿h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M~ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj½¿h²hh³jÜ¿h´M~ubah}”(h]”j¸¿ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÜ¿h´M~hjº¿h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjº¿h²hh³jÜ¿h´M~ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjõ¿jæjõ¿jç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ``array_size (a, b)``”h]”j)�”}”(hjû¿h]”hŒarray_size (a, b)”…”�”}”(hjý¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjù¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M€hj—žh²hubj•)�”}”(hŒ'Calculate size of 2-dimensional array. ”h]”hÝ)�”}”(hŒ&Calculate size of 2-dimensional array.”h]”hŒ&Calculate size of 2-dimensional array.”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M~hjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j#Àh´M~hj—žh²hubjë)�”}”(hŒÙ**Parameters** ``a`` dimension one ``b`` dimension two **Description** Calculates size of 2-dimensional array: **a** * **b**. **Return** number of bytes needed to represent the array or SIZE_MAX on overflow.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj0Àh]”hŒ Parameters”…”�”}”(hj2Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.Àubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M‚hj*Àubj )�”}”(hhh]”(j)�”}”(hŒ``a`` dimension one ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hjOÀh]”hŒa”…”�”}”(hjQÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjIÀubj2)�”}”(hhh]”hÝ)�”}”(hŒ dimension one”h]”hŒ dimension one”…”�”}”(hjhÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jdÀh´MhjeÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjIÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jdÀh´MhjFÀubj)�”}”(hŒ``b`` dimension two ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hjˆÀh]”hŒb”…”�”}”(hjŠÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†Àubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M€hj‚Àubj2)�”}”(hhh]”hÝ)�”}”(hŒ dimension two”h]”hŒ dimension two”…”�”}”(hj¡Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�Àh´M€hjžÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‚Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�Àh´M€hjFÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj*ÀubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÃÀh]”hŒ Description”…”�”}”(hjÅÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M‚hj*ÀubhÝ)�”}”(hŒ6Calculates size of 2-dimensional array: **a** * **b**.”h]”(hŒ(Calculates size of 2-dimensional array: ”…”�”}”(hjÙÀh²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hjáÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙÀubhŒ * ”…”�”}”(hjÙÀh²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjóÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙÀubhŒ.”…”�”}”(hjÙÀh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M�hj*ÀubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÁh]”hŒReturn”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mƒhj*ÀubhÝ)�”}”(hŒFnumber of bytes needed to represent the array or SIZE_MAX on overflow.”h]”hŒFnumber of bytes needed to represent the array or SIZE_MAX on overflow.”…”�”}”(hj$Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M„hj*Àubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œarray3_size (C macro)”Œ c.array3_size”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ array3_size”h]”j)�”}”(hŒ array3_size”h]”j{)�”}”(hŒ array3_size”h]”j�)�”}”(hjMÁh]”hŒ array3_size”…”�”}”(hjWÁh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSÁubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjOÁh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MŠubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjKÁh²hh³jjÁh´MŠubah}”(h]”jFÁah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jjÁh´MŠhjHÁh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjHÁh²hh³jjÁh´MŠubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjƒÁjæjƒÁjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ``array3_size (a, b, c)``”h]”j)�”}”(hj‰Áh]”hŒarray3_size (a, b, c)”…”�”}”(hj‹Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MŒhj—žh²hubj•)�”}”(hŒ'Calculate size of 3-dimensional array. ”h]”hÝ)�”}”(hŒ&Calculate size of 3-dimensional array.”h]”hŒ&Calculate size of 3-dimensional array.”…”�”}”(hj£Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MŠhjŸÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j±Áh´MŠhj—žh²hubjë)�”}”(hŒú**Parameters** ``a`` dimension one ``b`` dimension two ``c`` dimension three **Description** Calculates size of 3-dimensional array: **a** * **b** * **c**. **Return** number of bytes needed to represent the array or SIZE_MAX on overflow.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾Áh]”hŒ Parameters”…”�”}”(hjÀÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MŽhj¸Áubj )�”}”(hhh]”(j)�”}”(hŒ``a`` dimension one ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hjÝÁh]”hŒa”…”�”}”(hjßÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M‹hj×Áubj2)�”}”(hhh]”hÝ)�”}”(hŒ dimension one”h]”hŒ dimension one”…”�”}”(hjöÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jòÁh´M‹hjóÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj×Áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jòÁh´M‹hjÔÁubj)�”}”(hŒ``b`` dimension two ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hjÂh]”hŒb”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MŒhjÂubj2)�”}”(hhh]”hÝ)�”}”(hŒ dimension two”h]”hŒ dimension two”…”�”}”(hj/Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+Âh´MŒhj,Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+Âh´MŒhjÔÁubj)�”}”(hŒ``c`` dimension three ”h]”(j)�”}”(hŒ``c``”h]”j)�”}”(hjOÂh]”hŒc”…”�”}”(hjQÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M�hjIÂubj2)�”}”(hhh]”hÝ)�”}”(hŒdimension three”h]”hŒdimension three”…”�”}”(hjhÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jdÂh´M�hjeÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjIÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jdÂh´M�hjÔÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¸ÁubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŠÂh]”hŒ Description”…”�”}”(hjŒÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M�hj¸ÁubhÝ)�”}”(hŒ>Calculates size of 3-dimensional array: **a** * **b** * **c**.”h]”(hŒ(Calculates size of 3-dimensional array: ”…”�”}”(hj Âh²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj¨Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ÂubhŒ * ”…”�”}”(hj Âh²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjºÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ÂubhŒ * ”…”�”}”hj Âsbjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjÌÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ÂubhŒ.”…”�”}”(hj Âh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MŽhj¸ÁubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjçÂh]”hŒReturn”…”�”}”(hjéÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjåÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M�hj¸ÁubhÝ)�”}”(hŒFnumber of bytes needed to represent the array or SIZE_MAX on overflow.”h]”hŒFnumber of bytes needed to represent the array or SIZE_MAX on overflow.”…”�”}”(hjýÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M‘hj¸Áubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œflex_array_size (C macro)”Œc.flex_array_size”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒflex_array_size”h]”j)�”}”(hŒflex_array_size”h]”j{)�”}”(hŒflex_array_size”h]”j�)�”}”(hj&Ãh]”hŒflex_array_size”…”�”}”(hj0Ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,Ãubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj(Ãh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M—ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj$Ãh²hh³jCÃh´M—ubah}”(h]”jÃah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jCÃh´M—hj!Ãh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj!Ãh²hh³jCÃh´M—ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj\Ãjæj\Ãjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ&``flex_array_size (p, member, count)``”h]”j)�”}”(hjbÃh]”hŒ"flex_array_size (p, member, count)”…”�”}”(hjdÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M™hj—žh²hubj•)�”}”(hŒICalculate size of a flexible array member within an enclosing structure. ”h]”hÝ)�”}”(hŒHCalculate size of a flexible array member within an enclosing structure.”h]”hŒHCalculate size of a flexible array member within an enclosing structure.”…”�”}”(hj|Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M—hjxÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jŠÃh´M—hj—žh²hubjë)�”}”(hXN**Parameters** ``p`` Pointer to the structure. ``member`` Name of the flexible array member. ``count`` Number of elements in the array. **Description** Calculates size of a flexible array of **count** number of **member** elements, at the end of structure **p**. **Return** number of bytes needed or SIZE_MAX on overflow.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj—Ãh]”hŒ Parameters”…”�”}”(hj™Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj•Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M›hj‘Ãubj )�”}”(hhh]”(j)�”}”(hŒ ``p`` Pointer to the structure. ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj¶Ãh]”hŒp”…”�”}”(hj¸Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M™hj°Ãubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the structure.”h]”hŒPointer to the structure.”…”�”}”(hjÏÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jËÃh´M™hjÌÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj°Ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jËÃh´M™hj­Ãubj)�”}”(hŒ.``member`` Name of the flexible array member. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hjïÃh]”hŒmember”…”�”}”(hjñÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MšhjéÃubj2)�”}”(hhh]”hÝ)�”}”(hŒ"Name of the flexible array member.”h]”hŒ"Name of the flexible array member.”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄh´MšhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjéÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄh´Mšhj­Ãubj)�”}”(hŒ+``count`` Number of elements in the array. ”h]”(j)�”}”(hŒ ``count``”h]”j)�”}”(hj(Äh]”hŒcount”…”�”}”(hj*Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&Äubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M›hj"Äubj2)�”}”(hhh]”hÝ)�”}”(hŒ Number of elements in the array.”h]”hŒ Number of elements in the array.”…”�”}”(hjAÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j=Äh´M›hj>Äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj"Äubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j=Äh´M›hj­Ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‘ÃubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjcÄh]”hŒ Description”…”�”}”(hjeÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaÄubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M�hj‘ÃubhÝ)�”}”(hŒnCalculates size of a flexible array of **count** number of **member** elements, at the end of structure **p**.”h]”(hŒ'Calculates size of a flexible array of ”…”�”}”(hjyÄh²hh³Nh´Nubjõ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hj�Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjyÄubhŒ number of ”…”�”}”(hjyÄh²hh³Nh´Nubjõ)�”}”(hŒ **member**”h]”hŒmember”…”�”}”(hj“Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjyÄubhŒ# elements, at the end of structure ”…”�”}”(hjyÄh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj¥Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjyÄubhŒ.”…”�”}”(hjyÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mœhj‘ÃubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÀÄh]”hŒReturn”…”�”}”(hjÂÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾Äubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MŸhj‘ÃubhÝ)�”}”(hŒ/number of bytes needed or SIZE_MAX on overflow.”h]”hŒ/number of bytes needed or SIZE_MAX on overflow.”…”�”}”(hjÖÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M hj‘Ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstruct_size (C macro)”Œ c.struct_size”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ struct_size”h]”j)�”}”(hŒ struct_size”h]”j{)�”}”(hŒ struct_size”h]”j�)�”}”(hjÿÄh]”hŒ struct_size”…”�”}”(hj Åh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÅh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¨ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjýÄh²hh³jÅh´M¨ubah}”(h]”jøÄah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÅh´M¨hjúÄh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjúÄh²hh³jÅh´M¨ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj5Åjæj5Åjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ"``struct_size (p, member, count)``”h]”j)�”}”(hj;Åh]”hŒstruct_size (p, member, count)”…”�”}”(hj=Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9Åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mªhj—žh²hubj•)�”}”(hŒ:Calculate size of structure with trailing flexible array. ”h]”hÝ)�”}”(hŒ9Calculate size of structure with trailing flexible array.”h]”hŒ9Calculate size of structure with trailing flexible array.”…”�”}”(hjUÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¨hjQÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jcÅh´M¨hj—žh²hubjë)�”}”(hXO**Parameters** ``p`` Pointer to the structure. ``member`` Name of the array member. ``count`` Number of elements in the array. **Description** Calculates size of memory needed for structure of **p** followed by an array of **count** number of **member** elements. **Return** number of bytes needed or SIZE_MAX on overflow.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjpÅh]”hŒ Parameters”…”�”}”(hjrÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¬hjjÅubj )�”}”(hhh]”(j)�”}”(hŒ ``p`` Pointer to the structure. ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj�Åh]”hŒp”…”�”}”(hj‘Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M©hj‰Åubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the structure.”h]”hŒPointer to the structure.”…”�”}”(hj¨Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤Åh´M©hj¥Åubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰Åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤Åh´M©hj†Åubj)�”}”(hŒ%``member`` Name of the array member. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hjÈÅh]”hŒmember”…”�”}”(hjÊÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MªhjÂÅubj2)�”}”(hhh]”hÝ)�”}”(hŒName of the array member.”h]”hŒName of the array member.”…”�”}”(hjáÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝÅh´MªhjÞÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝÅh´Mªhj†Åubj)�”}”(hŒ+``count`` Number of elements in the array. ”h]”(j)�”}”(hŒ ``count``”h]”j)�”}”(hjÆh]”hŒcount”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M«hjûÅubj2)�”}”(hhh]”hÝ)�”}”(hŒ Number of elements in the array.”h]”hŒ Number of elements in the array.”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÆh´M«hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÆh´M«hj†Åubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjjÅubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj<Æh]”hŒ Description”…”�”}”(hj>Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:Æubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M­hjjÅubhÝ)�”}”(hŒxCalculates size of memory needed for structure of **p** followed by an array of **count** number of **member** elements.”h]”(hŒ2Calculates size of memory needed for structure of ”…”�”}”(hjRÆh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjZÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRÆubhŒ followed by an array of ”…”�”}”(hjRÆh²hh³Nh´Nubjõ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjlÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRÆubhŒ number of ”…”�”}”(hjRÆh²hh³Nh´Nubjõ)�”}”(hŒ **member**”h]”hŒmember”…”�”}”(hj~Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRÆubhŒ elements.”…”�”}”(hjRÆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¬hjjÅubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj™Æh]”hŒReturn”…”�”}”(hj›Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—Æubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¯hjjÅubhÝ)�”}”(hŒ/number of bytes needed or SIZE_MAX on overflow.”h]”hŒ/number of bytes needed or SIZE_MAX on overflow.”…”�”}”(hj¯Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M°hjjÅubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstruct_size_t (C macro)”Œc.struct_size_t”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ struct_size_t”h]”j)�”}”(hŒ struct_size_t”h]”j{)�”}”(hŒ struct_size_t”h]”j�)�”}”(hjØÆh]”hŒ struct_size_t”…”�”}”(hjâÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞÆubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÚÆh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¸ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÖÆh²hh³jõÆh´M¸ubah}”(h]”jÑÆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jõÆh´M¸hjÓÆh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÓÆh²hh³jõÆh´M¸ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÇjæjÇjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ'``struct_size_t (type, member, count)``”h]”j)�”}”(hjÇh]”hŒ#struct_size_t (type, member, count)”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mºhj—žh²hubj•)�”}”(hŒ9Calculate size of structure with trailing flexible array ”h]”hÝ)�”}”(hŒ8Calculate size of structure with trailing flexible array”h]”hŒ8Calculate size of structure with trailing flexible array”…”�”}”(hj.Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¸hj*Çubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j<Çh´M¸hj—žh²hubjë)�”}”(hXÓ**Parameters** ``type`` structure type name. ``member`` Name of the array member. ``count`` Number of elements in the array. **Description** Calculates size of memory needed for structure **type** followed by an array of **count** number of **member** elements. Prefer using struct_size() when possible instead, to keep calculations associated with a specific instance variable of type **type**. **Return** number of bytes needed or SIZE_MAX on overflow.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjIÇh]”hŒ Parameters”…”�”}”(hjKÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¼hjCÇubj )�”}”(hhh]”(j)�”}”(hŒ``type`` structure type name. ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hjhÇh]”hŒtype”…”�”}”(hjjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¹hjbÇubj2)�”}”(hhh]”hÝ)�”}”(hŒstructure type name.”h]”hŒstructure type name.”…”�”}”(hj�Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}Çh´M¹hj~Çubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjbÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}Çh´M¹hj_Çubj)�”}”(hŒ%``member`` Name of the array member. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj¡Çh]”hŒmember”…”�”}”(hj£Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mºhj›Çubj2)�”}”(hhh]”hÝ)�”}”(hŒName of the array member.”h]”hŒName of the array member.”…”�”}”(hjºÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶Çh´Mºhj·Çubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶Çh´Mºhj_Çubj)�”}”(hŒ+``count`` Number of elements in the array. ”h]”(j)�”}”(hŒ ``count``”h]”j)�”}”(hjÚÇh]”hŒcount”…”�”}”(hjÜÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M»hjÔÇubj2)�”}”(hhh]”hÝ)�”}”(hŒ Number of elements in the array.”h]”hŒ Number of elements in the array.”…”�”}”(hjóÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïÇh´M»hjðÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïÇh´M»hj_Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjCÇubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÈh]”hŒ Description”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M½hjCÇubhÝ)�”}”(hŒþCalculates size of memory needed for structure **type** followed by an array of **count** number of **member** elements. Prefer using struct_size() when possible instead, to keep calculations associated with a specific instance variable of type **type**.”h]”(hŒ/Calculates size of memory needed for structure ”…”�”}”(hj+Èh²hh³Nh´Nubjõ)�”}”(hŒ**type**”h]”hŒtype”…”�”}”(hj3Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+ÈubhŒ followed by an array of ”…”�”}”(hj+Èh²hh³Nh´Nubjõ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjEÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+ÈubhŒ number of ”…”�”}”(hj+Èh²hh³Nh´Nubjõ)�”}”(hŒ **member**”h]”hŒmember”…”�”}”(hjWÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+ÈubhŒ‡ elements. Prefer using struct_size() when possible instead, to keep calculations associated with a specific instance variable of type ”…”�”}”(hj+Èh²hh³Nh´Nubjõ)�”}”(hŒ**type**”h]”hŒtype”…”�”}”(hjiÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+ÈubhŒ.”…”�”}”(hj+Èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M¼hjCÇubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj„Èh]”hŒReturn”…”�”}”(hj†Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚Èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÁhjCÇubhÝ)�”}”(hŒ/number of bytes needed or SIZE_MAX on overflow.”h]”hŒ/number of bytes needed or SIZE_MAX on overflow.”…”�”}”(hjšÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÂhjCÇubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œstruct_offset (C macro)”Œc.struct_offset”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ struct_offset”h]”j)�”}”(hŒ struct_offset”h]”j{)�”}”(hŒ struct_offset”h]”j�)�”}”(hjÃÈh]”hŒ struct_offset”…”�”}”(hjÍÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉÈubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÅÈh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÈubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÁÈh²hh³jàÈh´MÈubah}”(h]”j¼Èah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jàÈh´MÈhj¾Èh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¾Èh²hh³jàÈh´MÈubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjùÈjæjùÈjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ``struct_offset (p, member)``”h]”j)�”}”(hjÿÈh]”hŒstruct_offset (p, member)”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÊhj—žh²hubj•)�”}”(hŒ1Calculate the offset of a member within a struct ”h]”hÝ)�”}”(hŒ0Calculate the offset of a member within a struct”h]”hŒ0Calculate the offset of a member within a struct”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÈhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j'Éh´MÈhj—žh²hubjë)�”}”(hX**Parameters** ``p`` Pointer to the struct ``member`` Name of the member to get the offset of **Description** Calculates the offset of a particular **member** of the structure pointed to by **p**. **Return** number of bytes to the location of **member**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj4Éh]”hŒ Parameters”…”�”}”(hj6Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj2Éubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÌhj.Éubj )�”}”(hhh]”(j)�”}”(hŒ``p`` Pointer to the struct ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjSÉh]”hŒp”…”�”}”(hjUÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÉhjMÉubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the struct”h]”hŒPointer to the struct”…”�”}”(hjlÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jhÉh´MÉhjiÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjMÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jhÉh´MÉhjJÉubj)�”}”(hŒ3``member`` Name of the member to get the offset of ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hjŒÉh]”hŒmember”…”�”}”(hjŽÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÊhj†Éubj2)�”}”(hhh]”hÝ)�”}”(hŒ'Name of the member to get the offset of”h]”hŒ'Name of the member to get the offset of”…”�”}”(hj¥Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¡Éh´MÊhj¢Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj†Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡Éh´MÊhjJÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj.ÉubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÇÉh]”hŒ Description”…”�”}”(hjÉÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÌhj.ÉubhÝ)�”}”(hŒVCalculates the offset of a particular **member** of the structure pointed to by **p**.”h]”(hŒ&Calculates the offset of a particular ”…”�”}”(hjÝÉh²hh³Nh´Nubjõ)�”}”(hŒ **member**”h]”hŒmember”…”�”}”(hjåÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝÉubhŒ of the structure pointed to by ”…”�”}”(hjÝÉh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj÷Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝÉubhŒ.”…”�”}”(hjÝÉh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MËhj.ÉubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÊh]”hŒReturn”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÎhj.ÉubhÝ)�”}”(hŒ.number of bytes to the location of **member**.”h]”(hŒ#number of bytes to the location of ”…”�”}”(hj(Êh²hh³Nh´Nubjõ)�”}”(hŒ **member**”h]”hŒmember”…”�”}”(hj0Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(ÊubhŒ.”…”�”}”(hj(Êh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÏhj.Éubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__DEFINE_FLEX (C macro)”Œc.__DEFINE_FLEX”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ __DEFINE_FLEX”h]”j)�”}”(hŒ __DEFINE_FLEX”h]”j{)�”}”(hŒ __DEFINE_FLEX”h]”j�)�”}”(hjcÊh]”hŒ __DEFINE_FLEX”…”�”}”(hjmÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiÊubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjeÊh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÔubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjaÊh²hh³j€Êh´MÔubah}”(h]”j\Êah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j€Êh´MÔhj^Êh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj^Êh²hh³j€Êh´MÔubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj™Êjæj™Êjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ9``__DEFINE_FLEX (type, name, member, count, trailer...)``”h]”j)�”}”(hjŸÊh]”hŒ5__DEFINE_FLEX (type, name, member, count, trailer...)”…”�”}”(hj¡Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÖhj—žh²hubj•)�”}”(hŒchelper macro for DEFINE_FLEX() family. Enables caller macro to pass arbitrary trailing expressions ”h]”hÝ)�”}”(hŒbhelper macro for DEFINE_FLEX() family. Enables caller macro to pass arbitrary trailing expressions”h]”hŒbhelper macro for DEFINE_FLEX() family. Enables caller macro to pass arbitrary trailing expressions”…”�”}”(hj¹Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÔhjµÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÇÊh´MÔhj—žh²hubjë)�”}”(hX3**Parameters** ``type`` structure type name, including "struct" keyword. ``name`` Name for a variable to define. ``member`` Name of the array member. ``count`` Number of elements in the array; must be compile-time const. ``trailer...`` Trailing expressions for attributes and/or initializers.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÔÊh]”hŒ Parameters”…”�”}”(hjÖÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÒÊubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MØhjÎÊubj )�”}”(hhh]”(j)�”}”(hŒ:``type`` structure type name, including "struct" keyword. ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hjóÊh]”hŒtype”…”�”}”(hjõÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M×hjíÊubj2)�”}”(hhh]”hÝ)�”}”(hŒ0structure type name, including "struct" keyword.”h]”hŒ4structure type name, including “structâ€� keyword.”…”�”}”(hj Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jËh´M×hj Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjíÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jËh´M×hjêÊubj)�”}”(hŒ(``name`` Name for a variable to define. ”h]”(j)�”}”(hŒ``name``”h]”j)�”}”(hj,Ëh]”hŒname”…”�”}”(hj.Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MØhj&Ëubj2)�”}”(hhh]”hÝ)�”}”(hŒName for a variable to define.”h]”hŒName for a variable to define.”…”�”}”(hjEËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jAËh´MØhjBËubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj&Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jAËh´MØhjêÊubj)�”}”(hŒ%``member`` Name of the array member. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hjeËh]”hŒmember”…”�”}”(hjgËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjcËubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÙhj_Ëubj2)�”}”(hhh]”hÝ)�”}”(hŒName of the array member.”h]”hŒName of the array member.”…”�”}”(hj~Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jzËh´MÙhj{Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj_Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jzËh´MÙhjêÊubj)�”}”(hŒG``count`` Number of elements in the array; must be compile-time const. ”h]”(j)�”}”(hŒ ``count``”h]”j)�”}”(hjžËh]”hŒcount”…”�”}”(hj Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœËubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MÚhj˜Ëubj2)�”}”(hhh]”hÝ)�”}”(hŒmember**) to get compile-time size of **name** members. Use STACK_FLEX_ARRAY_SIZE(**name**, **member**) to get compile-time number of elements in array **member**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjxÎh]”hŒ Parameters”…”�”}”(hjzÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjvÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MøhjrÎubj )�”}”(hhh]”(j)�”}”(hŒ:``type`` structure type name, including "struct" keyword. ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hj—Îh]”hŒtype”…”�”}”(hj™Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•Îubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M÷hj‘Îubj2)�”}”(hhh]”hÝ)�”}”(hŒ0structure type name, including "struct" keyword.”h]”hŒ4structure type name, including “structâ€� keyword.”…”�”}”(hj°Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¬Îh´M÷hj­Îubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‘Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬Îh´M÷hjŽÎubj)�”}”(hŒ(``name`` Name for a variable to define. ”h]”(j)�”}”(hŒ``name``”h]”j)�”}”(hjÐÎh]”hŒname”…”�”}”(hjÒÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MøhjÊÎubj2)�”}”(hhh]”hÝ)�”}”(hŒName for a variable to define.”h]”hŒName for a variable to define.”…”�”}”(hjéÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jåÎh´MøhjæÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÊÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jåÎh´MøhjŽÎubj)�”}”(hŒ%``member`` Name of the array member. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj Ïh]”hŒmember”…”�”}”(hj Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MùhjÏubj2)�”}”(hhh]”hÝ)�”}”(hŒName of the array member.”h]”hŒName of the array member.”…”�”}”(hj"Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏh´MùhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏh´MùhjŽÎubj)�”}”(hŒG``count`` Number of elements in the array; must be compile-time const. ”h]”(j)�”}”(hŒ ``count``”h]”j)�”}”(hjBÏh]”hŒcount”…”�”}”(hjDÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Múhj<Ïubj2)�”}”(hhh]”hÝ)�”}”(hŒmember**) to get compile-time size of **name** members. Use STACK_FLEX_ARRAY_SIZE(**name**, **member**) to get compile-time number of elements in array **member**.”h]”(hŒ'Define a zeroed, on-stack, instance of ”…”�”}”(hj“Ïh²hh³Nh´Nubjõ)�”}”(hŒ**type**”h]”hŒtype”…”�”}”(hj›Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“ÏubhŒD structure with a trailing flexible array member. Use __struct_size(”…”�”}”(hj“Ïh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hj­Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“ÏubhŒ?) to get compile-time size of it afterwards. Use __member_size(”…”�”}”(hj“Ïh²hh³Nh´Nubjõ)�”}”(hŒ**name->member**”h]”hŒ name->member”…”�”}”(hj¿Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“ÏubhŒ) to get compile-time size of ”…”�”}”(hj“Ïh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjÑÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“ÏubhŒ$ members. Use STACK_FLEX_ARRAY_SIZE(”…”�”}”(hj“Ïh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjãÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“ÏubhŒ, ”…”�”}”(hj“Ïh²hh³Nh´Nubjõ)�”}”(hŒ **member**”h]”hŒmember”…”�”}”(hjõÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“ÏubhŒ2) to get compile-time number of elements in array ”…”�”}”(hj“Ïh²hh³Nh´Nubjõ)�”}”(hŒ **member**”h]”hŒmember”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“ÏubhŒ.”…”�”}”(hj“Ïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MûhjrÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒDEFINE_FLEX (C macro)”Œ c.DEFINE_FLEX”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ DEFINE_FLEX”h]”j)�”}”(hŒ DEFINE_FLEX”h]”j{)�”}”(hŒ DEFINE_FLEX”h]”j�)�”}”(hj:Ðh]”hŒ DEFINE_FLEX”…”�”}”(hjDÐh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@Ðubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj<Ðh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj8Ðh²hh³jWÐh´Mubah}”(h]”j3Ðah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jWÐh´Mhj5Ðh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj5Ðh²hh³jWÐh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjpÐjæjpÐjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ4``DEFINE_FLEX (TYPE, NAME, MEMBER, COUNTER, COUNT)``”h]”j)�”}”(hjvÐh]”hŒ0DEFINE_FLEX (TYPE, NAME, MEMBER, COUNTER, COUNT)”…”�”}”(hjxÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M hj—žh²hubj•)�”}”(hŒPDefine an on-stack instance of structure with a trailing flexible array member. ”h]”hÝ)�”}”(hŒODefine an on-stack instance of structure with a trailing flexible array member.”h]”hŒODefine an on-stack instance of structure with a trailing flexible array member.”…”�”}”(hj�Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjŒÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jžÐh´Mhj—žh²hubjë)�”}”(hX�**Parameters** ``TYPE`` structure type name, including "struct" keyword. ``NAME`` Name for a variable to define. ``MEMBER`` Name of the array member. ``COUNTER`` Name of the __counted_by member. ``COUNT`` Number of elements in the array; must be compile-time const. **Description** Define a zeroed, on-stack, instance of **TYPE** structure with a trailing flexible array member. Use __struct_size(**NAME**) to get compile-time size of it afterwards. Use __member_size(**NAME->member**) to get compile-time size of **NAME** members. Use STACK_FLEX_ARRAY_SIZE(**name**, **member**) to get compile-time number of elements in array **member**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj«Ðh]”hŒ Parameters”…”�”}”(hj­Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M hj¥Ðubj )�”}”(hhh]”(j)�”}”(hŒ:``TYPE`` structure type name, including "struct" keyword. ”h]”(j)�”}”(hŒ``TYPE``”h]”j)�”}”(hjÊÐh]”hŒTYPE”…”�”}”(hjÌÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M hjÄÐubj2)�”}”(hhh]”hÝ)�”}”(hŒ0structure type name, including "struct" keyword.”h]”hŒ4structure type name, including “structâ€� keyword.”…”�”}”(hjãÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jßÐh´M hjàÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÄÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jßÐh´M hjÁÐubj)�”}”(hŒ(``NAME`` Name for a variable to define. ”h]”(j)�”}”(hŒ``NAME``”h]”j)�”}”(hjÑh]”hŒNAME”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M hjýÐubj2)�”}”(hhh]”hÝ)�”}”(hŒName for a variable to define.”h]”hŒName for a variable to define.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÑh´M hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÑh´M hjÁÐubj)�”}”(hŒ%``MEMBER`` Name of the array member. ”h]”(j)�”}”(hŒ ``MEMBER``”h]”j)�”}”(hj<Ñh]”hŒMEMBER”…”�”}”(hj>Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M hj6Ñubj2)�”}”(hhh]”hÝ)�”}”(hŒName of the array member.”h]”hŒName of the array member.”…”�”}”(hjUÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQÑh´M hjRÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQÑh´M hjÁÐubj)�”}”(hŒ-``COUNTER`` Name of the __counted_by member. ”h]”(j)�”}”(hŒ ``COUNTER``”h]”j)�”}”(hjuÑh]”hŒCOUNTER”…”�”}”(hjwÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M hjoÑubj2)�”}”(hhh]”hÝ)�”}”(hŒ Name of the __counted_by member.”h]”hŒ Name of the __counted_by member.”…”�”}”(hjŽÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠÑh´M hj‹Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjoÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠÑh´M hjÁÐubj)�”}”(hŒG``COUNT`` Number of elements in the array; must be compile-time const. ”h]”(j)�”}”(hŒ ``COUNT``”h]”j)�”}”(hj®Ñh]”hŒCOUNT”…”�”}”(hj°Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj¨Ñubj2)�”}”(hhh]”hÝ)�”}”(hŒmember**) to get compile-time size of **NAME** members. Use STACK_FLEX_ARRAY_SIZE(**name**, **member**) to get compile-time number of elements in array **member**.”h]”(hŒ'Define a zeroed, on-stack, instance of ”…”�”}”(hjÿÑh²hh³Nh´Nubjõ)�”}”(hŒ**TYPE**”h]”hŒTYPE”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿÑubhŒD structure with a trailing flexible array member. Use __struct_size(”…”�”}”(hjÿÑh²hh³Nh´Nubjõ)�”}”(hŒ**NAME**”h]”hŒNAME”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿÑubhŒ?) to get compile-time size of it afterwards. Use __member_size(”…”�”}”(hjÿÑh²hh³Nh´Nubjõ)�”}”(hŒ**NAME->member**”h]”hŒ NAME->member”…”�”}”(hj+Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿÑubhŒ) to get compile-time size of ”…”�”}”(hjÿÑh²hh³Nh´Nubjõ)�”}”(hŒ**NAME**”h]”hŒNAME”…”�”}”(hj=Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿÑubhŒ$ members. Use STACK_FLEX_ARRAY_SIZE(”…”�”}”(hjÿÑh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjOÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿÑubhŒ, ”…”�”}”(hjÿÑh²hh³Nh´Nubjõ)�”}”(hŒ **member**”h]”hŒmember”…”�”}”(hjaÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿÑubhŒ2) to get compile-time number of elements in array ”…”�”}”(hjÿÑh²hh³Nh´Nubjõ)�”}”(hŒ **member**”h]”hŒmember”…”�”}”(hjsÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿÑubhŒ.”…”�”}”(hjÿÑh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj¥Ðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒSTACK_FLEX_ARRAY_SIZE (C macro)”Œc.STACK_FLEX_ARRAY_SIZE”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒSTACK_FLEX_ARRAY_SIZE”h]”j)�”}”(hŒSTACK_FLEX_ARRAY_SIZE”h]”j{)�”}”(hŒSTACK_FLEX_ARRAY_SIZE”h]”j�)�”}”(hj¦Òh]”hŒSTACK_FLEX_ARRAY_SIZE”…”�”}”(hj°Òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬Òubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¨Òh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¤Òh²hh³jÃÒh´Mubah}”(h]”jŸÒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÃÒh´Mhj¡Òh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¡Òh²hh³jÃÒh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÜÒjæjÜÒjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ'``STACK_FLEX_ARRAY_SIZE (name, array)``”h]”j)�”}”(hjâÒh]”hŒ#STACK_FLEX_ARRAY_SIZE (name, array)”…”�”}”(hjäÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj—žh²hubj•)�”}”(hŒThelper macro for DEFINE_FLEX() family. Returns the number of elements in **array**. ”h]”hÝ)�”}”(hŒShelper macro for DEFINE_FLEX() family. Returns the number of elements in **array**.”h]”(hŒIhelper macro for DEFINE_FLEX() family. Returns the number of elements in ”…”�”}”(hjüÒh²hh³Nh´Nubjõ)�”}”(hŒ **array**”h]”hŒarray”…”�”}”(hjÓh²hh³Nh´Nubah}”(•h]”h ]”h"]”h$]”h&]”uh1jôhjüÒubhŒ.”…”�”}”(hjüÒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjøÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÓh´Mhj—žh²hubjë)�”}”(hŒ�**Parameters** ``name`` Name for a variable defined in DEFINE_RAW_FLEX()/DEFINE_FLEX(). ``array`` Name of the array member.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj)Óh]”hŒ Parameters”…”�”}”(hj+Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'Óubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj#Óubj )�”}”(hhh]”(j)�”}”(hŒI``name`` Name for a variable defined in DEFINE_RAW_FLEX()/DEFINE_FLEX(). ”h]”(j)�”}”(hŒ``name``”h]”j)�”}”(hjHÓh]”hŒname”…”�”}”(hjJÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MhjBÓubj2)�”}”(hhh]”hÝ)�”}”(hŒ?Name for a variable defined in DEFINE_RAW_FLEX()/DEFINE_FLEX().”h]”hŒ?Name for a variable defined in DEFINE_RAW_FLEX()/DEFINE_FLEX().”…”�”}”(hjaÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j]Óh´Mhj^Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjBÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]Óh´Mhj?Óubj)�”}”(hŒ#``array`` Name of the array member.”h]”(j)�”}”(hŒ ``array``”h]”j)�”}”(hj�Óh]”hŒarray”…”�”}”(hjƒÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M hj{Óubj2)�”}”(hhh]”hÝ)�”}”(hŒName of the array member.”h]”hŒName of the array member.”…”�”}”(hjšÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´Mhj—Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{Óubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–Óh´M hj?Óubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj#Óubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œtypeof_flex_counter (C macro)”Œc.typeof_flex_counter”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒtypeof_flex_counter”h]”j)�”}”(hŒtypeof_flex_counter”h]”j{)�”}”(hŒtypeof_flex_counter”h]”j�)�”}”(hjÕÓh]”hŒtypeof_flex_counter”…”�”}”(hjßÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛÓubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj×Óh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M&ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÓÓh²hh³jòÓh´M&ubah}”(h]”jÎÓah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jòÓh´M&hjÐÓh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÐÓh²hh³jòÓh´M&ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj Ôjæj Ôjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ``typeof_flex_counter (FAM)``”h]”j)�”}”(hjÔh]”hŒtypeof_flex_counter (FAM)”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M(hj—žh²hubj•)�”}”(hŒfReturn the type of the counter variable of a given flexible array member annotated by __counted_by(). ”h]”hÝ)�”}”(hŒeReturn the type of the counter variable of a given flexible array member annotated by __counted_by().”h]”hŒeReturn the type of the counter variable of a given flexible array member annotated by __counted_by().”…”�”}”(hj+Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M&hj'Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j9Ôh´M&hj—žh²hubjë)�”}”(hŒ�**Parameters** ``FAM`` Instance of flexible array member within a given struct. **Return** "size_t" if no annotation exists.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjFÔh]”hŒ Parameters”…”�”}”(hjHÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjDÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M*hj@Ôubj )�”}”(hhh]”j)�”}”(hŒA``FAM`` Instance of flexible array member within a given struct. ”h]”(j)�”}”(hŒ``FAM``”h]”j)�”}”(hjeÔh]”hŒFAM”…”�”}”(hjgÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjcÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M(hj_Ôubj2)�”}”(hhh]”hÝ)�”}”(hŒ8Instance of flexible array member within a given struct.”h]”hŒ8Instance of flexible array member within a given struct.”…”�”}”(hj~Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jzÔh´M(hj{Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj_Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jzÔh´M(hj\Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj@ÔubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj Ôh]”hŒReturn”…”�”}”(hj¢Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjžÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M*hj@ÔubhÝ)�”}”(hŒ!"size_t" if no annotation exists.”h]”hŒ%“size_tâ€� if no annotation exists.”…”�”}”(hj¶Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M*hj@Ôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%overflows_flex_counter_type (C macro)”Œc.overflows_flex_counter_type”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒoverflows_flex_counter_type”h]”j)�”}”(hŒoverflows_flex_counter_type”h]”j{)�”}”(hŒoverflows_flex_counter_type”h]”j�)�”}”(hjßÔh]”hŒoverflows_flex_counter_type”…”�”}”(hjéÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåÔubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjáÔh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M2ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÝÔh²hh³jüÔh´M2ubah}”(h]”jØÔah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jüÔh´M2hjÚÔh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÚÔh²hh³jüÔh´M2ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÕjæjÕjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ2``overflows_flex_counter_type (TYPE, FAM, COUNT)``”h]”j)�”}”(hjÕh]”hŒ.overflows_flex_counter_type (TYPE, FAM, COUNT)”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M4hj—žh²hubj•)�”}”(hŒ\Check if the counter associated with the given flexible array member can represent a value. ”h]”hÝ)�”}”(hŒ[Check if the counter associated with the given flexible array member can represent a value.”h]”hŒ[Check if the counter associated with the given flexible array member can represent a value.”…”�”}”(hj5Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M2hj1Õubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jCÕh´M2hj—žh²hubjë)�”}”(hXa**Parameters** ``TYPE`` Type of the struct that contains the **FAM**. ``FAM`` Member name of the FAM within **TYPE**. ``COUNT`` Value to check against the __counted_by annotated **FAM**'s counter. **Return** true if **COUNT** can be represented in the **FAM**'s counter. When **FAM** is not annotated with __counted_by(), always returns true.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjPÕh]”hŒ Parameters”…”�”}”(hjRÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjNÕubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M6hjJÕubj )�”}”(hhh]”(j)�”}”(hŒ7``TYPE`` Type of the struct that contains the **FAM**. ”h]”(j)�”}”(hŒ``TYPE``”h]”j)�”}”(hjoÕh]”hŒTYPE”…”�”}”(hjqÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M5hjiÕubj2)�”}”(hhh]”hÝ)�”}”(hŒ-Type of the struct that contains the **FAM**.”h]”(hŒ%Type of the struct that contains the ”…”�”}”(hjˆÕh²hh³Nh´Nubjõ)�”}”(hŒ**FAM**”h]”hŒFAM”…”�”}”(hj�Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆÕubhŒ.”…”�”}”(hjˆÕh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j„Õh´M5hj…Õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjiÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„Õh´M5hjfÕubj)�”}”(hŒ0``FAM`` Member name of the FAM within **TYPE**. ”h]”(j)�”}”(hŒ``FAM``”h]”j)�”}”(hjºÕh]”hŒFAM”…”�”}”(hj¼Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸Õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M6hj´Õubj2)�”}”(hhh]”hÝ)�”}”(hŒ'Member name of the FAM within **TYPE**.”h]”(hŒMember name of the FAM within ”…”�”}”(hjÓÕh²hh³Nh´Nubjõ)�”}”(hŒ**TYPE**”h]”hŒTYPE”…”�”}”(hjÛÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓÕubhŒ.”…”�”}”(hjÓÕh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏÕh´M6hjÐÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´Õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏÕh´M6hjfÕubj)�”}”(hŒO``COUNT`` Value to check against the __counted_by annotated **FAM**'s counter. ”h]”(j)�”}”(hŒ ``COUNT``”h]”j)�”}”(hjÖh]”hŒCOUNT”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M7hjÿÕubj2)�”}”(hhh]”hÝ)�”}”(hŒDValue to check against the __counted_by annotated **FAM**'s counter.”h]”(hŒ2Value to check against the __counted_by annotated ”…”�”}”(hjÖh²hh³Nh´Nubjõ)�”}”(hŒ**FAM**”h]”hŒFAM”…”�”}”(hj&Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖubhŒ ’s counter.”…”�”}”(hjÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÖh´M7hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÿÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÖh´M7hjfÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjJÕubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjRÖh]”hŒReturn”…”�”}”(hjTÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M9hjJÕubhÝ)�”}”(hŒ†true if **COUNT** can be represented in the **FAM**'s counter. When **FAM** is not annotated with __counted_by(), always returns true.”h]”(hŒtrue if ”…”�”}”(hjhÖh²hh³Nh´Nubjõ)�”}”(hŒ **COUNT**”h]”hŒCOUNT”…”�”}”(hjpÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhÖubhŒ can be represented in the ”…”�”}”(hjhÖh²hh³Nh´Nubjõ)�”}”(hŒ**FAM**”h]”hŒFAM”…”�”}”(hj‚Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhÖubhŒ’s counter. When ”…”�”}”(hjhÖh²hh³Nh´Nubjõ)�”}”(hŒ**FAM**”h]”hŒFAM”…”�”}”(hj”Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhÖubhŒ; is not annotated with __counted_by(), always returns true.”…”�”}”(hjhÖh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M9hjJÕubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__set_flex_counter (C macro)”Œc.__set_flex_counter”hNt”auh1hýhj—žh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ__set_flex_counter”h]”j)�”}”(hŒ__set_flex_counter”h]”j{)�”}”(hŒ__set_flex_counter”h]”j�)�”}”(hjÇÖh]”hŒ__set_flex_counter”…”�”}”(hjÑÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍÖubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÉÖh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M@ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÅÖh²hh³jäÖh´M@ubah}”(h]”jÀÖah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jäÖh´M@hjÂÖh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÂÖh²hh³jäÖh´M@ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjýÖjæjýÖjç‰jè‰jé‰uh1jh²hhj—žh³Nh´NubhÝ)�”}”(hŒ#``__set_flex_counter (FAM, COUNT)``”h]”j)�”}”(hj×h]”hŒ__set_flex_counter (FAM, COUNT)”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MBhj—žh²hubj•)�”}”(hŒjSet the counter associated with the given flexible array member that has been annoated by __counted_by(). ”h]”hÝ)�”}”(hŒiSet the counter associated with the given flexible array member that has been annoated by __counted_by().”h]”hŒiSet the counter associated with the given flexible array member that has been annoated by __counted_by().”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´M@hj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j+×h´M@hj—žh²hubjë)�”}”(hX7**Parameters** ``FAM`` Instance of flexible array member within a given struct. ``COUNT`` Value to store to the __counted_by annotated **FAM_PTR**'s counter. **Description** This is a no-op if no annotation exists. Count needs to be checked with overflows_flex_counter_type() before using this function.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj8×h]”hŒ Parameters”…”�”}”(hj:×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MDhj2×ubj )�”}”(hhh]”(j)�”}”(hŒA``FAM`` Instance of flexible array member within a given struct. ”h]”(j)�”}”(hŒ``FAM``”h]”j)�”}”(hjW×h]”hŒFAM”…”�”}”(hjY×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjU×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MBhjQ×ubj2)�”}”(hhh]”hÝ)�”}”(hŒ8Instance of flexible array member within a given struct.”h]”hŒ8Instance of flexible array member within a given struct.”…”�”}”(hjp×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jl×h´MBhjm×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQ×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jl×h´MBhjN×ubj)�”}”(hŒN``COUNT`` Value to store to the __counted_by annotated **FAM_PTR**'s counter. ”h]”(j)�”}”(hŒ ``COUNT``”h]”j)�”}”(hj�×h]”hŒCOUNT”…”�”}”(hj’×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MChjŠ×ubj2)�”}”(hhh]”hÝ)�”}”(hŒCValue to store to the __counted_by annotated **FAM_PTR**'s counter.”h]”(hŒ-Value to store to the __counted_by annotated ”…”�”}”(hj©×h²hh³Nh´Nubjõ)�”}”(hŒ **FAM_PTR**”h]”hŒFAM_PTR”…”�”}”(hj±×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©×ubhŒ ’s counter.”…”�”}”(hj©×h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥×h´MChj¦×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠ×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥×h´MChjN×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj2×ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÝ×h]”hŒ Description”…”�”}”(hjß×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MEhj2×ubhÝ)�”}”(hŒ�This is a no-op if no annotation exists. Count needs to be checked with overflows_flex_counter_type() before using this function.”h]”hŒ�This is a no-op if no annotation exists. Count needs to be checked with overflows_flex_counter_type() before using this function.”…”�”}”(hjó×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:127: ./include/linux/overflow.h”h´MDhj2×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj—žh²hh³Nh´Nubeh}”(h]”Œarithmetic-overflow-checking”ah ]”h"]”Œarithmetic overflow checking”ah$]”h&]”uh1hµhj†žh²hh³hÊh´K}ubh¶)�”}”(hhh]”(h»)�”}”(hŒ CRC Functions”h]”hŒ CRC Functions”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjØh²hh³hÊh´Kƒubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc4 (C function)”Œc.crc4”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.uint8_t crc4 (uint8_t c, uint64_t x, int bits)”h]”j)�”}”(hŒ-uint8_t crc4(uint8_t c, uint64_t x, int bits)”h]”(h)�”}”(hhh]”j�)�”}”(hŒuint8_t”h]”hŒuint8_t”…”�”}”(hj>Øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;Øubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j@ØŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œcrc4”sbŒc.crc4”†”asbuh1hhj7Øh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:133: ./lib/crc/crc4.c”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7Øh²hh³j_Øh´Kubj{)�”}”(hŒcrc4”h]”j�)�”}”(hj\Øh]”hŒcrc4”…”�”}”(hjrØh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnØubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj7Øh²hh³j_Øh´Kubjœ)�”}”(hŒ!(uint8_t c, uint64_t x, int bits)”h]”(j¢)�”}”(hŒ uint8_t c”h]”(h)�”}”(hhh]”j�)�”}”(hŒuint8_t”h]”hŒuint8_t”…”�”}”(hj�Øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Øubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j’ØŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jZØŒc.crc4”†”asbuh1hhj‰Øubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰Øubj�)�”}”(hjßh]”hŒc”…”�”}”(hj¼Øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰Øubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj…Øubj¢)�”}”(hŒ uint64_t x”h]”(h)�”}”(hhh]”j�)�”}”(hŒuint64_t”h]”hŒuint64_t”…”�”}”(hjרh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔØubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÙØŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jZØŒc.crc4”†”asbuh1hhjÐØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõØh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÐØubj�)�”}”(hŒx”h]”hŒx”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐØubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj…Øubj¢)�”}”(hŒint bits”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙubj�)�”}”(hŒbits”h]”hŒbits”…”�”}”(hj8Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj…Øubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj7Øh²hh³j_Øh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj3Øh²hh³j_Øh´Kubah}”(h]”j.Øah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j_Øh´Khj0Øh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#calculate the 4-bit crc of a value.”h]”hŒ#calculate the 4-bit crc of a value.”…”�”}”(hjbÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:133: ./lib/crc/crc4.c”h´Khj_Ùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj0Øh²hh³j_Øh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjzÙjæjzÙjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hX<**Parameters** ``uint8_t c`` starting crc4 ``uint64_t x`` value to checksum ``int bits`` number of bits in **x** to checksum **Description** Returns the crc4 value of **x**, using polynomial 0b10111. The **x** value is treated as left-aligned, and bits above **bits** are ignored in the crc calculations.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj„Ùh]”hŒ Parameters”…”�”}”(hj†Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:133: ./lib/crc/crc4.c”h´Khj~Ùubj )�”}”(hhh]”(j)�”}”(hŒ``uint8_t c`` starting crc4 ”h]”(j)�”}”(hŒ ``uint8_t c``”h]”j)�”}”(hj£Ùh]”hŒ uint8_t c”…”�”}”(hj¥Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:133: ./lib/crc/crc4.c”h´Khj�Ùubj2)�”}”(hhh]”hÝ)�”}”(hŒ starting crc4”h]”hŒ starting crc4”…”�”}”(hj¼Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¸Ùh´Khj¹Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¸Ùh´KhjšÙubj)�”}”(hŒ!``uint64_t x`` value to checksum ”h]”(j)�”}”(hŒ``uint64_t x``”h]”j)�”}”(hjÜÙh]”hŒ uint64_t x”…”�”}”(hjÞÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:133: ./lib/crc/crc4.c”h´KhjÖÙubj2)�”}”(hhh]”hÝ)�”}”(hŒvalue to checksum”h]”hŒvalue to checksum”…”�”}”(hjõÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jñÙh´KhjòÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÖÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñÙh´KhjšÙubj)�”}”(hŒ1``int bits`` number of bits in **x** to checksum ”h]”(j)�”}”(hŒ ``int bits``”h]”j)�”}”(hjÚh]”hŒint bits”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:133: ./lib/crc/crc4.c”h´KhjÚubj2)�”}”(hhh]”hÝ)�”}”(hŒ#number of bits in **x** to checksum”h]”(hŒnumber of bits in ”…”�”}”(hj.Úh²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hj6Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.ÚubhŒ to checksum”…”�”}”(hj.Úh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j*Úh´Khj+Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j*Úh´KhjšÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj~ÙubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjbÚh]”hŒ Description”…”�”}”(hjdÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`Úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:133: ./lib/crc/crc4.c”h´Khj~ÙubhÝ)�”}”(hŒ:Returns the crc4 value of **x**, using polynomial 0b10111.”h]”(hŒReturns the crc4 value of ”…”�”}”(hjxÚh²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hj€Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjxÚubhŒ, using polynomial 0b10111.”…”�”}”(hjxÚh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:133: ./lib/crc/crc4.c”h´Khj~ÙubhÝ)�”}”(hŒhThe **x** value is treated as left-aligned, and bits above **bits** are ignored in the crc calculations.”h]”(hŒThe ”…”�”}”(hj™Úh²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hj¡Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™ÚubhŒ2 value is treated as left-aligned, and bits above ”…”�”}”(hj™Úh²hh³Nh´Nubjõ)�”}”(hŒ**bits**”h]”hŒbits”…”�”}”(hj³Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™ÚubhŒ% are ignored in the crc calculations.”…”�”}”(hj™Úh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:133: ./lib/crc/crc4.c”h´Khj~Ùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc7_be (C function)”Œ c.crc7_be”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1u8 crc7_be (u8 crc, const u8 *buffer, size_t len)”h]”j)�”}”(hŒ0u8 crc7_be(u8 crc, const u8 *buffer, size_t len)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjïÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jñÚŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œcrc7_be”sbŒ c.crc7_be”†”asbuh1hhjèÚh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèÚh²hh³jÛh´K5ubj{)�”}”(hŒcrc7_be”h]”j�)�”}”(hj Ûh]”hŒcrc7_be”…”�”}”(hj#Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjèÚh²hh³jÛh´K5ubjœ)�”}”(hŒ&(u8 crc, const u8 *buffer, size_t len)”h]”(j¢)�”}”(hŒu8 crc”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjAÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>Ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jCÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j ÛŒ c.crc7_be”†”asbuh1hhj:Ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:Ûubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hjmÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:Ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6Ûubj¢)�”}”(hŒconst u8 *buffer”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj†Ûh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‚Ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚Ûubh)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj¤Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡Ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¦ÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j ÛŒ c.crc7_be”†”asbuh1hhj‚Ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚Ûubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÐÛh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‚Ûubj�)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hjÝÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚Ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6Ûubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjùÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jûÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j ÛŒ c.crc7_be”†”asbuh1hhjòÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòÛubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj%Üh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6Ûubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjèÚh²hh³jÛh´K5ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjäÚh²hh³jÛh´K5ubah}”(h]”jßÚah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÛh´K5hjáÚh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#update the CRC7 for the data buffer”h]”hŒ#update the CRC7 for the data buffer”…”�”}”(hjOÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K5hjLÜh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjáÚh²hh³jÛh´K5ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjgÜjæjgÜjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hXS**Parameters** ``u8 crc`` previous CRC7 value ``const u8 *buffer`` data pointer ``size_t len`` number of bytes in the buffer **Context** any **Description** Returns the updated CRC7 value. The CRC7 is left-aligned in the byte (the lsbit is always 0), as that makes the computation easier, and all callers want it in that form.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjqÜh]”hŒ Parameters”…”�”}”(hjsÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjoÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K9hjkÜubj )�”}”(hhh]”(j)�”}”(hŒ``u8 crc`` previous CRC7 value ”h]”(j)�”}”(hŒ ``u8 crc``”h]”j)�”}”(hj�Üh]”hŒu8 crc”…”�”}”(hj’Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K6hjŠÜubj2)�”}”(hhh]”hÝ)�”}”(hŒprevious CRC7 value”h]”hŒprevious CRC7 value”…”�”}”(hj©Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥Üh´K6hj¦Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥Üh´K6hj‡Üubj)�”}”(hŒ"``const u8 *buffer`` data pointer ”h]”(j)�”}”(hŒ``const u8 *buffer``”h]”j)�”}”(hjÉÜh]”hŒconst u8 *buffer”…”�”}”(hjËÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K7hjÃÜubj2)�”}”(hhh]”hÝ)�”}”(hŒ data pointer”h]”hŒ data pointer”…”�”}”(hjâÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÞÜh´K7hjßÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÃÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞÜh´K7hj‡Üubj)�”}”(hŒ-``size_t len`` number of bytes in the buffer ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjÝh]”hŒ size_t len”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K8hjüÜubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes in the buffer”h]”hŒnumber of bytes in the buffer”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝh´K8hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjüÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝh´K8hj‡Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjkÜubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hj=Ýh]”hŒContext”…”�”}”(hj?Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K:hjkÜubhÝ)�”}”(hŒany”h]”hŒany”…”�”}”(hjSÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K9hjkÜubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjdÝh]”hŒ Description”…”�”}”(hjfÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K;hjkÜubhÝ)�”}”(hŒ©Returns the updated CRC7 value. The CRC7 is left-aligned in the byte (the lsbit is always 0), as that makes the computation easier, and all callers want it in that form.”h]”hŒ©Returns the updated CRC7 value. The CRC7 is left-aligned in the byte (the lsbit is always 0), as that makes the computation easier, and all callers want it in that form.”…”�”}”(hjzÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:136: ./lib/crc/crc7.c”h´K:hjkÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc8_populate_msb (C function)”Œc.crc8_populate_msb”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒAvoid crc8_populate_msb (u8 table[CRC8_TABLE_SIZE], u8 polynomial)”h]”j)�”}”(hŒ@void crc8_populate_msb(u8 table[CRC8_TABLE_SIZE], u8 polynomial)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj©Ýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¥Ýh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸Ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥Ýh²hh³j·Ýh´Kubj{)�”}”(hŒcrc8_populate_msb”h]”j�)�”}”(hŒcrc8_populate_msb”h]”hŒcrc8_populate_msb”…”�”}”(hjÊÝh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆÝubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¥Ýh²hh³j·Ýh´Kubjœ)�”}”(hŒ*(u8 table[CRC8_TABLE_SIZE], u8 polynomial)”h]”(j¢)�”}”(hŒu8 table[CRC8_TABLE_SIZE]”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjéÝh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jëÝŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÌÝsbŒc.crc8_populate_msb”†”asbuh1hhjâÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâÝubj�)�”}”(hŒtable”h]”hŒtable”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâÝubjã)�”}”(hŒ[”h]”hŒ[”…”�”}”(hj%Þh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâÝubh)�”}”(hhh]”j�)�”}”(hŒCRC8_TABLE_SIZE”h]”hŒCRC8_TABLE_SIZE”…”�”}”(hj6Þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3Þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j8ÞŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÞŒc.crc8_populate_msb”†”asbuh1hhjâÝubjã)�”}”(hŒ]”h]”hŒ]”…”�”}”(hjTÞh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞÝubj¢)�”}”(hŒ u8 polynomial”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjpÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmÞubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jrÞŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÞŒc.crc8_populate_msb”†”asbuh1hhjiÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽÞh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjiÞubj�)�”}”(hŒ polynomial”h]”hŒ polynomial”…”�”}”(hjœÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞÝubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¥Ýh²hh³j·Ýh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¡Ýh²hh³j·Ýh´Kubah}”(h]”jœÝah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j·Ýh´KhjžÝh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9fill crc table for given polynomial in reverse bit order.”h]”hŒ9fill crc table for given polynomial in reverse bit order.”…”�”}”(hjÆÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KhjÃÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjžÝh²hh³j·Ýh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÞÞjæjÞÞjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hŒ„**Parameters** ``u8 table[CRC8_TABLE_SIZE]`` table to be filled. ``u8 polynomial`` polynomial for which table is to be filled.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjèÞh]”hŒ Parameters”…”�”}”(hjêÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KhjâÞubj )�”}”(hhh]”(j)�”}”(hŒ2``u8 table[CRC8_TABLE_SIZE]`` table to be filled. ”h]”(j)�”}”(hŒ``u8 table[CRC8_TABLE_SIZE]``”h]”j)�”}”(hjßh]”hŒu8 table[CRC8_TABLE_SIZE]”…”�”}”(hj ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´Khjßubj2)�”}”(hhh]”hÝ)�”}”(hŒtable to be filled.”h]”hŒtable to be filled.”…”�”}”(hj ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jßh´Khjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jßh´KhjþÞubj)�”}”(hŒ=``u8 polynomial`` polynomial for which table is to be filled.”h]”(j)�”}”(hŒ``u8 polynomial``”h]”j)�”}”(hj@ßh]”hŒ u8 polynomial”…”�”}”(hjBßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´Khj:ßubj2)�”}”(hhh]”hÝ)�”}”(hŒ+polynomial for which table is to be filled.”h]”hŒ+polynomial for which table is to be filled.”…”�”}”(hjYßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KhjVßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj:ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jUßh´KhjþÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjâÞubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc8_populate_lsb (C function)”Œc.crc8_populate_lsb”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒAvoid crc8_populate_lsb (u8 table[CRC8_TABLE_SIZE], u8 polynomial)”h]”j)�”}”(hŒ@void crc8_populate_lsb(u8 table[CRC8_TABLE_SIZE], u8 polynomial)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjšßh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj–ßh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´K/ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©ßh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–ßh²hh³j¨ßh´K/ubj{)�”}”(hŒcrc8_populate_lsb”h]”j�)�”}”(hŒcrc8_populate_lsb”h]”hŒcrc8_populate_lsb”…”�”}”(hj»ßh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·ßubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj–ßh²hh³j¨ßh´K/ubjœ)�”}”(hŒ*(u8 table[CRC8_TABLE_SIZE], u8 polynomial)”h]”(j¢)�”}”(hŒu8 table[CRC8_TABLE_SIZE]”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjÚßh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×ßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÜߌmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j½ßsbŒc.crc8_populate_lsb”†”asbuh1hhjÓßubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúßh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÓßubj�)�”}”(hŒtable”h]”hŒtable”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓßubjã)�”}”(hj'Þh]”hŒ[”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÓßubh)�”}”(hhh]”j�)�”}”(hŒCRC8_TABLE_SIZE”h]”hŒCRC8_TABLE_SIZE”…”�”}”(hj&àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j(àŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jöߌc.crc8_populate_lsb”†”asbuh1hhjÓßubjã)�”}”(hjVÞh]”hŒ]”…”�”}”(hjDàh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÓßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÏßubj¢)�”}”(hŒ u8 polynomial”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj_àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jaàŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jöߌc.crc8_populate_lsb”†”asbuh1hhjXàubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}àh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXàubj�)�”}”(hŒ polynomial”h]”hŒ polynomial”…”�”}”(hj‹àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÏßubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj–ßh²hh³j¨ßh´K/ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj’ßh²hh³j¨ßh´K/ubah}”(h]”j�ßah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¨ßh´K/hj�ßh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9fill crc table for given polynomial in regular bit order.”h]”hŒ9fill crc table for given polynomial in regular bit order.”…”�”}”(hjµàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´K/hj²àh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�ßh²hh³j¨ßh´K/ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÍàjæjÍàjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hŒ„**Parameters** ``u8 table[CRC8_TABLE_SIZE]`` table to be filled. ``u8 polynomial`` polynomial for which table is to be filled.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj×àh]”hŒ Parameters”…”�”}”(hjÙàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÕàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´K3hjÑàubj )�”}”(hhh]”(j)�”}”(hŒ2``u8 table[CRC8_TABLE_SIZE]`` table to be filled. ”h]”(j)�”}”(hŒ``u8 table[CRC8_TABLE_SIZE]``”h]”j)�”}”(hjöàh]”hŒu8 table[CRC8_TABLE_SIZE]”…”�”}”(hjøàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôàubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´K1hjðàubj2)�”}”(hhh]”hÝ)�”}”(hŒtable to be filled.”h]”hŒtable to be filled.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j áh´K1hj áubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j áh´K1hjíàubj)�”}”(hŒ=``u8 polynomial`` polynomial for which table is to be filled.”h]”(j)�”}”(hŒ``u8 polynomial``”h]”j)�”}”(hj/áh]”hŒ u8 polynomial”…”�”}”(hj1áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´K3hj)áubj2)�”}”(hhh]”hÝ)�”}”(hŒ+polynomial for which table is to be filled.”h]”hŒ+polynomial for which table is to be filled.”…”�”}”(hjHáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´K2hjEáubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj)áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jDáh´K3hjíàubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÑàubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc8 (C function)”Œc.crc8”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒQu8 crc8 (const u8 table[CRC8_TABLE_SIZE], const u8 *pdata, size_t nbytes, u8 crc)”h]”j)�”}”(hŒPu8 crc8(const u8 table[CRC8_TABLE_SIZE], const u8 *pdata, size_t nbytes, u8 crc)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjŒáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŽáŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œcrc8”sbŒc.crc8”†”asbuh1hhj…áh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®áh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…áh²hh³j­áh´KDubj{)�”}”(hŒcrc8”h]”j�)�”}”(hjªáh]”hŒcrc8”…”�”}”(hjÀáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼áubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj…áh²hh³j­áh´KDubjœ)�”}”(hŒI(const u8 table[CRC8_TABLE_SIZE], const u8 *pdata, size_t nbytes, u8 crc)”h]”(j¢)�”}”(hŒconst u8 table[CRC8_TABLE_SIZE]”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÛáh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj×áubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèáh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×áubh)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjùáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöáubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jûáŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¨áŒc.crc8”†”asbuh1hhj×áubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×áubj�)�”}”(hŒtable”h]”hŒtable”…”�”}”(hj%âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×áubjã)�”}”(hj'Þh]”hŒ[”…”�”}”(hj3âh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj×áubh)�”}”(hhh]”j�)�”}”(hŒCRC8_TABLE_SIZE”h]”hŒCRC8_TABLE_SIZE”…”�”}”(hjCâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jEâŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¨áŒc.crc8”†”asbuh1hhj×áubjã)�”}”(hjVÞh]”hŒ]”…”�”}”(hjaâh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj×áubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓáubj¢)�”}”(hŒconst u8 *pdata”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjyâh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjuâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuâubh)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj—âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j™âŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¨áŒc.crc8”†”asbuh1hhjuâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµâh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuâubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÃâh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjuâubj�)�”}”(hŒpdata”h]”hŒpdata”…”�”}”(hjÐâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓáubj¢)�”}”(hŒ size_t nbytes”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjìâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéâubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jîâŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¨áŒc.crc8”†”asbuh1hhjåâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåâubj�)�”}”(hŒnbytes”h]”hŒnbytes”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓáubj¢)�”}”(hŒu8 crc”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj4ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j6ãŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¨áŒc.crc8”†”asbuh1hhj-ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-ãubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hj`ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓáubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj…áh²hh³j­áh´KDubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�áh²hh³j­áh´KDubah}”(h]”j|áah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­áh´KDhj~áh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+calculate a crc8 over the given input data.”h]”hŒ+calculate a crc8 over the given input data.”…”�”}”(hjŠãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KDhj‡ãh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj~áh²hh³j­áh´KDubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¢ãjæj¢ãjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hŒå**Parameters** ``const u8 table[CRC8_TABLE_SIZE]`` crc table used for calculation. ``const u8 *pdata`` pointer to data buffer. ``size_t nbytes`` number of bytes in data buffer. ``u8 crc`` previous returned crc8 value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¬ãh]”hŒ Parameters”…”�”}”(hj®ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjªãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KHhj¦ãubj )�”}”(hhh]”(j)�”}”(hŒD``const u8 table[CRC8_TABLE_SIZE]`` crc table used for calculation. ”h]”(j)�”}”(hŒ#``const u8 table[CRC8_TABLE_SIZE]``”h]”j)�”}”(hjËãh]”hŒconst u8 table[CRC8_TABLE_SIZE]”…”�”}”(hjÍãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KFhjÅãubj2)�”}”(hhh]”hÝ)�”}”(hŒcrc table used for calculation.”h]”hŒcrc table used for calculation.”…”�”}”(hjäãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jàãh´KFhjáãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jàãh´KFhjÂãubj)�”}”(hŒ,``const u8 *pdata`` pointer to data buffer. ”h]”(j)�”}”(hŒ``const u8 *pdata``”h]”j)�”}”(hjäh]”hŒconst u8 *pdata”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KGhjþãubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to data buffer.”h]”hŒpointer to data buffer.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jäh´KGhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjþãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jäh´KGhjÂãubj)�”}”(hŒ2``size_t nbytes`` number of bytes in data buffer. ”h]”(j)�”}”(hŒ``size_t nbytes``”h]”j)�”}”(hj=äh]”hŒ size_t nbytes”…”�”}”(hj?äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;äubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KHhj7äubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes in data buffer.”h]”hŒnumber of bytes in data buffer.”…”�”}”(hjVäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jRäh´KHhjSäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj7äubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jRäh´KHhjÂãubj)�”}”(hŒ(``u8 crc`` previous returned crc8 value.”h]”(j)�”}”(hŒ ``u8 crc``”h]”j)�”}”(hjväh]”hŒu8 crc”…”�”}”(hjxäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KJhjpäubj2)�”}”(hhh]”hÝ)�”}”(hŒprevious returned crc8 value.”h]”hŒprevious returned crc8 value.”…”�”}”(hj�äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:139: ./lib/crc/crc8.c”h´KIhjŒäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjpäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹äh´KJhjÂãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¦ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc16 (C function)”Œc.crc16”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,u16 crc16 (u16 crc, const u8 *p, size_t len)”h]”j)�”}”(hŒ+u16 crc16(u16 crc, const u8 *p, size_t len)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu16”h]”hŒu16”…”�”}”(hjÓäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐäubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÕäŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œcrc16”sbŒc.crc16”†”asbuh1hhjÌäh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:142: ./lib/crc/crc16.c”h´K0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõäh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌäh²hh³jôäh´K0ubj{)�”}”(hŒcrc16”h]”j�)�”}”(hjñäh]”hŒcrc16”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÌäh²hh³jôäh´K0ubjœ)�”}”(hŒ"(u16 crc, const u8 *p, size_t len)”h]”(j¢)�”}”(hŒu16 crc”h]”(h)�”}”(hhh]”j�)�”}”(hŒu16”h]”hŒu16”…”�”}”(hj%åh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"åubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j'åŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jïäŒc.crc16”†”asbuh1hhjåubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hjQåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjåubj¢)�”}”(hŒ const u8 *p”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjjåh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjfåubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjfåubh)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjˆåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…åubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŠåŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jïäŒc.crc16”†”asbuh1hhjfåubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦åh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjfåubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj´åh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjfåubj�)�”}”(hjïh]”hŒp”…”�”}”(hjÁåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjåubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÜåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙåubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÞåŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jïäŒc.crc16”†”asbuh1hhjÕåubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕåubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjåubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÌäh²hh³jôäh´K0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÈäh²hh³jôäh´K0ubah}”(h]”jÃäah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jôäh´K0hjÅäh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&compute the CRC-16 for the data buffer”h]”hŒ&compute the CRC-16 for the data buffer”…”�”}”(hj2æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:142: ./lib/crc/crc16.c”h´K0hj/æh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÅäh²hh³jôäh´K0ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjJæjæjJæjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hŒ±**Parameters** ``u16 crc`` previous CRC value ``const u8 *p`` data pointer ``size_t len`` number of bytes in the buffer **Description** Returns the updated CRC value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjTæh]”hŒ Parameters”…”�”}”(hjVæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRæubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:142: ./lib/crc/crc16.c”h´K4hjNæubj )�”}”(hhh]”(j)�”}”(hŒ``u16 crc`` previous CRC value ”h]”(j)�”}”(hŒ ``u16 crc``”h]”j)�”}”(hjsæh]”hŒu16 crc”…”�”}”(hjuæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqæubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:142: ./lib/crc/crc16.c”h´K1hjmæubj2)�”}”(hhh]”hÝ)�”}”(hŒprevious CRC value”h]”hŒprevious CRC value”…”�”}”(hjŒæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆæh´K1hj‰æubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjmæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆæh´K1hjjæubj)�”}”(hŒ``const u8 *p`` data pointer ”h]”(j)�”}”(hŒ``const u8 *p``”h]”j)�”}”(hj¬æh]”hŒ const u8 *p”…”�”}”(hj®æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªæubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:142: ./lib/crc/crc16.c”h´K2hj¦æubj2)�”}”(hhh]”hÝ)�”}”(hŒ data pointer”h]”hŒ data pointer”…”�”}”(hjÅæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁæh´K2hjÂæubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦æubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁæh´K2hjjæubj)�”}”(hŒ-``size_t len`` number of bytes in the buffer ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjåæh]”hŒ size_t len”…”�”}”(hjçæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjãæubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:142: ./lib/crc/crc16.c”h´K3hjßæubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes in the buffer”h]”hŒnumber of bytes in the buffer”…”�”}”(hjþæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³júæh´K3hjûæubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjßæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³júæh´K3hjjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjNæubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj çh]”hŒ Description”…”�”}”(hj"çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:142: ./lib/crc/crc16.c”h´K5hjNæubhÝ)�”}”(hŒReturns the updated CRC value.”h]”hŒReturns the updated CRC value.”…”�”}”(hj6çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:142: ./lib/crc/crc16.c”h´K4hjNæubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc_ccitt (C function)”Œ c.crc_ccitt”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ5u16 crc_ccitt (u16 crc, u8 const *buffer, size_t len)”h]”j)�”}”(hŒ4u16 crc_ccitt(u16 crc, u8 const *buffer, size_t len)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu16”h]”hŒu16”…”�”}”(hjhçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jjçŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ crc_ccitt”sbŒ c.crc_ccitt”†”asbuh1hhjaçh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:145: ./lib/crc/crc-ccitt.c”h´K3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠçh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjaçh²hh³j‰çh´K3ubj{)�”}”(hŒ crc_ccitt”h]”j�)�”}”(hj†çh]”hŒ crc_ccitt”…”�”}”(hjœçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜çubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjaçh²hh³j‰çh´K3ubjœ)�”}”(hŒ'(u16 crc, u8 const *buffer, size_t len)”h]”(j¢)�”}”(hŒu16 crc”h]”(h)�”}”(hhh]”j�)�”}”(hŒu16”h]”hŒu16”…”�”}”(hjºçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¼çŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j„çŒ c.crc_ccitt”†”asbuh1hhj³çubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØçh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³çubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hjæçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³çubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¯çubj¢)�”}”(hŒu8 const *buffer”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jèŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j„çŒ c.crc_ccitt”†”asbuh1hhjûçubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjûçubj¨)�”}”(hj«h]”hŒconst”…”�”}”(hj.èh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjûçubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjûçubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjIèh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjûçubj�)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hjVèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjûçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¯çubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjrèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoèubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jtèŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j„çŒ c.crc_ccitt”†”asbuh1hhjkèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjkèubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjžèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkèubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¯çubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjaçh²hh³j‰çh´K3ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj]çh²hh³j‰çh´K3ubah}”(h]”jXçah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‰çh´K3hjZçh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9recompute the CRC (CRC-CCITT variant) for the data buffer”h]”hŒ9recompute the CRC (CRC-CCITT variant) for the data buffer”…”�”}”(hjÈèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:145: ./lib/crc/crc-ccitt.c”h´K3hjÅèh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjZçh²hh³j‰çh´K3ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjàèjæjàèjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hŒ…**Parameters** ``u16 crc`` previous CRC value ``u8 const *buffer`` data pointer ``size_t len`` number of bytes in the buffer”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjêèh]”hŒ Parameters”…”�”}”(hjìèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjèèubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:145: ./lib/crc/crc-ccitt.c”h´K7hjäèubj )�”}”(hhh]”(j)�”}”(hŒ``u16 crc`` previous CRC value ”h]”(j)�”}”(hŒ ``u16 crc``”h]”j)�”}”(hj éh]”hŒu16 crc”…”�”}”(hj éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:145: ./lib/crc/crc-ccitt.c”h´K5hjéubj2)�”}”(hhh]”hÝ)�”}”(hŒprevious CRC value”h]”hŒprevious CRC value”…”�”}”(hj"éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jéh´K5hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jéh´K5hjéubj)�”}”(hŒ"``u8 const *buffer`` data pointer ”h]”(j)�”}”(hŒ``u8 const *buffer``”h]”j)�”}”(hjBéh]”hŒu8 const *buffer”…”�”}”(hjDéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@éubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:145: ./lib/crc/crc-ccitt.c”h´K6hj<éubj2)�”}”(hhh]”hÝ)�”}”(hŒ data pointer”h]”hŒ data pointer”…”�”}”(hj[éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jWéh´K6hjXéubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj<éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jWéh´K6hjéubj)�”}”(hŒ,``size_t len`` number of bytes in the buffer”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hj{éh]”hŒ size_t len”…”�”}”(hj}éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjyéubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:145: ./lib/crc/crc-ccitt.c”h´K8hjuéubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes in the buffer”h]”hŒnumber of bytes in the buffer”…”�”}”(hj”éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:145: ./lib/crc/crc-ccitt.c”h´K7hj‘éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjuéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�éh´K8hjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjäèubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc_itu_t (C function)”Œ c.crc_itu_t”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ5u16 crc_itu_t (u16 crc, const u8 *buffer, size_t len)”h]”j)�”}”(hŒ4u16 crc_itu_t(u16 crc, const u8 *buffer, size_t len)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu16”h]”hŒu16”…”�”}”(hjØéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÚéŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ crc_itu_t”sbŒ c.crc_itu_t”†”asbuh1hhjÑéh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:148: ./lib/crc/crc-itu-t.c”h´K2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÑéh²hh³jùéh´K2ubj{)�”}”(hŒ crc_itu_t”h]”j�)�”}”(hjöéh]”hŒ crc_itu_t”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÑéh²hh³jùéh´K2ubjœ)�”}”(hŒ'(u16 crc, const u8 *buffer, size_t len)”h]”(j¢)�”}”(hŒu16 crc”h]”(h)�”}”(hhh]”j�)�”}”(•hŒu16”h]”hŒu16”…”�”}”(hj*êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j,êŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jôéŒ c.crc_itu_t”†”asbuh1hhj#êubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#êubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hjVêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjêubj¢)�”}”(hŒconst u8 *buffer”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjoêh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjkêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjkêubh)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hj�êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŠêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�êŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jôéŒ c.crc_itu_t”†”asbuh1hhjkêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjkêubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¹êh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjkêubj�)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hjÆêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjêubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjâêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjßêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jäêŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jôéŒ c.crc_itu_t”†”asbuh1hhjÛêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛêubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjêubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÑéh²hh³jùéh´K2ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÍéh²hh³jùéh´K2ubah}”(h]”jÈéah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jùéh´K2hjÊéh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Compute the CRC-ITU-T for the data buffer”h]”hŒ)Compute the CRC-ITU-T for the data buffer”…”�”}”(hj8ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:148: ./lib/crc/crc-itu-t.c”h´K2hj5ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÊéh²hh³jùéh´K2ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjPëjæjPëjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hŒµ**Parameters** ``u16 crc`` previous CRC value ``const u8 *buffer`` data pointer ``size_t len`` number of bytes in the buffer **Description** Returns the updated CRC value”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjZëh]”hŒ Parameters”…”�”}”(hj\ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:148: ./lib/crc/crc-itu-t.c”h´K6hjTëubj )�”}”(hhh]”(j)�”}”(hŒ``u16 crc`` previous CRC value ”h]”(j)�”}”(hŒ ``u16 crc``”h]”j)�”}”(hjyëh]”hŒu16 crc”…”�”}”(hj{ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:148: ./lib/crc/crc-itu-t.c”h´K4hjsëubj2)�”}”(hhh]”hÝ)�”}”(hŒprevious CRC value”h]”hŒprevious CRC value”…”�”}”(hj’ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŽëh´K4hj�ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjsëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽëh´K4hjpëubj)�”}”(hŒ"``const u8 *buffer`` data pointer ”h]”(j)�”}”(hŒ``const u8 *buffer``”h]”j)�”}”(hj²ëh]”hŒconst u8 *buffer”…”�”}”(hj´ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:148: ./lib/crc/crc-itu-t.c”h´K5hj¬ëubj2)�”}”(hhh]”hÝ)�”}”(hŒ data pointer”h]”hŒ data pointer”…”�”}”(hjËëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇëh´K5hjÈëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇëh´K5hjpëubj)�”}”(hŒ-``size_t len`` number of bytes in the buffer ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjëëh]”hŒ size_t len”…”�”}”(hjíëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:148: ./lib/crc/crc-itu-t.c”h´K6hjåëubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes in the buffer”h]”hŒnumber of bytes in the buffer”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jìh´K6hjìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjåëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jìh´K6hjpëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjTëubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj&ìh]”hŒ Description”…”�”}”(hj(ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:148: ./lib/crc/crc-itu-t.c”h´K8hjTëubhÝ)�”}”(hŒReturns the updated CRC value”h]”hŒReturns the updated CRC value”…”�”}”(hj<ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:148: ./lib/crc/crc-itu-t.c”h´K7hjTëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc32_le (C function)”Œ c.crc32_le”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1u32 crc32_le (u32 crc, const void *p, size_t len)”h]”j)�”}”(hŒ0u32 crc32_le(u32 crc, const void *p, size_t len)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjnìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jpìŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œcrc32_le”sbŒ c.crc32_le”†”asbuh1hhjgìh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgìh²hh³j�ìh´K ubj{)�”}”(hŒcrc32_le”h]”j�)�”}”(hjŒìh]”hŒcrc32_le”…”�”}”(hj¢ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžìubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjgìh²hh³j�ìh´K ubjœ)�”}”(hŒ$(u32 crc, const void *p, size_t len)”h]”(j¢)�”}”(hŒu32 crc”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjÀìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½ìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÂìŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŠìŒ c.crc32_le”†”asbuh1hhj¹ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹ìubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hjììh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµìubj¢)�”}”(hŒ const void *p”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjíubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj íh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjíubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj<íh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjíubj�)�”}”(hjïh]”hŒp”…”�”}”(hjIíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµìubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjdíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjaíubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jfíŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŠìŒ c.crc32_le”†”asbuh1hhj]íubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]íubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj�íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµìubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjgìh²hh³j�ìh´K ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjcìh²hh³j�ìh´K ubah}”(h]”j^ìah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�ìh´K hj`ìh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/Compute least-significant-bit-first IEEE CRC-32”h]”hŒ/Compute least-significant-bit-first IEEE CRC-32”…”�”}”(hjºíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K hj·íh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj`ìh²hh³j�ìh´K ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÒíjæjÒíjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hXx**Parameters** ``u32 crc`` Initial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally. ``const void *p`` Pointer to the data buffer ``size_t len`` Length of data in bytes **Description** This implements the CRC variant that is often known as the IEEE CRC-32, or simply CRC-32, and is widely used in Ethernet and other applications: - Polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0 - Bit order: Least-significant-bit-first - Polynomial in integer form: 0xedb88320 This does *not* invert the CRC at the beginning or end. The caller is expected to do that if it needs to. Inverting at both ends is recommended. For new applications, prefer to use CRC-32C instead. See crc32c(). **Context** Any context **Return** The new CRC value”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÜíh]”hŒ Parameters”…”�”}”(hjÞíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K hjÖíubj )�”}”(hhh]”(j)�”}”(hŒ‡``u32 crc`` Initial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally. ”h]”(j)�”}”(hŒ ``u32 crc``”h]”j)�”}”(hjûíh]”hŒu32 crc”…”�”}”(hjýíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùíubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K hjõíubj2)�”}”(hhh]”hÝ)�”}”(hŒzInitial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally.”h]”hŒzInitial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîh´K hjòíubj)�”}”(hŒ-``const void *p`` Pointer to the data buffer ”h]”(j)�”}”(hŒ``const void *p``”h]”j)�”}”(hj5îh]”hŒ const void *p”…”�”}”(hj7îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3îubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K hj/îubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the data buffer”h]”hŒPointer to the data buffer”…”�”}”(hjNîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jJîh´K hjKîubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJîh´K hjòíubj)�”}”(hŒ'``size_t len`` Length of data in bytes ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjnîh]”hŒ size_t len”…”�”}”(hjpîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlîubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K hjhîubj2)�”}”(hhh]”hÝ)�”}”(hŒLength of data in bytes”h]”hŒLength of data in bytes”…”�”}”(hj‡îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒîh´K hj„îubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjhîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒîh´K hjòíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖíubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj©îh]”hŒ Description”…”�”}”(hj«îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KhjÖíubhÝ)�”}”(hŒ�This implements the CRC variant that is often known as the IEEE CRC-32, or simply CRC-32, and is widely used in Ethernet and other applications:”h]”hŒ�This implements the CRC variant that is often known as the IEEE CRC-32, or simply CRC-32, and is widely used in Ethernet and other applications:”…”�”}”(hj¿îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KhjÖíubj›)�”}”(hhh]”(j )�”}”(hŒwPolynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0”h]”j )�”}”(hhh]”j)�”}”(hŒkPolynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0”h]”(j)�”}”(hŒIPolynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 +”h]”hŒIPolynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 +”…”�”}”(hjÜîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KhjØîubj2)�”}”(hhh]”hÝ)�”}”(hŒ!x^7 + x^5 + x^4 + x^2 + x^1 + x^0”h]”hŒ!x^7 + x^5 + x^4 + x^2 + x^1 + x^0”…”�”}”(hjîîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´Khjëîubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêîh´KhjÕîubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÑîubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÎîubj )�”}”(hŒ&Bit order: Least-significant-bit-first”h]”hÝ)�”}”(hjïh]”hŒ&Bit order: Least-significant-bit-first”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´Khjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÎîubj )�”}”(hŒ'Polynomial in integer form: 0xedb88320 ”h]”hÝ)�”}”(hŒ&Polynomial in integer form: 0xedb88320”h]”hŒ&Polynomial in integer form: 0xedb88320”…”�”}”(hj1ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´Khj-ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÎîubeh}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³jêîh´KhjÖíubhÝ)�”}”(hŒ’This does *not* invert the CRC at the beginning or end. The caller is expected to do that if it needs to. Inverting at both ends is recommended.”h]”(hŒ This does ”…”�”}”(hjLïh²hh³Nh´Nubjp‡)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hjTïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hjLïubhŒƒ invert the CRC at the beginning or end. The caller is expected to do that if it needs to. Inverting at both ends is recommended.”…”�”}”(hjLïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KhjÖíubhÝ)�”}”(hŒCFor new applications, prefer to use CRC-32C instead. See crc32c().”h]”hŒCFor new applications, prefer to use CRC-32C instead. See crc32c().”…”�”}”(hjmïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KhjÖíubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hj~ïh]”hŒContext”…”�”}”(hj€ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KhjÖíubhÝ)�”}”(hŒ Any context”h]”hŒ Any context”…”�”}”(hj”ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KhjÖíubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¥ïh]”hŒReturn”…”�”}”(hj§ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KhjÖíubhÝ)�”}”(hŒThe new CRC value”h]”hŒThe new CRC value”…”�”}”(hj»ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KhjÖíubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc32_be (C function)”Œ c.crc32_be”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1u32 crc32_be (u32 crc, const void *p, size_t len)”h]”j)�”}”(hŒ0u32 crc32_be(u32 crc, const void *p, size_t len)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjíïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jïïŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œcrc32_be”sbŒ c.crc32_be”†”asbuh1hhjæïh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K(ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæïh²hh³jðh´K(ubj{)�”}”(hŒcrc32_be”h]”j�)�”}”(hj ðh]”hŒcrc32_be”…”�”}”(hj!ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjðubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjæïh²hh³jðh´K(ubjœ)�”}”(hŒ$(u32 crc, const void *p, size_t len)”h]”(j¢)�”}”(hŒu32 crc”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj?ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<ðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jAðŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j ðŒ c.crc32_be”†”asbuh1hhj8ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj8ðubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hjkðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8ðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj4ðubj¢)�”}”(hŒ const void *p”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj„ðh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj€ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€ðubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŸðh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj€ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€ðubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj»ðh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj€ðubj�)�”}”(hjïh]”hŒp”…”�”}”(hjÈðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj€ðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj4ðubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjãðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjàðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jåðŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j ðŒ c.crc32_be”†”asbuh1hhjÜðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜðubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj4ðubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjæïh²hh³jðh´K(ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjâïh²hh³jðh´K(ubah}”(h]”jÝïah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jðh´K(hjßïh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Compute most-significant-bit-first IEEE CRC-32”h]”hŒ.Compute most-significant-bit-first IEEE CRC-32”…”�”}”(hj9ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K(hj6ñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjßïh²hh³jðh´K(ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjQñjæjQñjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hX:**Parameters** ``u32 crc`` Initial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally. ``const void *p`` Pointer to the data buffer ``size_t len`` Length of data in bytes **Description** crc32_be() is the same as crc32_le() except that crc32_be() computes the *most-significant-bit-first* variant of the CRC. I.e., within each byte, the most significant bit is processed first (treated as highest order polynomial coefficient). The same bit order is also used for the CRC value itself: - Polynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0 - Bit order: Most-significant-bit-first - Polynomial in integer form: 0x04c11db7 **Context** Any context **Return** The new CRC value”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj[ñh]”hŒ Parameters”…”�”}”(hj]ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjYñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K,hjUñubj )�”}”(hhh]”(j)�”}”(hŒ‡``u32 crc`` Initial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally. ”h]”(j)�”}”(hŒ ``u32 crc``”h]”j)�”}”(hjzñh]”hŒu32 crc”…”�”}”(hj|ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjxñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K*hjtñubj2)�”}”(hhh]”hÝ)�”}”(hŒzInitial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally.”h]”hŒzInitial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally.”…”�”}”(hj“ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K)hj�ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjtñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�ñh´K*hjqñubj)�”}”(hŒ-``const void *p`` Pointer to the data buffer ”h]”(j)�”}”(hŒ``const void *p``”h]”j)�”}”(hj´ñh]”hŒ const void *p”…”�”}”(hj¶ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K+hj®ñubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the data buffer”h]”hŒPointer to the data buffer”…”�”}”(hjÍñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÉñh´K+hjÊñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj®ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÉñh´K+hjqñubj)�”}”(hŒ'``size_t len`` Length of data in bytes ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjíñh]”hŒ size_t len”…”�”}”(hjïñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K,hjçñubj2)�”}”(hhh]”hÝ)�”}”(hŒLength of data in bytes”h]”hŒLength of data in bytes”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jòh´K,hjòubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjçñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jòh´K,hjqñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjUñubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj(òh]”hŒ Description”…”�”}”(hj*òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj&òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K.hjUñubhÝ)�”}”(hX,crc32_be() is the same as crc32_le() except that crc32_be() computes the *most-significant-bit-first* variant of the CRC. I.e., within each byte, the most significant bit is processed first (treated as highest order polynomial coefficient). The same bit order is also used for the CRC value itself:”h]”(hŒIcrc32_be() is the same as crc32_le() except that crc32_be() computes the ”…”�”}”(hj>òh²hh³Nh´Nubjp‡)�”}”(hŒ*most-significant-bit-first*”h]”hŒmost-significant-bit-first”…”�”}”(hjFòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj>òubhŒÇ variant of the CRC. I.e., within each byte, the most significant bit is processed first (treated as highest order polynomial coefficient). The same bit order is also used for the CRC value itself:”…”�”}”(hj>òh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K-hjUñubj›)�”}”(hhh]”(j )�”}”(hŒwPolynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0”h]”j )�”}”(hhh]”j)�”}”(hŒkPolynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0”h]”(j)�”}”(hŒIPolynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 +”h]”hŒIPolynomial: x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 +”…”�”}”(hjmòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K2hjiòubj2)�”}”(hhh]”hÝ)�”}”(hŒ!x^7 + x^5 + x^4 + x^2 + x^1 + x^0”h]”hŒ!x^7 + x^5 + x^4 + x^2 + x^1 + x^0”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K3hj|òubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjiòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{òh´K2hjfòubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjbòubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj_òubj )�”}”(hŒ%Bit order: Most-significant-bit-first”h]”hÝ)�”}”(hj¨òh]”hŒ%Bit order: Most-significant-bit-first”…”�”}”(hjªòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K4hj¦òubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj_òubj )�”}”(hŒ'Polynomial in integer form: 0x04c11db7 ”h]”hÝ)�”}”(hŒ&Polynomial in integer form: 0x04c11db7”h]”hŒ&Polynomial in integer form: 0x04c11db7”…”�”}”(hjÂòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K5hj¾òubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj_òubeh}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³j{òh´K2hjUñubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hjßòh]”hŒContext”…”�”}”(hjáòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝòubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K7hjUñubhÝ)�”}”(hŒ Any context”h]”hŒ Any context”…”�”}”(hjõòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K8hjUñubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjóh]”hŒReturn”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K:hjUñubhÝ)�”}”(hŒThe new CRC value”h]”hŒThe new CRC value”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K9hjUñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc32c (C function)”Œc.crc32c”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ/u32 crc32c (u32 crc, const void *p, size_t len)”h]”j)�”}”(hŒ.u32 crc32c(u32 crc, const void *p, size_t len)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjNóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKóubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jPóŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œcrc32c”sbŒc.crc32c”†”asbuh1hhjGóh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGóh²hh³joóh´K>ubj{)�”}”(hŒcrc32c”h]”j�)�”}”(hjlóh]”hŒcrc32c”…”�”}”(hj‚óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~óubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjGóh²hh³joóh´K>ubjœ)�”}”(hŒ$(u32 crc, const void *p, size_t len)”h]”(j¢)�”}”(hŒu32 crc”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¢óŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jjóŒc.crc32c”†”asbuh1hhj™óubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™óubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hjÌóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•óubj¢)�”}”(hŒ const void *p”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjåóh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjáóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáóubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjáóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáóubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjáóubj�)�”}”(hjïh]”hŒp”…”�”}”(hj)ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•óubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjDôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjAôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jFôŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jjóŒc.crc32c”†”asbuh1hhj=ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj=ôubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjpôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj=ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•óubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjGóh²hh³joóh´K>ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjCóh²hh³joóh´K>ubah}”(h]”j>óah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³joóh´K>hj@óh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCompute CRC-32C”h]”hŒCompute CRC-32C”…”�”}”(hjšôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K>hj—ôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj@óh²hh³joóh´K>ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj²ôjæj²ôjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hXD**Parameters** ``u32 crc`` Initial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally. ``const void *p`` Pointer to the data buffer ``size_t len`` Length of data in bytes **Description** This implements CRC-32C, i.e. the Castagnoli CRC. This is the recommended CRC variant to use in new applications that want a 32-bit CRC. - Polynomial: x^32 + x^28 + x^27 + x^26 + x^25 + x^23 + x^22 + x^20 + x^19 + x^18 + x^14 + x^13 + x^11 + x^10 + x^9 + x^8 + x^6 + x^0 - Bit order: Least-significant-bit-first - Polynomial in integer form: 0x82f63b78 This does *not* invert the CRC at the beginning or end. The caller is expected to do that if it needs to. Inverting at both ends is recommended. **Context** Any context **Return** The new CRC value”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¼ôh]”hŒ Parameters”…”�”}”(hj¾ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjºôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KBhj¶ôubj )�”}”(hhh]”(j)�”}”(hŒ‡``u32 crc`` Initial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally. ”h]”(j)�”}”(hŒ ``u32 crc``”h]”j)�”}”(hjÛôh]”hŒu32 crc”…”�”}”(hjÝôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K@hjÕôubj2)�”}”(hhh]”hÝ)�”}”(hŒzInitial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally.”h]”hŒzInitial CRC value. ~0 (recommended) or 0 for a new CRC computation, or the previous CRC value if computing incrementally.”…”�”}”(hjôôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´K?hjñôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðôh´K@hjÒôubj)�”}”(hŒ-``const void *p`` Pointer to the data buffer ”h]”(j)�”}”(hŒ``const void *p``”h]”j)�”}”(hjõh]”hŒ const void *p”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KAhjõubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the data buffer”h]”hŒPointer to the data buffer”…”�”}”(hj.õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j*õh´KAhj+õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j*õh´KAhjÒôubj)�”}”(hŒ'``size_t len`` Length of data in bytes ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjNõh]”hŒ size_t len”…”�”}”(hjPõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLõubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KBhjHõubj2)�”}”(hhh]”hÝ)�”}”(hŒLength of data in bytes”h]”hŒLength of data in bytes”…”�”}”(hjgõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jcõh´KBhjdõubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjHõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jcõh´KBhjÒôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¶ôubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‰õh]”hŒ Description”…”�”}”(hj‹õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‡õubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KDhj¶ôubhÝ)�”}”(hŒ‰This implements CRC-32C, i.e. the Castagnoli CRC. This is the recommended CRC variant to use in new applications that want a 32-bit CRC.”h]”hŒ‰This implements CRC-32C, i.e. the Castagnoli CRC. This is the recommended CRC variant to use in new applications that want a 32-bit CRC.”…”�”}”(hjŸõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KChj¶ôubj›)�”}”(hhh]”(j )�”}”(hŒ�Polynomial: x^32 + x^28 + x^27 + x^26 + x^25 + x^23 + x^22 + x^20 + x^19 + x^18 + x^14 + x^13 + x^11 + x^10 + x^9 + x^8 + x^6 + x^0”h]”j )�”}”(hhh]”j)�”}”(hŒƒPolynomial: x^32 + x^28 + x^27 + x^26 + x^25 + x^23 + x^22 + x^20 + x^19 + x^18 + x^14 + x^13 + x^11 + x^10 + x^9 + x^8 + x^6 + x^0”h]”(j)�”}”(hŒJPolynomial: x^32 + x^28 + x^27 + x^26 + x^25 + x^23 + x^22 + x^20 + x^19 +”h]”hŒJPolynomial: x^32 + x^28 + x^27 + x^26 + x^25 + x^23 + x^22 + x^20 + x^19 +”…”�”}”(hj¼õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KFhj¸õubj2)�”}”(hhh]”hÝ)�”}”(hŒ8x^18 + x^14 + x^13 + x^11 + x^10 + x^9 + x^8 + x^6 + x^0”h]”hŒ8x^18 + x^14 + x^13 + x^11 + x^10 + x^9 + x^8 + x^6 + x^0”…”�”}”(hjÎõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KGhjËõubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÊõh´KFhjµõubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj±õubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj®õubj )�”}”(hŒ&Bit order: Least-significant-bit-first”h]”hÝ)�”}”(hj÷õh]”hŒ&Bit order: Least-significant-bit-first”…”�”}”(hjùõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KHhjõõubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj®õubj )�”}”(hŒ'Polynomial in integer form: 0x82f63b78 ”h]”hÝ)�”}”(hŒ&Polynomial in integer form: 0x82f63b78”h]”hŒ&Polynomial in integer form: 0x82f63b78”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KIhj öubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj®õubeh}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³jÊõh´KFhj¶ôubhÝ)�”}”(hŒ’This does *not* invert the CRC at the beginning or end. The caller is expected to do that if it needs to. Inverting at both ends is recommended.”h]”(hŒ This does ”…”�”}”(hj,öh²hh³Nh´Nubjp‡)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hj4öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj,öubhŒƒ invert the CRC at the beginning or end. The caller is expected to do that if it needs to. Inverting at both ends is recommended.”…”�”}”(hj,öh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KKhj¶ôubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hjOöh]”hŒContext”…”�”}”(hjQöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMöubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KNhj¶ôubhÝ)�”}”(hŒ Any context”h]”hŒ Any context”…”�”}”(hjeöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KOhj¶ôubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjvöh]”hŒReturn”…”�”}”(hjxöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtöubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KQhj¶ôubhÝ)�”}”(hŒThe new CRC value”h]”hŒThe new CRC value”…”�”}”(hjŒöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:151: ./include/linux/crc32.h”h´KPhj¶ôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc64_be (C function)”Œ c.crc64_be”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1u64 crc64_be (u64 crc, const void *p, size_t len)”h]”j)�”}”(hŒ0u64 crc64_be(u64 crc, const void *p, size_t len)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj¾öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»öubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÀöŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œcrc64_be”sbŒ c.crc64_be”†”asbuh1hhj·öh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàöh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·öh²hh³jßöh´Kubj{)�”}”(hŒcrc64_be”h]”j�)�”}”(hjÜöh]”hŒcrc64_be”…”�”}”(hjòöh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîöubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj·öh²hh³jßöh´Kubjœ)�”}”(hŒ$(u64 crc, const void *p, size_t len)”h]”(j¢)�”}”(hŒu64 crc”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j÷Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÚöŒ c.crc64_be”†”asbuh1hhj ÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ÷ubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hj<÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷ubj¢)�”}”(hŒ const void *p”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjU÷h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjQ÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQ÷ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjp÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjQ÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQ÷ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŒ÷h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjQ÷ubj�)�”}”(hjïh]”hŒp”…”�”}”(hj™÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQ÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷ubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj´÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¶÷Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÚöŒ c.crc64_be”†”asbuh1hhj­÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­÷ubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjà÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj·öh²hh³jßöh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj³öh²hh³jßöh´Kubah}”(h]”j®öah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jßöh´Khj°öh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Calculate bitwise big-endian ECMA-182 CRC64”h]”hŒ+Calculate bitwise big-endian ECMA-182 CRC64”…”�”}”(hj øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Khjøh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj°öh²hh³jßöh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj"øjæj"øjç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hX**Parameters** ``u64 crc`` seed value for computation. 0 or (u64)~0 for a new CRC calculation, or the previous crc64 value if computing incrementally. ``const void *p`` pointer to buffer over which CRC64 is run ``size_t len`` length of buffer **p**”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj,øh]”hŒ Parameters”…”�”}”(hj.øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*øubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´K hj&øubj )�”}”(hhh]”(j)�”}”(hŒˆ``u64 crc`` seed value for computation. 0 or (u64)~0 for a new CRC calculation, or the previous crc64 value if computing incrementally. ”h]”(j)�”}”(hŒ ``u64 crc``”h]”j)�”}”(hjKøh]”hŒu64 crc”…”�”}”(hjMøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIøubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´K hjEøubj2)�”}”(hhh]”hÝ)�”}”(hŒ{seed value for computation. 0 or (u64)~0 for a new CRC calculation, or the previous crc64 value if computing incrementally.”h]”hŒ{seed value for computation. 0 or (u64)~0 for a new CRC calculation, or the previous crc64 value if computing incrementally.”…”�”}”(hjdøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´K hjaøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjEøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`øh´K hjBøubj)�”}”(hŒ<``const void *p`` pointer to buffer over which CRC64 is run ”h]”(j)�”}”(hŒ``const void *p``”h]”j)�”}”(hj…øh]”hŒ const void *p”…”�”}”(hj‡øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒøubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´K hjøubj2)�”}”(hhh]”hÝ)�”}”(hŒ)pointer to buffer over which CRC64 is run”h]”hŒ)pointer to buffer over which CRC64 is run”…”�”}”(hjžøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jšøh´K hj›øubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jšøh´K hjBøubj)�”}”(hŒ%``size_t len`` length of buffer **p**”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hj¾øh]”hŒ size_t len”…”�”}”(hjÀøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´K hj¸øubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of buffer **p**”h]”(hŒlength of buffer ”…”�”}”(hj×øh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjßøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj×øubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´K hjÔøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓøh´K hjBøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj&øubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcrc64_nvme (C function)”Œ c.crc64_nvme”hNt”auh1hýhjØh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3u64 crc64_nvme (u64 crc, const void *p, size_t len)”h]”j)�”}”(hŒ2u64 crc64_nvme(u64 crc, const void *p, size_t len)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj)ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j+ùŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ crc64_nvme”sbŒ c.crc64_nvme”†”asbuh1hhj"ùh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj"ùh²hh³jJùh´Kubj{)�”}”(hŒ crc64_nvme”h]”j�)�”}”(hjGùh]”hŒ crc64_nvme”…”�”}”(hj]ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYùubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj"ùh²hh³jJùh´Kubjœ)�”}”(hŒ$(u64 crc, const void *p, size_t len)”h]”(j¢)�”}”(hŒu64 crc”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj{ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j}ùŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jEùŒ c.crc64_nvme”†”asbuh1hhjtùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjtùubj�)�”}”(hŒcrc”h]”hŒcrc”…”�”}”(hj§ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjtùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjpùubj¢)�”}”(hŒ const void *p”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÀùh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¼ùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼ùubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÛùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¼ùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼ùubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj÷ùh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¼ùubj�)�”}”(hjïh]”hŒp”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjpùubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j!úŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jEùŒ c.crc64_nvme”†”asbuh1hhjúubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=úh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjKúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjpùubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj"ùh²hh³jJùh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjùh²hh³jJùh´Kubah}”(h]”jùah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jJùh´Khjùh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCalculate CRC64-NVME”h]”hŒCalculate CRC64-NVME”…”�”}”(hjuúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Khjrúh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjùh²hh³jJùh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�újæj�újç‰jè‰jé‰uh1jh²hhjØh³Nh´Nubjë)�”}”(hX‘**Parameters** ``u64 crc`` seed value for computation. 0 for a new CRC calculation, or the previous crc64 value if computing incrementally. ``const void *p`` pointer to buffer over which CRC64 is run ``size_t len`` length of buffer **p** **Description** This computes the CRC64 defined in the NVME NVM Command Set Specification, *including the bitwise inversion at the beginning and end*.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj—úh]”hŒ Parameters”…”�”}”(hj™úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj•úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Khj‘úubj )�”}”(hhh]”(j)�”}”(hŒ}``u64 crc`` seed value for computation. 0 for a new CRC calculation, or the previous crc64 value if computing incrementally. ”h]”(j)�”}”(hŒ ``u64 crc``”h]”j)�”}”(hj¶úh]”hŒu64 crc”…”�”}”(hj¸úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´úubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Khj°úubj2)�”}”(hhh]”hÝ)�”}”(hŒpseed value for computation. 0 for a new CRC calculation, or the previous crc64 value if computing incrementally.”h]”hŒpseed value for computation. 0 for a new CRC calculation, or the previous crc64 value if computing incrementally.”…”�”}”(hjÏúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´KhjÌúubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj°úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jËúh´Khj­úubj)�”}”(hŒ<``const void *p`` pointer to buffer over which CRC64 is run ”h]”(j)�”}”(hŒ``const void *p``”h]”j)�”}”(hjðúh]”hŒ const void *p”…”�”}”(hjòúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjîúubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Khjêúubj2)�”}”(hhh]”hÝ)�”}”(hŒ)pointer to buffer over which CRC64 is run”h]”hŒ)pointer to buffer over which CRC64 is run”…”�”}”(hj ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jûh´Khjûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjêúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jûh´Khj­úubj)�”}”(hŒ&``size_t len`` length of buffer **p** ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hj)ûh]”hŒ size_t len”…”�”}”(hj+ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Khj#ûubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of buffer **p**”h]”(hŒlength of buffer ”…”�”}”(hjBûh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjJûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjBûubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j>ûh´Khj?ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj#ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>ûh´Khj­úubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‘úubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjrûh]”hŒ Description”…”�”}”(hjtûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjpûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Khj‘úubhÝ)�”}”(hŒ†This computes the CRC64 defined in the NVME NVM Command Set Specification, *including the bitwise inversion at the beginning and end*.”h]”(hŒKThis computes the CRC64 defined in the NVME NVM Command Set Specification, ”…”�”}”(hjˆûh²hh³Nh´Nubjp‡)�”}”(hŒ:*including the bitwise inversion at the beginning and end*”h]”hŒ8including the bitwise inversion at the beginning and end”…”�”}”(hj�ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hjˆûubhŒ.”…”�”}”(hjˆûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:153: ./include/linux/crc64.h”h´Khj‘úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjØh²hh³Nh´Nubeh}”(h]”Œ crc-functions”ah ]”h"]”Œ crc functions”ah$]”h&]”uh1hµhj†žh²hh³hÊh´Kƒubh¶)�”}”(hhh]”(h»)�”}”(hŒBase 2 log and power Functions”h]”hŒBase 2 log and power Functions”…”�”}”(hj»ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¸ûh²hh³hÊh´Kœubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œis_power_of_2 (C function)”Œc.is_power_of_2”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ$bool is_power_of_2 (unsigned long n)”h]”j)�”}”(hŒ#bool is_power_of_2(unsigned long n)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjâûh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞûh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞûh²hh³jïûh´K%ubj{)�”}”(hŒ is_power_of_2”h]”j�)�”}”(hŒ is_power_of_2”h]”hŒ is_power_of_2”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþûubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÞûh²hh³jïûh´K%ubjœ)�”}”(hŒ(unsigned long n)”h]”j¢)�”}”(hŒunsigned long n”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjüubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,üh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjüubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj:üh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjüubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjüubj�)�”}”(hj�h]”hŒn”…”�”}”(hjVüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjüubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÞûh²hh³jïûh´K%ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÚûh²hh³jïûh´K%ubah}”(h]”jÕûah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jïûh´K%hj×ûh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"check if a value is a power of two”h]”hŒ"check if a value is a power of two”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K%hj|üh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj×ûh²hh³jïûh´K%ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj—üjæj—üjç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´Nubjë)�”}”(hŒæ**Parameters** ``unsigned long n`` the value to check **Description** Determine whether some value is a power of two, where zero is *not* considered a power of two. **Return** true if **n** is a power of 2, otherwise false.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¡üh]”hŒ Parameters”…”�”}”(hj£üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸüubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K)hj›üubj )�”}”(hhh]”j)�”}”(hŒ'``unsigned long n`` the value to check ”h]”(j)�”}”(hŒ``unsigned long n``”h]”j)�”}”(hjÀüh]”hŒunsigned long n”…”�”}”(hjÂüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾üubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K&hjºüubj2)�”}”(hhh]”hÝ)�”}”(hŒthe value to check”h]”hŒthe value to check”…”�”}”(hjÙüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÕüh´K&hjÖüubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjºüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕüh´K&hj·üubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj›üubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjûüh]”hŒ Description”…”�”}”(hjýüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjùüubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K(hj›üubhÝ)�”}”(hŒ^Determine whether some value is a power of two, where zero is *not* considered a power of two.”h]”(hŒ>Determine whether some value is a power of two, where zero is ”…”�”}”(hjýh²hh³Nh´Nubjp‡)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hjýubhŒ considered a power of two.”…”�”}”(hjýh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K'hj›üubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj4ýh]”hŒReturn”…”�”}”(hj6ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj2ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K*hj›üubhÝ)�”}”(hŒ/true if **n** is a power of 2, otherwise false.”h]”(hŒtrue if ”…”�”}”(hjJýh²hh³Nh´Nubjõ)�”}”(hŒ**n**”h]”hŒn”…”�”}”(hjRýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJýubhŒ" is a power of 2, otherwise false.”…”�”}”(hjJýh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K*hj›üubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!__roundup_pow_of_two (C function)”Œc.__roundup_pow_of_two”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4unsigned long __roundup_pow_of_two (unsigned long n)”h]”j)�”}”(hŒ3unsigned long __roundup_pow_of_two(unsigned long n)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‹ýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‡ýh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡ýh²hh³j™ýh´K3ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¨ýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‡ýh²hh³j™ýh´K3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡ýh²hh³j™ýh´K3ubj{)�”}”(hŒ__roundup_pow_of_two”h]”j�)�”}”(hŒ__roundup_pow_of_two”h]”hŒ__roundup_pow_of_two”…”�”}”(hjÈýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄýubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‡ýh²hh³j™ýh´K3ubjœ)�”}”(hŒ(unsigned long n)”h]”j¢)�”}”(hŒunsigned long n”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjäýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjàýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàýubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjàýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàýubj�)�”}”(hj�h]”hŒn”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjàýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÜýubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‡ýh²hh³j™ýh´K3ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjƒýh²hh³j™ýh´K3ubah}”(h]”j~ýah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j™ýh´K3hj€ýh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ round up to nearest power of two”h]”hŒ round up to nearest power of two”…”�”}”(hjEþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K3hjBþh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj€ýh²hh³j™ýh´K3ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj]þjæj]þjç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´Nubjë)�”}”(hŒ7**Parameters** ``unsigned long n`` value to round up”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjgþh]”hŒ Parameters”…”�”}”(hjiþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjeþubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K7hjaþubj )�”}”(hhh]”j)�”}”(hŒ%``unsigned long n`` value to round up”h]”(j)�”}”(hŒ``unsigned long n``”h]”j)�”}”(hj†þh]”hŒunsigned long n”…”�”}”(hjˆþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„þubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K9hj€þubj2)�”}”(hhh]”hÝ)�”}”(hŒvalue to round up”h]”hŒvalue to round up”…”�”}”(hjŸþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K4hjœþubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€þubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›þh´K9hj}þubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjaþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#__rounddown_pow_of_two (C function)”Œc.__rounddown_pow_of_two”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6unsigned long __rounddown_pow_of_two (unsigned long n)”h]”j)�”}”(hŒ5unsigned long __rounddown_pow_of_two(unsigned long n)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjàþh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÜþh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜþh²hh³jîþh´K=ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjýþh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÜþh²hh³jîþh´K=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜþh²hh³jîþh´K=ubj{)�”}”(hŒ__rounddown_pow_of_two”h]”j�)�”}”(hŒ__rounddown_pow_of_two”h]”hŒ__rounddown_pow_of_two”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÜþh²hh³jîþh´K=ubjœ)�”}”(hŒ(unsigned long n)”h]”j¢)�”}”(hŒunsigned long n”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj9ÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj5ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5ÿubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjUÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj5ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5ÿubj�)�”}”(hj�h]”hŒn”…”�”}”(hjqÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj1ÿubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÜþh²hh³jîþh´K=ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjØþh²hh³jîþh´K=ubah}”(h]”jÓþah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jîþh´K=hjÕþh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"round down to nearest power of two”h]”hŒ"round down to nearest power of two”…”�”}”(hjšÿh²hh³Nh´Nubah}”(•h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K=hj—ÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÕþh²hh³jîþh´K=ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj²ÿjæj²ÿjç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´Nubjë)�”}”(hŒ9**Parameters** ``unsigned long n`` value to round down”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¼ÿh]”hŒ Parameters”…”�”}”(hj¾ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjºÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KAhj¶ÿubj )�”}”(hhh]”j)�”}”(hŒ'``unsigned long n`` value to round down”h]”(j)�”}”(hŒ``unsigned long n``”h]”j)�”}”(hjÛÿh]”hŒunsigned long n”…”�”}”(hjÝÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KChjÕÿubj2)�”}”(hhh]”hÝ)�”}”(hŒvalue to round down”h]”hŒvalue to round down”…”�”}”(hjôÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K>hjñÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðÿh´KChjÒÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¶ÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œconst_ilog2 (C macro)”Œ c.const_ilog2”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ const_ilog2”h]”j)�”}”(hŒ const_ilog2”h]”j{)�”}”(hŒ const_ilog2”h]”j�)�”}”(hj/h]”hŒ const_ilog2”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj1h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KGubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj-h²hh³jLh´KGubah}”(h]”j(ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jLh´KGhj*h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj*h²hh³jLh´KGubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjejæjejç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´NubhÝ)�”}”(hŒ``const_ilog2 (n)``”h]”j)�”}”(hjkh]”hŒconst_ilog2 (n)”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KIhj¸ûh²hubj•)�”}”(hŒ9log base 2 of 32-bit or a 64-bit constant unsigned value ”h]”hÝ)�”}”(hŒ8log base 2 of 32-bit or a 64-bit constant unsigned value”h]”hŒ8log base 2 of 32-bit or a 64-bit constant unsigned value”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KGhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j“h´KGhj¸ûh²hubjë)�”}”(hŒ…**Parameters** ``n`` parameter **Description** Use this where sparse expects a true constant expression, e.g. for array indices.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KKhjšubj )�”}”(hhh]”j)�”}”(hŒ``n`` parameter ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hj¿h]”hŒn”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KHhj¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒ parameter”h]”hŒ parameter”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔh´KHhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔh´KHhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjšubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjúh]”hŒ Description”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KJhjšubhÝ)�”}”(hŒQUse this where sparse expects a true constant expression, e.g. for array indices.”h]”hŒQUse this where sparse expects a true constant expression, e.g. for array indices.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KIhjšubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œilog2 (C macro)”Œc.ilog2”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒilog2”h]”j)�”}”(hŒilog2”h]”j{)�”}”(hŒilog2”h]”j�)�”}”(hj9h]”hŒilog2”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj;h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K“ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj7h²hh³jVh´K“ubah}”(h]”j2ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jVh´K“hj4h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj4h²hh³jVh´K“ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjojæjojç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´NubhÝ)�”}”(hŒ ``ilog2 (n)``”h]”j)�”}”(hjuh]”hŒ ilog2 (n)”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K•hj¸ûh²hubj•)�”}”(hŒ0log base 2 of 32-bit or a 64-bit unsigned value ”h]”hÝ)�”}”(hŒ/log base 2 of 32-bit or a 64-bit unsigned value”h]”hŒ/log base 2 of 32-bit or a 64-bit unsigned value”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K“hj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j�h´K“hj¸ûh²hubjë)�”}”(hX**Parameters** ``n`` parameter **Description** constant-capable log of base 2 calculation - this can be used to initialise global variables from constant data, hence the massive ternary operator construction selects the appropriately-sized optimised version depending on sizeof(n)”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjªh]”hŒ Parameters”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K—hj¤ubj )�”}”(hhh]”j)�”}”(hŒ``n`` parameter ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hjÉh]”hŒn”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K”hjÃubj2)�”}”(hhh]”hÝ)�”}”(hŒ parameter”h]”hŒ parameter”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÞh´K”hjßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞh´K”hjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¤ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K–hj¤ubhÝ)�”}”(hŒ constant-capable log of base 2 calculation - this can be used to initialise global variables from constant data, hence the massive ternary operator construction”h]”hŒ constant-capable log of base 2 calculation - this can be used to initialise global variables from constant data, hence the massive ternary operator construction”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K•hj¤ubhÝ)�”}”(hŒHselects the appropriately-sized optimised version depending on sizeof(n)”h]”hŒHselects the appropriately-sized optimised version depending on sizeof(n)”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K™hj¤ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œroundup_pow_of_two (C macro)”Œc.roundup_pow_of_two”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒroundup_pow_of_two”h]”j)�”}”(hŒroundup_pow_of_two”h]”j{)�”}”(hŒroundup_pow_of_two”h]”j�)�”}”(hjRh]”hŒroundup_pow_of_two”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjTh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K§ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjPh²hh³joh´K§ubah}”(h]”jKah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³joh´K§hjMh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjMh²hh³joh´K§ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjˆjæjˆjç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´NubhÝ)�”}”(hŒ``roundup_pow_of_two (n)``”h]”j)�”}”(hjŽh]”hŒroundup_pow_of_two (n)”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K©hj¸ûh²hubj•)�”}”(hŒ1round the given value up to nearest power of two ”h]”hÝ)�”}”(hŒ0round the given value up to nearest power of two”h]”hŒ0round the given value up to nearest power of two”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K§hj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¶h´K§hj¸ûh²hubjë)�”}”(hŒÓ**Parameters** ``n`` parameter **Description** round the given value up to the nearest power of two - the result is undefined when n == 0 - this can be used to initialise global variables from constant data”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÃh]”hŒ Parameters”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K«hj½ubj )�”}”(hhh]”j)�”}”(hŒ``n`` parameter ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hjâh]”hŒn”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K¨hjÜubj2)�”}”(hhh]”hÝ)�”}”(hŒ parameter”h]”hŒ parameter”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷h´K¨hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷h´K¨hjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj½ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Kªhj½ubhÝ)�”}”(hŒŸround the given value up to the nearest power of two - the result is undefined when n == 0 - this can be used to initialise global variables from constant data”h]”hŒŸround the given value up to the nearest power of two - the result is undefined when n == 0 - this can be used to initialise global variables from constant data”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K©hj½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrounddown_pow_of_two (C macro)”Œc.rounddown_pow_of_two”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrounddown_pow_of_two”h]”j)�”}”(hŒrounddown_pow_of_two”h]”j{)�”}”(hŒrounddown_pow_of_two”h]”j�)�”}”(hj\h]”hŒrounddown_pow_of_two”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj^h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K¸ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjZh²hh³jyh´K¸ubah}”(h]”jUah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jyh´K¸hjWh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjWh²hh³jyh´K¸ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj’jæj’jç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´NubhÝ)�”}”(hŒ``rounddown_pow_of_two (n)``”h]”j)�”}”(hj˜h]”hŒrounddown_pow_of_two (n)”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Kºhj¸ûh²hubj•)�”}”(hŒ3round the given value down to nearest power of two ”h]”hÝ)�”}”(hŒ2round the given value down to nearest power of two”h]”hŒ2round the given value down to nearest power of two”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K¸hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÀh´K¸hj¸ûh²hubjë)�”}”(hŒÕ**Parameters** ``n`` parameter **Description** round the given value down to the nearest power of two - the result is undefined when n == 0 - this can be used to initialise global variables from constant data”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÍh]”hŒ Parameters”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K¼hjÇubj )�”}”(hhh]”j)�”}”(hŒ``n`` parameter ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hjìh]”hŒn”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K¹hjæubj2)�”}”(hhh]”hÝ)�”}”(hŒ parameter”h]”hŒ parameter”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´K¹hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´K¹hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÇubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj'h]”hŒ Description”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´K»hjÇubhÝ)�”}”(hŒ¡round the given value down to the nearest power of two - the result is undefined when n == 0 - this can be used to initialise global variables from constant data”h]”hŒ¡round the given value down to the nearest power of two - the result is undefined when n == 0 - this can be used to initialise global variables from constant data”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KºhjÇubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œorder_base_2 (C macro)”Œc.order_base_2”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ order_base_2”h]”j)�”}”(hŒ order_base_2”h]”j{)�”}”(hŒ order_base_2”h]”j�)�”}”(hjfh]”hŒ order_base_2”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjhh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KÍubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjdh²hh³jƒh´KÍubah}”(h]”j_ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jƒh´KÍhjah²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjah²hh³jƒh´KÍubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjœjæjœjç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´NubhÝ)�”}”(hŒ``order_base_2 (n)``”h]”j)�”}”(hj¢h]”hŒorder_base_2 (n)”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KÏhj¸ûh²hubj•)�”}”(hŒ8calculate the (rounded up) base 2 order of the argument ”h]”hÝ)�”}”(hŒ7calculate the (rounded up) base 2 order of the argument”h]”hŒ7calculate the (rounded up) base 2 order of the argument”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KÍhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÊh´KÍhj¸ûh²hubjë)�”}”(hŒ¼**Parameters** ``n`` parameter **Description** The first few values calculated by this routine: ob2(0) = 0 ob2(1) = 0 ob2(2) = 1 ob2(3) = 2 ob2(4) = 2 ob2(5) = 3 ... and so on.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj×h]”hŒ Parameters”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KÑhjÑubj )�”}”(hhh]”j)�”}”(hŒ``n`` parameter ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hjöh]”hŒn”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KÎhjðubj2)�”}”(hhh]”hÝ)�”}”(hŒ parameter”h]”hŒ parameter”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´KÎhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´KÎhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÑubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj1h]”hŒ Description”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KÐhjÑubj )�”}”(hhh]”j)�”}”(hŒ�The first few values calculated by this routine: ob2(0) = 0 ob2(1) = 0 ob2(2) = 1 ob2(3) = 2 ob2(4) = 2 ob2(5) = 3 ... and so on.”h]”(j)�”}”(hŒ0The first few values calculated by this routine:”h]”hŒ0The first few values calculated by this routine:”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KÕhjJubj2)�”}”(hhh]”hÝ)�”}”(hŒPob2(0) = 0 ob2(1) = 0 ob2(2) = 1 ob2(3) = 2 ob2(4) = 2 ob2(5) = 3 ... and so on.”h]”hŒPob2(0) = 0 ob2(1) = 0 ob2(2) = 1 ob2(3) = 2 ob2(4) = 2 ob2(5) = 3 ... and so on.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KÐhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j\h´KÕhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÑubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbits_per (C macro)”Œ c.bits_per”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒbits_per”h]”j)�”}”(hŒbits_per”h]”j{)�”}”(hŒbits_per”h]”j�)�”}”(hj›h]”hŒbits_per”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Kìubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj™h²hh³j¸h´Kìubah}”(h]”j”ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¸h´Kìhj–h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj–h²hh³j¸h´Kìubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÑjæjÑjç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´NubhÝ)�”}”(hŒ``bits_per (n)``”h]”j)�”}”(hj×h]”hŒ bits_per (n)”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Kîhj¸ûh²hubj•)�”}”(hŒ7calculate the number of bits required for the argument ”h]”hÝ)�”}”(hŒ6calculate the number of bits required for the argument”h]”hŒ6calculate the number of bits required for the argument”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Kìhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÿh´Kìhj¸ûh²hubjë)�”}”(hX**Parameters** ``n`` parameter **Description** This is constant-capable and can be used for compile time initializations, e.g bitfields. The first few values calculated by this routine: bf(0) = 1 bf(1) = 1 bf(2) = 2 bf(3) = 2 bf(4) = 3 ... and so on.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Kðhjubj )�”}”(hhh]”j)�”}”(hŒ``n`` parameter ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hj+h]”hŒn”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Kíhj%ubj2)�”}”(hhh]”hÝ)�”}”(hŒ parameter”h]”hŒ parameter”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@h´KíhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@h´Kíhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjfh]”hŒ Description”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KïhjubhÝ)�”}”(hŒYThis is constant-capable and can be used for compile time initializations, e.g bitfields.”h]”hŒYThis is constant-capable and can be used for compile time initializations, e.g bitfields.”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´KîhjubhÝ)�”}”(hŒqThe first few values calculated by this routine: bf(0) = 1 bf(1) = 1 bf(2) = 2 bf(3) = 2 bf(4) = 3 ... and so on.”h]”hŒqThe first few values calculated by this routine: bf(0) = 1 bf(1) = 1 bf(2) = 2 bf(3) = 2 bf(4) = 3 ... and so on.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Kñhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"max_pow_of_two_factor (C function)”Œc.max_pow_of_two_factor”hNt”auh1hýhj¸ûh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3unsigned int max_pow_of_two_factor (unsigned int n)”h]”j)�”}”(hŒ2unsigned int max_pow_of_two_factor(unsigned int n)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶h²hh³jÈh´Mubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶h²hh³jÈh´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶h²hh³jÈh´Mubj{)�”}”(hŒmax_pow_of_two_factor”h]”j�)�”}”(hŒmax_pow_of_two_factor”h]”hŒmax_pow_of_two_factor”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¶h²hh³jÈh´Mubjœ)�”}”(hŒ(unsigned int n)”h]”j¢)�”}”(hŒunsigned int n”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hj�h]”hŒn”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¶h²hh³jÈh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj²h²hh³jÈh´Mubah}”(h]”j­ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÈh´Mhj¯h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ return highest power-of-2 factor”h]”hŒ return highest power-of-2 factor”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Mhjqh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¯h²hh³jÈh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŒjæjŒjç‰jè‰jé‰uh1jh²hhj¸ûh³Nh´Nubjë)�”}”(hŒ™**Parameters** ``unsigned int n`` parameter **Description** find highest power-of-2 which is evenly divisible into n. 0 is returned for n == 0 or 1.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj–h]”hŒ Parameters”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Mhj�ubj )�”}”(hhh]”j)�”}”(hŒ``unsigned int n`` parameter ”h]”(j)�”}”(hŒ``unsigned int n``”h]”j)�”}”(hjµh]”hŒunsigned int n”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Mhj¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒ parameter”h]”hŒ parameter”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÊh´MhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÊh´Mhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjðh]”hŒ Description”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Mhj�ubhÝ)�”}”(hŒXfind highest power-of-2 which is evenly divisible into n. 0 is returned for n == 0 or 1.”h]”hŒXfind highest power-of-2 which is evenly divisible into n. 0 is returned for n == 0 or 1.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:158: ./include/linux/log2.h”h´Mhj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¸ûh²hh³Nh´Nubeh}”(h]”Œbase-2-log-and-power-functions”ah ]”h"]”Œbase 2 log and power functions”ah$]”h&]”uh1hµhj†žh²hh³hÊh´Kœubh¶)�”}”(hhh]”(h»)�”}”(hŒInteger log and power Functions”h]”hŒInteger log and power Functions”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj$h²hh³hÊh´K¢ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œintlog2 (C function)”Œ c.intlog2”hNt”auh1hýhj$h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ unsigned int intlog2 (u32 value)”h]”j)�”}”(hŒunsigned int intlog2(u32 value)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjJh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJh²hh³j\h´Kubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjJh²hh³j\h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJh²hh³j\h´Kubj{)�”}”(hŒintlog2”h]”j�)�”}”(hŒintlog2”h]”hŒintlog2”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjJh²hh³j\h´Kubjœ)�”}”(hŒ (u32 value)”h]”j¢)�”}”(hŒ u32 value”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¬Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�sbŒ c.intlog2”†”asbuh1hhj£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£ubj�)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŸubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjJh²hh³j\h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjFh²hh³j\h´Kubah}”(h]”jAah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j\h´KhjCh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ?computes log2 of a value; the result is shifted left by 24 bits”h]”hŒ?computes log2 of a value; the result is shifted left by 24 bits”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Khjÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjCh²hh³j\h´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj jæj jç‰jè‰jé‰uh1jh²hhj$h³Nh´Nubjë)�”}”(hX�**Parameters** ``u32 value`` The value (must be != 0) **Description** to use rational values you can use the following method: intlog2(value) = intlog2(value * 2^x) - x * 2^24 Some usecase examples: intlog2(8) will give 3 << 24 = 3 * 2^24 intlog2(9) will give 3 << 24 + ... = 3.16... * 2^24 intlog2(1.5) = intlog2(3) - 2^24 = 0.584... * 2^24 **Return** log2(value) * 2^24”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj$ h]”hŒ Parameters”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Khj ubj )�”}”(hhh]”j)�”}”(hŒ'``u32 value`` The value (must be != 0) ”h]”(j)�”}”(hŒ ``u32 value``”h]”j)�”}”(hjC h]”hŒ u32 value”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjA ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Khj= ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe value (must be != 0)”h]”hŒThe value (must be != 0)”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jX h´KhjY ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj= ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jX h´Khj: ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj~ h]”hŒ Description”…”�”}”(hj€ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj| ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Khj ubhÝ)�”}”(hŒ8to use rational values you can use the following method:”h]”hŒ8to use rational values you can use the following method:”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Khj ubj•)�”}”(hŒ1intlog2(value) = intlog2(value * 2^x) - x * 2^24 ”h]”hÝ)�”}”(hŒ0intlog2(value) = intlog2(value * 2^x) - x * 2^24”h]”hŒ0intlog2(value) = intlog2(value * 2^x) - x * 2^24”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Khj£ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jµ h´Khj ubhÝ)�”}”(hŒSome usecase examples:”h]”hŒSome usecase examples:”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Khj ubj•)�”}”(hŒ‘intlog2(8) will give 3 << 24 = 3 * 2^24 intlog2(9) will give 3 << 24 + ... = 3.16... * 2^24 intlog2(1.5) = intlog2(3) - 2^24 = 0.584... * 2^24 ”h]”(hÝ)�”}”(hŒ'intlog2(8) will give 3 << 24 = 3 * 2^24”h]”hŒ'intlog2(8) will give 3 << 24 = 3 * 2^24”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´KhjË ubhÝ)�”}”(hŒ3intlog2(9) will give 3 << 24 + ... = 3.16... * 2^24”h]”hŒ3intlog2(9) will give 3 << 24 + ... = 3.16... * 2^24”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´KhjË ubhÝ)�”}”(hŒ2intlog2(1.5) = intlog2(3) - 2^24 = 0.584... * 2^24”h]”hŒ2intlog2(1.5) = intlog2(3) - 2^24 = 0.584... * 2^24”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´KhjË ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÝ h´Khj ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj h]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Khj ubhÝ)�”}”(hŒlog2(value) * 2^24”h]”hŒlog2(value) * 2^24”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´Khj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj$h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œintlog10 (C function)”Œ c.intlog10”hNt”auh1hýhj$h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ!unsigned int intlog10 (u32 value)”h]”j)�”}”(hŒ unsigned int intlog10(u32 value)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjI h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjE h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjE h²hh³jW h´K$ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjE h²hh³jW h´K$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjE h²hh³jW h´K$ubj{)�”}”(hŒintlog10”h]”j�)�”}”(hŒintlog10”h]”hŒintlog10”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚ ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjE h²hh³jW h´K$ubjœ)�”}”(hŒ (u32 value)”h]”j¢)�”}”(hŒ u32 value”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j§ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jˆ sbŒ c.intlog10”†”asbuh1hhjž ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž ubj�)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjž ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjš ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjE h²hh³jW h´K$ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjA h²hh³jW h´K$ubah}”(h]”j< ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jW h´K$hj> h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ@computes log10 of a value; the result is shifted left by 24 bits”h]”hŒ@computes log10 of a value; the result is shifted left by 24 bits”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K$hjú h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj> h²hh³jW h´K$ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj jæj jç‰jè‰jé‰uh1jh²hhj$h³Nh´Nubjë)�”}”(hX’**Parameters** ``u32 value`` The value (must be != 0) **Description** to use rational values you can use the following method: intlog10(value) = intlog10(value * 10^x) - x * 2^24 An usecase example: intlog10(1000) will give 3 << 24 = 3 * 2^24 due to the implementation intlog10(1000) might be not exactly 3 * 2^24 look at intlog2 for similar examples **Return** log10(value) * 2^24”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K(hj ubj )�”}”(hhh]”j)�”}”(hŒ'``u32 value`` The value (must be != 0) ”h]”(j)�”}”(hŒ ``u32 value``”h]”j)�”}”(hj> h]”hŒ u32 value”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K&hj8 ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe value (must be != 0)”h]”hŒThe value (must be != 0)”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jS h´K&hjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jS h´K&hj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjy h]”hŒ Description”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K(hj ubhÝ)�”}”(hŒ8to use rational values you can use the following method:”h]”hŒ8to use rational values you can use the following method:”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K'hj ubj•)�”}”(hŒ4intlog10(value) = intlog10(value * 10^x) - x * 2^24 ”h]”hÝ)�”}”(hŒ3intlog10(value) = intlog10(value * 10^x) - x * 2^24”h]”hŒ3intlog10(value) = intlog10(value * 10^x) - x * 2^24”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K)hjž ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j° h´K)hj ubhÝ)�”}”(hŒAn usecase example:”h]”hŒAn usecase example:”…”�”}”(hj· h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K+hj ubj•)�”}”(hŒw intlog10(1000) will give 3 << 24 = 3 * 2^24 due to the implementation intlog10(1000) might be not exactly 3 * 2^24 ”h]”(j•)�”}”(hŒ,intlog10(1000) will give 3 << 24 = 3 * 2^24 ”h]”hÝ)�”}”(hŒ+intlog10(1000) will give 3 << 24 = 3 * 2^24”h]”hŒ+intlog10(1000) will give 3 << 24 = 3 * 2^24”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K-hjÊ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÜ h´K-hjÆ ubhÝ)�”}”(hŒFdue to the implementation intlog10(1000) might be not exactly 3 * 2^24”h]”hŒFdue to the implementation intlog10(1000) might be not exactly 3 * 2^24”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K/hjÆ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÜ h´K-hj ubhÝ)�”}”(hŒ$look at intlog2 for similar examples”h]”hŒ$look at intlog2 for similar examples”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K1hj ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj h]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K3hj ubhÝ)�”}”(hŒlog10(value) * 2^24”h]”hŒlog10(value) * 2^24”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:164: ./include/linux/int_log.h”h´K4hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj$h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œint_pow (C function)”Œ c.int_pow”hNt”auh1hýhj$h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(u64 int_pow (u64 base, unsigned int exp)”h]”j)�”}”(hŒ'u64 int_pow(u64 base, unsigned int exp)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjQ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jS Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œint_pow”sbŒ c.int_pow”†”asbuh1hhjJ h²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:166: ./lib/math/int_pow.c”h´K ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ h²hh³jr h´K ubj{)�”}”(hŒint_pow”h]”j�)�”}”(hjo h]”hŒint_pow”…”�”}”(hj… h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj� ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjJ h²hh³jr h´K ubjœ)�”}”(hŒ(u64 base, unsigned int exp)”h]”(j¢)�”}”(hŒu64 base”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj  ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¥ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jm Œ c.int_pow”†”asbuh1hhjœ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœ ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj˜ ubj¢)�”}”(hŒunsigned int exp”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjä ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjä ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjä ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjä ubj�)�”}”(hŒexp”h]”hŒexp”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjä ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj˜ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjJ h²hh³jr h´K ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjF h²hh³jr h´K ubah}”(h]”jA ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jr h´K hjC h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ:computes the exponentiation of the given base and exponent”h]”hŒ:computes the exponentiation of the given base and exponent”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:166: ./lib/math/int_pow.c”h´K hjG h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjC h²hh³jr h´K ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjb jæjb jç‰jè‰jé‰uh1jh²hhj$h³Nh´Nubjë)�”}”(hŒÏ**Parameters** ``u64 base`` base which will be raised to the given power ``unsigned int exp`` power to be raised to **Description** Computes: pow(base, exp), i.e. **base** raised to the **exp** power”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjl h]”hŒ Parameters”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:166: ./lib/math/int_pow.c”h´Khjf ubj )�”}”(hhh]”(j)�”}”(hŒ:``u64 base`` base which will be raised to the given power ”h]”(j)�”}”(hŒ ``u64 base``”h]”j)�”}”(hj‹ h]”hŒu64 base”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‰ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:166: ./lib/math/int_pow.c”h´Khj… ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,base which will be raised to the given power”h]”hŒ,base which will be raised to the given power”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j  h´Khj¡ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj… ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j  h´Khj‚ ubj)�”}”(hŒ+``unsigned int exp`` power to be raised to ”h]”(j)�”}”(hŒ``unsigned int exp``”h]”j)�”}”(hjÄ h]”hŒunsigned int exp”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:166: ./lib/math/int_pow.c”h´Khj¾ ubj2)�”}”(hhh]”hÝ)�”}”(hŒpower to be raised to”h]”hŒpower to be raised to”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÙ h´KhjÚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¾ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÙ h´Khj‚ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjf ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÿ h]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjý ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:166: ./lib/math/int_pow.c”h´Khjf ubhÝ)�”}”(hŒCComputes: pow(base, exp), i.e. **base** raised to the **exp** power”h]”(hŒComputes: pow(base, exp), i.e. ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**base**”h]”hŒbase”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ raised to the ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**exp**”h]”hŒexp”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ power”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:166: ./lib/math/int_pow.c”h´Khjf ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj$h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œint_sqrt (C function)”Œ c.int_sqrt”hNt”auh1hýhj$h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(unsigned long int_sqrt (unsigned long x)”h]”j)�”}”(hŒ'unsigned long int_sqrt(unsigned long x)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdh²hh³jvh´Kubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdh²hh³jvh´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdh²hh³jvh´Kubj{)�”}”(hŒint_sqrt”h]”j�)�”}”(hŒint_sqrt”h]”hŒint_sqrt”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjdh²hh³jvh´Kubjœ)�”}”(hŒ(unsigned long x)”h]”j¢)�”}”(hŒunsigned long x”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½ubj�)�”}”(hjÙh]”hŒx”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¹ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjdh²hh³jvh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj`h²hh³jvh´Kubah}”(h]”j[ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jvh´Khj]h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ computes the integer square root”h]”hŒ computes the integer square root”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´Khjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj]h²hh³jvh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj:jæj:jç‰jè‰jé‰uh1jh²hhj$h³Nh´Nubjë)�”}”(hŒw**Parameters** ``unsigned long x`` integer of which to calculate the sqrt **Description** Computes: floor(sqrt(x))”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjDh]”hŒ Parameters”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´Khj>ubj )�”}”(hhh]”j)�”}”(hŒ;``unsigned long x`` integer of which to calculate the sqrt ”h]”(j)�”}”(hŒ``unsigned long x``”h]”j)�”}”(hjch]”hŒunsigned long x”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´Khj]ubj2)�”}”(hhh]”hÝ)�”}”(hŒ&integer of which to calculate the sqrt”h]”hŒ&integer of which to calculate the sqrt”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jxh´Khjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jxh´KhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj>ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjžh]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´Khj>ubhÝ)�”}”(hŒComputes: floor(sqrt(x))”h]”hŒComputes: floor(sqrt(x))”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´Khj>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj$h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œint_sqrt64 (C function)”Œ c.int_sqrt64”hNt”auh1hýhj$h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒu32 int_sqrt64 (u64 x)”h]”j)�”}”(hŒu32 int_sqrt64(u64 x)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jèŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ int_sqrt64”sbŒ c.int_sqrt64”†”asbuh1hhjßh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´K-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjßh²hh³jh´K-ubj{)�”}”(hŒ int_sqrt64”h]”j�)�”}”(hjh]”hŒ int_sqrt64”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjßh²hh³jh´K-ubjœ)�”}”(hŒ(u64 x)”h]”j¢)�”}”(hŒu64 x”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j:Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒ c.int_sqrt64”†”asbuh1hhj1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1ubj�)�”}”(hjÙh]”hŒx”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjßh²hh³jh´K-ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÛh²hh³jh´K-ubah}”(h]”jÖah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´K-hjØh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒGstrongly typed int_sqrt function when minimum 64 bit input is expected.”h]”hŒGstrongly typed int_sqrt function when minimum 64 bit input is expected.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´K-hjŠh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjØh²hh³jh´K-ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¥jæj¥jç‰jè‰jé‰uh1jh²hhj$h³Nh´Nubjë)�”}”(hŒH**Parameters** ``u64 x`` 64bit integer of which to calculate the sqrt”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¯h]”hŒ Parameters”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´K1hj©ubj )�”}”(hhh]”j)�”}”(hŒ6``u64 x`` 64bit integer of which to calculate the sqrt”h]”(j)�”}”(hŒ ``u64 x``”h]”j)�”}”(hjÎh]”hŒu64 x”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´K3hjÈubj2)�”}”(hhh]”hÝ)�”}”(hŒ,64bit integer of which to calculate the sqrt”h]”hŒ,64bit integer of which to calculate the sqrt”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:169: ./lib/math/int_sqrt.c”h´K/hjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãh´K3hjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj©ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj$h²hh³Nh´Nubeh}”(h]”Œinteger-log-and-power-functions”ah ]”h"]”Œinteger log and power functions”ah$]”h&]”uh1hµhj†žh²hh³hÊh´K¢ubh¶)�”}”(hhh]”(h»)�”}”(hŒDivision Functions”h]”hŒDivision Functions”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjh²hh³hÊh´K­ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdo_div (C macro)”Œc.do_div”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒdo_div”h]”j)�”}”(hŒdo_div”h]”j{)�”}”(hŒdo_div”h]”j�)�”}”(hj;h]”hŒdo_div”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjAubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj=h²hh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj9h²hh³jXh´K ubah}”(h]”j4ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jXh´K hj6h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj6h²hh³jXh´K ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjqjæjqjç‰jè‰jé‰uh1jh²hhjh³Nh´NubhÝ)�”}”(hŒ``do_div (n, base)``”h]”j)�”}”(hjwh]”hŒdo_div (n, base)”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K"hjh²hubj•)�”}”(hŒ>returns 2 values: calculate remainder and update new dividend ”h]”hÝ)�”}”(hŒ=returns 2 values: calculate remainder and update new dividend”h]”hŒ=returns 2 values: calculate remainder and update new dividend”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jŸh´K hjh²hubjë)�”}”(hX**Parameters** ``n`` uint64_t dividend (will be updated) ``base`` uint32_t divisor **Description** Summary: ``uint32_t remainder = n % base;`` ``n = n / base;`` **Return** (uint32_t)remainder **NOTE** macro parameter **n** is evaluated multiple times, beware of side effects!”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¬h]”hŒ Parameters”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K$hj¦ubj )�”}”(hhh]”(j)�”}”(hŒ*``n`` uint64_t dividend (will be updated) ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hjËh]”hŒn”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K!hjÅubj2)�”}”(hhh]”hÝ)�”}”(hŒ#uint64_t dividend (will be updated)”h]”hŒ#uint64_t dividend (will be updated)”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jàh´K!hjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jàh´K!hjÂubj)�”}”(hŒ``base`` uint32_t divisor ”h]”(j)�”}”(hŒ``base``”h]”j)�”}”(hjh]”hŒbase”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K"hjþubj2)�”}”(hhh]”hÝ)�”}”(hŒuint32_t divisor”h]”hŒuint32_t divisor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´K"hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´K"hjÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¦ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj?h]”hŒ Description”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K$hj¦ubhÝ)�”}”(hŒ=Summary: ``uint32_t remainder = n % base;`` ``n = n / base;``”h]”(hŒ Summary: ”…”�”}”(hjUh²hh³Nh´Nubj)�”}”(hŒ"``uint32_t remainder = n % base;``”h]”hŒuint32_t remainder = n % base;”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubhŒ ”…”�”}”(hjUh²hh³Nh´Nubj)�”}”(hŒ``n = n / base;``”h]”hŒ n = n / base;”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K#hj¦ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj†h]”hŒReturn”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K'hj¦ubhÝ)�”}”(hŒ(uint32_t)remainder”h]”hŒ(uint32_t)remainder”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K(hj¦ubhÝ)�”}”(hŒ**NOTE**”h]”jõ)�”}”(hj­h]”hŒNOTE”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K*hj¦ubhÝ)�”}”(hŒJmacro parameter **n** is evaluated multiple times, beware of side effects!”h]”(hŒmacro parameter ”…”�”}”(hjÃh²hh³Nh´Nubjõ)�”}”(hŒ**n**”h]”hŒn”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃubhŒ5 is evaluated multiple times, beware of side effects!”…”�”}”(hjÃh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ`/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:175: ./include/asm-generic/div64.h”h´K*hj¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdiv_u64_rem (C function)”Œ c.div_u64_rem”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;u64 div_u64_rem (u64 dividend, u32 divisor, u32 *remainder)”h]”j)�”}”(hŒ:u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ div_u64_rem”sbŒ c.div_u64_rem”†”asbuh1hhjh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³j(h´Kubj{)�”}”(hŒ div_u64_rem”h]”j�)�”}”(hj%h]”hŒ div_u64_rem”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjh²hh³j(h´Kubjœ)�”}”(hŒ+(u64 dividend, u32 divisor, u32 *remainder)”h]”(j¢)�”}”(hŒ u64 dividend”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j[Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j#Œ c.div_u64_rem”†”asbuh1hhjRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRubj�)�”}”(hŒdividend”h]”hŒdividend”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjNubj¢)�”}”(hŒ u32 divisor”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j£Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j#Œ c.div_u64_rem”†”asbuh1hhjšubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšubj�)�”}”(hŒdivisor”h]”hŒdivisor”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjNubj¢)�”}”(hŒu32 *remainder”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jëŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j#Œ c.div_u64_rem”†”asbuh1hhjâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâubj�)�”}”(hŒ remainder”h]”hŒ remainder”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjNubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³j(h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjüh²hh³j(h´Kubah}”(h]”j÷ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j(h´Khjùh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7unsigned 64bit divide with 32bit divisor with remainder”h]”hŒ7unsigned 64bit divide with 32bit divisor with remainder”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KhjIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjùh²hh³j(h´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjdjæjdjç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hXA**Parameters** ``u64 dividend`` unsigned 64bit dividend ``u32 divisor`` unsigned 32bit divisor ``u32 *remainder`` pointer to unsigned 32bit remainder **Return** sets ``*remainder``, then returns dividend / divisor **Description** This is commonly provided by 32bit archs to provide an optimized 64bit divide.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjnh]”hŒ Parameters”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjluba•h}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Khjhubj )�”}”(hhh]”(j)�”}”(hŒ)``u64 dividend`` unsigned 64bit dividend ”h]”(j)�”}”(hŒ``u64 dividend``”h]”j)�”}”(hj�h]”hŒ u64 dividend”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Khj‡ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit dividend”h]”hŒunsigned 64bit dividend”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¢h´Khj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¢h´Khj„ubj)�”}”(hŒ'``u32 divisor`` unsigned 32bit divisor ”h]”(j)�”}”(hŒ``u32 divisor``”h]”j)�”}”(hjÆh]”hŒ u32 divisor”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KhjÀubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 32bit divisor”h]”hŒunsigned 32bit divisor”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÛh´KhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛh´Khj„ubj)�”}”(hŒ7``u32 *remainder`` pointer to unsigned 32bit remainder ”h]”(j)�”}”(hŒ``u32 *remainder``”h]”j)�”}”(hjÿh]”hŒu32 *remainder”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Khjùubj2)�”}”(hhh]”hÝ)�”}”(hŒ#pointer to unsigned 32bit remainder”h]”hŒ#pointer to unsigned 32bit remainder”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Khj„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjhubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj:h]”hŒReturn”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KhjhubhÝ)�”}”(hŒ4sets ``*remainder``, then returns dividend / divisor”h]”(hŒsets ”…”�”}”(hjPh²hh³Nh´Nubj)�”}”(hŒ``*remainder``”h]”hŒ *remainder”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubhŒ!, then returns dividend / divisor”…”�”}”(hjPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KhjhubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjsh]”hŒ Description”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KhjhubhÝ)�”}”(hŒNThis is commonly provided by 32bit archs to provide an optimized 64bit divide.”h]”hŒNThis is commonly provided by 32bit archs to provide an optimized 64bit divide.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Khjhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdiv_s64_rem (C function)”Œ c.div_s64_rem”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;s64 div_s64_rem (s64 dividend, s32 divisor, s32 *remainder)”h]”j)�”}”(hŒ:s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder)”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j½Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ div_s64_rem”sbŒ c.div_s64_rem”†”asbuh1hhj´h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´h²hh³jÜh´K!ubj{)�”}”(hŒ div_s64_rem”h]”j�)�”}”(hjÙh]”hŒ div_s64_rem”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj´h²hh³jÜh´K!ubjœ)�”}”(hŒ+(s64 dividend, s32 divisor, s32 *remainder)”h]”(j¢)�”}”(hŒ s64 dividend”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j׌ c.div_s64_rem”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒdividend”h]”hŒdividend”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒ s32 divisor”h]”(h)�”}”(hhh]”j�)�”}”(hŒs32”h]”hŒs32”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jWŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j׌ c.div_s64_rem”†”asbuh1hhjNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNubj�)�”}”(hŒdivisor”h]”hŒdivisor”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒs32 *remainder”h]”(h)�”}”(hhh]”j�)�”}”(hŒs32”h]”hŒs32”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŸŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j׌ c.div_s64_rem”†”asbuh1hhj–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj–ubj�)�”}”(hŒ remainder”h]”hŒ remainder”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj´h²hh³jÜh´K!ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj°h²hh³jÜh´K!ubah}”(h]”j«ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÜh´K!hj­h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5signed 64bit divide with 32bit divisor with remainder”h]”hŒ5signed 64bit divide with 32bit divisor with remainder”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K!hjýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj­h²hh³jÜh´K!ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hŒÚ**Parameters** ``s64 dividend`` signed 64bit dividend ``s32 divisor`` signed 32bit divisor ``s32 *remainder`` pointer to signed 32bit remainder **Return** sets ``*remainder``, then returns dividend / divisor”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj"h]”hŒ Parameters”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K%hjubj )�”}”(hhh]”(j)�”}”(hŒ'``s64 dividend`` signed 64bit dividend ”h]”(j)�”}”(hŒ``s64 dividend``”h]”j)�”}”(hjAh]”hŒ s64 dividend”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K"hj;ubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 64bit dividend”h]”hŒsigned 64bit dividend”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jVh´K"hjWubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jVh´K"hj8ubj)�”}”(hŒ%``s32 divisor`` signed 32bit divisor ”h]”(j)�”}”(hŒ``s32 divisor``”h]”j)�”}”(hjzh]”hŒ s32 divisor”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K#hjtubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 32bit divisor”h]”hŒsigned 32bit divisor”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�h´K#hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´K#hj8ubj)�”}”(hŒ5``s32 *remainder`` pointer to signed 32bit remainder ”h]”(j)�”}”(hŒ``s32 *remainder``”h]”j)�”}”(hj³h]”hŒs32 *remainder”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K$hj­ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!pointer to signed 32bit remainder”h]”hŒ!pointer to signed 32bit remainder”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÈh´K$hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈh´K$hj8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjîh]”hŒReturn”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K&hjubhÝ)�”}”(hŒ4sets ``*remainder``, then returns dividend / divisor”h]”(hŒsets ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ``*remainder``”h]”hŒ *remainder”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ!, then returns dividend / divisor”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K&hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdiv64_u64_rem (C function)”Œc.div64_u64_rem”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=u64 div64_u64_rem (u64 dividend, u64 divisor, u64 *remainder)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hjAh²hh³jih´K/ubj{)�”}”(hŒ div64_u64_rem”h]”j�)�”}”(hjfh]”hŒ div64_u64_rem”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjAh²hh³jih´K/ubjœ)�”}”(hŒ+(u64 dividend, u64 divisor, u64 *remainder)”h]”(j¢)�”}”(hŒ u64 dividend”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jœŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jdŒc.div64_u64_rem”†”asbuh1hhj“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“ubj�)�”}”(hŒdividend”h]”hŒdividend”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubj¢)�”}”(hŒ u64 divisor”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jäŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jdŒc.div64_u64_rem”†”asbuh1hhjÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛubj�)�”}”(hŒdivisor”h]”hŒdivisor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubj¢)�”}”(hŒu64 *remainder”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j,Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jdŒc.div64_u64_rem”†”asbuh1hhj#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj#ubj�)�”}”(hŒ remainder”h]”hŒ remainder”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjAh²hh³jih´K/ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj=h²hh³jih´K/ubah}”(h]”j8ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jih´K/hj:h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6unsigned 64bit divide with 64bit divisor and remainder”h]”hŒ6unsigned 64bit divide with 64bit divisor and remainder”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K/hjŠh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj:h²hh³jih´K/ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¥jæj¥jç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hŒà**Parameters** ``u64 dividend`` unsigned 64bit dividend ``u64 divisor`` unsigned 64bit divisor ``u64 *remainder`` pointer to unsigned 64bit remainder **Return** sets ``*remainder``, then returns dividend / divisor”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¯h]”hŒ Parameters”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K3hj©ubj )�”}”(hhh]”(j)�”}”(hŒ)``u64 dividend`` unsigned 64bit dividend ”h]”(j)�”}”(hŒ``u64 dividend``”h]”j)�”}”(hjÎh]”hŒ u64 dividend”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K0hjÈubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit dividend”h]”hŒunsigned 64bit dividend”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jãh´K0hjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãh´K0hjÅubj)�”}”(hŒ'``u64 divisor`` unsigned 64bit divisor ”h]”(j)�”}”(hŒ``u64 divisor``”h]”j)�”}”(hjh]”hŒ u64 divisor”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K1hjubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit divisor”h]”hŒunsigned 64bit divisor”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´K1hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´K1hjÅubj)�”}”(hŒ7``u64 *remainder`` pointer to unsigned 64bit remainder ”h]”(j)�”}”(hŒ``u64 *remainder``”h]”j)�”}”(hj@h]”hŒu64 *remainder”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K2hj:ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#pointer to unsigned 64bit remainder”h]”hŒ#pointer to unsigned 64bit remainder”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jUh´K2hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jUh´K2hjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj©ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj{h]”hŒReturn”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjyubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K4hj©ubhÝ)�”}”(hŒ4sets ``*remainder``, then returns dividend / divisor”h]”(hŒsets ”…”�”}”(hj‘h²hh³Nh´Nubj)�”}”(hŒ``*remainder``”h]”hŒ *remainder”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘ubhŒ!, then returns dividend / divisor”…”�”}”(hj‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K4hj©ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdiv64_s64_rem (C function)”Œc.div64_s64_rem”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=s64 div64_s64_rem (s64 dividend, s64 divisor, s64 *remainder)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hjÎh²hh³jöh´K=ubj{)�”}”(hŒ div64_s64_rem”h]”j�)�”}”(hjóh]”hŒ div64_s64_rem”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÎh²hh³jöh´K=ubjœ)�”}”(hŒ+(s64 dividend, s64 divisor, s64 *remainder)”h]”(j¢)�”}”(hŒ s64 dividend”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j)Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jñŒc.div64_s64_rem”†”asbuh1hhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj�)�”}”(hŒdividend”h]”hŒdividend”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒ s64 divisor”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jqŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jñŒc.div64_s64_rem”†”asbuh1hhjhubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjhubj�)�”}”(hŒdivisor”h]”hŒdivisor”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒs64 *remainder”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¹Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jñŒc.div64_s64_rem”†”asbuh1hhj°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj°ubj�)�”}”(hŒ remainder”h]”hŒ remainder”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÎh²hh³jöh´K=ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÊh²hh³jöh´K=ubah}”(h]”jÅah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jöh´K=hjÇh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4signed 64bit divide with 64bit divisor and remainder”h]”hŒ4signed 64bit divide with 64bit divisor and remainder”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K=hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÇh²hh³jöh´K=ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj2jæj2jç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hŒÚ**Parameters** ``s64 dividend`` signed 64bit dividend ``s64 divisor`` signed 64bit divisor ``s64 *remainder`` pointer to signed 64bit remainder **Return** sets ``*remainder``, then returns dividend / divisor”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj<h]”hŒ Parameters”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KAhj6ubj )�”}”(hhh]”(j)�”}”(hŒ'``s64 dividend`` signed 64bit dividend ”h]”(j)�”}”(hŒ``s64 dividend``”h]”j)�”}”(hj[h]”hŒ s64 dividend”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K>hjUubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 64bit dividend”h]”hŒsigned 64bit dividend”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jph´K>hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jph´K>hjRubj)�”}”(hŒ%``s64 divisor`` signed 64bit divisor ”h]”(j)�”}”(hŒ``s64 divisor``”h]”j)�”}”(hj”h]”hŒ s64 divisor”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K?hjŽubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 64bit divisor”h]”hŒsigned 64bit divisor”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©h´K?hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©h´K?hjRubj)�”}”(hŒ5``s64 *remainder`` pointer to signed 64bit remainder ”h]”(j)�”}”(hŒ``s64 *remainder``”h]”j)�”}”(hjÍh]”hŒs64 *remainder”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K@hjÇubj2)�”}”(hhh]”hÝ)�”}”(hŒ!pointer to signed 64bit remainder”h]”hŒ!pointer to signed 64bit remainder”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jâh´K@hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâh´K@hjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjh]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KBhj6ubhÝ)�”}”(hŒ4sets ``*remainder``, then returns dividend / divisor”h]”(hŒsets ”…”�”}”(hjh²hh³Nh´Nubj)�”}”(hŒ``*remainder``”h]”hŒ *remainder”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubhŒ!, then returns dividend / divisor”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KBhj6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdiv64_u64 (C function)”Œ c.div64_u64”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)u64 div64_u64 (u64 dividend, u64 divisor)”h]”j)�”}”(hŒ(u64 div64_u64(u64 dividend, u64 divisor)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jdŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ div64_u64”sbŒ c.div64_u64”†”asbuh1hhj[h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[h²hh³jƒh´KKubj{)�”}”(hŒ div64_u64”h]”j�)�”}”(hj€h]”hŒ div64_u64”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj[h²hh³jƒh´KKubjœ)�”}”(hŒ(u64 dividend, u64 divisor)”h]”(j¢)�”}”(hŒ u64 dividend”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¶Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j~Œ c.div64_u64”†”asbuh1hhj­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­ubj�)�”}”(hŒdividend”h]”hŒdividend”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©ubj¢)�”}”(hŒ u64 divisor”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jþŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j~Œ c.div64_u64”†”asbuh1hhjõubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõubj�)�”}”(hŒdivisor”h]”hŒdivisor”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj[h²hh³jƒh´KKubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjWh²hh³jƒh´KKubah}”(h]”jRah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jƒh´KKhjTh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(unsigned 64bit divide with 64bit divisor”h]”hŒ(unsigned 64bit divide with 64bit divisor”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KKhjOh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjTh²hh³jƒh´KKubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjjæjjjç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hŒ„**Parameters** ``u64 dividend`` unsigned 64bit dividend ``u64 divisor`` unsigned 64bit divisor **Return** dividend / divisor”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjth]”hŒ Parameters”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KOhjnubj )�”}”(hhh]”(j)�”}”(hŒ)``u64 dividend`` unsigned 64bit dividend ”h]”(j)�”}”(hŒ``u64 dividend``”h]”j)�”}”(hj“h]”hŒ u64 dividend”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KLhj�ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit dividend”h]”hŒunsigned 64bit dividend”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¨h´KLhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¨h´KLhjŠubj)�”}”(hŒ'``u64 divisor`` unsigned 64bit divisor ”h]”(j)�”}”(hŒ``u64 divisor``”h]”j)�”}”(hjÌh]”hŒ u64 divisor”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KMhjÆubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit divisor”h]”hŒunsigned 64bit divisor”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jáh´KMhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jáh´KMhjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjnubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjh]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KOhjnubhÝ)�”}”(hŒdividend / divisor”h]”hŒdividend / divisor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KOhjnubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdiv64_s64 (C function)”Œ c.div64_s64”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)s64 div64_s64 (s64 dividend, s64 divisor)”h]”j)�”}”(hŒ(s64 div64_s64(s64 dividend, s64 divisor)”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jQŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ div64_s64”sbŒ c.div64_s64”†”asbuh1hhjHh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHh²hh³jph´KWubj{)�”}”(hŒ div64_s64”h]”j�)�”}”(hjmh]”hŒ div64_s64”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjHh²hh³jph´KWubjœ)�”}”(hŒ(s64 dividend, s64 divisor)”h]”(j¢)�”}”(hŒ s64 dividend”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j£Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jkŒ c.div64_s64”†”asbuh1hhjšubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšubj�)�”}”(hŒdividend”h]”hŒdividend”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–ubj¢)�”}”(hŒ s64 divisor”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jëŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jkŒ c.div64_s64”†”asbuh1hhjâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâubj�)�”}”(hŒdivisor”h]”hŒdivisor”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjHh²hh³jph´KWubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjDh²hh³jph´KWubah}”(h]”j?ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jph´KWhjAh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&signed 64bit divide with 64bit divisor”h]”hŒ&signed 64bit divide with 64bit divisor”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KWhj< h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjAh²hh³jph´KWubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjW jæjW jç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hŒ€**Parameters** ``s64 dividend`` signed 64bit dividend ``s64 divisor`` signed 64bit divisor **Return** dividend / divisor”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hja h]”hŒ Parameters”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K[hj[ ubj )�”}”(hhh]”(j)�”}”(hŒ'``s64 dividend`` signed 64bit dividend ”h]”(j)�”}”(hŒ``s64 dividend``”h]”j)�”}”(hj€ h]”hŒ s64 dividend”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KXhjz ubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 64bit dividend”h]”hŒsigned 64bit dividend”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j• h´KXhj– ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjz ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j• h´KXhjw ubj)�”}”(hŒ%``s64 divisor`` signed 64bit divisor ”h]”(j)�”}”(hŒ``s64 divisor``”h]”j)�”}”(hj¹ h]”hŒ s64 divisor”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj· ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KYhj³ ubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 64bit divisor”h]”hŒsigned 64bit divisor”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÎ h´KYhjÏ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj³ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÎ h´KYhjw ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj[ ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjô h]”hŒReturn”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjò ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K[hj[ ubhÝ)�”}”(hŒdividend / divisor”h]”hŒdividend / divisor”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K[hj[ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdiv_u64 (C function)”Œ c.div_u64”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'u64 div_u64 (u64 dividend, u32 divisor)”h]”j)�”}”(hŒ&u64 div_u64(u64 dividend, u32 divisor)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj!Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œdiv_u64”sbŒ c.div_u64”†”asbuh1hhj5!h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5!h²hh³j]!h´K†ubj{)�”}”(hŒdiv_u64”h]”j�)�”}”(hjZ!h]”hŒdiv_u64”…”�”}”(hjp!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl!ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj5!h²hh³j]!h´K†ubjœ)�”}”(hŒ(u64 dividend, u32 divisor)”h]”(j¢)�”}”(hŒ u64 dividend”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjŽ!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�!Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jX!Œ c.div_u64”†”asbuh1hhj‡!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡!ubj�)�”}”(hŒdividend”h]”hŒdividend”…”�”}”(hjº!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒ!ubj¢)�”}”(hŒ u32 divisor”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjÖ!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓ!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jØ!Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jX!Œ c.div_u64”†”asbuh1hhjÏ!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏ!ubj�)�”}”(hŒdivisor”h]”hŒdivisor”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏ!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒ!ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj5!h²hh³j]!h´K†ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj1!h²hh³j]!h´K†ubah}”(h]”j,!ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j]!h´K†hj.!h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(unsigned 64bit divide with 32bit divisor”h]”hŒ(unsigned 64bit divide with 32bit divisor”…”�”}”(hj,"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K†hj)"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj.!h²hh³j]!h´K†ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjD"jæjD"jç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hX***Parameters** ``u64 dividend`` unsigned 64bit dividend ``u32 divisor`` unsigned 32bit divisor **Description** This is the most common 64bit divide and should be used if possible, as many 32bit archs can optimize this variant better than a full 64bit divide. **Return** dividend / divisor”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjN"h]”hŒ Parameters”…”�”}”(hjP"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjL"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KŠhjH"ubj )�”}”(hhh]”(j)�”}”(hŒ)``u64 dividend`` unsigned 64bit dividend ”h]”(j)�”}”(hŒ``u64 dividend``”h]”j)�”}”(hjm"h]”hŒ u64 dividend”…”�”}”(hjo"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjk"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K‡hjg"ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit dividend”h]”hŒunsigned 64bit dividend”…”�”}”(hj†"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚"h´K‡hjƒ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjg"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚"h´K‡hjd"ubj)�”}”(hŒ'``u32 divisor`` unsigned 32bit divisor ”h]”(j)�”}”(hŒ``u32 divisor``”h]”j)�”}”(hj¦"h]”hŒ u32 divisor”…”�”}”(hj¨"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Kˆhj "ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 32bit divisor”h]”hŒunsigned 32bit divisor”…”�”}”(hj¿"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»"h´Kˆhj¼"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj "ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»"h´Kˆhjd"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjH"ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjá"h]”hŒ Description”…”�”}”(hjã"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjß"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KŠhjH"ubhÝ)�”}”(hŒ“This is the most common 64bit divide and should be used if possible, as many 32bit archs can optimize this variant better than a full 64bit divide.”h]”hŒ“This is the most common 64bit divide and should be used if possible, as many 32bit archs can optimize this variant better than a full 64bit divide.”…”�”}”(hj÷"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K‰hjH"ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj#h]”hŒReturn”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K�hjH"ubhÝ)�”}”(hŒdividend / divisor”h]”hŒdividend / divisor”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´KŽhjH"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdiv_s64 (C function)”Œ c.div_s64”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ's64 div_s64 (s64 dividend, s32 divisor)”h]”j)�”}”(hŒ&s64 div_s64(s64 dividend, s32 divisor)”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hjP#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjM#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jR#Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œdiv_s64”sbŒ c.div_s64”†”asbuh1hhjI#h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjI#h²hh³jq#h´K™ubj{)�”}”(hŒdiv_s64”h]”j�)�”}”(hjn#h]”hŒdiv_s64”…”�”}”(hj„#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj€#ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjI#h²hh³jq#h´K™ubjœ)�”}”(hŒ(s64 dividend, s32 divisor)”h]”(j¢)�”}”(hŒ s64 dividend”h]”(h)�”}”(hhh]”j�)�”}”(hŒs64”h]”hŒs64”…”�”}”(hj¢#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸ#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¤#Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jl#Œ c.div_s64”†”asbuh1hhj›#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›#ubj�)�”}”(hŒdividend”h]”hŒdividend”…”�”}”(hjÎ#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj—#ubj¢)�”}”(hŒ s32 divisor”h]”(h)�”}”(hhh]”j�)�”}”(hŒs32”h]”hŒs32”…”�”}”(hjê#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjç#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jì#Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jl#Œ c.div_s64”†”asbuh1hhjã#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjã#ubj�)�”}”(hŒdivisor”h]”hŒdivisor”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjã#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj—#ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjI#h²hh³jq#h´K™ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjE#h²hh³jq#h´K™ubah}”(h]”j@#ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jq#h´K™hjB#h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&signed 64bit divide with 32bit divisor”h]”hŒ&signed 64bit divide with 32bit divisor”…”�”}”(hj@$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K™hj=$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjB#h²hh³jq#h´K™ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjX$jæjX$jç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hŒ€**Parameters** ``s64 dividend`` signed 64bit dividend ``s32 divisor`` signed 32bit divisor **Return** dividend / divisor”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjb$h]”hŒ Parameters”…”�”}”(hjd$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K�hj\$ubj )�”}”(hhh]”(j)�”}”(hŒ'``s64 dividend`` signed 64bit dividend ”h]”(j)�”}”(hŒ``s64 dividend``”h]”j)�”}”(hj�$h]”hŒ s64 dividend”…”�”}”(hjƒ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Kšhj{$ubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 64bit dividend”h]”hŒsigned 64bit dividend”…”�”}”(hjš$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–$h´Kšhj—$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–$h´Kšhjx$ubj)�”}”(hŒ%``s32 divisor`` signed 32bit divisor ”h]”(j)�”}”(hŒ``s32 divisor``”h]”j)�”}”(hjº$h]”hŒ s32 divisor”…”�”}”(hj¼$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K›hj´$ubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 32bit divisor”h]”hŒsigned 32bit divisor”…”�”}”(hjÓ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏ$h´K›hjÐ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏ$h´K›hjx$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj\$ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjõ$h]”hŒReturn”…”�”}”(hj÷$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjó$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K�hj\$ubhÝ)�”}”(hŒdividend / divisor”h]”hŒdividend / divisor”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´K�hj\$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$mul_u64_add_u64_div_u64 (C function)”Œc.mul_u64_add_u64_div_u64”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8u64 mul_u64_add_u64_div_u64 (u64 a, u64 b, u64 c, u64 d)”h]”j)�”}”(hŒ7u64 mul_u64_add_u64_div_u64(u64 a, u64 b, u64 c, u64 d)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj=%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j?%Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œmul_u64_add_u64_div_u64”sbŒc.mul_u64_add_u64_div_u64”†”asbuh1hhj6%h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6%h²hh³j^%h´M;ubj{)�”}”(hŒmul_u64_add_u64_div_u64”h]”j�)�”}”(hj[%h]”hŒmul_u64_add_u64_div_u64”…”�”}”(hjq%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjm%ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj6%h²hh³j^%h´M;ubjœ)�”}”(hŒ(u64 a, u64 b, u64 c, u64 d)”h]”(j¢)�”}”(hŒu64 a”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj�%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‘%Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jY%Œc.mul_u64_add_u64_div_u64”†”asbuh1hhjˆ%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆ%ubj�)�”}”(hjI¢h]”hŒa”…”�”}”(hj»%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆ%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„%ubj¢)�”}”(hŒu64 b”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjÖ%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓ%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jØ%Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jY%Œc.mul_u64_add_u64_div_u64”†”asbuh1hhjÏ%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏ%ubj�)�”}”(hj¦¢h]”hŒb”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏ%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„%ubj¢)�”}”(hŒu64 c”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j&Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jY%Œc.mul_u64_add_u64_div_u64”†”asbuh1hhj&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&ubj�)�”}”(hjßh]”hŒc”…”�”}”(hjI&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„%ubj¢)�”}”(hŒu64 d”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjd&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hja&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jf&Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jY%Œc.mul_u64_add_u64_div_u64”†”asbuh1hhj]&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]&ubj�)�”}”(hŒd”h]”hŒd”…”�”}”(hj�&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„%ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj6%h²hh³j^%h´M;ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj2%h²hh³j^%h´M;ubah}”(h]”j-%ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j^%h´M;hj/%h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(unsigned 64bit multiply, add, and divide”h]”hŒ(unsigned 64bit multiply, add, and divide”…”�”}”(hjº&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M;hj·&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj/%h²hh³j^%h´M;ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÒ&jæjÒ&jç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hXæ**Parameters** ``u64 a`` first unsigned 64bit multiplicand ``u64 b`` second unsigned 64bit multiplicand ``u64 c`` unsigned 64bit addend ``u64 d`` unsigned 64bit divisor **Description** Multiply two 64bit values together to generate a 128bit product add a third value and then divide by a fourth. The Generic code divides by 0 if **d** is zero and returns ~0 on overflow. Architecture specific code may trap on zero or overflow. **Return** (**a** * **b** + **c**) / **d**”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÜ&h]”hŒ Parameters”…”�”}”(hjÞ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M?hjÖ&ubj )�”}”(hhh]”(j)�”}”(hŒ,``u64 a`` first unsigned 64bit multiplicand ”h]”(j)�”}”(hŒ ``u64 a``”h]”j)�”}”(hjû&h]”hŒu64 a”…”�”}”(hjý&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjù&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M<hjõ&ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!first unsigned 64bit multiplicand”h]”hŒ!first unsigned 64bit multiplicand”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j'h´M<hj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõ&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'h´M<hjò&ubj)�”}”(hŒ-``u64 b`` second unsigned 64bit multiplicand ”h]”(j)�”}”(hŒ ``u64 b``”h]”j)�”}”(hj4'h]”hŒu64 b”…”�”}”(hj6'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M=hj.'ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"second unsigned 64bit multiplicand”h]”hŒ"second unsigned 64bit multiplicand”…”�”}”(hjM'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jI'h´M=hjJ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jI'h´M=hjò&ubj)�”}”(hŒ ``u64 c`` unsigned 64bit addend ”h]”(j)�”}”(hŒ ``u64 c``”h]”j)�”}”(hjm'h]”hŒu64 c”…”�”}”(hjo'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjk'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M>hjg'ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit addend”h]”hŒunsigned 64bit addend”…”�”}”(hj†'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚'h´M>hjƒ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjg'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚'h´M>hjò&ubj)�”}”(hŒ!``u64 d`` unsigned 64bit divisor ”h]”(j)�”}”(hŒ ``u64 d``”h]”j)�”}”(hj¦'h]”hŒu64 d”…”�”}”(hj¨'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M?hj 'ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit divisor”h]”hŒunsigned 64bit divisor”…”�”}”(hj¿'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»'h´M?hj¼'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj 'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»'h´M?hjò&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖ&ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjá'h]”hŒ Description”…”�”}”(hjã'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjß'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MAhjÖ&ubhÝ)�”}”(hŒòMultiply two 64bit values together to generate a 128bit product add a third value and then divide by a fourth. The Generic code divides by 0 if **d** is zero and returns ~0 on overflow. Architecture specific code may trap on zero or overflow.”h]”(hŒ�Multiply two 64bit values together to generate a 128bit product add a third value and then divide by a fourth. The Generic code divides by 0 if ”…”�”}”(hj÷'h²hh³Nh´Nubjõ)�”}”(hŒ**d**”h]”hŒd”…”�”}”(hjÿ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷'ubhŒ] is zero and returns ~0 on overflow. Architecture specific code may trap on zero or overflow.”…”�”}”(hj÷'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M@hjÖ&ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj(h]”hŒReturn”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MEhjÖ&ubhÝ)�”}”(hŒ(**a** * **b** + **c**) / **d**”h]”(hŒ(”…”�”}”(hj0(h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj8(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0(ubhŒ * ”…”�”}”(hj0(h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjJ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0(ubhŒ + ”…”�”}”(hj0(h²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hj\(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0(ubhŒ) / ”…”�”}”(hj0(h²hh³Nh´Nubjõ)�”}”(hŒ**d**”h]”hŒd”…”�”}”(hjn(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MFhjÖ&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmul_u64_u64_div_u64 (C macro)”Œc.mul_u64_u64_div_u64”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒmul_u64_u64_div_u64”h]”j)�”}”(hŒmul_u64_u64_div_u64”h]”j{)�”}”(hŒmul_u64_u64_div_u64”h]”j�)�”}”(hj�(h]”hŒmul_u64_u64_div_u64”…”�”}”(hj§(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£(ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŸ(h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MKubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj›(h²hh³jº(h´MKubah}”(h]”j–(ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jº(h´MKhj˜(h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj˜(h²hh³jº(h´MKubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÓ(jæjÓ(jç‰jè‰jé‰uh1jh²hhjh³Nh´NubhÝ)�”}”(hŒ!``mul_u64_u64_div_u64 (a, b, d)``”h]”j)�”}”(hjÙ(h]”hŒmul_u64_u64_div_u64 (a, b, d)”…”�”}”(hjÛ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MMhjh²hubj•)�”}”(hŒ#unsigned 64bit multiply and divide ”h]”hÝ)�”}”(hŒ"unsigned 64bit multiply and divide”h]”hŒ"unsigned 64bit multiply and divide”…”�”}”(hjó(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MKhjï(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j)h´MKhjh²hubjë)�”}”(hX **Parameters** ``a`` first unsigned 64bit multiplicand ``b`` second unsigned 64bit multiplicand ``d`` unsigned 64bit divisor **Description** Multiply two 64bit values together to generate a 128bit product and then divide by a third value. The Generic code divides by 0 if **d** is zero and returns ~0 on overflow. Architecture specific code may trap on zero or overflow. **Return** **a** * **b** / **d**”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj)h]”hŒ Parameters”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj )ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MOhj)ubj )�”}”(hhh]”(j)�”}”(hŒ(``a`` first unsigned 64bit multiplicand ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hj-)h]”hŒa”…”�”}”(hj/)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MLhj')ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!first unsigned 64bit multiplicand”h]”hŒ!first unsigned 64bit multiplicand”…”�”}”(hjF)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jB)h´MLhjC)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj')ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jB)h´MLhj$)ubj)�”}”(hŒ)``b`` second unsigned 64bit multiplicand ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hjf)h]”hŒb”…”�”}”(hjh)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MMhj`)ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"second unsigned 64bit multiplicand”h]”hŒ"second unsigned 64bit multiplicand”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{)h´MMhj|)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{)h´MMhj$)ubj)�”}”(hŒ``d`` unsigned 64bit divisor ”h]”(j)�”}”(hŒ``d``”h]”j)�”}”(hjŸ)h]”hŒd”…”�”}”(hj¡)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MNhj™)ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit divisor”h]”hŒunsigned 64bit divisor”…”�”}”(hj¸)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j´)h´MNhjµ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´)h´MNhj$)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj)ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÚ)h]”hŒ Description”…”�”}”(hjÜ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØ)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MPhj)ubhÝ)�”}”(hŒåMultiply two 64bit values together to generate a 128bit product and then divide by a third value. The Generic code divides by 0 if **d** is zero and returns ~0 on overflow. Architecture specific code may trap on zero or overflow.”h]”(hŒƒMultiply two 64bit values together to generate a 128bit product and then divide by a third value. The Generic code divides by 0 if ”…”�”}”(hjð)h²hh³Nh´Nubjõ)�”}”(hŒ**d**”h]”hŒd”…”�”}”(hjø)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjð)ubhŒ] is zero and returns ~0 on overflow. Architecture specific code may trap on zero or overflow.”…”�”}”(hjð)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MOhj)ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj*h]”hŒReturn”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MThj)ubhÝ)�”}”(hŒ**a** * **b** / **d**”h]”(jõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj-*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)*ubhŒ * ”…”�”}”(hj)*h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hj?*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)*ubhŒ / ”…”�”}”(hj)*h²hh³Nh´Nubjõ)�”}”(hŒ**d**”h]”hŒd”…”�”}”(hjQ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MUhj)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%mul_u64_u64_div_u64_roundup (C macro)”Œc.mul_u64_u64_div_u64_roundup”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒmul_u64_u64_div_u64_roundup”h]”j)�”}”(hŒmul_u64_u64_div_u64_roundup”h]”j{)�”}”(hŒmul_u64_u64_div_u64_roundup”h]”j�)�”}”(hj€*h]”hŒmul_u64_u64_div_u64_roundup”…”�”}”(hjŠ*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†*ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‚*h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MZubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj~*h²hh³j�*h´MZubah}”(h]”jy*ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�*h´MZhj{*h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj{*h²hh³j�*h´MZubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj¶*jæj¶*jç‰jè‰jé‰uh1jh²hhjh³Nh´NubhÝ)�”}”(hŒ)``mul_u64_u64_div_u64_roundup (a, b, d)``”h]”j)�”}”(hj¼*h]”hŒ%mul_u64_u64_div_u64_roundup (a, b, d)”…”�”}”(hj¾*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjº*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M\hjh²hubj•)�”}”(hŒ.unsigned 64bit multiply and divide rounded up ”h]”hÝ)�”}”(hŒ-unsigned 64bit multiply and divide rounded up”h]”hŒ-unsigned 64bit multiply and divide rounded up”…”�”}”(hjÖ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MZhjÒ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jä*h´MZhjh²hubjë)�”}”(hXª**Parameters** ``a`` first unsigned 64bit multiplicand ``b`` second unsigned 64bit multiplicand ``d`` unsigned 64bit divisor **Description** Multiply two 64bit values together to generate a 128bit product and then divide and round up. The Generic code divides by 0 if **d** is zero and returns ~0 on overflow. Architecture specific code may trap on zero or overflow. **Return** (**a** * **b** + **d** - 1) / **d**”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjñ*h]”hŒ Parameters”…”�”}”(hjó*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjï*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M^hjë*ubj )�”}”(hhh]”(j)�”}”(hŒ(``a`` first unsigned 64bit multiplicand ”h]”(j)�”}”(hŒ``a``”h]”j)�”}”(hj+h]”hŒa”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M[hj +ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!first unsigned 64bit multiplicand”h]”hŒ!first unsigned 64bit multiplicand”…”�”}”(hj)+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j%+h´M[hj&+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj +ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j%+h´M[hj+ubj)�”}”(hŒ)``b`` second unsigned 64bit multiplicand ”h]”(j)�”}”(hŒ``b``”h]”j)�”}”(hjI+h]”hŒb”…”�”}”(hjK+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M\hjC+ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"second unsigned 64bit multiplicand”h]”hŒ"second unsigned 64bit multiplicand”…”�”•,}”(hjb+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j^+h´M\hj_+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjC+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j^+h´M\hj+ubj)�”}”(hŒ``d`` unsigned 64bit divisor ”h]”(j)�”}”(hŒ``d``”h]”j)�”}”(hj‚+h]”hŒd”…”�”}”(hj„+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M]hj|+ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit divisor”h]”hŒunsigned 64bit divisor”…”�”}”(hj›+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j—+h´M]hj˜+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—+h´M]hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjë*ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj½+h]”hŒ Description”…”�”}”(hj¿+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M_hjë*ubhÝ)�”}”(hŒáMultiply two 64bit values together to generate a 128bit product and then divide and round up. The Generic code divides by 0 if **d** is zero and returns ~0 on overflow. Architecture specific code may trap on zero or overflow.”h]”(hŒMultiply two 64bit values together to generate a 128bit product and then divide and round up. The Generic code divides by 0 if ”…”�”}”(hjÓ+h²hh³Nh´Nubjõ)�”}”(hŒ**d**”h]”hŒd”…”�”}”(hjÛ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓ+ubhŒ] is zero and returns ~0 on overflow. Architecture specific code may trap on zero or overflow.”…”�”}”(hjÓ+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M^hjë*ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjö+h]”hŒReturn”…”�”}”(hjø+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjô+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mchjë*ubhÝ)�”}”(hŒ#(**a** * **b** + **d** - 1) / **d**”h]”(hŒ(”…”�”}”(hj ,h²hh³Nh´Nubjõ)�”}”(hŒ**a**”h]”hŒa”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ,ubhŒ * ”…”�”}”(hj ,h²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hj&,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ,ubhŒ + ”…”�”}”(hj ,h²hh³Nh´Nubjõ)�”}”(hŒ**d**”h]”hŒd”…”�”}”(hj8,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ,ubhŒ - 1) / ”…”�”}”(hj ,h²hh³Nh´Nubjõ)�”}”(hŒ**d**”h]”hŒd”…”�”}”(hjJ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mdhjë*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒDIV64_U64_ROUND_UP (C macro)”Œc.DIV64_U64_ROUND_UP”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDIV64_U64_ROUND_UP”h]”j)�”}”(hŒDIV64_U64_ROUND_UP”h]”j{)�”}”(hŒDIV64_U64_ROUND_UP”h]”j�)�”}”(hjy,h]”hŒDIV64_U64_ROUND_UP”…”�”}”(hjƒ,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj{,h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mkubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjw,h²hh³j–,h´Mkubah}”(h]”jr,ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j–,h´Mkhjt,h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjt,h²hh³j–,h´Mkubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj¯,jæj¯,jç‰jè‰jé‰uh1jh²hhjh³Nh´NubhÝ)�”}”(hŒ``DIV64_U64_ROUND_UP (ll, d)``”h]”j)�”}”(hjµ,h]”hŒDIV64_U64_ROUND_UP (ll, d)”…”�”}”(hj·,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mmhjh²hubj•)�”}”(hŒ4unsigned 64bit divide with 64bit divisor rounded up ”h]”hÝ)�”}”(hŒ3unsigned 64bit divide with 64bit divisor rounded up”h]”hŒ3unsigned 64bit divide with 64bit divisor rounded up”…”�”}”(hjÏ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MkhjË,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÝ,h´Mkhjh²hubjë)�”}”(hŒÔ**Parameters** ``ll`` unsigned 64bit dividend ``d`` unsigned 64bit divisor **Description** Divide unsigned 64bit dividend by unsigned 64bit divisor and round up. **Return** dividend / divisor rounded up”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjê,h]”hŒ Parameters”…”�”}”(hjì,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjè,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mohjä,ubj )�”}”(hhh]”(j)�”}”(hŒ``ll`` unsigned 64bit dividend ”h]”(j)�”}”(hŒ``ll``”h]”j)�”}”(hj -h]”hŒll”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mlhj-ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit dividend”h]”hŒunsigned 64bit dividend”…”�”}”(hj"-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j-h´Mlhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-h´Mlhj-ubj)�”}”(hŒ``d`` unsigned 64bit divisor ”h]”(j)�”}”(hŒ``d``”h]”j)�”}”(hjB-h]”hŒd”…”�”}”(hjD-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mmhj<-ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit divisor”h]”hŒunsigned 64bit divisor”…”�”}”(hj[-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jW-h´MmhjX-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj<-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jW-h´Mmhj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjä,ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj}-h]”hŒ Description”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mohjä,ubhÝ)�”}”(hŒFDivide unsigned 64bit dividend by unsigned 64bit divisor and round up.”h]”hŒFDivide unsigned 64bit dividend by unsigned 64bit divisor and round up.”…”�”}”(hj“-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mnhjä,ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¤-h]”hŒReturn”…”�”}”(hj¦-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¢-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mqhjä,ubhÝ)�”}”(hŒdividend / divisor rounded up”h]”hŒdividend / divisor rounded up”…”�”}”(hjº-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mrhjä,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒDIV_U64_ROUND_UP (C macro)”Œc.DIV_U64_ROUND_UP”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDIV_U64_ROUND_UP”h]”j)�”}”(hŒDIV_U64_ROUND_UP”h]”j{)�”}”(hŒDIV_U64_ROUND_UP”h]”j�)�”}”(hjã-h]”hŒDIV_U64_ROUND_UP”…”�”}”(hjí-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjé-ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjå-h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mxubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjá-h²hh³j.h´Mxubah}”(h]”jÜ-ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j.h´MxhjÞ-h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÞ-h²hh³j.h´Mxubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj.jæj.jç‰jè‰jé‰uh1jh²hhjh³Nh´NubhÝ)�”}”(hŒ``DIV_U64_ROUND_UP (ll, d)``”h]”j)�”}”(hj.h]”hŒDIV_U64_ROUND_UP (ll, d)”…”�”}”(hj!.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mzhjh²hubj•)�”}”(hŒ4unsigned 64bit divide with 32bit divisor rounded up ”h]”hÝ)�”}”(hŒ3unsigned 64bit divide with 32bit divisor rounded up”h]”hŒ3unsigned 64bit divide with 32bit divisor rounded up”…”�”}”(hj9.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mxhj5.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jG.h´Mxhjh²hubjë)�”}”(hŒÔ**Parameters** ``ll`` unsigned 64bit dividend ``d`` unsigned 32bit divisor **Description** Divide unsigned 64bit dividend by unsigned 32bit divisor and round up. **Return** dividend / divisor rounded up”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjT.h]”hŒ Parameters”…”�”}”(hjV.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjR.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M|hjN.ubj )�”}”(hhh]”(j)�”}”(hŒ``ll`` unsigned 64bit dividend ”h]”(j)�”}”(hŒ``ll``”h]”j)�”}”(hjs.h]”hŒll”…”�”}”(hju.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjq.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Myhjm.ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit dividend”h]”hŒunsigned 64bit dividend”…”�”}”(hjŒ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆ.h´Myhj‰.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjm.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆ.h´Myhjj.ubj)�”}”(hŒ``d`` unsigned 32bit divisor ”h]”(j)�”}”(hŒ``d``”h]”j)�”}”(hj¬.h]”hŒd”…”�”}”(hj®.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjª.ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mzhj¦.ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 32bit divisor”h]”hŒunsigned 32bit divisor”…”�”}”(hjÅ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁ.h´MzhjÂ.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁ.h´Mzhjj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjN.ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjç.h]”hŒ Description”…”�”}”(hjé.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjå.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M|hjN.ubhÝ)�”}”(hŒFDivide unsigned 64bit dividend by unsigned 32bit divisor and round up.”h]”hŒFDivide unsigned 64bit dividend by unsigned 32bit divisor and round up.”…”�”}”(hjý.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M{hjN.ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj/h]”hŒReturn”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj /ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M~hjN.ubhÝ)�”}”(hŒdividend / divisor rounded up”h]”hŒdividend / divisor rounded up”…”�”}”(hj$/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MhjN.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!DIV64_U64_ROUND_CLOSEST (C macro)”Œc.DIV64_U64_ROUND_CLOSEST”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDIV64_U64_ROUND_CLOSEST”h]”j)�”}”(hŒDIV64_U64_ROUND_CLOSEST”h]”j{)�”}”(hŒDIV64_U64_ROUND_CLOSEST”h]”j�)�”}”(hjM/h]”hŒDIV64_U64_ROUND_CLOSEST”…”�”}”(hjW/h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjS/ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjO/h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M…ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjK/h²hh³jj/h´M…ubah}”(h]”jF/ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jj/h´M…hjH/h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjH/h²hh³jj/h´M…ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjƒ/jæjƒ/jç‰jè‰jé‰uh1jh²hhjh³Nh´NubhÝ)�”}”(hŒ/``DIV64_U64_ROUND_CLOSEST (dividend, divisor)``”h]”j)�”}”(hj‰/h]”hŒ+DIV64_U64_ROUND_CLOSEST (dividend, divisor)”…”�”}”(hj‹/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M‡hjh²hubj•)�”}”(hŒDunsigned 64bit divide with 64bit divisor rounded to nearest integer ”h]”hÝ)�”}”(hŒCunsigned 64bit divide with 64bit divisor rounded to nearest integer”h]”hŒCunsigned 64bit divide with 64bit divisor rounded to nearest integer”…”�”}”(hj£/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M…hjŸ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j±/h´M…hjh²hubjë)�”}”(hX**Parameters** ``dividend`` unsigned 64bit dividend ``divisor`` unsigned 64bit divisor **Description** Divide unsigned 64bit dividend by unsigned 64bit divisor and round to closest integer. **Return** dividend / divisor rounded to nearest integer”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾/h]”hŒ Parameters”…”�”}”(hjÀ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M‰hj¸/ubj )�”}”(hhh]”(j)�”}”(hŒ%``dividend`` unsigned 64bit dividend ”h]”(j)�”}”(hŒ ``dividend``”h]”j)�”}”(hjÝ/h]”hŒdividend”…”�”}”(hjß/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M†hj×/ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit dividend”h]”hŒunsigned 64bit dividend”…”�”}”(hjö/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jò/h´M†hjó/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj×/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jò/h´M†hjÔ/ubj)�”}”(hŒ#``divisor`` unsigned 64bit divisor ”h]”(j)�”}”(hŒ ``divisor``”h]”j)�”}”(hj0h]”hŒdivisor”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M‡hj0ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit divisor”h]”hŒunsigned 64bit divisor”…”�”}”(hj/0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+0h´M‡hj,0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+0h´M‡hjÔ/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¸/ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjQ0h]”hŒ Description”…”�”}”(hjS0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjO0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M‰hj¸/ubhÝ)�”}”(hŒVDivide unsigned 64bit dividend by unsigned 64bit divisor and round to closest integer.”h]”hŒVDivide unsigned 64bit dividend by unsigned 64bit divisor and round to closest integer.”…”�”}”(hjg0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mˆhj¸/ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjx0h]”hŒReturn”…”�”}”(hjz0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjv0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M‹hj¸/ubhÝ)�”}”(hŒ-dividend / divisor rounded to nearest integer”h]”hŒ-dividend / divisor rounded to nearest integer”…”�”}”(hjŽ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MŒhj¸/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒDIV_U64_ROUND_CLOSEST (C macro)”Œc.DIV_U64_ROUND_CLOSEST”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDIV_U64_ROUND_CLOSEST”h]”j)�”}”(hŒDIV_U64_ROUND_CLOSEST”h]”j{)�”}”(hŒDIV_U64_ROUND_CLOSEST”h]”j�)�”}”(hj·0h]”hŒDIV_U64_ROUND_CLOSEST”…”�”}”(hjÁ0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½0ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¹0h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M’ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjµ0h²hh³jÔ0h´M’ubah}”(h]”j°0ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÔ0h´M’hj²0h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj²0h²hh³jÔ0h´M’ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjí0jæjí0jç‰jè‰jé‰uh1jh²hhjh³Nh´NubhÝ)�”}”(hŒ-``DIV_U64_ROUND_CLOSEST (dividend, divisor)``”h]”j)�”}”(hjó0h]”hŒ)DIV_U64_ROUND_CLOSEST (dividend, divisor)”…”�”}”(hjõ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M”hjh²hubj•)�”}”(hŒDunsigned 64bit divide with 32bit divisor rounded to nearest integer ”h]”hÝ)�”}”(hŒCunsigned 64bit divide with 32bit divisor rounded to nearest integer”h]”hŒCunsigned 64bit divide with 32bit divisor rounded to nearest integer”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M’hj 1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j1h´M’hjh²hubjë)�”}”(hX**Parameters** ``dividend`` unsigned 64bit dividend ``divisor`` unsigned 32bit divisor **Description** Divide unsigned 64bit dividend by unsigned 32bit divisor and round to closest integer. **Return** dividend / divisor rounded to nearest integer”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj(1h]”hŒ Parameters”…”�”}”(hj*1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj&1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M–hj"1ubj )�”}”(hhh]”(j)�”}”(hŒ%``dividend`` unsigned 64bit dividend ”h]”(j)�”}”(hŒ ``dividend``”h]”j)�”}”(hjG1h]”hŒdividend”…”�”}”(hjI1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjE1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M“hjA1ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 64bit dividend”h]”hŒunsigned 64bit dividend”…”�”}”(hj`1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j\1h´M“hj]1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjA1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j\1h´M“hj>1ubj)�”}”(hŒ#``divisor`` unsigned 32bit divisor ”h]”(j)�”}”(hŒ ``divisor``”h]”j)�”}”(hj€1h]”hŒdivisor”…”�”}”(hj‚1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M”hjz1ubj2)�”}”(hhh]”hÝ)�”}”(hŒunsigned 32bit divisor”h]”hŒunsigned 32bit divisor”…”�”}”(hj™1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j•1h´M”hj–1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjz1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j•1h´M”hj>1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj"1ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj»1h]”hŒ Description”…”�”}”(hj½1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¹1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M–hj"1ubhÝ)�”}”(hŒVDivide unsigned 64bit dividend by unsigned 32bit divisor and round to closest integer.”h]”hŒVDivide unsigned 64bit dividend by unsigned 32bit divisor and round to closest integer.”…”�”}”(hjÑ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M•hj"1ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjâ1h]”hŒReturn”…”�”}”(hjä1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjà1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M˜hj"1ubhÝ)�”}”(hŒ-dividend / divisor rounded to nearest integer”h]”hŒ-dividend / divisor rounded to nearest integer”…”�”}”(hjø1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M™hj"1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒDIV_S64_ROUND_CLOSEST (C macro)”Œc.DIV_S64_ROUND_CLOSEST”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDIV_S64_ROUND_CLOSEST”h]”j)�”}”(hŒDIV_S64_ROUND_CLOSEST”h]”j{)�”}”(hŒDIV_S64_ROUND_CLOSEST”h]”j�)�”}”(hj!2h]”hŒDIV_S64_ROUND_CLOSEST”…”�”}”(hj+2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'2ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj#2h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MŸubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj2h²hh³j>2h´MŸubah}”(h]”j2ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j>2h´MŸhj2h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj2h²hh³j>2h´MŸubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjW2jæjW2jç‰jè‰jé‰uh1jh²hhjh³Nh´NubhÝ)�”}”(hŒ-``DIV_S64_ROUND_CLOSEST (dividend, divisor)``”h]”j)�”}”(hj]2h]”hŒ)DIV_S64_ROUND_CLOSEST (dividend, divisor)”…”�”}”(hj_2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M¡hjh²hubj•)�”}”(hŒBsigned 64bit divide with 32bit divisor rounded to nearest integer ”h]”hÝ)�”}”(hŒAsigned 64bit divide with 32bit divisor rounded to nearest integer”h]”hŒAsigned 64bit divide with 32bit divisor rounded to nearest integer”…”�”}”(hjw2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MŸhjs2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j…2h´MŸhjh²hubjë)�”}”(hŒø**Parameters** ``dividend`` signed 64bit dividend ``divisor`` signed 32bit divisor **Description** Divide signed 64bit dividend by signed 32bit divisor and round to closest integer. **Return** dividend / divisor rounded to nearest integer”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj’2h]”hŒ Parameters”…”�”}”(hj”2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M£hjŒ2ubj )�”}”(hhh]”(j)�”}”(hŒ#``dividend`` signed 64bit dividend ”h]”(j)�”}”(hŒ ``dividend``”h]”j)�”}”(hj±2h]”hŒdividend”…”�”}”(hj³2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M hj«2ubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 64bit dividend”h]”hŒsigned 64bit dividend”…”�”}”(hjÊ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÆ2h´M hjÇ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj«2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÆ2h´M hj¨2ubj)�”}”(hŒ!``divisor`` signed 32bit divisor ”h]”(j)�”}”(hŒ ``divisor``”h]”j)�”}”(hjê2h]”hŒdivisor”…”�”}”(hjì2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjè2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M¡hjä2ubj2)�”}”(hhh]”hÝ)�”}”(hŒsigned 32bit divisor”h]”hŒsigned 32bit divisor”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÿ2h´M¡hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjä2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÿ2h´M¡hj¨2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjŒ2ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj%3h]”hŒ Description”…”�”}”(hj'3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M£hjŒ2ubhÝ)�”}”(hŒRDivide signed 64bit dividend by signed 32bit divisor and round to closest integer.”h]”hŒRDivide signed 64bit dividend by signed 32bit divisor and round to closest integer.”…”�”}”(hj;3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M¢hjŒ2ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjL3h]”hŒReturn”…”�”}”(hjN3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M¥hjŒ2ubhÝ)�”}”(hŒ-dividend / divisor rounded to nearest integer”h]”hŒ-dividend / divisor rounded to nearest integer”…”�”}”(hjb3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M¦hjŒ2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œroundup_u64 (C function)”Œ c.roundup_u64”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒu64 roundup_u64 (u64 x, u32 y)”h]”j)�”}”(hŒu64 roundup_u64(u64 x, u32 y)”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj”3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j–3Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ roundup_u64”sbŒ c.roundup_u64”†”asbuh1hhj�3h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�3h²hh³jµ3h´M³ubj{)�”}”(hŒ roundup_u64”h]”j�)�”}”(hj²3h]”hŒ roundup_u64”…”�”}”(hjÈ3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄ3ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�3h²hh³jµ3h´M³ubjœ)�”}”(hŒ(u64 x, u32 y)”h]”(j¢)�”}”(hŒu64 x”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjæ3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjã3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jè3Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j°3Œ c.roundup_u64”†”asbuh1hhjß3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjß3ubj�)�”}”(hjÙh]”hŒx”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjß3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÛ3ubj¢)�”}”(hŒu32 y”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj-4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj*4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j/4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j°3Œ c.roundup_u64”†”asbuh1hhj&4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&4ubj�)�”}”(hŒy”h]”hŒy”…”�”}”(hjY4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÛ3ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�3h²hh³jµ3h´M³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‰3h²hh³jµ3h´M³ubah}”(h]”j„3ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jµ3h´M³hj†3h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ;Round up a 64bit value to the next specified 32bit multiple”h]”hŒ;Round up a 64bit value to the next specified 32bit multiple”…”�”}”(hjƒ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M³hj€4h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj†3h²hh³jµ3h´M³ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj›4jæj›4jç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hX**Parameters** ``u64 x`` the value to up ``u32 y`` 32bit multiple to round up to **Description** Rounds **x** to the next multiple of **y**. For 32bit **x** values, see roundup and the faster round_up() for powers of 2. **Return** rounded up value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¥4h]”hŒ Parameters”…”�”}”(hj§4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M·hjŸ4ubj )�”}”(hhh]”(j)�”}”(hŒ``u64 x`` the value to up ”h]”(j)�”}”(hŒ ``u64 x``”h]”j)�”}”(hjÄ4h]”hŒu64 x”…”�”}”(hjÆ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M´hj¾4ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe value to up”h]”hŒthe value to up”…”�”}”(hjÝ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÙ4h´M´hjÚ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¾4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÙ4h´M´hj»4ubj)�”}”(hŒ(``u32 y`` 32bit multiple to round up to ”h]”(j)�”}”(hŒ ``u32 y``”h]”j)�”}”(hjý4h]”hŒu32 y”…”�”}”(hjÿ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´Mµhj÷4ubj2)�”}”(hhh]”hÝ)�”}”(hŒ32bit multiple to round up to”h]”hŒ32bit multiple to round up to”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j5h´Mµhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj÷4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j5h´Mµhj»4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjŸ4ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj85h]”hŒ Description”…”�”}”(hj:5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj65ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M·hjŸ4ubhÝ)�”}”(hŒzRounds **x** to the next multiple of **y**. For 32bit **x** values, see roundup and the faster round_up() for powers of 2.”h]”(hŒRounds ”…”�”}”(hjN5h²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjV5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjN5ubhŒ to the next multiple of ”…”�”}”(hjN5h²hh³Nh´Nubjõ)�”}”(hŒ**y**”h]”hŒy”…”�”}”(hjh5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjN5ubhŒ . For 32bit ”…”�”}”(hjN5h²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjz5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjN5ubhŒ? values, see roundup and the faster round_up() for powers of 2.”…”�”}”(hjN5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M¶hjŸ4ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj•5h]”hŒReturn”…”�”}”(hj—5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´M¹hjŸ4ubhÝ)�”}”(hŒrounded up value.”h]”hŒrounded up value.”…”�”}”(hj«5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:178: ./include/linux/math64.h”h´MºhjŸ4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œgcd (C function)”Œc.gcd”hNt”auh1hýhjh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4unsigned long gcd (unsigned long a, unsigned long b)”h]”j)�”}”(hŒ3unsigned long gcd(unsigned long a, unsigned long b)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÚ5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÖ5h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:181: ./lib/math/gcd.c”h´K.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖ5h²hh³jè5h´K.ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj÷5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÖ5h²hh³jè5h´K.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖ5h²hh³jè5h´K.ubj{)�”}”(hŒgcd”h]”j�)�”}”(hŒgcd”h]”hŒgcd”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÖ5h²hh³jè5h´K.ubjœ)�”}”(hŒ"(unsigned long a, unsigned long b)”h]”(j¢)�”}”(hŒunsigned long a”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj36h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj/6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/6ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjO6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj/6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/6ubj�)�”}”(hjI¢h]”hŒa”…”�”}”(hjk6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+6ubj¢)�”}”(hŒunsigned long b”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjƒ6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŸ6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6ubj�)�”}”(hj¦¢h]”hŒb”…”�”}”(hj»6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+6ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÖ5h²hh³jè5h´K.ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÒ5h²hh³jè5h´K.ubah}”(h]”jÍ5ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jè5h´K.hjÏ5h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒDcalculate and return the greatest common divisor of 2 unsigned longs”h]”hŒDcalculate and return the greatest common divisor of 2 unsigned longs”…”�”}”(hjä6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:181: ./lib/math/gcd.c”h´K.hjá6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÏ5h²hh³jè5h´K.ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjü6jæjü6jç‰jè‰jé‰uh1jh²hhjh³Nh´Nubjë)�”}”(hŒU**Parameters** ``unsigned long a`` first value ``unsigned long b`` second value”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj7h]”hŒ Parameters”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:181: ./lib/math/gcd.c”h´K2hj7ubj )�”}”(hhh]”(j)�”}”(hŒ ``unsigned long a`` first value ”h]”(j)�”}”(hŒ``unsigned long a``”h]”j)�”}”(hj%7h]”hŒunsigned long a”…”�”}”(hj'7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:181: ./lib/math/gcd.c”h´K/hj7ubj2)�”}”(hhh]”hÝ)�”}”(hŒ first value”h]”hŒ first value”…”�”}”(hj>7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:7h´K/hj;7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:7h´K/hj7ubj)�”}”(hŒ ``unsigned long b`` second value”h]”(j)�”}”(hŒ``unsigned long b``”h]”j)�”}”(hj^7h]”hŒunsigned long b”…”�”}”(hj`7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:181: ./lib/math/gcd.c”h´K1hjX7ubj2)�”}”(hhh]”hÝ)�”}”(hŒ second value”h]”hŒ second value”…”�”}”(hjw7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:181: ./lib/math/gcd.c”h´K0hjt7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjX7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³js7h´K1hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjh²hh³Nh´Nubeh}”(h]”Œdivision-functions”ah ]”h"]”Œdivision functions”ah$]”h&]”uh1hµhj†žh²hh³hÊh´K­ubh¶)�”}”(hhh]”(h»)�”}”(hŒ UUID/GUID”h]”hŒ UUID/GUID”…”�”}”(hjª7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj§7h²hh³hÊh´K¹ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!generate_random_uuid (C function)”Œc.generate_random_uuid”hNt”auh1hýhj§7h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2void generate_random_uuid (unsigned char uuid[16])”h]”j)�”}”(hŒ1void generate_random_uuid(unsigned char uuid[16])”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÑ7h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÍ7h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍ7h²hh³jß7h´Kubj{)�”}”(hŒgenerate_random_uuid”h]”j�)�”}”(hŒgenerate_random_uuid”h]”hŒgenerate_random_uuid”…”�”}”(hjò7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjî7ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÍ7h²hh³jß7h´Kubjœ)�”}”(hŒ(unsigned char uuid[16])”h]”j¢)�”}”(hŒunsigned char uuid[16]”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj 8ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj 8ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj*8h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj 8ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj88h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj 8ubj�)�”}”(hŒuuid”h]”hŒuuid”…”�”}”(hjF8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj 8ubjã)�”}”(hj'Þh]”hŒ[”…”�”}”(hjT8h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj 8ubhŒdesc_sig_literal_number”“”)�”}”(hŒ16”h]”hŒ16”…”�”}”(hjc8h²hh³Nh´Nubah}”(h]”h ]”Œm”ah"]”h$]”h&]”uh1ja8hj 8ubjã)�”}”(hjVÞh]”hŒ]”…”�”}”(hjr8h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj 8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj8ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÍ7h²hh³jß7h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÉ7h²hh³jß7h´Kubah}”(h]”jÄ7ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jß7h´KhjÆ7h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒgenerate a random UUID”h]”hŒgenerate a random UUID”…”�”}”(hj›8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´Khj˜8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÆ7h²hh³jß7h´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj³8jæj³8jç‰jè‰jé‰uh1jh²hhj§7h³Nh´Nubjë)�”}”(hŒÕ**Parameters** ``unsigned char uuid[16]`` where to put the generated UUID **Description** Random UUID interface Used to create a Boot ID or a filesystem UUID/GUID, but can be useful for other kernel drivers.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj½8h]”hŒ Parameters”…”�”}”(hj¿8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´Khj·8ubj )�”}”(hhh]”j)�”}”(hŒ;``unsigned char uuid[16]`` where to put the generated UUID ”h]”(j)�”}”(hŒ``unsigned char uuid[16]``”h]”j)�”}”(hjÜ8h]”hŒunsigned char uuid[16]”…”�”}”(hjÞ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KhjÖ8ubj2)�”}”(hhh]”hÝ)�”}”(hŒwhere to put the generated UUID”h]”hŒwhere to put the generated UUID”…”�”}”(hjõ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jñ8h´Khjò8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÖ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñ8h´KhjÓ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj·8ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj9h]”hŒ Description”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´Khj·8ubhÝ)�”}”(hŒRandom UUID interface”h]”hŒRandom UUID interface”…”�”}”(hj-9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´Khj·8ubhÝ)�”}”(hŒ_Used to create a Boot ID or a filesystem UUID/GUID, but can be useful for other kernel drivers.”h]”hŒ_Used to create a Boot ID or a filesystem UUID/GUID, but can be useful for other kernel drivers.”…”�”}”(hj<9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´Khj·8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj§7h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œuuid_is_valid (C function)”Œc.uuid_is_valid”hNt”auh1hýhj§7h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%bool uuid_is_valid (const char *uuid)”h]”j)�”}”(hŒ$bool uuid_is_valid(const char *uuid)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjk9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjg9h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjg9h²hh³jx9h´KNubj{)�”}”(hŒ uuid_is_valid”h]”j�)�”}”(hŒ uuid_is_valid”h]”hŒ uuid_is_valid”…”�”}”(hj‹9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡9ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjg9h²hh³jx9h´KNubjœ)�”}”(hŒ(const char *uuid)”h]”j¢)�”}”(hŒconst char *uuid”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj§9h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj£9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£9ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÂ9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj£9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£9ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÞ9h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj£9ubj�)�”}”(hŒuuid”h]”hŒuuid”…”�”}”(hjë9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŸ9ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjg9h²hh³jx9h´KNubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjc9h²hh³jx9h´KNubah}”(h]”j^9ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jx9h´KNhj`9h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ checks if a UUID string is valid”h]”hŒ checks if a UUID string is valid”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KNhj:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj`9h²hh³jx9h´KNubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj-:jæj-:jç‰jè‰jé‰uh1jh²hhj§7h³Nh´Nubjë)�”}”(hŒ÷**Parameters** ``const char *uuid`` UUID string to check **Description** It checks if the UUID string is following the format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx where x is a hex digit. **Return** true if input is valid UUID string.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj7:h]”hŒ Parameters”…”�”}”(hj9:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KRhj1:ubj )�”}”(hhh]”j)�”}”(hŒ*``const char *uuid`` UUID string to check ”h]”(j)�”}”(hŒ``const char *uuid``”h]”j)�”}”(hjV:h]”hŒconst char *uuid”…”�”}”(hjX:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KOhjP:ubj2)�”}”(hhh]”hÝ)�”}”(hŒUUID string to check”h]”hŒUUID string to check”…”�”}”(hjo:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jk:h´KOhjl:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjP:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jk:h´KOhjM:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj1:ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‘:h]”hŒ Description”…”�”}”(hj“:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KQhj1:ubj )�”}”(hhh]”j)�”}”(hŒ[It checks if the UUID string is following the format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ”h]”(j)�”}”(hŒ5It checks if the UUID string is following the format:”h]”hŒ5It checks if the UUID string is following the format:”…”�”}”(hj®:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KRhjª:ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”h]”hŒ$xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”…”�”}”(hjÀ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼:h´KRhj½:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjª:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼:h´KRhj§:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj1:ubhÝ)�”}”(hŒwhere x is a hex digit.”h]”hŒwhere x is a hex digit.”…”�”}”(hjà:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KThj1:ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjñ:h]”hŒReturn”…”�”}”(hjó:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjï:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KVhj1:ubhÝ)�”}”(hŒ#true if input is valid UUID string.”h]”hŒ#true if input is valid UUID string.”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:187: ./lib/uuid.c”h´KWhj1:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj§7h²hh³Nh´Nubeh}”(h]”Œ uuid-guid”ah ]”h"]”Œ uuid/guid”ah$]”h&]”uh1hµhj†žh²hh³hÊh´K¹ubeh}”(h]”Œcrc-and-math-functions-in-linux”ah ]”h"]”Œcrc and math functions in linux”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kzubh¶)�”}”(hhh]”(h»)�”}”(hŒKernel IPC facilities”h]”hŒKernel IPC facilities”…”�”}”(hj0;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj-;h²hh³hÊh´K¿ubh¶)�”}”(hhh]”(h»)�”}”(hŒ IPC utilities”h]”hŒ IPC utilities”…”�”}”(hjA;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj>;h²hh³hÊh´KÂubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_init (C function)”Œ c.ipc_init”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒint ipc_init (void)”h]”j)�”}”(hŒint ipc_init(void)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjh;h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjd;h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´KQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjd;h²hh³jv;h´KQubj{)�”}”(hŒipc_init”h]”j�)�”}”(hŒipc_init”h]”hŒipc_init”…”�”}”(hj‰;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…;ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjd;h²hh³jv;h´KQubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¥;h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¡;ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�;ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjd;h²hh³jv;h´KQubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj`;h²hh³jv;h´KQubah}”(h]”j[;ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jv;h´KQhj];h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒinitialise ipc subsystem”h]”hŒinitialise ipc subsystem”…”�”}”(hjÏ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´KQhjÌ;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj];h²hh³jv;h´KQubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjç;jæjç;jç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hXX**Parameters** ``void`` no arguments **Description** The various sysv ipc resources (semaphores, messages and shared memory) are initialised. A callback routine is registered into the memory hotplug notifier chain: since msgmni scales to lowmem this callback routine will be called upon successful memory add / remove to recompute msmgni.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjñ;h]”hŒ Parameters”…”�”}”(hjó;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjï;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´KUhjë;ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj<h]”hŒvoid”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Khj <ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj)<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j%<h´Khj&<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj <ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j%<h´Khj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjë;ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjK<h]”hŒ Description”…”�”}”(hjM<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjI<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Khjë;ubhÝ)�”}”(hŒXThe various sysv ipc resources (semaphores, messages and shared memory) are initialised.”h]”hŒXThe various sysv ipc resources (semaphores, messages and shared memory) are initialised.”…”�”}”(hja<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´KRhjë;ubhÝ)�”}”(hŒÄA callback routine is registered into the memory hotplug notifier chain: since msgmni scales to lowmem this callback routine will be called upon successful memory add / remove to recompute msmgni.”h]”hŒÄA callback routine is registered into the memory hotplug notifier chain: since msgmni scales to lowmem this callback routine will be called upon successful memory add / remove to recompute msmgni.”…”�”}”(hjp<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´KUhjë;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_init_ids (C function)”Œc.ipc_init_ids”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'void ipc_init_ids (struct ipc_ids *ids)”h]”j)�”}”(hŒ&void ipc_init_ids(struct ipc_ids *ids)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŸ<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›<h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Kmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›<h²hh³j­<h´Kmubj{)�”}”(hŒ ipc_init_ids”h]”j�)�”}”(hŒ ipc_init_ids”h]”hŒ ipc_init_ids”…”�”}”(hjÀ<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼<ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj›<h²hh³j­<h´Kmubjœ)�”}”(hŒ(struct ipc_ids *ids)”h]”j¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÜ<h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjØ<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØ<ubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjú<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jü<Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÂ<sbŒc.ipc_init_ids”†”asbuh1hhjØ<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØ<ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj(=h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjØ<ubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hj5=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØ<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ<ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj›<h²hh³j­<h´Kmubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—<h²hh³j­<h´Kmubah}”(h]”j’<ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­<h´Kmhj”<h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒinitialise ipc identifiers”h]”hŒinitialise ipc identifiers”…”�”}”(hj_=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Kmhj\=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”<h²hh³j­<h´Kmubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjw=jæjw=jç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hŒÔ**Parameters** ``struct ipc_ids *ids`` ipc identifier set **Description** Set up the sequence range to use for the ipc identifier range (limited below ipc_mni) then initialise the keys hashtable and ids idr.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�=h]”hŒ Parameters”…”�”}”(hjƒ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Kqhj{=ubj )�”}”(hhh]”j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hj =h]”hŒstruct ipc_ids *ids”…”�”}”(hj¢=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjž=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Knhjš=ubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hj¹=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµ=h´Knhj¶=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjš=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµ=h´Knhj—=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj{=ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÛ=h]”hŒ Description”…”�”}”(hjÝ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Kphj{=ubhÝ)�”}”(hŒ…Set up the sequence range to use for the ipc identifier range (limited below ipc_mni) then initialise the keys hashtable and ids idr.”h]”hŒ…Set up the sequence range to use for the ipc identifier range (limited below ipc_mni) then initialise the keys hashtable and ids idr.”…”�”}”(hjñ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Kohj{=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$ipc_init_proc_interface (C function)”Œc.ipc_init_proc_interface”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒtvoid ipc_init_proc_interface (const char *path, const char *header, int ids, int (*show)(struct seq_file *, void *))”h]”j)�”}”(hŒqvoid ipc_init_proc_interface(const char *path, const char *header, int ids, int (*show)(struct seq_file*, void*))”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj >h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj>h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>h²hh³j.>h´K„ubj{)�”}”(hŒipc_init_proc_interface”h]”j�)�”}”(hŒipc_init_proc_interface”h]”hŒipc_init_proc_interface”…”�”}”(hjA>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj=>ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj>h²hh³j.>h´K„ubjœ)�”}”(hŒU(const char *path, const char *header, int ids, int (*show)(struct seq_file*, void*))”h]”(j¢)�”}”(hŒconst char *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj]>h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjY>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjY>ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjx>h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjY>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjY>ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj”>h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjY>ubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj¡>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjY>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjU>ubj¢)�”}”(hŒconst char *header”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjº>h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¶>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶>ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÕ>h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶>ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjñ>h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¶>ubj�)�”}”(hŒheader”h]”hŒheader”…”�”}”(hjþ>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjU>ubj¢)�”}”(hŒint ids”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?ubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hj3?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjU>ubj¢)�”}”(hŒ$int (*show)(struct seq_file*, void*)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjL?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjH?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH?ubjã)�”}”(hŒ(”h]”hŒ(”…”�”}”(hjh?h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH?ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjv?h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH?ubj�)�”}”(hŒshow”h]”hŒshow”…”�”}”(hjƒ?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjH?ubjã)�”}”(hŒ)”h]”hŒ)”…”�”}”(hj‘?h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH?ubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hjŸ?h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH?ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¬?h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjH?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH?ubh)�”}”(hhh]”j�)�”}”(hŒseq_file”h]”hŒseq_file”…”�”}”(hjÊ?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇ?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÌ?Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jC>sbŒc.ipc_init_proc_interface”†”asbuh1hhjH?ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjê?h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH?ubjã)�”}”(hŒ,”h]”hŒ,”…”�”}”(hj÷?h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH?ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjH?ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj!@h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH?ubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hj.@h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjH?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjU>ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj>h²hh³j.>h´K„ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj>h²hh³j.>h´K„ubah}”(h]”j>ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j.>h´K„hj>h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒDcreate a proc interface for sysipc types using a seq_file interface.”h]”hŒDcreate a proc interface for sysipc types using a seq_file interface.”…”�”}”(hjW@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K„hjT@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj>h²hh³j.>h´K„ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjo@jæjo@jç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hŒæ**Parameters** ``const char *path`` Path in procfs ``const char *header`` Banner to be printed at the beginning of the file. ``int ids`` ipc id table to iterate. ``int (*show)(struct seq_file *, void *)`` show routine.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjy@h]”hŒ Parameters”…”�”}”(hj{@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjw@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Kˆhjs@ubj )�”}”(hhh]”(j)�”}”(hŒ$``const char *path`` Path in procfs ”h]”(j)�”}”(hŒ``const char *path``”h]”j)�”}”(hj˜@h]”hŒconst char *path”…”�”}”(hjš@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K…hj’@ubj2)�”}”(hhh]”hÝ)�”}”(hŒPath in procfs”h]”hŒPath in procfs”…”�”}”(hj±@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j­@h´K…hj®@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj’@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­@h´K…hj�@ubj)�”}”(hŒJ``const char *header`` Banner to be printed at the beginning of the file. ”h]”(j)�”}”(hŒ``const char *header``”h]”j)�”}”(hjÑ@h]”hŒconst char *header”…”�”}”(hjÓ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K†hjË@ubj2)�”}”(hhh]”hÝ)�”}”(hŒ2Banner to be printed at the beginning of the file.”h]”hŒ2Banner to be printed at the beginning of the file.”…”�”}”(hjê@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jæ@h´K†hjç@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjË@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jæ@h´K†hj�@ubj)�”}”(hŒ%``int ids`` ipc id table to iterate. ”h]”(j)�”}”(hŒ ``int ids``”h]”j)�”}”(hj Ah]”hŒint ids”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K‡hjAubj2)�”}”(hhh]”hÝ)�”}”(hŒipc id table to iterate.”h]”hŒipc id table to iterate.”…”�”}”(hj#Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jAh´K‡hj Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jAh´K‡hj�@ubj)�”}”(hŒ8``int (*show)(struct seq_file *, void *)`` show routine.”h]”(j)�”}”(hŒ*``int (*show)(struct seq_file *, void *)``”h]”j)�”}”(hjCAh]”hŒ&int (*show)(struct seq_file *, void *)”…”�”•}”(hjEAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAAubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K‰hj=Aubj2)�”}”(hhh]”hÝ)�”}”(hŒ show routine.”h]”hŒ show routine.”…”�”}”(hj\Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´KˆhjYAubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jXAh´K‰hj�@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjs@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_findkey (C function)”Œ c.ipc_findkey”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCstruct kern_ipc_perm * ipc_findkey (struct ipc_ids *ids, key_t key)”h]”j)�”}”(hŒAstruct kern_ipc_perm *ipc_findkey(struct ipc_ids *ids, key_t key)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�Ah²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj™Ah²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™Ah²hh³jªAh´K£ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj¼Ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¾AŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ ipc_findkey”sbŒ c.ipc_findkey”†”asbuh1hhj™Ah²hh³jªAh´K£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝAh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™Ah²hh³jªAh´K£ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjëAh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj™Ah²hh³jªAh´K£ubj{)�”}”(hŒ ipc_findkey”h]”j�)�”}”(hjÚAh]”hŒ ipc_findkey”…”�”}”(hjüAh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjøAubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj™Ah²hh³jªAh´K£ubjœ)�”}”(hŒ (struct ipc_ids *ids, key_t key)”h]”(j¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hj5Bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j7BŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jØAŒ c.ipc_findkey”†”asbuh1hhjBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjaBh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjBubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hjnBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjBubj¢)�”}”(hŒ key_t key”h]”(h)�”}”(hhh]”j�)�”}”(hŒkey_t”h]”hŒkey_t”…”�”}”(hjŠBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡Bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒBŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jØAŒ c.ipc_findkey”†”asbuh1hhjƒBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨Bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒBubj�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hj¶Bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjBubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj™Ah²hh³jªAh´K£ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj•Ah²hh³jªAh´K£ubah}”(h]”j�Aah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jªAh´K£hj’Ah²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#find a key in an ipc identifier set”h]”hŒ#find a key in an ipc identifier set”…”�”}”(hjàBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K£hjÝBh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj’Ah²hh³jªAh´K£ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjøBjæjøBjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hX**Parameters** ``struct ipc_ids *ids`` ipc identifier set ``key_t key`` key to find **Description** Returns the locked pointer to the ipc structure if found or NULL otherwise. If key is found ipc points to the owning ipc structure Called with writer ipc_ids.rwsem held.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjCh]”hŒ Parameters”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K§hjüBubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hj!Ch]”hŒstruct ipc_ids *ids”…”�”}”(hj#Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K¤hjCubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hj:Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j6Ch´K¤hj7Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j6Ch´K¤hjCubj)�”}”(hŒ``key_t key`` key to find ”h]”(j)�”}”(hŒ ``key_t key``”h]”j)�”}”(hjZCh]”hŒ key_t key”…”�”}”(hj\Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXCubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K¥hjTCubj2)�”}”(hhh]”hÝ)�”}”(hŒ key to find”h]”hŒ key to find”…”�”}”(hjsCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³joCh´K¥hjpCubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjTCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³joCh´K¥hjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjüBubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj•Ch]”hŒ Description”…”�”}”(hj—Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K§hjüBubhÝ)�”}”(hŒ‚Returns the locked pointer to the ipc structure if found or NULL otherwise. If key is found ipc points to the owning ipc structure”h]”hŒ‚Returns the locked pointer to the ipc structure if found or NULL otherwise. If key is found ipc points to the owning ipc structure”…”�”}”(hj«Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K¦hjüBubhÝ)�”}”(hŒ&Called with writer ipc_ids.rwsem held.”h]”hŒ&Called with writer ipc_ids.rwsem held.”…”�”}”(hjºCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´K©hjüBubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_addid (C function)”Œ c.ipc_addid”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIint ipc_addid (struct ipc_ids *ids, struct kern_ipc_perm *new, int limit)”h]”j)�”}”(hŒHint ipc_addid(struct ipc_ids *ids, struct kern_ipc_perm *new, int limit)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjéCh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjåCh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåCh²hh³j÷Ch´Mubj{)�”}”(hŒ ipc_addid”h]”j�)�”}”(hŒ ipc_addid”h]”hŒ ipc_addid”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjåCh²hh³j÷Ch´Mubjœ)�”}”(hŒ;(struct ipc_ids *ids, struct kern_ipc_perm *new, int limit)”h]”(j¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj&Dh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj"Dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Dh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj"Dubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjDDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjADubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jFDŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j DsbŒ c.ipc_addid”†”asbuh1hhj"Dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj"Dubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjrDh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj"Dubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"Dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDubj¢)�”}”(hŒstruct kern_ipc_perm *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj˜Dh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj”Dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Dh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”Dubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj¶Dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¸DŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j`DŒ c.ipc_addid”†”asbuh1hhj”Dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”Dubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjâDh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj”Dubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjïDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”Dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDubj¢)�”}”(hŒ int limit”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEubj�)�”}”(hŒlimit”h]”hŒlimit”…”�”}”(hj$Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjåCh²hh³j÷Ch´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjáCh²hh³j÷Ch´Mubah}”(h]”jÜCah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j÷Ch´MhjÞCh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒadd an ipc identifier”h]”hŒadd an ipc identifier”…”�”}”(hjNEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjKEh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÞCh²hh³j÷Ch´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjfEjæjfEjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hX4**Parameters** ``struct ipc_ids *ids`` ipc identifier set ``struct kern_ipc_perm *new`` new ipc permission set ``int limit`` limit for the number of used ids **Description** Add an entry 'new' to the ipc ids idr. The permissions object is initialised and the first free entry is set up and the index assigned is returned. The 'new' entry is returned in a locked state on success. On failure the entry is not locked and a negative err-code is returned. The caller must use ipc_rcu_putref() to free the identifier. Called with writer ipc_ids.rwsem held.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjpEh]”hŒ Parameters”…”�”}”(hjrEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M hjjEubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hj�Eh]”hŒstruct ipc_ids *ids”…”�”}”(hj‘Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M hj‰Eubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hj¨Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤Eh´M hj¥Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤Eh´M hj†Eubj)�”}”(hŒ5``struct kern_ipc_perm *new`` new ipc permission set ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *new``”h]”j)�”}”(hjÈEh]”hŒstruct kern_ipc_perm *new”…”�”}”(hjÊEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆEubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M hjÂEubj2)�”}”(hhh]”hÝ)�”}”(hŒnew ipc permission set”h]”hŒnew ipc permission set”…”�”}”(hjáEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝEh´M hjÞEubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝEh´M hj†Eubj)�”}”(hŒ/``int limit`` limit for the number of used ids ”h]”(j)�”}”(hŒ ``int limit``”h]”j)�”}”(hjFh]”hŒ int limit”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿEubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M hjûEubj2)�”}”(hhh]”hÝ)�”}”(hŒ limit for the number of used ids”h]”hŒ limit for the number of used ids”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jFh´M hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jFh´M hj†Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjjEubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M hjjEubhÝ)�”}”(hŒÍAdd an entry 'new' to the ipc ids idr. The permissions object is initialised and the first free entry is set up and the index assigned is returned. The 'new' entry is returned in a locked state on success.”h]”hŒÕAdd an entry ‘new’ to the ipc ids idr. The permissions object is initialised and the first free entry is set up and the index assigned is returned. The ‘new’ entry is returned in a locked state on success.”…”�”}”(hjRFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M hjjEubhÝ)�”}”(hŒ„On failure the entry is not locked and a negative err-code is returned. The caller must use ipc_rcu_putref() to free the identifier.”h]”hŒ„On failure the entry is not locked and a negative err-code is returned. The caller must use ipc_rcu_putref() to free the identifier.”…”�”}”(hjaFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjjEubhÝ)�”}”(hŒ&Called with writer ipc_ids.rwsem held.”h]”hŒ&Called with writer ipc_ids.rwsem held.”…”�”}”(hjpFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjjEubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipcget_new (C function)”Œ c.ipcget_new”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒtint ipcget_new (struct ipc_namespace *ns, struct ipc_ids *ids, const struct ipc_ops *ops, struct ipc_params *params)”h]”j)�”}”(hŒsint ipcget_new(struct ipc_namespace *ns, struct ipc_ids *ids, const struct ipc_ops *ops, struct ipc_params *params)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŸFh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›Fh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›Fh²hh³j­Fh´MJubj{)�”}”(hŒ ipcget_new”h]”j�)�”}”(hŒ ipcget_new”h]”hŒ ipcget_new”…”�”}”(hjÀFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼Fubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj›Fh²hh³j­Fh´MJubjœ)�”}”(hŒe(struct ipc_namespace *ns, struct ipc_ids *ids, const struct ipc_ops *ops, struct ipc_params *params)”h]”(j¢)�”}”(hŒstruct ipc_namespace *ns”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÜFh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjØFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØFubh)�”}”(hhh]”j�)�”}”(hŒ ipc_namespace”h]”hŒ ipc_namespace”…”�”}”(hjúFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷Fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jüFŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÂFsbŒ c.ipcget_new”†”asbuh1hhjØFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØFubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj(Gh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjØFubj�)�”}”(hŒns”h]”hŒns”…”�”}”(hj5Gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔFubj¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjNGh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Gh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJGubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjlGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jnGŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jGŒ c.ipcget_new”†”asbuh1hhjJGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJGubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj˜Gh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjJGubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hj¥Gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔFubj¢)�”}”(hŒconst struct ipc_ops *ops”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¾Gh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjºGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºGubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÙGh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjºGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºGubh)�”}”(hhh]”j�)�”}”(hŒipc_ops”h]”hŒipc_ops”…”�”}”(hj÷Gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jùGŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jGŒ c.ipcget_new”†”asbuh1hhjºGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºGubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj#Hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjºGubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hj0Hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔFubj¢)�”}”(hŒstruct ipc_params *params”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjIHh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjEHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEHubh)�”}”(hhh]”j�)�”}”(hŒ ipc_params”h]”hŒ ipc_params”…”�”}”(hjgHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jiHŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jGŒ c.ipcget_new”†”asbuh1hhjEHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEHubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj“Hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjEHubj�)�”}”(hŒparams”h]”hŒparams”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjEHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔFubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj›Fh²hh³j­Fh´MJubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—Fh²hh³j­Fh´MJubah}”(h]”j’Fah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­Fh´MJhj”Fh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒcreate a new ipc object”h]”hŒcreate a new ipc object”…”�”}”(hjÊHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MJhjÇHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”Fh²hh³j­Fh´MJubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjâHjæjâHjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hXR**Parameters** ``struct ipc_namespace *ns`` ipc namespace ``struct ipc_ids *ids`` ipc identifier set ``const struct ipc_ops *ops`` the actual creation routine to call ``struct ipc_params *params`` its parameters **Description** This routine is called by sys_msgget, sys_semget() and sys_shmget() when the key is IPC_PRIVATE.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjìHh]”hŒ Parameters”…”�”}”(hjîHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjêHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MNhjæHubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_namespace *ns`` ipc namespace ”h]”(j)�”}”(hŒ``struct ipc_namespace *ns``”h]”j)�”}”(hj Ih]”hŒstruct ipc_namespace *ns”…”�”}”(hj Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MKhjIubj2)�”}”(hhh]”hÝ)�”}”(hŒ ipc namespace”h]”hŒ ipc namespace”…”�”}”(hj$Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Ih´MKhj!Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Ih´MKhjIubj)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hjDIh]”hŒstruct ipc_ids *ids”…”�”}”(hjFIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBIubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MLhj>Iubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hj]Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jYIh´MLhjZIubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj>Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jYIh´MLhjIubj)�”}”(hŒB``const struct ipc_ops *ops`` the actual creation routine to call ”h]”(j)�”}”(hŒ``const struct ipc_ops *ops``”h]”j)�”}”(hj}Ih]”hŒconst struct ipc_ops *ops”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MMhjwIubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the actual creation routine to call”h]”hŒ#the actual creation routine to call”…”�”}”(hj–Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j’Ih´MMhj“Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjwIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j’Ih´MMhjIubj)�”}”(hŒ-``struct ipc_params *params`` its parameters ”h]”(j)�”}”(hŒ``struct ipc_params *params``”h]”j)�”}”(hj¶Ih]”hŒstruct ipc_params *params”…”�”}”(hj¸Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MNhj°Iubj2)�”}”(hhh]”hÝ)�”}”(hŒits parameters”h]”hŒits parameters”…”�”}”(hjÏIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jËIh´MNhjÌIubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj°Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jËIh´MNhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjæHubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjñIh]”hŒ Description”…”�”}”(hjóIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjïIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MPhjæHubhÝ)�”}”(hŒ`This routine is called by sys_msgget, sys_semget() and sys_shmget() when the key is IPC_PRIVATE.”h]”hŒ`This routine is called by sys_msgget, sys_semget() and sys_shmget() when the key is IPC_PRIVATE.”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MOhjæHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_check_perms (C function)”Œc.ipc_check_perms”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ€int ipc_check_perms (struct ipc_namespace *ns, struct kern_ipc_perm *ipcp, const struct ipc_ops *ops, struct ipc_params *params)”h]”j)�”}”(hŒint ipc_check_perms(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp, const struct ipc_ops *ops, struct ipc_params *params)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj6Jh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj2Jh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2Jh²hh³jDJh´M_ubj{)�”}”(hŒipc_check_perms”h]”j�)�”}”(hŒipc_check_perms”h]”hŒipc_check_perms”…”�”}”(hjWJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSJubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj2Jh²hh³jDJh´M_ubjœ)�”}”(hŒl(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp, const struct ipc_ops *ops, struct ipc_params *params)”h]”(j¢)�”}”(hŒstruct ipc_namespace *ns”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjsJh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjoJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoJubh)�”}”(hhh]”j�)�”}”(hŒ ipc_namespace”h]”hŒ ipc_namespace”…”�”}”(hj‘Jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j“JŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jYJsbŒc.ipc_check_perms”†”asbuh1hhjoJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoJubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¿Jh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjoJubj�)�”}”(hŒns”h]”hŒns”…”�”}”(hjÌJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjkJubj¢)�”}”(hŒstruct kern_ipc_perm *ipcp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjåJh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjáJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáJubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jKŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j­JŒc.ipc_check_perms”†”asbuh1hhjáJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!Kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáJubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj/Kh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjáJubj�)�”}”(hŒipcp”h]”hŒipcp”…”�”}”(hjah"]”h$]”h&]”uh1j1hjQKubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjpKh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjQKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQKubh)�”}”(hhh]”j�)�”}”(hŒipc_ops”h]”hŒipc_ops”…”�”}”(hjŽKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹Kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�KŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j­JŒc.ipc_check_perms”†”asbuh1hhjQKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬Kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQKubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjºKh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjQKubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hjÇKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjkJubj¢)�”}”(hŒstruct ipc_params *params”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjàKh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÜKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíKh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜKubh)�”}”(hhh]”j�)�”}”(hŒ ipc_params”h]”hŒ ipc_params”…”�”}”(hjþKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjûKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jLŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j­JŒc.ipc_check_perms”†”asbuh1hhjÜKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜKubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj*Lh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÜKubj�)�”}”(hŒparams”h]”hŒparams”…”�”}”(hj7Lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjkJubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj2Jh²hh³jDJh´M_ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj.Jh²hh³jDJh´M_ubah}”(h]”j)Jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jDJh´M_hj+Jh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0check security and permissions for an ipc object”h]”hŒ0check security and permissions for an ipc object”…”�”}”(hjaLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M_hj^Lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj+Jh²hh³jDJh´M_ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjyLjæjyLjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hXä**Parameters** ``struct ipc_namespace *ns`` ipc namespace ``struct kern_ipc_perm *ipcp`` ipc permission set ``const struct ipc_ops *ops`` the actual security routine to call ``struct ipc_params *params`` its parameters **Description** This routine is called by sys_msgget(), sys_semget() and sys_shmget() when the key is not IPC_PRIVATE and that key already exists in the ds IDR. On success, the ipc id is returned. It is called with ipc_ids.rwsem and ipcp->lock held.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjƒLh]”hŒ Parameters”…”�”}”(hj…Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Lubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mchj}Lubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_namespace *ns`` ipc namespace ”h]”(j)�”}”(hŒ``struct ipc_namespace *ns``”h]”j)�”}”(hj¢Lh]”hŒstruct ipc_namespace *ns”…”�”}”(hj¤Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M`hjœLubj2)�”}”(hhh]”hÝ)�”}”(hŒ ipc namespace”h]”hŒ ipc namespace”…”�”}”(hj»Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·Lh´M`hj¸Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·Lh´M`hj™Lubj)�”}”(hŒ2``struct kern_ipc_perm *ipcp`` ipc permission set ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *ipcp``”h]”j)�”}”(hjÛLh]”hŒstruct kern_ipc_perm *ipcp”…”�”}”(hjÝLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙLubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MahjÕLubj2)�”}”(hhh]”hÝ)�”}”(hŒipc permission set”h]”hŒipc permission set”…”�”}”(hjôLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jðLh´MahjñLubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðLh´Mahj™Lubj)�”}”(hŒB``const struct ipc_ops *ops`` the actual security routine to call ”h]”(j)�”}”(hŒ``const struct ipc_ops *ops``”h]”j)�”}”(hjMh]”hŒconst struct ipc_ops *ops”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MbhjMubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the actual security routine to call”h]”hŒ#the actual security routine to call”…”�”}”(hj-Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j)Mh´Mbhj*Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)Mh´Mbhj™Lubj)�”}”(hŒ-``struct ipc_params *params`` its parameters ”h]”(j)�”}”(hŒ``struct ipc_params *params``”h]”j)�”}”(hjMMh]”hŒstruct ipc_params *params”…”�”}”(hjOMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKMubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MchjGMubj2)�”}”(hhh]”hÝ)�”}”(hŒits parameters”h]”hŒits parameters”…”�”}”(hjfMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jbMh´MchjcMubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjGMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbMh´Mchj™Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj}LubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjˆMh]”hŒ Description”…”�”}”(hjŠMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mehj}LubhÝ)�”}”(hŒ�This routine is called by sys_msgget(), sys_semget() and sys_shmget() when the key is not IPC_PRIVATE and that key already exists in the ds IDR.”h]”hŒ�This routine is called by sys_msgget(), sys_semget() and sys_shmget() when the key is not IPC_PRIVATE and that key already exists in the ds IDR.”…”�”}”(hjžMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mdhj}LubhÝ)�”}”(hŒ#On success, the ipc id is returned.”h]”hŒ#On success, the ipc id is returned.”…”�”}”(hj­Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mhhj}LubhÝ)�”}”(hŒ4It is called with ipc_ids.rwsem and ipcp->lock held.”h]”hŒ4It is called with ipc_ids.rwsem and ipcp->lock held.”…”�”}”(hj¼Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mjhj}Lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipcget_public (C function)”Œc.ipcget_public”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒwint ipcget_public (struct ipc_namespace *ns, struct ipc_ids *ids, const struct ipc_ops *ops, struct ipc_params *params)”h]”j)�”}”(hŒvint ipcget_public(struct ipc_namespace *ns, struct ipc_ids *ids, const struct ipc_ops *ops, struct ipc_params *params)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjëMh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjçMh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúMh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçMh²hh³jùMh´M€ubj{)�”}”(hŒ ipcget_public”h]”j�)�”}”(hŒ ipcget_public”h]”hŒ ipcget_public”…”�”}”(hj Nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjçMh²hh³jùMh´M€ubjœ)�”}”(hŒe(struct ipc_namespace *ns, struct ipc_ids *ids, const struct ipc_ops *ops, struct ipc_params *params)”h]”(j¢)�”}”(hŒstruct ipc_namespace *ns”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj(Nh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj$Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$Nubh)�”}”(hhh]”j�)�”}”(hŒ ipc_namespace”h]”hŒ ipc_namespace”…”�”}”(hjFNh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jHNŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jNsbŒc.ipcget_public”†”asbuh1hhj$Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfNh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$Nubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjtNh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj$Nubj�)�”}”(hŒns”h]”hŒns”…”�”}”(hj�Nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$Nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Nubj¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjšNh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj–Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–Nubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hj¸Nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jºNŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jbNŒc.ipcget_public”†”asbuh1hhj–Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖNh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–Nubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjäNh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj–Nubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hjñNh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–Nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Nubj¢)�”}”(hŒconst struct ipc_ops *ops”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj%Oh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOubh)�”}”(hhh]”j�)�”}”(hŒipc_ops”h]”hŒipc_ops”…”�”}”(hjCOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jEOŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jbNŒc.ipcget_public”†”asbuh1hhjOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjoOh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjOubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hj|Oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Nubj¢)�”}”(hŒstruct ipc_params *params”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj•Oh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‘Oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘Oubh)�”}”(hhh]”j�)�”}”(hŒ ipc_params”h]”hŒ ipc_params”…”�”}”(hj³Oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jµOŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jbNŒc.ipcget_public”†”asbuh1hhj‘Oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘Oubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjßOh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‘Oubj�)�”}”(hŒparams”h]”hŒparams”…”�”}”(hjìOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Nubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjçMh²hh³jùMh´M€ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjãMh²hh³jùMh´M€ubah}”(h]”jÞMah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jùMh´M€hjàMh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%get an ipc object or create a new one”h]”hŒ%get an ipc object or create a new one”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M€hjPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjàMh²hh³jùMh´M€ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj.Pjæj.Pjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hXê**Parameters** ``struct ipc_namespace *ns`` ipc namespace ``struct ipc_ids *ids`` ipc identifier set ``const struct ipc_ops *ops`` the actual creation routine to call ``struct ipc_params *params`` its parameters **Description** This routine is called by sys_msgget, sys_semget() and sys_shmget() when the key is not IPC_PRIVATE. It adds a new entry if the key is not found and does some permission / security checkings if the key is found. On success, the ipc id is returned.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj8Ph]”hŒ Parameters”…”�”}”(hj:Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6Pubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M„hj2Pubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_namespace *ns`` ipc namespace ”h]”(j)�”}”(hŒ``struct ipc_namespace *ns``”h]”j)�”}”(hjWPh]”hŒstruct ipc_namespace *ns”…”�”}”(hjYPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M�hjQPubj2)�”}”(hhh]”hÝ)�”}”(hŒ ipc namespace”h]”hŒ ipc namespace”…”�”}”(hjpPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlPh´M�hjmPubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlPh´M�hjNPubj)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hj�Ph]”hŒstruct ipc_ids *ids”…”�”}”(hj’Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M‚hjŠPubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hj©Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥Ph´M‚hj¦Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥Ph´M‚hjNPubj)�”}”(hŒB``const struct ipc_ops *ops`` the actual creation routine to call ”h]”(j)�”}”(hŒ``const struct ipc_ops *ops``”h]”j)�”}”(hjÉPh]”hŒconst struct ipc_ops *ops”…”�”}”(hjËPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MƒhjÃPubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the actual creation routine to call”h]”hŒ#the actual creation routine to call”…”�”}”(hjâPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÞPh´MƒhjßPubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÃPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞPh´MƒhjNPubj)�”}”(hŒ-``struct ipc_params *params`` its parameters ”h]”(j)�”}”(hŒ``struct ipc_params *params``”h]”j)�”}”(hjQh]”hŒstruct ipc_params *params”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M„hjüPubj2)�”}”(hhh]”hÝ)�”}”(hŒits parameters”h]”hŒits parameters”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQh´M„hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjüPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQh´M„hjNPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj2PubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj=Qh]”hŒ Description”…”�”}”(hj?Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M†hj2PubhÝ)�”}”(hŒÓThis routine is called by sys_msgget, sys_semget() and sys_shmget() when the key is not IPC_PRIVATE. It adds a new entry if the key is not found and does some permission / security checkings if the key is found.”h]”hŒÓThis routine is called by sys_msgget, sys_semget() and sys_shmget() when the key is not IPC_PRIVATE. It adds a new entry if the key is not found and does some permission / security checkings if the key is found.”…”�”}”(hjSQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M…hj2PubhÝ)�”}”(hŒ#On success, the ipc id is returned.”h]”hŒ#On success, the ipc id is returned.”…”�”}”(hjbQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MŠhj2Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_kht_remove (C function)”Œc.ipc_kht_remove”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEvoid ipc_kht_remove (struct ipc_ids *ids, struct kern_ipc_perm *ipcp)”h]”j)�”}”(hŒDvoid ipc_kht_remove(struct ipc_ids *ids, struct kern_ipc_perm *ipcp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‘Qh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�Qh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Qh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Qh²hh³jŸQh´M¸ubj{)�”}”(hŒipc_kht_remove”h]”j�)�”}”(hŒipc_kht_remove”h]”hŒipc_kht_remove”…”�”}”(hj²Qh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®Qubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�Qh²hh³jŸQh´M¸ubjœ)�”}”(hŒ1(struct ipc_ids *ids, struct kern_ipc_perm *ipcp)”h]”(j¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÎQh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÊQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊQubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjìQh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jîQŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j´QsbŒc.ipc_kht_remove”†”asbuh1hhjÊQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊQubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÊQubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hj'Rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊQubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÆQubj¢)�”}”(hŒstruct kern_ipc_perm *ipcp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj@Rh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjah"]”h$]”h&]”uh1j1hjah"]”h$]”h&]”uh1j1hj;h³Nh´Nubjë)�”}”(hX!**Parameters** ``struct ipc_ids *ids`` ipc identifier set ``struct kern_ipc_perm *ipcp`` ipc perm structure containing the key to remove **Description** ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjãRh]”hŒ Parameters”…”�”}”(hjåRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjáRubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¼hjÝRubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hjSh]”hŒstruct ipc_ids *ids”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¹hjüRubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jSh´M¹hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjüRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jSh´M¹hjùRubj)�”}”(hŒO``struct kern_ipc_perm *ipcp`` ipc perm structure containing the key to remove ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *ipcp``”h]”j)�”}”(hj;Sh]”hŒstruct kern_ipc_perm *ipcp”…”�”}”(hj=Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9Subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mºhj5Subj2)�”}”(hhh]”hÝ)�”}”(hŒ/ipc perm structure containing the key to remove”h]”hŒ/ipc perm structure containing the key to remove”…”�”}”(hjTSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jPSh´MºhjQSubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj5Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jPSh´MºhjùRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÝRubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjvSh]”hŒ Description”…”�”}”(hjxSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtSubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¼hjÝRubhÝ)�”}”(hŒ€ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit.”h]”hŒ€ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit.”…”�”}”(hjŒSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M»hjÝRubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_search_maxidx (C function)”Œc.ipc_search_maxidx”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6int ipc_search_maxidx (struct ipc_ids *ids, int limit)”h]”j)�”}”(hŒ5int ipc_search_maxidx(struct ipc_ids *ids, int limit)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj»Sh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj·Sh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÇubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·Sh²hh³jÉSh´MÇubj{)�”}”(hŒipc_search_maxidx”h]”j�)�”}”(hŒipc_search_maxidx”h]”hŒipc_search_maxidx”…”�”}”(hjÜSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØSubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj·Sh²hh³jÉSh´MÇubjœ)�”}”(hŒ (struct ipc_ids *ids, int limit)”h]”(j¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjøSh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjôSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôSubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jTŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÞSsbŒc.ipc_search_maxidx”†”asbuh1hhjôSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6Th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôSubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjDTh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjôSubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hjQTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjðSubj¢)�”}”(hŒ int limit”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjjTh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjfTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjfTubj�)�”}”(hŒlimit”h]”hŒlimit”…”�”}”(hj†Th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjðSubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj·Sh²hh³jÉSh´MÇubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj³Sh²hh³jÉSh´MÇubah}”(h]”j®Sah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÉSh´MÇhj°Sh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%search for the highest assigned index”h]”hŒ%search for the highest assigned index”…”�”}”(hj°Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÇhj­Th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj°Sh²hh³jÉSh´MÇubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÈTjæjÈTjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hXÊ**Parameters** ``struct ipc_ids *ids`` ipc identifier set ``int limit`` known upper limit for highest assigned index **Description** The function determines the highest assigned index in **ids**. It is intended to be called when ids->max_idx needs to be updated. Updating ids->max_idx is necessary when the current highest index ipc object is deleted. If no ipc object is allocated, then -1 is returned. ipc_ids.rwsem needs to be held by the caller.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÒTh]”hŒ Parameters”…”�”}”(hjÔTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÐTubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MËhjÌTubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hjñTh]”hŒstruct ipc_ids *ids”…”�”}”(hjóTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïTubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÈhjëTubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jUh´MÈhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjëTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jUh´MÈhjèTubj)�”}”(hŒ;``int limit`` known upper limit for highest assigned index ”h]”(j)�”}”(hŒ ``int limit``”h]”j)�”}”(hj*Uh]”hŒ int limit”…”�”}”(hj,Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj(Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÉhj$Uubj2)�”}”(hhh]”hÝ)�”}”(hŒ,known upper limit for highest assigned index”h]”hŒ,known upper limit for highest assigned index”…”�”}”(hjCUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j?Uh´MÉhj@Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj$Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j?Uh´MÉhjèTubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÌTubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjeUh]”hŒ Description”…”�”}”(hjgUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcUubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MËhjÌTubhÝ)�”}”(hXThe function determines the highest assigned index in **ids**. It is intended to be called when ids->max_idx needs to be updated. Updating ids->max_idx is necessary when the current highest index ipc object is deleted. If no ipc object is allocated, then -1 is returned.”h]”(hŒ6The function determines the highest assigned index in ”…”�”}”(hj{Uh²hh³Nh´Nubjõ)�”}”(hŒ**ids**”h]”hŒids”…”�”}”(hjƒUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{UubhŒÑ. It is intended to be called when ids->max_idx needs to be updated. Updating ids->max_idx is necessary when the current highest index ipc object is deleted. If no ipc object is allocated, then -1 is returned.”…”�”}”(hj{Uh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÊhjÌTubhÝ)�”}”(hŒ-ipc_ids.rwsem needs to be held by the caller.”h]”hŒ-ipc_ids.rwsem needs to be held by the caller.”…”�”}”(hjœUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÐhjÌTubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_rmid (C function)”Œ c.ipc_rmid”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ?void ipc_rmid (struct ipc_ids *ids, struct kern_ipc_perm *ipcp)”h]”j)�”}”(hŒ>void ipc_rmid(struct ipc_ids *ids, struct kern_ipc_perm *ipcp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjËUh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÇUh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇUh²hh³jÙUh´Mêubj{)�”}”(hŒipc_rmid”h]”j�)�”}”(hŒipc_rmid”h]”hŒipc_rmid”…”�”}”(hjìUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèUubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÇUh²hh³jÙUh´Mêubjœ)�”}”(hŒ1(struct ipc_ids *ids, struct kern_ipc_perm *ipcp)”h]”(j¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hj&Vh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#Vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j(VŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jîUsbŒ c.ipc_rmid”†”asbuh1hhjVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFVh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjTVh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjVubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hjaVh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVubj¢)�”}”(hŒstruct kern_ipc_perm *ipcp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjzVh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjvVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Vh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvVubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj˜Vh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•Vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jšVŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jBVŒ c.ipc_rmid”†”asbuh1hhjvVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Vh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvVubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÄVh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjvVubj�)�”}”(hŒipcp”h]”hŒipcp”…”�”}”(hjÑVh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÇUh²hh³jÙUh´Mêubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÃUh²hh³jÙUh´Mêubah}”(h]”j¾Uah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÙUh´MêhjÀUh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒremove an ipc identifier”h]”hŒremove an ipc identifier”…”�”}”(hjûVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MêhjøVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀUh²hh³jÙUh´Mêubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjWjæjWjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hX(**Parameters** ``struct ipc_ids *ids`` ipc identifier set ``struct kern_ipc_perm *ipcp`` ipc perm structure containing the identifier to remove **Description** ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjWh]”hŒ Parameters”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MîhjWubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mëhj6Wubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hjUWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQWh´MëhjRWubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQWh´Mëhj3Wubj)�”}”(hŒV``struct kern_ipc_perm *ipcp`` ipc perm structure containing the identifier to remove ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *ipcp``”h]”j)�”}”(hjuWh]”hŒstruct kern_ipc_perm *ipcp”…”�”}”(hjwWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsWubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MìhjoWubj2)�”}”(hhh]”hÝ)�”}”(hŒ6ipc perm structure containing the identifier to remove”h]”hŒ6ipc perm structure containing the identifier to remove”…”�”}”(hjŽWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠWh´Mìhj‹Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjoWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠWh´Mìhj3Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjWubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj°Wh]”hŒ Description”…”�”}”(hj²Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®Wubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MîhjWubhÝ)�”}”(hŒ€ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit.”h]”hŒ€ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit.”…”�”}”(hjÆWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MíhjWubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ ipc_set_key_private (C function)”Œc.ipc_set_key_private”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒJvoid ipc_set_key_private (struct ipc_ids *ids, struct kern_ipc_perm *ipcp)”h]”j)�”}”(hŒIvoid ipc_set_key_private(struct ipc_ids *ids, struct kern_ipc_perm *ipcp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjõWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñWh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñWh²hh³jXh´Mubj{)�”}”(hŒipc_set_key_private”•Ph]”j�)�”}”(hŒipc_set_key_private”h]”hŒipc_set_key_private”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjñWh²hh³jXh´Mubjœ)�”}”(hŒ1(struct ipc_ids *ids, struct kern_ipc_perm *ipcp)”h]”(j¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj2Xh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.Xubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.Xubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjPXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jRXŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jXsbŒc.ipc_set_key_private”†”asbuh1hhj.Xubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpXh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.Xubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj~Xh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj.Xubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hj‹Xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*Xubj¢)�”}”(hŒstruct kern_ipc_perm *ipcp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¤Xh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj Xubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Xubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjÂXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿Xubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÄXŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jlXŒc.ipc_set_key_private”†”asbuh1hhj Xubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàXh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Xubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjîXh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj Xubj�)�”}”(hŒipcp”h]”hŒipcp”…”�”}”(hjûXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*Xubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjñWh²hh³jXh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjíWh²hh³jXh´Mubah}”(h]”jèWah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jXh´MhjêWh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0switch the key of an existing ipc to IPC_PRIVATE”h]”hŒ0switch the key of an existing ipc to IPC_PRIVATE”…”�”}”(hj%Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mhj"Yh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjêWh²hh³jXh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj=Yjæj=Yjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hX!**Parameters** ``struct ipc_ids *ids`` ipc identifier set ``struct kern_ipc_perm *ipcp`` ipc perm structure containing the key to modify **Description** ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjGYh]”hŒ Parameters”…”�”}”(hjIYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjAYubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hjfYh]”hŒstruct ipc_ids *ids”…”�”}”(hjhYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdYubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mhj`Yubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{Yh´Mhj|Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{Yh´Mhj]Yubj)�”}”(hŒO``struct kern_ipc_perm *ipcp`` ipc perm structure containing the key to modify ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *ipcp``”h]”j)�”}”(hjŸYh]”hŒstruct kern_ipc_perm *ipcp”…”�”}”(hj¡Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mhj™Yubj2)�”}”(hhh]”hÝ)�”}”(hŒ/ipc perm structure containing the key to modify”h]”hŒ/ipc perm structure containing the key to modify”…”�”}”(hj¸Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j´Yh´MhjµYubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´Yh´Mhj]Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjAYubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÚYh]”hŒ Description”…”�”}”(hjÜYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjAYubhÝ)�”}”(hŒ€ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit.”h]”hŒ€ipc_ids.rwsem (as a writer) and the spinlock for this ID are held before this function is called, and remain locked on the exit.”…”�”}”(hjðYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjAYubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipcperms (C function)”Œ c.ipcperms”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOint ipcperms (struct ipc_namespace *ns, struct kern_ipc_perm *ipcp, short flag)”h]”j)�”}”(hŒNint ipcperms(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp, short flag)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZh²hh³j-Zh´Mubj{)�”}”(hŒipcperms”h]”j�)�”}”(hŒipcperms”h]”hŒipcperms”…”�”}”(hj@Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjah"]”h$]”h&]”uh1j1hjXZubh)�”}”(hhh]”j�)�”}”(hŒ ipc_namespace”h]”hŒ ipc_namespace”…”�”}”(hjzZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j|ZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jBZsbŒ c.ipcperms”†”asbuh1hhjXZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXZubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¨Zh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjXZubj�)�”}”(hŒns”h]”hŒns”…”�”}”(hjµZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjTZubj¢)�”}”(hŒstruct kern_ipc_perm *ipcp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÎZh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÊZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊZubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjìZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jîZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j–ZŒ c.ipcperms”†”asbuh1hhjÊZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj [h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊZubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÊZubj�)�”}”(hŒipcp”h]”hŒipcp”…”�”}”(hj%[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjTZubj¢)�”}”(hŒ short flag”h]”(j )�”}”(hŒshort”h]”hŒshort”…”�”}”(hj>[h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:[ubj�)�”}”(hŒflag”h]”hŒflag”…”�”}”(hjZ[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjTZubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjZh²hh³j-Zh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjZh²hh³j-Zh´Mubah}”(h]”jZah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j-Zh´MhjZh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒcheck ipc permissions”h]”hŒcheck ipc permissions”…”�”}”(hj„[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mhj�[h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjZh²hh³j-Zh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjœ[jæjœ[jç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hXH**Parameters** ``struct ipc_namespace *ns`` ipc namespace ``struct kern_ipc_perm *ipcp`` ipc permission set ``short flag`` desired permission set **Description** Check user, group, other permissions for access to ipc resources. return 0 if allowed **flag** will most probably be 0 or ``S_...UGO`` from ”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¦[h]”hŒ Parameters”…”�”}”(hj¨[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M#hj [ubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_namespace *ns`` ipc namespace ”h]”(j)�”}”(hŒ``struct ipc_namespace *ns``”h]”j)�”}”(hjÅ[h]”hŒstruct ipc_namespace *ns”…”�”}”(hjÇ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M hj¿[ubj2)�”}”(hhh]”hÝ)�”}”(hŒ ipc namespace”h]”hŒ ipc namespace”…”�”}”(hjÞ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÚ[h´M hjÛ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚ[h´M hj¼[ubj)�”}”(hŒ2``struct kern_ipc_perm *ipcp`` ipc permission set ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *ipcp``”h]”j)�”}”(hjþ[h]”hŒstruct kern_ipc_perm *ipcp”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjü[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M!hjø[ubj2)�”}”(hhh]”hÝ)�”}”(hŒipc permission set”h]”hŒipc permission set”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j\h´M!hj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjø[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j\h´M!hj¼[ubj)�”}”(hŒ&``short flag`` desired permission set ”h]”(j)�”}”(hŒ``short flag``”h]”j)�”}”(hj7\h]”hŒ short flag”…”�”}”(hj9\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M"hj1\ubj2)�”}”(hhh]”hÝ)�”}”(hŒdesired permission set”h]”hŒdesired permission set”…”�”}”(hjP\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jL\h´M"hjM\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jL\h´M"hj¼[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj [ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjr\h]”hŒ Description”…”�”}”(hjt\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjp\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M$hj [ubhÝ)�”}”(hŒUCheck user, group, other permissions for access to ipc resources. return 0 if allowed”h]”hŒUCheck user, group, other permissions for access to ipc resources. return 0 if allowed”…”�”}”(hjˆ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M#hj [ubhÝ)�”}”(hŒD**flag** will most probably be 0 or ``S_...UGO`` from ”h]”(jõ)�”}”(hŒ**flag**”h]”hŒflag”…”�”}”(hj›\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—\ubhŒ will most probably be 0 or ”…”�”}”(hj—\h²hh³Nh´Nubj)�”}”(hŒ ``S_...UGO``”h]”hŒS_...UGO”…”�”}”(hj­\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—\ubhŒ from ”…”�”}”(hj—\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M&hj [ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!kernel_to_ipc64_perm (C function)”Œc.kernel_to_ipc64_perm”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLvoid kernel_to_ipc64_perm (struct kern_ipc_perm *in, struct ipc64_perm *out)”h]”j)�”}”(hŒKvoid kernel_to_ipc64_perm(struct kern_ipc_perm *in, struct ipc64_perm *out)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjæ\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjâ\h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâ\h²hh³jô\h´MDubj{)�”}”(hŒkernel_to_ipc64_perm”h]”j�)�”}”(hŒkernel_to_ipc64_perm”h]”hŒkernel_to_ipc64_perm”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjâ\h²hh³jô\h´MDubjœ)�”}”(hŒ2(struct kern_ipc_perm *in, struct ipc64_perm *out)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *in”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj#]h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjA]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jC]Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j ]sbŒc.kernel_to_ipc64_perm”†”asbuh1hhj]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjo]h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj]ubj�)�”}”(hŒin”h]”hŒin”…”�”}”(hj|]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj]ubj¢)�”}”(hŒstruct ipc64_perm *out”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj•]h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‘]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘]ubh)�”}”(hhh]”j�)�”}”(hŒ ipc64_perm”h]”hŒ ipc64_perm”…”�”}”(hj³]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jµ]Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j]]Œc.kernel_to_ipc64_perm”†”asbuh1hhj‘]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘]ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjß]h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‘]ubj�)�”}”(hŒout”h]”hŒout”…”�”}”(hjì]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj]ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjâ\h²hh³jô\h´MDubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÞ\h²hh³jô\h´MDubah}”(h]”jÙ\ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jô\h´MDhjÛ\h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&convert kernel ipc permissions to user”h]”hŒ&convert kernel ipc permissions to user”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MDhj^h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÛ\h²hh³jô\h´MDubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj.^jæj.^jç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hŒö**Parameters** ``struct kern_ipc_perm *in`` kernel permissions ``struct ipc64_perm *out`` new style ipc permissions **Description** Turn the kernel object **in** into a set of permissions descriptions for returning to userspace (**out**).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj8^h]”hŒ Parameters”…”�”}”(hj:^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MHhj2^ubj )�”}”(hhh]”(j)�”}”(hŒ0``struct kern_ipc_perm *in`` kernel permissions ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *in``”h]”j)�”}”(hjW^h]”hŒstruct kern_ipc_perm *in”…”�”}”(hjY^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjU^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MEhjQ^ubj2)�”}”(hhh]”hÝ)�”}”(hŒkernel permissions”h]”hŒkernel permissions”…”�”}”(hjp^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jl^h´MEhjm^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jl^h´MEhjN^ubj)�”}”(hŒ5``struct ipc64_perm *out`` new style ipc permissions ”h]”(j)�”}”(hŒ``struct ipc64_perm *out``”h]”j)�”}”(hj�^h]”hŒstruct ipc64_perm *out”…”�”}”(hj’^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MFhjŠ^ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew style ipc permissions”h]”hŒnew style ipc permissions”…”�”}”(hj©^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥^h´MFhj¦^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥^h´MFhjN^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj2^ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjË^h]”hŒ Description”…”�”}”(hjÍ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÉ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MHhj2^ubhÝ)�”}”(hŒjTurn the kernel object **in** into a set of permissions descriptions for returning to userspace (**out**).”h]”(hŒTurn the kernel object ”…”�”}”(hjá^h²hh³Nh´Nubjõ)�”}”(hŒ**in**”h]”hŒin”…”�”}”(hjé^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjá^ubhŒD into a set of permissions descriptions for returning to userspace (”…”�”}”(hjá^h²hh³Nh´Nubjõ)�”}”(hŒ**out**”h]”hŒout”…”�”}”(hjû^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjá^ubhŒ).”…”�”}”(hjá^h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MGhj2^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#ipc64_perm_to_ipc_perm (C function)”Œc.ipc64_perm_to_ipc_perm”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIvoid ipc64_perm_to_ipc_perm (struct ipc64_perm *in, struct ipc_perm *out)”h]”j)�”}”(hŒHvoid ipc64_perm_to_ipc_perm(struct ipc64_perm *in, struct ipc_perm *out)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj4_h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj0_h²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0_h²hh³jB_h´MWubj{)�”}”(hŒipc64_perm_to_ipc_perm”h]”j�)�”}”(hŒipc64_perm_to_ipc_perm”h]”hŒipc64_perm_to_ipc_perm”…”�”}”(hjU_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQ_ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj0_h²hh³jB_h´MWubjœ)�”}”(hŒ-(struct ipc64_perm *in, struct ipc_perm *out)”h]”(j¢)�”}”(hŒstruct ipc64_perm *in”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjq_h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjm_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm_ubh)�”}”(hhh]”j�)�”}”(hŒ ipc64_perm”h]”hŒ ipc64_perm”…”�”}”(hj�_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‘_Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jW_sbŒc.ipc64_perm_to_ipc_perm”†”asbuh1hhjm_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm_ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj½_h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjm_ubj�)�”}”(hŒin”h]”hŒin”…”�”}”(hjÊ_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjm_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hji_ubj¢)�”}”(hŒstruct ipc_perm *out”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjã_h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjß_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjß_ubh)�”}”(hhh]”j�)�”}”(hŒipc_perm”h]”hŒipc_perm”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j`Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j«_Œc.ipc64_perm_to_ipc_perm”†”asbuh1hhjß_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjß_ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj-`h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjß_ubj�)�”}”(hŒout”h]”hŒout”…”�”}”(hj:`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjß_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hji_ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj0_h²hh³jB_h´MWubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj,_h²hh³jB_h´MWubah}”(h]”j'_ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jB_h´MWhj)_h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"convert new ipc permissions to old”h]”hŒ"convert new ipc permissions to old”…”�”}”(hjd`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MWhja`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj)_h²hh³jB_h´MWubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj|`jæj|`jç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hŒý**Parameters** ``struct ipc64_perm *in`` new style ipc permissions ``struct ipc_perm *out`` old style ipc permissions **Description** Turn the new style permissions object **in** into a compatibility object and store it into the **out** pointer.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj†`h]”hŒ Parameters”…”�”}”(hjˆ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj„`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M[hj€`ubj )�”}”(hhh]”(j)�”}”(hŒ4``struct ipc64_perm *in`` new style ipc permissions ”h]”(j)�”}”(hŒ``struct ipc64_perm *in``”h]”j)�”}”(hj¥`h]”hŒstruct ipc64_perm *in”…”�”}”(hj§`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MXhjŸ`ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew style ipc permissions”h]”hŒnew style ipc permissions”…”�”}”(hj¾`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jº`h´MXhj»`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŸ`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jº`h´MXhjœ`ubj)�”}”(hŒ3``struct ipc_perm *out`` old style ipc permissions ”h]”(j)�”}”(hŒ``struct ipc_perm *out``”h]”j)�”}”(hjÞ`h]”hŒstruct ipc_perm *out”…”�”}”(hjà`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MYhjØ`ubj2)�”}”(hhh]”hÝ)�”}”(hŒold style ipc permissions”h]”hŒold style ipc permissions”…”�”}”(hj÷`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jó`h´MYhjô`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØ`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jó`h´MYhjœ`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj€`ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjah]”hŒ Description”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M[hj€`ubhÝ)�”}”(hŒoTurn the new style permissions object **in** into a compatibility object and store it into the **out** pointer.”h]”(hŒ&Turn the new style permissions object ”…”�”}”(hj/ah²hh³Nh´Nubjõ)�”}”(hŒ**in**”h]”hŒin”…”�”}”(hj7ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/aubhŒ3 into a compatibility object and store it into the ”…”�”}”(hj/ah²hh³Nh´Nubjõ)�”}”(hŒ**out**”h]”hŒout”…”�”}”(hjIah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/aubhŒ pointer.”…”�”}”(hj/ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MZhj€`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"ipc_obtain_object_idr (C function)”Œc.ipc_obtain_object_idr”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒJstruct kern_ipc_perm * ipc_obtain_object_idr (struct ipc_ids *ids, int id)”h]”j)�”}”(hŒHstruct kern_ipc_perm *ipc_obtain_object_idr(struct ipc_ids *ids, int id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‚ah²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj~ah²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~ah²hh³j�ah´Mjubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj¡ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j£aŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œipc_obtain_object_idr”sbŒc.ipc_obtain_object_idr”†”asbuh1hhj~ah²hh³j�ah´Mjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~ah²hh³j�ah´Mjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÐah²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj~ah²hh³j�ah´Mjubj{)�”}”(hŒipc_obtain_object_idr”h]”j�)�”}”(hj¿ah]”hŒipc_obtain_object_idr”…”�”}”(hjáah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝaubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj~ah²hh³j�ah´Mjubjœ)�”}”(hŒ(struct ipc_ids *ids, int id)”h]”(j¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjüah²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjøaubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøaubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jbŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j½aŒc.ipc_obtain_object_idr”†”asbuh1hhjøaubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøaubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjFbh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjøaubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hjSbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjøaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjôaubj¢)�”}”(hŒint id”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjlbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjhbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjhbubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hjˆbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjhbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjôaubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj~ah²hh³j�ah´Mjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjzah²hh³j�ah´Mjubah}”(h]”juaah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�ah´Mjhjwah²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCLook for an id in the ipc ids idr and return associated ipc object.”h]”hŒCLook for an id in the ipc ids idr and return associated ipc object.”…”�”}”(hj²bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mjhj¯bh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjwah²hh³j�ah´Mjubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÊbjæjÊbjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hŒ½**Parameters** ``struct ipc_ids *ids`` ipc identifier set ``int id`` ipc id to look for **Description** Call inside the RCU critical section. The ipc object is *not* locked on exit.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÔbh]”hŒ Parameters”…”�”}”(hjÖbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÒbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MnhjÎbubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hjóbh]”hŒstruct ipc_ids *ids”…”�”}”(hjõbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñbubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mlhjíbubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hj ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jch´Mlhj cubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjíbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jch´Mlhjêbubj)�”}”(hŒ``int id`` ipc id to look for ”h]”(j)�”}”(hŒ ``int id``”h]”j)�”}”(hj,ch]”hŒint id”…”�”}”(hj.ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*cubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mmhj&cubj2)�”}”(hhh]”hÝ)�”}”(hŒipc id to look for”h]”hŒipc id to look for”…”�”}”(hjEch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jAch´MmhjBcubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj&cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jAch´Mmhjêbubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÎbubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjgch]”hŒ Description”…”�”}”(hjich²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjecubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MohjÎbubhÝ)�”}”(hŒMCall inside the RCU critical section. The ipc object is *not* locked on exit.”h]”(hŒ8Call inside the RCU critical section. The ipc object is ”…”�”}”(hj}ch²hh³Nh´Nubjp‡)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hj…ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj}cubhŒ locked on exit.”…”�”}”(hj}ch²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MnhjÎbubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$ipc_obtain_object_check (C function)”Œc.ipc_obtain_object_check”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLstruct kern_ipc_perm * ipc_obtain_object_check (struct ipc_ids *ids, int id)”h]”j)�”}”(hŒJstruct kern_ipc_perm *ipc_obtain_object_check(struct ipc_ids *ids, int id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¾ch²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjºch²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºch²hh³jËch´Mubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjÝch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚcubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jßcŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œipc_obtain_object_check”sbŒc.ipc_obtain_object_check”†”asbuh1hhjºch²hh³jËch´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºch²hh³jËch´Mubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj dh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjºch²hh³jËch´Mubj{)�”}”(hŒipc_obtain_object_check”h]”j�)�”}”(hjûch]”hŒipc_obtain_object_check”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjºch²hh³jËch´Mubjœ)�”}”(hŒ(struct ipc_ids *ids, int id)”h]”(j¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj8dh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj4dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEdh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4dubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjVdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jXdŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jùcŒc.ipc_obtain_object_check”†”asbuh1hhj4dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtdh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4dubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‚dh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj4dubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hj�dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0dubj¢)�”}”(hŒint id”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¨dh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶dh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤dubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hjÄdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0dubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjºch²hh³jËch´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¶ch²hh³jËch´Mubah}”(h]”j±cah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jËch´Mhj³ch²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒRSimilar to ipc_obtain_object_idr() but also checks the ipc object sequence number.”h]”hŒRSimilar to ipc_obtain_object_idr() but also checks the ipc object sequence number.”…”�”}”(hjîdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mhjëdh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj³ch²hh³jËch´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjejæjejç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hŒ½**Parameters** ``struct ipc_ids *ids`` ipc identifier set ``int id`` ipc id to look for **Description** Call inside the RCU critical section. The ipc object is *not* locked on exit.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjeh]”hŒ Parameters”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mƒhj eubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hj/eh]”hŒstruct ipc_ids *ids”…”�”}”(hj1eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-eubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M�hj)eubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hjHeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jDeh´M�hjEeubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj)eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jDeh´M�hj&eubj)�”}”(hŒ``int id`` ipc id to look for ”h]”(j)�”}”(hŒ ``int id``”h]”j)�”}”(hjheh]”hŒint id”…”�”}”(hjjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfeubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M‚hjbeubj2)�”}”(hhh]”hÝ)�”}”(hŒipc id to look for”h]”hŒipc id to look for”…”�”}”(hj�eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}eh´M‚hj~eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjbeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}eh´M‚hj&eubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj eubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj£eh]”hŒ Description”…”�”}”(hj¥eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡eubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M„hj eubhÝ)�”}”(hŒMCall inside the RCU critical section. The ipc object is *not* locked on exit.”h]”(hŒ8Call inside the RCU critical section. The ipc object is ”…”�”}”(hj¹eh²hh³Nh´Nubjp‡)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hjÁeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj¹eubhŒ locked on exit.”…”�”}”(hj¹eh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mƒhj eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipcget (C function)”Œc.ipcget”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒpint ipcget (struct ipc_namespace *ns, struct ipc_ids *ids, const struct ipc_ops *ops, struct ipc_params *params)”h]”j)�”}”(hŒoint ipcget(struct ipc_namespace *ns, struct ipc_ids *ids, const struct ipc_ops *ops, struct ipc_params *params)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjúeh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjöeh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöeh²hh³jfh´M•ubj{)�”}”(hŒipcget”h]”j�)�”}”(hŒipcget”h]”hŒipcget”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjöeh²hh³jfh´M•ubjœ)�”}”(hŒe(struct ipc_namespace *ns, struct ipc_ids *ids, const struct ipc_ops *ops, struct ipc_params *params)”h]”(j¢)�”}”(hŒstruct ipc_namespace *ns”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj7fh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj3fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3fubh)�”}”(hhh]”j�)�”}”(hŒ ipc_namespace”h]”hŒ ipc_namespace”…”�”}”(hjUfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jWfŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jfsbŒc.ipcget”†”asbuh1hhj3fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjufh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3fubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒfh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj3fubj�)�”}”(hŒns”h]”hŒns”…”�”}”(hj�fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/fubj¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj©fh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¥fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥fubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjÇfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÉfŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jqfŒc.ipcget”†”asbuh1hhj¥fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥fubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjófh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¥fubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/fubj¢)�”}”(hŒconst struct ipc_ops *ops”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&gh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj4gh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgubh)�”}”(hhh]”j�)�”}”(hŒipc_ops”h]”hŒipc_ops”…”�”}”(hjRgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jTgŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jqfŒc.ipcget”†”asbuh1hhjgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj~gh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjgubj�)�”}”(hŒops”h]”hŒops”…”�”}”(hj‹gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/fubj¢)�”}”(hŒstruct ipc_params *params”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¤gh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj gubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±gh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj gubh)�”}”(hhh]”j�)�”}”(hŒ ipc_params”h]”hŒ ipc_params”…”�”}”(hjÂgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÄgŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jqfŒc.ipcget”†”asbuh1hhj gubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj gubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjîgh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj gubj�)�”}”(hŒparams”h]”hŒparams”…”�”}”(hjûgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/fubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjöeh²hh³jfh´M•ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjòeh²hh³jfh´M•ubah}”(h]”jíeah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jfh´M•hjïeh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCommon sys_*get() code”h]”hŒCommon sys_*get() code”…”�”}”(hj%hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M•hj"hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjïeh²hh³jfh´M•ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj=hjæj=hjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hX‰**Parameters** ``struct ipc_namespace *ns`` namespace ``struct ipc_ids *ids`` ipc identifier set ``const struct ipc_ops *ops`` operations to be called on ipc object creation, permission checks and further checks ``struct ipc_params *params`` the parameters needed by the previous operations. **Description** Common routine called by sys_msgget(), sys_semget() and sys_shmget().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjGhh]”hŒ Parameters”…”�”}”(hjIhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M™hjAhubj )�”}”(hhh]”(j)�”}”(hŒ'``struct ipc_namespace *ns`` namespace ”h]”(j)�”}”(hŒ``struct ipc_namespace *ns``”h]”j)�”}”(hjfhh]”hŒstruct ipc_namespace *ns”…”�”}”(hjhhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdhubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M–hj`hubj2)�”}”(hhh]”hÝ)�”}”(hŒ namespace”h]”hŒ namespace”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{hh´M–hj|hubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{hh´M–hj]hubj)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hjŸhh]”hŒstruct ipc_ids *ids”…”�”}”(hj¡hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�hubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M—hj™hubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hj¸hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j´hh´M—hjµhubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´hh´M—hj]hubj)�”}”(hŒs``const struct ipc_ops *ops`` operations to be called on ipc object creation, permission checks and further checks ”h]”(j)�”}”(hŒ``const struct ipc_ops *ops``”h]”j)�”}”(hjØhh]”hŒconst struct ipc_ops *ops”…”�”}”(hjÚhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖhubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M™hjÒhubj2)�”}”(hhh]”hÝ)�”}”(hŒToperations to be called on ipc object creation, permission checks and further checks”h]”hŒToperations to be called on ipc object creation, permission checks and further checks”…”�”}”(hjñhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M˜hjîhubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÒhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jíhh´M™hj]hubj)�”}”(hŒP``struct ipc_params *params`` the parameters needed by the previous operations. ”h]”(j)�”}”(hŒ``struct ipc_params *params``”h]”j)�”}”(hjih]”hŒstruct ipc_params *params”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mšhj iubj2)�”}”(hhh]”hÝ)�”}”(hŒ1the parameters needed by the previous operations.”h]”hŒ1the parameters needed by the previous operations.”…”�”}”(hj+ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j'ih´Mšhj(iubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'ih´Mšhj]hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjAhubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjMih]”hŒ Description”…”�”}”(hjOih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjKiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MœhjAhubhÝ)�”}”(hŒECommon routine called by sys_msgget(), sys_semget() and sys_shmget().”h]”hŒECommon routine called by sys_msgget(), sys_semget() and sys_shmget().”…”�”}”(hjcih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M›hjAhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_update_perm (C function)”Œc.ipc_update_perm”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFint ipc_update_perm (struct ipc64_perm *in, struct kern_ipc_perm *out)”h]”j)�”}”(hŒEint ipc_update_perm(struct ipc64_perm *in, struct kern_ipc_perm *out)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj’ih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŽih²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽih²hh³j ih´M¨ubj{)�”}”(hŒipc_update_perm”h]”j�)�”}”(hŒipc_update_perm”h]”hŒipc_update_perm”…”�”}”(hj³ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯iubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŽih²hh³j ih´M¨ubjœ)�”}”(hŒ2(struct ipc64_perm *in, struct kern_ipc_perm *out)”h]”(j¢)�”}”(hŒstruct ipc64_perm *in”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÏih²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjËiubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjËiubh)�”}”(hhh]”j�)�”}”(hŒ ipc64_perm”h]”hŒ ipc64_perm”…”�”}”(hjíih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jïiŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jµisbŒc.ipc_update_perm”†”asbuh1hhjËiubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjËiubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjËiubj�)�”}”(hŒin”h]”hŒin”…”�”}”(hj(jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÇiubj¢)�”}”(hŒstruct kern_ipc_perm *out”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjAjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj=jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj=jubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj_jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jajŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j jŒc.ipc_update_perm”†”asbuh1hhj=jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj=jubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹jh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj=jubj�)�”}”(hŒout”h]”hŒout”…”�”}”(hj˜jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj=jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÇiubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjŽih²hh³j ih´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŠih²hh³j ih´M¨ubah}”(h]”j…iah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j ih´M¨hj‡ih²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'update the permissions of an ipc object”h]”hŒ'update the permissions of an ipc object”…”�”}”(hjÂjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¨hj¿jh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‡ih²hh³j ih´M¨ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÚjjæjÚjjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hŒ�**Parameters** ``struct ipc64_perm *in`` the permission given as input. ``struct kern_ipc_perm *out`` the permission of the ipc to set.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjäjh]”hŒ Parameters”…”�”}”(hjæjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¬hjÞjubj )�”}”(hhh]”(j)�”}”(hŒ9``struct ipc64_perm *in`` the permission given as input. ”h]”(j)�”}”(hŒ``struct ipc64_perm *in``”h]”j)�”}”(hjkh]”hŒstruct ipc64_perm *in”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M©hjýjubj2)�”}”(hhh]”hÝ)�”}”(hŒthe permission given as input.”h]”hŒthe permission given as input.”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jkh´M©hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jkh´M©hjújubj)�”}”(hŒ?``struct kern_ipc_perm *out`` the permission of the ipc to set.”h]”(j)�”}”(hŒ``struct kern_ipc_perm *out``”h]”j)�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:kubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M«hj6kubj2)�”}”(hhh]”hÝ)�”}”(hŒ!the permission of the ipc to set.”h]”hŒ!the permission of the ipc to set.”…”�”}”(hjUkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MªhjRkubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQkh´M«hjújubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÞjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ ipcctl_obtain_check (C function)”Œc.ipcctl_obtain_check”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ”struct kern_ipc_perm * ipcctl_obtain_check (struct ipc_namespace *ns, struct ipc_ids *ids, int id, int cmd, struct ipc64_perm *perm, int extra_perm)”h]”j)�”}”(hŒ’struct kern_ipc_perm *ipcctl_obtain_check(struct ipc_namespace *ns, struct ipc_ids *ids, int id, int cmd, struct ipc64_perm *perm, int extra_perm)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj–kh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj’kh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¼ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’kh²hh³j£kh´M¼ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjµkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j·kŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œipcctl_obtain_check”sbŒc.ipcctl_obtain_check”†”asbuh1hhj’kh²hh³j£kh´M¼ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’kh²hh³j£kh´M¼ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjäkh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj’kh²hh³j£kh´M¼ubj{)�”}”(hŒipcctl_obtain_check”h]”j�)�”}”(hjÓkh]”hŒipcctl_obtain_check”…”�”}”(hjõkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjñkubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj’kh²hh³j£kh´M¼ubjœ)�”}”(hŒi(struct ipc_namespace *ns, struct ipc_ids *ids, int id, int cmd, struct ipc64_perm *perm, int extra_perm)”h]”(j¢)�”}”(hŒstruct ipc_namespace *ns”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj lubh)�”}”(hhh]”j�)�”}”(hŒ ipc_namespace”h]”hŒ ipc_namespace”…”�”}”(hj.lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j0lŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÑkŒc.ipcctl_obtain_check”†”asbuh1hhj lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj lubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjZlh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj lubj�)�”}”(hŒns”h]”hŒns”…”�”}”(hjglh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlubj¢)�”}”(hŒstruct ipc_ids *ids”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj€lh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj|lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|lubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjžlh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j lŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÑkŒc.ipcctl_obtain_check”†”asbuh1hhj|lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|lubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÊlh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj|lubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hj×lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlubj¢)�”}”(hŒint id”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjðlh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjìlubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìlubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hj mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlubj¢)�”}”(hŒint cmd”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj%mh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj!mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3mh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!mubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjAmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlubj¢)�”}”(hŒstruct ipc64_perm *perm”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjZmh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjVmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVmubh)�”}”(hhh]”j�)�”}”(hŒ ipc64_perm”h]”hŒ ipc64_perm”…”�”}”(hjxmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjumubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jzmŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÑkŒc.ipcctl_obtain_check”†”asbuh1hhjVmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–mh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVmubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¤mh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjVmubj�)�”}”(hŒperm”h]”hŒperm”…”�”}”(hj±mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlubj¢)�”}”(hŒint extra_perm”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÊmh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÆmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆmubj�)�”}”(hŒ extra_perm”h]”hŒ extra_perm”…”�”}”(hjæmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj’kh²hh³j£kh´M¼ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŽkh²hh³j£kh´M¼ubah}”(h]”j‰kah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j£kh´M¼hj‹kh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,retrieve an ipc object and check permissions”h]”hŒ,retrieve an ipc object and check permissions”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¼hj nh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‹kh²hh³j£kh´M¼ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj(njæj(njç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hXÿ**Parameters** ``struct ipc_namespace *ns`` ipc namespace ``struct ipc_ids *ids`` the table of ids where to look for the ipc ``int id`` the id of the ipc to retrieve ``int cmd`` the cmd to check ``struct ipc64_perm *perm`` the permission to set ``int extra_perm`` one extra permission parameter used by msq **Description** This function does some common audit and permissions check for some IPC_XXX cmd and is called from semctl_down, shmctl_down and msgctl_down. It: - retrieves the ipc object with the given id in the given table. - performs some audit and permission check, depending on the given cmd - returns a pointer to the ipc object or otherwise, the corresponding error. Call holding the both the rwsem and the rcu read lock.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj2nh]”hŒ Parameters”…”�”}”(hj4nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÀhj,nubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_namespace *ns`` ipc namespace ”h]”(j)�”}”(hŒ``struct ipc_namespace *ns``”h]”j)�”}”(hjQnh]”hŒstruct ipc_namespace *ns”…”�”}”(hjSnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjOnubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M½hjKnubj2)�”}”(hhh]”hÝ)�”}”(hŒ ipc namespace”h]”hŒ ipc namespace”…”�”}”(hjjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jfnh´M½hjgnubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjKnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jfnh´M½hjHnubj)�”}”(hŒC``struct ipc_ids *ids`` the table of ids where to look for the ipc ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hjŠnh]”hŒstruct ipc_ids *ids”…”�”}”(hjŒnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆnubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¾hj„nubj2)�”}”(hhh]”hÝ)�”}”(hŒ*the table of ids where to look for the ipc”h]”hŒ*the table of ids where to look for the ipc”…”�”}”(hj£nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸnh´M¾hj nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸnh´M¾hjHnubj)�”}”(hŒ)``int id`` the id of the ipc to retrieve ”h]”(j)�”}”(hŒ ``int id``”h]”j)�”}”(hjÃnh]”hŒint id”…”�”}”(hjÅnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁnubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´M¿hj½nubj2)�”}”(hhh]”hÝ)�”}”(hŒthe id of the ipc to retrieve”h]”hŒthe id of the ipc to retrieve”…”�”}”(hjÜnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØnh´M¿hjÙnubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj½nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØnh´M¿hjHnubj)�”}”(hŒ``int cmd`` the cmd to check ”h]”(j)�”}”(hŒ ``int cmd``”h]”j)�”}”(hjünh]”hŒint cmd”…”�”}”(hjþnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúnubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÀhjönubj2)�”}”(hhh]”hÝ)�”}”(hŒthe cmd to check”h]”hŒthe cmd to check”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³joh´MÀhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjönubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³joh´MÀhjHnubj)�”}”(hŒ2``struct ipc64_perm *perm`` the permission to set ”h]”(j)�”}”(hŒ``struct ipc64_perm *perm``”h]”j)�”}”(hj5oh]”hŒstruct ipc64_perm *perm”…”�”}”(hj7oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3oubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÁhj/oubj2)�”}”(hhh]”hÝ)�”}”(hŒthe permission to set”h]”hŒthe permission to set”…”�”}”(hjNoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jJoh´MÁhjKoubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJoh´MÁhjHnubj)�”}”(hŒ>``int extra_perm`` one extra permission parameter used by msq ”h]”(j)�”}”(hŒ``int extra_perm``”h]”j)�”}”(hjnoh]”hŒint extra_perm”…”�”}”(hjpoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjloubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÂhjhoubj2)�”}”(hhh]”hÝ)�”}”(hŒ*one extra permission parameter used by msq”h]”hŒ*one extra permission parameter used by msq”…”�”}”(hj‡oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒoh´MÂhj„oubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjhoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒoh´MÂhjHnubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj,nubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj©oh]”hŒ Description”…”�”}”(hj«oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§oubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”•h´MÄhj,nubhÝ)�”}”(hŒŒThis function does some common audit and permissions check for some IPC_XXX cmd and is called from semctl_down, shmctl_down and msgctl_down.”h]”hŒŒThis function does some common audit and permissions check for some IPC_XXX cmd and is called from semctl_down, shmctl_down and msgctl_down.”…”�”}”(hj¿oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÃhj,nubj )�”}”(hhh]”j)�”}”(hŒÛIt: - retrieves the ipc object with the given id in the given table. - performs some audit and permission check, depending on the given cmd - returns a pointer to the ipc object or otherwise, the corresponding error. ”h]”(j)�”}”(hŒIt:”h]”hŒIt:”…”�”}”(hjÕoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÊhjÑoubj2)�”}”(hhh]”j›)�”}”(hhh]”(j )�”}”(hŒ>retrieves the ipc object with the given id in the given table.”h]”hÝ)�”}”(hjìoh]”hŒ>retrieves the ipc object with the given id in the given table.”…”�”}”(hjîoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÇhjêoubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjçoubj )�”}”(hŒDperforms some audit and permission check, depending on the given cmd”h]”hÝ)�”}”(hjph]”hŒDperforms some audit and permission check, depending on the given cmd”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÈhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjçoubj )�”}”(hŒKreturns a pointer to the ipc object or otherwise, the corresponding error. ”h]”hÝ)�”}”(hŒJreturns a pointer to the ipc object or otherwise, the corresponding error.”h]”hŒJreturns a pointer to the ipc object or otherwise, the corresponding error.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÉhjpubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjçoubeh}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³jûoh´MÇhjäoubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãoh´MÊhjÎoubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj,nubhÝ)�”}”(hŒ6Call holding the both the rwsem and the rcu read lock.”h]”hŒ6Call holding the both the rwsem and the rcu read lock.”…”�”}”(hjKph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MÌhj,nubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œipc_parse_version (C function)”Œc.ipc_parse_version”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ int ipc_parse_version (int *cmd)”h]”j)�”}”(hŒint ipc_parse_version(int *cmd)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjzph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjvph²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mîubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvph²hh³jˆph´Mîubj{)�”}”(hŒipc_parse_version”h]”j�)�”}”(hŒipc_parse_version”h]”hŒipc_parse_version”…”�”}”(hj›ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—pubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjvph²hh³jˆph´Mîubjœ)�”}”(hŒ (int *cmd)”h]”j¢)�”}”(hŒint *cmd”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj·ph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj³pubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³pubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÓph²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj³pubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjàph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¯pubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjvph²hh³jˆph´Mîubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjrph²hh³jˆph´Mîubah}”(h]”jmpah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jˆph´Mîhjoph²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒipc call version”h]”hŒipc call version”…”�”}”(hj qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mîhjqh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjoph²hh³jˆph´Mîubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj"qjæj"qjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hŒß**Parameters** ``int *cmd`` pointer to command **Description** Return IPC_64 for new style IPC and IPC_OLD for old style IPC. The **cmd** value is turned from an encoding command and version into just the command code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj,qh]”hŒ Parameters”…”�”}”(hj.qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mòhj&qubj )�”}”(hhh]”j)�”}”(hŒ ``int *cmd`` pointer to command ”h]”(j)�”}”(hŒ ``int *cmd``”h]”j)�”}”(hjKqh]”hŒint *cmd”…”�”}”(hjMqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIqubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MïhjEqubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to command”h]”hŒpointer to command”…”�”}”(hjdqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j`qh´Mïhjaqubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjEqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`qh´MïhjBqubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj&qubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj†qh]”hŒ Description”…”�”}”(hjˆqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj„qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mñhj&qubhÝ)�”}”(hŒ›Return IPC_64 for new style IPC and IPC_OLD for old style IPC. The **cmd** value is turned from an encoding command and version into just the command code.”h]”(hŒCReturn IPC_64 for new style IPC and IPC_OLD for old style IPC. The ”…”�”}”(hjœqh²hh³Nh´Nubjõ)�”}”(hŒ**cmd**”h]”hŒcmd”…”�”}”(hj¤qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœqubhŒQ value is turned from an encoding command and version into just the command code.”…”�”}”(hjœqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mðhj&qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsysvipc_find_ipc (C function)”Œc.sysvipc_find_ipc”hNt”auh1hýhj>;h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒJstruct kern_ipc_perm * sysvipc_find_ipc (struct ipc_ids *ids, loff_t *pos)”h]”j)�”}”(hŒHstruct kern_ipc_perm *sysvipc_find_ipc(struct ipc_ids *ids, loff_t *pos)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÝqh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÙqh²hh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëqh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙqh²hh³jêqh´Mubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjüqh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjùqubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jþqŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œsysvipc_find_ipc”sbŒc.sysvipc_find_ipc”†”asbuh1hhjÙqh²hh³jêqh´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙqh²hh³jêqh´Mubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj+rh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÙqh²hh³jêqh´Mubj{)�”}”(hŒsysvipc_find_ipc”h]”j�)�”}”(hjrh]”hŒsysvipc_find_ipc”…”�”}”(hjah"]”h$]”h&]”uh1j1hjSrubh)�”}”(hhh]”j�)�”}”(hŒipc_ids”h]”hŒipc_ids”…”�”}”(hjurh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjrrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jwrŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jrŒc.sysvipc_find_ipc”†”asbuh1hhjSrubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSrubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¡rh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjSrubj�)�”}”(hŒids”h]”hŒids”…”�”}”(hj®rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjOrubj¢)�”}”(hŒ loff_t *pos”h]”(h)�”}”(hhh]”j�)�”}”(hŒloff_t”h]”hŒloff_t”…”�”}”(hjÊrh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÌrŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jrŒc.sysvipc_find_ipc”†”asbuh1hhjÃrubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèrh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃrubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjörh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÃrubj�)�”}”(hŒpos”h]”hŒpos”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÃrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjOrubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÙqh²hh³jêqh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÕqh²hh³jêqh´Mubah}”(h]”jÐqah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jêqh´MhjÒqh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0Find and lock the ipc structure based on seq pos”h]”hŒ0Find and lock the ipc structure based on seq pos”…”�”}”(hj-sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mhj*sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÒqh²hh³jêqh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjEsjæjEsjç‰jè‰jé‰uh1jh²hhj>;h³Nh´Nubjë)�”}”(hX5**Parameters** ``struct ipc_ids *ids`` ipc identifier set ``loff_t *pos`` expected position **Description** The function finds an ipc structure, based on the sequence file position **pos**. If there is no ipc structure at position **pos**, then the successor is selected. If a structure is found, then it is locked (both rcu_read_lock() and ipc_lock_object()) and **pos** is set to the position needed to locate the found ipc structure. If nothing is found (i.e. EOF), **pos** is not modified. The function returns the found ipc structure, or NULL at EOF.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjOsh]”hŒ Parameters”…”�”}”(hjQsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMsubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjIsubj )�”}”(hhh]”(j)�”}”(hŒ+``struct ipc_ids *ids`` ipc identifier set ”h]”(j)�”}”(hŒ``struct ipc_ids *ids``”h]”j)�”}”(hjnsh]”hŒstruct ipc_ids *ids”…”�”}”(hjpsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlsubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mhjhsubj2)�”}”(hhh]”hÝ)�”}”(hŒipc identifier set”h]”hŒipc identifier set”…”�”}”(hj‡sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒsh´Mhj„subah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjhsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒsh´Mhjesubj)�”}”(hŒ"``loff_t *pos`` expected position ”h]”(j)�”}”(hŒ``loff_t *pos``”h]”j)�”}”(hj§sh]”hŒ loff_t *pos”…”�”}”(hj©sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´Mhj¡subj2)�”}”(hhh]”hÝ)�”}”(hŒexpected position”h]”hŒexpected position”…”�”}”(hjÀsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼sh´Mhj½subah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡subeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼sh´Mhjesubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjIsubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjâsh]”hŒ Description”…”�”}”(hjäsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàsubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjIsubhÝ)�”}”(hX‚The function finds an ipc structure, based on the sequence file position **pos**. If there is no ipc structure at position **pos**, then the successor is selected. If a structure is found, then it is locked (both rcu_read_lock() and ipc_lock_object()) and **pos** is set to the position needed to locate the found ipc structure. If nothing is found (i.e. EOF), **pos** is not modified.”h]”(hŒIThe function finds an ipc structure, based on the sequence file position ”…”�”}”(hjøsh²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøsubhŒ+. If there is no ipc structure at position ”…”�”}”(hjøsh²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøsubhŒ, then the successor is selected. If a structure is found, then it is locked (both rcu_read_lock() and ipc_lock_object()) and ”…”�”}”(hjøsh²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hj$th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøsubhŒb is set to the position needed to locate the found ipc structure. If nothing is found (i.e. EOF), ”…”�”}”(hjøsh²hh³Nh´Nubjõ)�”}”(hŒ**pos**”h]”hŒpos”…”�”}”(hj6th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøsubhŒ is not modified.”…”�”}”(hjøsh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjIsubhÝ)�”}”(hŒ=The function returns the found ipc structure, or NULL at EOF.”h]”hŒ=The function returns the found ipc structure, or NULL at EOF.”…”�”}”(hjOth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒO/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:196: ./ipc/util.c”h´MhjIsubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj>;h²hh³Nh´Nubeh}”(h]”Œ ipc-utilities”ah ]”h"]”Œ ipc utilities”ah$]”h&]”uh1hµhj-;h²hh³hÊh´KÂubeh}”(h]”Œkernel-ipc-facilities”ah ]”h"]”Œkernel ipc facilities”ah$]”h&]”uh1hµhh·h²hh³hÊh´K¿ubh¶)�”}”(hhh]”(h»)�”}”(hŒ FIFO Buffer”h]”hŒ FIFO Buffer”…”�”}”(hjxth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjuth²hh³hÊh´KÈubh¶)�”}”(hhh]”(h»)�”}”(hŒkfifo interface”h]”hŒkfifo interface”…”�”}”(hj‰th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj†th²hh³hÊh´KËubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒDECLARE_KFIFO_PTR (C macro)”Œc.DECLARE_KFIFO_PTR”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDECLARE_KFIFO_PTR”h]”j)�”}”(hŒDECLARE_KFIFO_PTR”h]”j{)�”}”(hŒDECLARE_KFIFO_PTR”h]”j�)�”}”(hjªth]”hŒDECLARE_KFIFO_PTR”…”�”}”(hj´th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°tubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¬th²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Koubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¨th²hh³jÇth´Koubah}”(h]”j£tah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÇth´Kohj¥th²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¥th²hh³jÇth´Koubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjàtjæjàtjç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ"``DECLARE_KFIFO_PTR (fifo, type)``”h]”j)�”}”(hjæth]”hŒDECLARE_KFIFO_PTR (fifo, type)”…”�”}”(hjèth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjätubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Kqhj†th²hubj•)�”}”(hŒ'macro to declare a fifo pointer object ”h]”hÝ)�”}”(hŒ¯o to declare a fifo pointer object”h]”hŒ¯o to declare a fifo pointer object”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Kohjütubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³juh´Kohj†th²hubjë)�”}”(hŒZ**Parameters** ``fifo`` name of the declared fifo ``type`` type of the fifo elements”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjuh]”hŒ Parameters”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Kshjuubj )�”}”(hhh]”(j)�”}”(hŒ#``fifo`` name of the declared fifo ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj:uh]”hŒfifo”…”�”}”(hjyh]”hŒNote”…”�”}”(hj@yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjreturns true if the fifo is empty using a spinlock for locking”h]”hŒ>returns true if the fifo is empty using a spinlock for locking”…”�”}”(hj‰�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Kÿhj…�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j—�h´Kÿhj†th²hubjë)�”}”(hŒe**Parameters** ``fifo`` address of the fifo to be used ``lock`` spinlock to be used for locking”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¤�h]”hŒ Parameters”…”�”}”(hj¦�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¢�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhjž�ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjÃ�h]”hŒfifo”…”�”}”(hjÅ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj½�ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjÜ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØ�h´MhjÙ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj½�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØ�h´Mhjº�ubj)�”}”(hŒ(``lock`` spinlock to be used for locking”h]”(j)�”}”(hŒ``lock``”h]”j)�”}”(hjü�h]”hŒlock”…”�”}”(hjþ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjú�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhjö�ubj2)�”}”(hhh]”hÝ)�”}”(hŒspinlock to be used for locking”h]”hŒspinlock to be used for locking”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjö�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚h´Mhjº�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjž�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ-kfifo_is_empty_spinlocked_noirqsave (C macro)”Œ%c.kfifo_is_empty_spinlocked_noirqsave”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ#kfifo_is_empty_spinlocked_noirqsave”h]”j)�”}”(hŒ#kfifo_is_empty_spinlocked_noirqsave”h]”j{)�”}”(hŒ#kfifo_is_empty_spinlocked_noirqsave”h]”j�)�”}”(hjP‚h]”hŒ#kfifo_is_empty_spinlocked_noirqsave”…”�”}”(hjZ‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjV‚ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjR‚h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjN‚h²hh³jm‚h´Mubah}”(h]”jI‚ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jm‚h´MhjK‚h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjK‚h²hh³jm‚h´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj†‚jæj†‚jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ4``kfifo_is_empty_spinlocked_noirqsave (fifo, lock)``”h]”j)�”}”(hjŒ‚h]”hŒ0kfifo_is_empty_spinlocked_noirqsave (fifo, lock)”…”�”}”(hjŽ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj†th²hubj•)�”}”(hŒ[returns true if the fifo is empty using a spinlock for locking, doesn't disable interrupts ”h]”hÝ)�”}”(hŒZreturns true if the fifo is empty using a spinlock for locking, doesn't disable interrupts”h]”hŒ\returns true if the fifo is empty using a spinlock for locking, doesn’t disable interrupts”…”�”}”(hj¦‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj¢‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j´‚h´Mhj†th²hubjë)�”}”(hŒe**Parameters** ``fifo`` address of the fifo to be used ``lock`` spinlock to be used for locking”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÁ‚h]”hŒ Parameters”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¿‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj»‚ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjà‚h]”hŒfifo”…”�”}”(hjâ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MhjÚ‚ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjù‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõ‚h´Mhjö‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚ‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõ‚h´Mhjׂubj)�”}”(hŒ(``lock`` spinlock to be used for locking”h]”(j)�”}”(hŒ``lock``”h]”j)�”}”(hjƒh]”hŒlock”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhjƒubj2)�”}”(hhh]”hÝ)�”}”(hŒspinlock to be used for locking”h]”hŒspinlock to be used for locking”…”�”}”(hj2ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj/ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.ƒh´Mhjׂubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj»‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_is_full (C macro)”Œc.kfifo_is_full”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_is_full”h]”j)�”}”(hŒ kfifo_is_full”h]”j{)�”}”(hŒ kfifo_is_full”h]”j�)�”}”(hjmƒh]”hŒ kfifo_is_full”…”�”}”(hjwƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjsƒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjoƒh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjkƒh²hh³jŠƒh´Mubah}”(h]”jfƒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŠƒh´Mhjhƒh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjhƒh²hh³jŠƒh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj£ƒjæj£ƒjç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_is_full (fifo)``”h]”j)�”}”(hj©ƒh]”hŒkfifo_is_full (fifo)”…”�”}”(hj«ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M hj†th²hubj•)�”}”(hŒ!returns true if the fifo is full ”h]”hÝ)�”}”(hŒ returns true if the fifo is full”h]”hŒ returns true if the fifo is full”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj¿ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jуh´Mhj†th²hubjë)�”}”(hŒ9**Parameters** ``fifo`` address of the fifo to be used”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÞƒh]”hŒ Parameters”…”�”}”(hjàƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj܃ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M"hj؃ubj )�”}”(hhh]”j)�”}”(hŒ'``fifo`` address of the fifo to be used”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjýƒh]”hŒfifo”…”�”}”(hjÿƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M$hj÷ƒubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj÷ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„h´M$hjôƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj؃ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(•hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_avail (C macro)”Œ c.kfifo_avail”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_avail”h]”j)�”}”(hŒ kfifo_avail”h]”j{)�”}”(hŒ kfifo_avail”h]”j�)�”}”(hjQ„h]”hŒ kfifo_avail”…”�”}”(hj[„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjW„ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjS„h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M(ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjO„h²hh³jn„h´M(ubah}”(h]”jJ„ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jn„h´M(hjL„h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjL„h²hh³jn„h´M(ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj‡„jæj‡„jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_avail (fifo)``”h]”j)�”}”(hj�„h]”hŒkfifo_avail (fifo)”…”�”}”(hj�„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M*hj†th²hubj•)�”}”(hŒ2returns the number of unused elements in the fifo ”h]”hÝ)�”}”(hŒ1returns the number of unused elements in the fifo”h]”hŒ1returns the number of unused elements in the fifo”…”�”}”(hj§„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M(hj£„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jµ„h´M(hj†th²hubjë)�”}”(hŒ9**Parameters** ``fifo`` address of the fifo to be used”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj„h]”hŒ Parameters”…”�”}”(hjÄ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÀ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M,hj¼„ubj )�”}”(hhh]”j)�”}”(hŒ'``fifo`` address of the fifo to be used”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjá„h]”hŒfifo”…”�”}”(hjã„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjß„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M.hjÛ„ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjú„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M)hj÷„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÛ„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jö„h´M.hjØ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¼„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_skip_count (C macro)”Œc.kfifo_skip_count”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_skip_count”h]”j)�”}”(hŒkfifo_skip_count”h]”j{)�”}”(hŒkfifo_skip_count”h]”j�)�”}”(hj5…h]”hŒkfifo_skip_count”…”�”}”(hj?…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;…ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj7…h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M8ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj3…h²hh³jR…h´M8ubah}”(h]”j.…ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jR…h´M8hj0…h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj0…h²hh³jR…h´M8ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjk…jæjk…jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ"``kfifo_skip_count (fifo, count)``”h]”j)�”}”(hjq…h]”hŒkfifo_skip_count (fifo, count)”…”�”}”(hjs…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M:hj†th²hubj•)�”}”(hŒskip output data ”h]”hÝ)�”}”(hŒskip output data”h]”hŒskip output data”…”�”}”(hj‹…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M8hj‡…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j™…h´M8hj†th²hubjë)�”}”(hŒ\**Parameters** ``fifo`` address of the fifo to be used ``count`` count of data to skip”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¦…h]”hŒ Parameters”…”�”}”(hj¨…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M<hj …ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjÅ…h]”hŒfifo”…”�”}”(hjÇ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M9hj¿…ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjÞ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÚ…h´M9hjÛ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚ…h´M9hj¼…ubj)�”}”(hŒ``count`` count of data to skip”h]”(j)�”}”(hŒ ``count``”h]”j)�”}”(hjþ…h]”hŒcount”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjü…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M;hjø…ubj2)�”}”(hhh]”hÝ)�”}”(hŒcount of data to skip”h]”hŒcount of data to skip”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M:hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjø…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†h´M;hj¼…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj …ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_skip (C macro)”Œ c.kfifo_skip”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_skip”h]”j)�”}”(hŒ kfifo_skip”h]”j{)�”}”(hŒ kfifo_skip”h]”j�)�”}”(hjR†h]”hŒ kfifo_skip”…”�”}”(hj\†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjX†ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjT†h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MGubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjP†h²hh³jo†h´MGubah}”(h]”jK†ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jo†h´MGhjM†h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjM†h²hh³jo†h´MGubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjˆ†jæjˆ†jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_skip (fifo)``”h]”j)�”}”(hjކh]”hŒkfifo_skip (fifo)”…”�”}”(hj�†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MIhj†th²hubj•)�”}”(hŒskip output data ”h]”hÝ)�”}”(hŒskip output data”h]”hŒskip output data”…”�”}”(hj¨†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MGhj¤†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¶†h´MGhj†th²hubjë)�”}”(hŒ9**Parameters** ``fifo`` address of the fifo to be used”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÆh]”hŒ Parameters”…”�”}”(hjņh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MKhj½†ubj )�”}”(hhh]”j)�”}”(hŒ'``fifo`` address of the fifo to be used”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjâ†h]”hŒfifo”…”�”}”(hjä†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjà†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MMhj܆ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjû†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MHhjø†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj܆ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷†h´MMhjÙ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj½†ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_peek_len (C macro)”Œc.kfifo_peek_len”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_peek_len”h]”j)�”}”(hŒkfifo_peek_len”h]”j{)�”}”(hŒkfifo_peek_len”h]”j�)�”}”(hj6‡h]”hŒkfifo_peek_len”…”�”}”(hj@‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<‡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj8‡h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MMubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj4‡h²hh³jS‡h´MMubah}”(h]”j/‡ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jS‡h´MMhj1‡h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj1‡h²hh³jS‡h´MMubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjl‡jæjl‡jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_peek_len (fifo)``”h]”j)�”}”(hjr‡h]”hŒkfifo_peek_len (fifo)”…”�”}”(hjt‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjp‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MOhj†th²hubj•)�”}”(hŒ&gets the size of the next fifo record ”h]”hÝ)�”}”(hŒ%gets the size of the next fifo record”h]”hŒ%gets the size of the next fifo record”…”�”}”(hjŒ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MMhjˆ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jš‡h´MMhj†th²hubjë)�”}”(hŒ–**Parameters** ``fifo`` address of the fifo to be used **Description** This function returns the size of the next fifo record in number of bytes.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj§‡h]”hŒ Parameters”…”�”}”(hj©‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MQhj¡‡ubj )�”}”(hhh]”j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjƇh]”hŒfifo”…”�”}”(hjȇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjćubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MNhjÀ‡ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj߇h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÛ‡h´MNhj܇ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÀ‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛ‡h´MNhj½‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡‡ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjˆh]”hŒ Description”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MPhj¡‡ubhÝ)�”}”(hŒJThis function returns the size of the next fifo record in number of bytes.”h]”hŒJThis function returns the size of the next fifo record in number of bytes.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MOhj¡‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_alloc (C macro)”Œ c.kfifo_alloc”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_alloc”h]”j)�”}”(hŒ kfifo_alloc”h]”j{)�”}”(hŒ kfifo_alloc”h]”j�)�”}”(hj@ˆh]”hŒ kfifo_alloc”…”�”}”(hjJˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFˆubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjBˆh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M^ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj>ˆh²hh³j]ˆh´M^ubah}”(h]”j9ˆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j]ˆh´M^hj;ˆh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj;ˆh²hh³j]ˆh´M^ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjvˆjæjvˆjç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ&``kfifo_alloc (fifo, size, gfp_mask)``”h]”j)�”}”(hj|ˆh]”hŒ"kfifo_alloc (fifo, size, gfp_mask)”…”�”}”(hj~ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjzˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M`hj†th²hubj•)�”}”(hŒ(dynamically allocates a new fifo buffer ”h]”hÝ)�”}”(hŒ'dynamically allocates a new fifo buffer”h]”hŒ'dynamically allocates a new fifo buffer”…”�”}”(hj–ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M^hj’ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¤ˆh´M^hj†th²hubjë)�”}”(hXŽ**Parameters** ``fifo`` pointer to the fifo ``size`` the number of elements in the fifo, this must be a power of 2 ``gfp_mask`` get_free_pages mask, passed to kmalloc() **Description** This macro dynamically allocates a new fifo buffer. The number of elements will be rounded-up to a power of 2. The fifo will be release with kfifo_free(). Return 0 if no error, otherwise an error code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj±ˆh]”hŒ Parameters”…”�”}”(hj³ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mbhj«ˆubj )�”}”(hhh]”(j)�”}”(hŒ``fifo`` pointer to the fifo ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjЈh]”hŒfifo”…”�”}”(hjÒˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjΈubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M_hjʈubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to the fifo”h]”hŒpointer to the fifo”…”�”}”(hjéˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jåˆh´M_hjæˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjʈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jåˆh´M_hjLjubj)�”}”(hŒG``size`` the number of elements in the fifo, this must be a power of 2 ”h]”(j)�”}”(hŒ``size``”h]”j)�”}”(hj ‰h]”hŒsize”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M`hj‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒ=the number of elements in the fifo, this must be a power of 2”h]”hŒ=the number of elements in the fifo, this must be a power of 2”…”�”}”(hj"‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰h´M`hj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰h´M`hjLjubj)�”}”(hŒ6``gfp_mask`` get_free_pages mask, passed to kmalloc() ”h]”(j)�”}”(hŒ ``gfp_mask``”h]”j)�”}”(hjB‰h]”hŒgfp_mask”…”�”}”(hjD‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mahj<‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(get_free_pages mask, passed to kmalloc()”h]”hŒ(get_free_pages mask, passed to kmalloc()”…”�”}”(hj[‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jW‰h´MahjX‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj<‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jW‰h´MahjLjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj«ˆubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj}‰h]”hŒ Description”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mchj«ˆubhÝ)�”}”(hŒ3This macro dynamically allocates a new fifo buffer.”h]”hŒ3This macro dynamically allocates a new fifo buffer.”…”�”}”(hj“‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mbhj«ˆubhÝ)�”}”(hŒ•The number of elements will be rounded-up to a power of 2. The fifo will be release with kfifo_free(). Return 0 if no error, otherwise an error code.”h]”hŒ•The number of elements will be rounded-up to a power of 2. The fifo will be release with kfifo_free(). Return 0 if no error, otherwise an error code.”…”�”}”(hj¢‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mdhj«ˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_alloc_node (C macro)”Œc.kfifo_alloc_node”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_alloc_node”h]”j)�”}”(hŒkfifo_alloc_node”h]”j{)�”}”(hŒkfifo_alloc_node”h]”j�)�”}”(hjˉh]”hŒkfifo_alloc_node”…”�”}”(hjÕ‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjщubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj͉h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Muubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjɉh²hh³jè‰h´Muubah}”(h]”jĉah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jè‰h´MuhjƉh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjƉh²hh³jè‰h´Muubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjŠjæjŠjç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ1``kfifo_alloc_node (fifo, size, gfp_mask, node)``”h]”j)�”}”(hjŠh]”hŒ-kfifo_alloc_node (fifo, size, gfp_mask, node)”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mwhj†th²hubj•)�”}”(hŒ7dynamically allocates a new fifo buffer on a NUMA node ”h]”hÝ)�”}”(hŒ6dynamically allocates a new fifo buffer on a NUMA node”h]”hŒ6dynamically allocates a new fifo buffer on a NUMA node”…”�”}”(hj!Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MuhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j/Šh´Muhj†th²hubjë)�”}”(hXÓ**Parameters** ``fifo`` pointer to the fifo ``size`` the number of elements in the fifo, this must be a power of 2 ``gfp_mask`` get_free_pages mask, passed to kmalloc() ``node`` NUMA node to allocate memory on **Description** This macro dynamically allocates a new fifo buffer with NUMA node awareness. The number of elements will be rounded-up to a power of 2. The fifo will be release with kfifo_free(). Return 0 if no error, otherwise an error code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj<Šh]”hŒ Parameters”…”�”}”(hj>Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:Šubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Myhj6Šubj )�”}”(hhh]”(j)�”}”(hŒ``fifo`` pointer to the fifo ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj[Šh]”hŒfifo”…”�”}”(hj]Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MvhjUŠubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to the fifo”h]”hŒpointer to the fifo”…”�”}”(hjtŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jpŠh´MvhjqŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjUŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jpŠh´MvhjRŠubj)�”}”(hŒG``size`` the number of elements in the fifo, this must be a power of 2 ”h]”(j)�”}”(hŒ``size``”h]”j)�”}”(hj”Šh]”hŒsize”…”�”}”(hj–Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’Šubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MwhjŽŠubj2)�”}”(hhh]”hÝ)�”}”(hŒ=the number of elements in the fifo, this must be a power of 2”h]”hŒ=the number of elements in the fifo, this must be a power of 2”…”�”}”(hj­Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©Šh´MwhjªŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŽŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©Šh´MwhjRŠubj)�”}”(hŒ6``gfp_mask`` get_free_pages mask, passed to kmalloc() ”h]”(j)�”}”(hŒ ``gfp_mask``”h]”j)�”}”(hjÍŠh]”hŒgfp_mask”…”�”}”(hjÏŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MxhjÇŠubj2)�”}”(hhh]”hÝ)�”}”(hŒ(get_free_pages mask, passed to kmalloc()”h]”hŒ(get_free_pages mask, passed to kmalloc()”…”�”}”(hjæŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jâŠh´MxhjãŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÇŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâŠh´MxhjRŠubj)�”}”(hŒ)``node`` NUMA node to allocate memory on ”h]”(j)�”}”(hŒ``node``”h]”j)�”}”(hj‹h]”hŒnode”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Myhj‹ubj2)�”}”(hhh]”hÝ)�”}”(hŒNUMA node to allocate memory on”h]”hŒNUMA node to allocate memory on”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‹h´Myhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹h´MyhjRŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj6ŠubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjA‹h]”hŒ Description”…”�”}”(hjC‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M{hj6ŠubhÝ)�”}”(hŒLThis macro dynamically allocates a new fifo buffer with NUMA node awareness.”h]”hŒLThis macro dynamically allocates a new fifo buffer with NUMA node awareness.”…”�”}”(hjW‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mzhj6ŠubhÝ)�”}”(hŒ•The number of elements will be rounded-up to a power of 2. The fifo will be release with kfifo_free(). Return 0 if no error, otherwise an error code.”h]”hŒ•The number of elements will be rounded-up to a power of 2. The fifo will be release with kfifo_free(). Return 0 if no error, otherwise an error code.”…”�”}”(hjf‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M|hj6Šubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_free (C macro)”Œ c.kfifo_free”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_free”h]”j)�”}”(hŒ kfifo_free”h]”j{)�”}”(hŒ kfifo_free”h]”j�)�”}”(hj�‹h]”hŒ kfifo_free”…”�”}”(hj™‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•‹ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‘‹h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M�ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�‹h²hh³j¬‹h´M�ubah}”(h]”jˆ‹ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¬‹h´M�hjŠ‹h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŠ‹h²hh³j¬‹h´M�ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÅ‹jæjÅ‹jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_free (fifo)``”h]”j)�”}”(hjË‹h]”hŒkfifo_free (fifo)”…”�”}”(hjÍ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M�hj†th²hubj•)�”}”(hŒfrees the fifo ”h]”hÝ)�”}”(hŒfrees the fifo”h]”hŒfrees the fifo”…”�”}”(hjå‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M�hjá‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jó‹h´M�hj†th²hubjë)�”}”(hŒ/**Parameters** ``fifo`` the fifo to be freed”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŒh]”hŒ Parameters”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M‘hjú‹ubj )�”}”(hhh]”j)�”}”(hŒ``fifo`` the fifo to be freed”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjŒh]”hŒfifo”…”�”}”(hj!Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M“hjŒubj2)�”}”(hhh]”hÝ)�”}”(hŒthe fifo to be freed”h]”hŒthe fifo to be freed”…”�”}”(hj8Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MŽhj5Œubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4Œh´M“hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjú‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_init (C macro)”Œ c.kfifo_init”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_init”h]”j)�”}”(hŒ kfifo_init”h]”j{)�”}”(hŒ kfifo_init”h]”j�)�”}”(hjsŒh]”hŒ kfifo_init”…”�”}”(hj}Œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyŒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjuŒh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M™ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjqŒh²hh³j�Œh´M™ubah}”(h]”jlŒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�Œh´M™hjnŒh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjnŒh²hh³j�Œh´M™ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj©Œjæj©Œjç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ#``kfifo_init (fifo, buffer, size)``”h]”j)�”}”(hj¯Œh]”hŒkfifo_init (fifo, buffer, size)”…”�”}”(hj±Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­Œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M›hj†th²hubj•)�”}”(hŒ.initialize a fifo using a preallocated buffer ”h]”hÝ)�”}”(hŒ-initialize a fifo using a preallocated buffer”h]”hŒ-initialize a fifo using a preallocated buffer”…”�”}”(hjÉŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M™hjÅŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j׌h´M™hj†th²hubjë)�”}”(hXk**Parameters** ``fifo`` the fifo to assign the buffer ``buffer`` the preallocated buffer to be used ``size`` the size of the internal buffer, this have to be a power of 2 **Description** This macro initializes a fifo using a preallocated buffer. The number of elements will be rounded-up to a power of 2. Return 0 if no error, otherwise an error code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjäŒh]”hŒ Parameters”…”�”}”(hjæŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M�hjÞŒubj )�”}”(hhh]”(j)�”}”(hŒ'``fifo`` the fifo to assign the buffer ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj�h]”hŒfifo”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MšhjýŒubj2)�”}”(hhh]”hÝ)�”}”(hŒthe fifo to assign the buffer”h]”hŒthe fifo to assign the buffer”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�h´Mšhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´MšhjúŒubj)�”}”(hŒ.``buffer`` the preallocated buffer to be used ”h]”(j)�”}”(hŒ ``buffer``”h]”j)�”}”(hj<�h]”hŒbuffer”…”�”}”(hj>�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M›hj6�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the preallocated buffer to be used”h]”hŒ"the preallocated buffer to be used”…”�”}”(hjU�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQ�h´M›hjR�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQ�h´M›hjúŒubj)�”}”(hŒG``size`` the size of the internal buffer, this have to be a power of 2 ”h]”(j)�”}”(hŒ``size``”h]”j)�”}”(hju�h]”hŒsize”…”�”}”(hjw�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjs�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mœhjo�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ=the size of the internal buffer, this have to be a power of 2”h]”hŒ=the size of the internal buffer, this have to be a power of 2”…”�”}”(hjŽ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠ�h´Mœhj‹�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjo�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠ�h´MœhjúŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÞŒubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj°�h]”hŒ Description”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MžhjÞŒubhÝ)�”}”(hŒ:This macro initializes a fifo using a preallocated buffer.”h]”hŒ:This macro initializes a fifo using a preallocated buffer.”…”�”}”(hjÆ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M�hjÞŒubhÝ)�”}”(hŒiThe number of elements will be rounded-up to a power of 2. Return 0 if no error, otherwise an error code.”h]”hŒiThe number of elements will be rounded-up to a power of 2. Return 0 if no error, otherwise an error code.”…”�”}”(hjÕ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MŸhjÞŒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_put (C macro)”Œ c.kfifo_put”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_put”h]”j)�”}”(hŒ kfifo_put”h]”j{)�”}”(hŒ kfifo_put”h]”j�)�”}”(hjþ�h]”hŒ kfifo_put”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŽh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M­ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjü�h²hh³jŽh´M­ubah}”(h]”j÷�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŽh´M­hjù�h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjù�h²hh³jŽh´M­ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj4Žjæj4Žjç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_put (fifo, val)``”h]”j)�”}”(hj:Žh]”hŒkfifo_put (fifo, val)”…”�”}”(hj<Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8Žubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M¯hj†th²hubj•)�”}”(hŒput data into the fifo ”h]”hÝ)�”}”(hŒput data into the fifo”h]”hŒput data into the fifo”…”�”}”(hjTŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M­hjPŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jbŽh´M­hj†th²hubjë)�”}”(hXj**Parameters** ``fifo`` address of the fifo to be used ``val`` the data to be added **Description** This macro copies the given value into the fifo. It returns 0 if the fifo was full. Otherwise it returns the number processed elements. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjoŽh]”hŒ Parameters”…”�”}”(hjqŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjmŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M±hjiŽubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjŽŽh]”hŒfifo”…”�”}”(hj�Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M®hjˆŽubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj§Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j£Žh´M®hj¤Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjˆŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j£Žh´M®hj…Žubj)�”}”(hŒ``val`` the data to be added ”h]”(j)�”}”(hŒ``val``”h]”j)�”}”(hjÇŽh]”hŒval”…”�”}”(hjÉŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M¯hjÁŽubj2)�”}”(hhh]”hÝ)�”}”(hŒthe data to be added”h]”hŒthe data to be added”…”�”}”(hjàŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÜŽh´M¯hjÝŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÁŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÜŽh´M¯hj…Žubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjiŽubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M±hjiŽubhÝ)�”}”(hŒ‡This macro copies the given value into the fifo. It returns 0 if the fifo was full. Otherwise it returns the number processed elements.”h]”hŒ‡This macro copies the given value into the fifo. It returns 0 if the fifo was full. Otherwise it returns the number processed elements.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M°hjiŽubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hj'�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M´hjiŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_get (C macro)”Œ c.kfifo_get”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_get”h]”j)�”}”(hŒ kfifo_get”h]”j{)�”}”(hŒ kfifo_get”h]”j�)�”}”(hjP�h]”hŒ kfifo_get”…”�”}”(hjZ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjV�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjR�h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÒubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjN�h²hh³jm�h´MÒubah}”(h]”jI�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jm�h´MÒhjK�h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjK�h²hh³jm�h´MÒubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj†�jæj†�jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_get (fifo, val)``”h]”j)�”}”(hjŒ�h]”hŒkfifo_get (fifo, val)”…”�”}”(hjŽ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÔhj†th²hubj•)�”}”(hŒget data from the fifo ”h]”hÝ)�”}”(hŒget data from the fifo”h]”hŒget data from the fifo”…”�”}”(hj¦�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÒhj¢�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j´�h´MÒhj†th²hubjë)�”}”(hXn**Parameters** ``fifo`` address of the fifo to be used ``val`` address where to store the data **Description** This macro reads the data from the fifo. It returns 0 if the fifo was empty. Otherwise it returns the number processed elements. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÁ�h]”hŒ Parameters”…”�”}”(hjÃ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¿�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÖhj»�ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjà�h]”hŒfifo”…”�”}”(hjâ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÓhjÚ�ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjù�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõ�h´MÓhjö�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõ�h´MÓhj×�ubj)�”}”(hŒ(``val`` address where to store the data ”h]”(j)�”}”(hŒ``val``”h]”j)�”}”(hj�h]”hŒval”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÔhj�ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress where to store the data”h]”hŒaddress where to store the data”…”�”}”(hj2�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.�h´MÔhj/�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.�h´MÔhj×�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj»�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjT�h]”hŒ Description”…”�”}”(hjV�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjR�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÖhj»�ubhÝ)�”}”(hŒ€This macro reads the data from the fifo. It returns 0 if the fifo was empty. Otherwise it returns the number processed elements.”h]”hŒ€This macro reads the data from the fifo. It returns 0 if the fifo was empty. Otherwise it returns the number processed elements.”…”�”}”(hjj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÕhj»�ubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hjy�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÙhj»�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_peek (C macro)”Œ c.kfifo_peek”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_peek”h]”j)�”}”(hŒ kfifo_peek”h]”j{)�”}”(hŒ kfifo_peek”h]”j�)�”}”(hj¢�h]”hŒ kfifo_peek”…”�”}”(hj¬�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¤�h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mùubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj �h²hh³j¿�h´Mùubah}”(h]”j›�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¿�h´Mùhj��h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj��h²hh³j¿�h´Mùubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjØ�jæjØ�jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_peek (fifo, val)``”h]”j)�”}”(hjÞ�h]”hŒkfifo_peek (fifo, val)”…”�”}”(hjà�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mûhj†th²hubj•)�”}”(hŒ(get data from the fifo without removing ”h]”hÝ)�”}”(hŒ'get data from the fifo without removing”h]”hŒ'get data from the fifo without removing”…”�”}”(hjø�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mùhjô�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j‘h´Mùhj†th²hubjë)�”}”(hXŠ**Parameters** ``fifo`` address of the fifo to be used ``val`` address where to store the data **Description** This reads the data from the fifo without removing it from the fifo. It returns 0 if the fifo was empty. Otherwise it returns the number processed elements. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‘h]”hŒ Parameters”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mýhj ‘ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj2‘h]”hŒfifo”…”�”}”(hj4‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Múhj,‘ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjK‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jG‘h´MúhjH‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj,‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jG‘h´Múhj)‘ubj)�”}”(hŒ(``val`` address where to store the data ”h]”(j)�”}”(hŒ``val``”h]”j)�”}”(hjk‘h]”hŒval”…”�”}”(hjm‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhji‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mûhje‘ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress where to store the data”h]”hŒaddress where to store the data”…”�”}”(hj„‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j€‘h´Mûhj�‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hje‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€‘h´Mûhj)‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ‘ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¦‘h]”hŒ Description”…”�”}”(hj¨‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mýhj ‘ubhÝ)�”}”(hŒœThis reads the data from the fifo without removing it from the fifo. It returns 0 if the fifo was empty. Otherwise it returns the number processed elements.”h]”hŒœThis reads the data from the fifo without removing it from the fifo. It returns 0 if the fifo was empty. Otherwise it returns the number processed elements.”…”�”}”(hj¼‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mühj ‘ubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hjË‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj ‘ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_in (C macro)”Œ c.kfifo_in”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_in”h]”j)�”}”(hŒkfifo_in”h]”j{)�”}”(hŒkfifo_in”h]”j�)�”}”(hjô‘h]”hŒkfifo_in”…”�”}”(hjþ‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjú‘ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjö‘h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjò‘h²hh³j’h´Mubah}”(h]”jí‘ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j’h´Mhjï‘h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjï‘h²hh³j’h´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj*’jæj*’jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_in (fifo, buf, n)``”h]”j)�”}”(hj0’h]”hŒkfifo_in (fifo, buf, n)”…”�”}”(hj2’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M!hj†th²hubj•)�”}”(hŒput data into the fifo ”h]”hÝ)�”}”(hŒput data into the fifo”h]”hŒput data into the fifo”…”�”}”(hjJ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MhjF’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jX’h´Mhj†th²hubjë)�”}”(hXf**Parameters** ``fifo`` address of the fifo to be used ``buf`` the data to be added ``n`` number of elements to be added **Description** This macro copies the given buffer into the fifo and returns the number of copied elements. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hje’h]”hŒ Parameters”…”�”}”(hjg’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjc’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M#hj_’ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj„’h]”hŒfifo”…”�”}”(hj†’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M hj~’ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj�’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™’h´M hjš’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™’h´M hj{’ubj)�”}”(hŒ``buf`` the data to be added ”h]”(j)�”}”(hŒ``buf``”h]”j)�”}”(hj½’h]”hŒbuf”…”�”}”(hj¿’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M!hj·’ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe data to be added”h]”hŒthe data to be added”…”�”}”(hjÖ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒ’h´M!hjÓ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒ’h´M!hj{’ubj)�”}”(hŒ%``n`` number of elements to be added ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hjö’h]”hŒn”…”�”}”(hjø’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjô’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M"hjð’ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of elements to be added”h]”hŒnumber of elements to be added”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j “h´M"hj “ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjð’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j “h´M"hj{’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj_’ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj1“h]”hŒ Description”…”�”}”(hj3“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M$hj_’ubhÝ)�”}”(hŒ[This macro copies the given buffer into the fifo and returns the number of copied elements.”h]”hŒ[This macro copies the given buffer into the fifo and returns the number of copied elements.”…”�”}”(hjG“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M#hj_’ubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hjV“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M&hj_’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_in_spinlocked (C macro)”Œc.kfifo_in_spinlocked”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_in_spinlocked”h]”j)�”}”(hŒkfifo_in_spinlocked”h]”j{)�”}”(hŒkfifo_in_spinlocked”h]”j�)�”}”(hj“h]”hŒkfifo_in_spinlocked”…”�”}”(hj‰“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…“ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�“h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M7ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj}“h²hh³jœ“h´M7ubah}”(h]”jx“ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jœ“h´M7hjz“h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjz“h²hh³jœ“h´M7ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjµ“jæjµ“jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ,``kfifo_in_spinlocked (fifo, buf, n, lock)``”h]”j)�”}”(hj»“h]”hŒ(kfifo_in_spinlocked (fifo, buf, n, lock)”…”�”}”(hj½“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M9hj†th²hubj•)�”}”(hŒ4put data into the fifo using a spinlock for locking ”h]”hÝ)�”}”(hŒ3put data into the fifo using a spinlock for locking”h]”hŒ3put data into the fifo using a spinlock for locking”…”�”}”(hjÕ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M7hjÑ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jã“h´M7hj†th²hubjë)�”}”(hX-**Parameters** ``fifo`` address of the fifo to be used ``buf`` the data to be added ``n`` number of elements to be added ``lock`` pointer to the spinlock to use for locking **Description** This macro copies the given values buffer into the fifo and returns the number of copied elements.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjð“h]”hŒ Parameters”…”�”}”(hjò“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjî“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M;hjê“ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj”h]”hŒfifo”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M8hj ”ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj(”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j$”h´M8hj%”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$”h´M8hj”ubj)�”}”(hŒ``buf`` the data to be added ”h]”(j)�”}”(hŒ``buf``”h]”j)�”}”(hjH”h]”hŒbuf”…”�”}”(hjJ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjF”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M9hjB”ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe data to be added”h]”hŒthe data to be added”…”�”}”(hja”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j]”h´M9hj^”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjB”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]”h´M9hj”ubj)�”}”(hŒ%``n`` number of elements to be added ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hj�”h]”hŒn”…”�”}”(hjƒ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M:hj{”ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of elements to be added”h]”hŒnumber of elements to be added”…”�”}”(hjš”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–”h´M:hj—”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–”h´M:hj”ubj)�”}”(hŒ4``lock`` pointer to the spinlock to use for locking ”h]”(j)�”}”(hŒ``lock``”h]”j)�”}”(hjº”h]”hŒlock”…”�”}”(hj¼”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M;hj´”ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*pointer to the spinlock to use for locking”h]”hŒ*pointer to the spinlock to use for locking”…”�”}”(hjÓ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏ”h´M;hjДubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏ”h´M;hj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjê“ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjõ”h]”hŒ Description”…”�”}”(hj÷”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjó”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M=hjê“ubhÝ)�”}”(hŒbThis macro copies the given values buffer into the fifo and returns the number of copied elements.”h]”hŒbThis macro copies the given values buffer into the fifo and returns the number of copied elements.”…”�”}”(hj •h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M<hjê“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'kfifo_in_spinlocked_noirqsave (C macro)”Œc.kfifo_in_spinlocked_noirqsave”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_in_spinlocked_noirqsave”h]”j)�”}”(hŒkfifo_in_spinlocked_noirqsave”h]”j{)�”}”(hŒkfifo_in_spinlocked_noirqsave”h]”j�)�”}”(hj4•h]”hŒkfifo_in_spinlocked_noirqsave”…”�”}”(hj>•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:•ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj6•h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MKubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj2•h²hh³jQ•h´MKubah}”(h]”j-•ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jQ•h´MKhj/•h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj/•h²hh³jQ•h´MKubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjj•jæjj•jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ6``kfifo_in_spinlocked_noirqsave (fifo, buf, n, lock)``”h]”j)�”}”(hjp•h]”hŒ2kfifo_in_spinlocked_noirqsave (fifo, buf, n, lock)”…”�”}”(hjr•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjn•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MMhj†th²hubj•)�”}”(hŒJput data into fifo using a spinlock for locking, don't disable interrupts ”h]”hÝ)�”}”(hŒIput data into fifo using a spinlock for locking, don't disable interrupts”h]”hŒKput data into fifo using a spinlock for locking, don’t disable interrupts”…”�”}”(hjŠ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MKhj†•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j˜•h´MKhj†th²hubjë)�”}”(hX=**Parameters** ``fifo`` address of the fifo to be used ``buf`` the data to be added ``n`` number of elements to be added ``lock`` pointer to the spinlock to use for locking **Description** This is a variant of kfifo_in_spinlocked() but uses spin_lock/unlock() for locking and doesn't disable interrupts.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¥•h]”hŒ Parameters”…”�”}”(hj§•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MOhjŸ•ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjÄ•h]”hŒfifo”…”�”}”(hjÆ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MMhj¾•ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjÝ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÙ•h´MMhjÚ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¾•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÙ•h´MMhj»•ubj)�”}”(hŒ``buf`` the data to be added ”h]”(j)�”}”(hŒ``buf``”h]”j)�”}”(hjý•h]”hŒbuf”…”�”}”(hjÿ•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MNhj÷•ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe data to be added”h]”hŒthe data to be added”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–h´MNhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj÷•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–h´MNhj»•ubj)�”}”(hŒ%``n`` number of elements to be added ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hj6–h]”hŒn”…”�”}”(hj8–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MOhj0–ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of elements to be added”h]”hŒnumber of elements to be added”…”�”}”(hjO–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jK–h´MOhjL–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj0–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jK–h´MOhj»•ubj)�”}”(hŒ4``lock`` pointer to the spinlock to use for locking ”h]”(j)�”}”(hŒ``lock``”h]”j)�”}”(hjo–h]”hŒlock”…”�”}”(hjq–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjm–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MPhji–ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*pointer to the spinlock to use for locking”h]”hŒ*pointer to the spinlock to use for locking”…”�”}”(hjˆ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j„–h´MPhj…–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hji–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„–h´MPhj»•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjŸ•ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjª–h]”hŒ Description”…”�”}”(hj¬–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¨–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MRhjŸ•ubhÝ)�”}”(hŒrThis is a variant of kfifo_in_spinlocked() but uses spin_lock/unlock() for locking and doesn't disable interrupts.”h]”hŒtThis is a variant of kfifo_in_spinlocked() but uses spin_lock/unlock() for locking and doesn’t disable interrupts.”…”�”}”(hjÀ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MQhjŸ•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_out (C macro)”Œ c.kfifo_out”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_out”h]”j)�”}”(hŒ kfifo_out”h]”j{)�”}”(hŒ kfifo_out”h]”j�)�”}”(hjé–h]”hŒ kfifo_out”…”�”}”(hjó–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjï–ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjë–h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mcubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjç–h²hh³j—h´Mcubah}”(h]”jâ–ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j—h´Mchjä–h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjä–h²hh³j—h´Mcubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj—jæj—jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ``kfifo_out (fifo, buf, n)``”h]”j)�”}”(hj%—h]”hŒkfifo_out (fifo, buf, n)”…”�”}”(hj'—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mehj†th²hubj•)�”}”(hŒget data from the fifo ”h]”hÝ)�”}”(hŒget data from the fifo”h]”hŒget data from the fifo”…”�”}”(hj?—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mchj;—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jM—h´Mchj†th²hubjë)�”}”(hXg**Parameters** ``fifo`` address of the fifo to be used ``buf`` pointer to the storage buffer ``n`` max. number of elements to get **Description** This macro gets some data from the fifo and returns the numbers of elements copied. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjZ—h]”hŒ Parameters”…”�”}”(hj\—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjX—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MghjT—ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjy—h]”hŒfifo”…”�”}”(hj{—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjw—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mdhjs—ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj’—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŽ—h´Mdhj�—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjs—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽ—h´Mdhjp—ubj)�”}”(hŒ&``buf`` pointer to the storage buffer ”h]”(j)�”}”(hŒ``buf``”h]”j)�”}”(hj²—h]”hŒbuf”…”�”}”(hj´—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°—ubah}”(h]”h ]”h"]”h$]”h&]”u•h1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mehj¬—ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to the storage buffer”h]”hŒpointer to the storage buffer”…”�”}”(hjË—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇ—h´MehjÈ—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇ—h´Mehjp—ubj)�”}”(hŒ%``n`` max. number of elements to get ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hjë—h]”hŒn”…”�”}”(hjí—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mfhjå—ubj2)�”}”(hhh]”hÝ)�”}”(hŒmax. number of elements to get”h]”hŒmax. number of elements to get”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j˜h´Mfhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjå—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˜h´Mfhjp—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjT—ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj&˜h]”hŒ Description”…”�”}”(hj(˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MhhjT—ubhÝ)�”}”(hŒSThis macro gets some data from the fifo and returns the numbers of elements copied.”h]”hŒSThis macro gets some data from the fifo and returns the numbers of elements copied.”…”�”}”(hj<˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MghjT—ubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hjK˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MjhjT—ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_out_spinlocked (C macro)”Œc.kfifo_out_spinlocked”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_out_spinlocked”h]”j)�”}”(hŒkfifo_out_spinlocked”h]”j{)�”}”(hŒkfifo_out_spinlocked”h]”j�)�”}”(hjt˜h]”hŒkfifo_out_spinlocked”…”�”}”(hj~˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjz˜ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjv˜h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M}ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjr˜h²hh³j‘˜h´M}ubah}”(h]”jm˜ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‘˜h´M}hjo˜h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjo˜h²hh³j‘˜h´M}ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjª˜jæjª˜jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ-``kfifo_out_spinlocked (fifo, buf, n, lock)``”h]”j)�”}”(hj°˜h]”hŒ)kfifo_out_spinlocked (fifo, buf, n, lock)”…”�”}”(hj²˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj†th²hubj•)�”}”(hŒ4get data from the fifo using a spinlock for locking ”h]”hÝ)�”}”(hŒ3get data from the fifo using a spinlock for locking”h]”hŒ3get data from the fifo using a spinlock for locking”…”�”}”(hjʘh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M}hjƘubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jؘh´M}hj†th²hubjë)�”}”(hX&**Parameters** ``fifo`` address of the fifo to be used ``buf`` pointer to the storage buffer ``n`` max. number of elements to get ``lock`` pointer to the spinlock to use for locking **Description** This macro gets the data from the fifo and returns the numbers of elements copied.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjå˜h]”hŒ Parameters”…”�”}”(hjç˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M�hjߘubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj™h]”hŒfifo”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M~hjþ˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™h´M~hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjþ˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™h´M~hjû˜ubj)�”}”(hŒ&``buf`` pointer to the storage buffer ”h]”(j)�”}”(hŒ``buf``”h]”j)�”}”(hj=™h]”hŒbuf”…”�”}”(hj?™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj7™ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to the storage buffer”h]”hŒpointer to the storage buffer”…”�”}”(hjV™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jR™h´MhjS™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj7™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jR™h´Mhjû˜ubj)�”}”(hŒ%``n`` max. number of elements to get ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hjv™h]”hŒn”…”�”}”(hjx™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjt™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M€hjp™ubj2)�”}”(hhh]”hÝ)�”}”(hŒmax. number of elements to get”h]”hŒmax. number of elements to get”…”�”}”(hj�™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‹™h´M€hjŒ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjp™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹™h´M€hjû˜ubj)�”}”(hŒ4``lock`` pointer to the spinlock to use for locking ”h]”(j)�”}”(hŒ``lock``”h]”j)�”}”(hj¯™h]”hŒlock”…”�”}”(hj±™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M�hj©™ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*pointer to the spinlock to use for locking”h]”hŒ*pointer to the spinlock to use for locking”…”�”}”(hjÈ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄ™h´M�hjÅ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj©™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄ™h´M�hjû˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjߘubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjê™h]”hŒ Description”…”�”}”(hjì™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjè™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MƒhjߘubhÝ)�”}”(hŒRThis macro gets the data from the fifo and returns the numbers of elements copied.”h]”hŒRThis macro gets the data from the fifo and returns the numbers of elements copied.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M‚hjߘubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(kfifo_out_spinlocked_noirqsave (C macro)”Œ c.kfifo_out_spinlocked_noirqsave”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_out_spinlocked_noirqsave”h]”j)�”}”(hŒkfifo_out_spinlocked_noirqsave”h]”j{)�”}”(hŒkfifo_out_spinlocked_noirqsave”h]”j�)�”}”(hj)šh]”hŒkfifo_out_spinlocked_noirqsave”…”�”}”(hj3šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/šubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj+šh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M“ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj'šh²hh³jFšh´M“ubah}”(h]”j"šah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jFšh´M“hj$šh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj$šh²hh³jFšh´M“ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj_šjæj_šjç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ7``kfifo_out_spinlocked_noirqsave (fifo, buf, n, lock)``”h]”j)�”}”(hješh]”hŒ3kfifo_out_spinlocked_noirqsave (fifo, buf, n, lock)”…”�”}”(hjgšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjcšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M•hj†th²hubj•)�”}”(hŒNget data from the fifo using a spinlock for locking, don't disable interrupts ”h]”hÝ)�”}”(hŒMget data from the fifo using a spinlock for locking, don't disable interrupts”h]”hŒOget data from the fifo using a spinlock for locking, don’t disable interrupts”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M“hj{šubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j�šh´M“hj†th²hubjë)�”}”(hXI**Parameters** ``fifo`` address of the fifo to be used ``buf`` pointer to the storage buffer ``n`` max. number of elements to get ``lock`` pointer to the spinlock to use for locking **Description** This is a variant of kfifo_out_spinlocked() which uses spin_lock/unlock() for locking and doesn't disable interrupts.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjššh]”hŒ Parameters”…”�”}”(hjœšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜šubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M—hj”šubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj¹šh]”hŒfifo”…”�”}”(hj»šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·šubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M•hj³šubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjÒšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jΚh´M•hjÏšubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj³šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jΚh´M•hj°šubj)�”}”(hŒ&``buf`` pointer to the storage buffer ”h]”(j)�”}”(hŒ``buf``”h]”j)�”}”(hjòšh]”hŒbuf”…”�”}”(hjôšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjðšubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M–hjìšubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to the storage buffer”h]”hŒpointer to the storage buffer”…”�”}”(hj ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›h´M–hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjìšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›h´M–hj°šubj)�”}”(hŒ%``n`` max. number of elements to get ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hj+›h]”hŒn”…”�”}”(hj-›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M—hj%›ubj2)�”}”(hhh]”hÝ)�”}”(hŒmax. number of elements to get”h]”hŒmax. number of elements to get”…”�”}”(hjD›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@›h´M—hjA›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@›h´M—hj°šubj)�”}”(hŒ4``lock`` pointer to the spinlock to use for locking ”h]”(j)�”}”(hŒ``lock``”h]”j)�”}”(hjd›h]”hŒlock”…”�”}”(hjf›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M˜hj^›ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*pointer to the spinlock to use for locking”h]”hŒ*pointer to the spinlock to use for locking”…”�”}”(hj}›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jy›h´M˜hjz›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jy›h´M˜hj°šubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj”šubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŸ›h]”hŒ Description”…”�”}”(hj¡›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mšhj”šubhÝ)�”}”(hŒuThis is a variant of kfifo_out_spinlocked() which uses spin_lock/unlock() for locking and doesn't disable interrupts.”h]”hŒwThis is a variant of kfifo_out_spinlocked() which uses spin_lock/unlock() for locking and doesn’t disable interrupts.”…”�”}”(hjµ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M™hj”šubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_from_user (C macro)”Œc.kfifo_from_user”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_from_user”h]”j)�”}”(hŒkfifo_from_user”h]”j{)�”}”(hŒkfifo_from_user”h]”j�)�”}”(hjÞ›h]”hŒkfifo_from_user”…”�”}”(hjè›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjä›ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjà›h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M­ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÜ›h²hh³jû›h´M­ubah}”(h]”j×›ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jû›h´M­hjÙ›h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÙ›h²hh³jû›h´M­ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjœjæjœjç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ-``kfifo_from_user (fifo, from, len, copied)``”h]”j)�”}”(hjœh]”hŒ)kfifo_from_user (fifo, from, len, copied)”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M¯hj†th²hubj•)�”}”(hŒ-puts some data from user space into the fifo ”h]”hÝ)�”}”(hŒ,puts some data from user space into the fifo”h]”hŒ,puts some data from user space into the fifo”…”�”}”(hj4œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M­hj0œubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jBœh´M­hj†th²hubjë)�”}”(hXê**Parameters** ``fifo`` address of the fifo to be used ``from`` pointer to the data to be added ``len`` the length of the data to be added ``copied`` pointer to output variable to store the number of copied bytes **Description** This macro copies at most **len** bytes from the **from** into the fifo, depending of the available space and returns -EFAULT/0. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjOœh]”hŒ Parameters”…”�”}”(hjQœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M±hjIœubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjnœh]”hŒfifo”…”�”}”(hjpœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlœubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M®hjhœubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj‡œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒœh´M®hj„œubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjhœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒœh´M®hjeœubj)�”}”(hŒ)``from`` pointer to the data to be added ”h]”(j)�”}”(hŒ``from``”h]”j)�”}”(hj§œh]”hŒfrom”…”�”}”(hj©œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥œubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M¯hj¡œubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to the data to be added”h]”hŒpointer to the data to be added”…”�”}”(hjÀœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼œh´M¯hj½œubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼œh´M¯hjeœubj)�”}”(hŒ+``len`` the length of the data to be added ”h]”(j)�”}”(hŒ``len``”h]”j)�”}”(hjàœh]”hŒlen”…”�”}”(hjâœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞœubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M°hjÚœubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the length of the data to be added”h]”hŒ"the length of the data to be added”…”�”}”(hjùœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõœh´M°hjöœubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõœh´M°hjeœubj)�”}”(hŒJ``copied`` pointer to output variable to store the number of copied bytes ”h]”(j)�”}”(hŒ ``copied``”h]”j)�”}”(hj�h]”hŒcopied”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M±hj�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ>pointer to output variable to store the number of copied bytes”h]”hŒ>pointer to output variable to store the number of copied bytes”…”�”}”(hj2�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.�h´M±hj/�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.�h´M±hjeœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjIœubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjT�h]”hŒ Description”…”�”}”(hjV�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjR�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M³hjIœubhÝ)�”}”(hŒ€This macro copies at most **len** bytes from the **from** into the fifo, depending of the available space and returns -EFAULT/0.”h]”(hŒThis macro copies at most ”…”�”}”(hjj�h²hh³Nh´Nubjõ)�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hjr�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjj�ubhŒ bytes from the ”…”�”}”(hjj�h²hh³Nh´Nubjõ)�”}”(hŒ**from**”h]”hŒfrom”…”�”}”(hj„�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjj�ubhŒG into the fifo, depending of the available space and returns -EFAULT/0.”…”�”}”(hjj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M²hjIœubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MµhjIœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_to_user (C macro)”Œc.kfifo_to_user”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfifo_to_user”h]”j)�”}”(hŒ kfifo_to_user”h]”j{)�”}”(hŒ kfifo_to_user”h]”j�)�”}”(hjÆ�h]”hŒ kfifo_to_user”…”�”}”(hjÐ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌ�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÈ�h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÉubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÄ�h²hh³jã�h´MÉubah}”(h]”j¿�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jã�h´MÉhjÁ�h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÁ�h²hh³jã�h´MÉubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjü�jæjü�jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ)``kfifo_to_user (fifo, to, len, copied)``”h]”j)�”}”(hjžh]”hŒ%kfifo_to_user (fifo, to, len, copied)”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MËhj†th²hubj•)�”}”(hŒ*copies data from the fifo into user space ”h]”hÝ)�”}”(hŒ)copies data from the fifo into user space”h]”hŒ)copies data from the fifo into user space”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÉhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j*žh´MÉhj†th²hubjë)�”}”(hXÉ**Parameters** ``fifo`` address of the fifo to be used ``to`` where the data must be copied ``len`` the size of the destination buffer ``copied`` pointer to output variable to store the number of copied bytes **Description** This macro copies at most **len** bytes from the fifo into the **to** buffer and returns -EFAULT/0. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj7žh]”hŒ Parameters”…”�”}”(hj9žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5žubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÍhj1žubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjVžh]”hŒfifo”…”�”}”(hjXžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÊhjPžubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjožh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jkžh´MÊhjlžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjPžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jkžh´MÊhjMžubj)�”}”(hŒ%``to`` where the data must be copied ”h]”(j)�”}”(hŒ``to``”h]”j)�”}”(hj�žh]”hŒto”…”�”}”(hj‘žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�žubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MËhj‰žubj2)�”}”(hhh]”hÝ)�”}”(hŒwhere the data must be copied”h]”hŒwhere the data must be copied”…”�”}”(hj¨žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤žh´MËhj¥žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤žh´MËhjMžubj)�”}”(hŒ+``len`` the size of the destination buffer ”h]”(j)�”}”(hŒ``len``”h]”j)�”}”(hjÈžh]”hŒlen”…”�”}”(hjÊžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÌhjžubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the size of the destination buffer”h]”hŒ"the size of the destination buffer”…”�”}”(hjážh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝžh´MÌhjÞžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝžh´MÌhjMžubj)�”}”(hŒJ``copied`` pointer to output variable to store the number of copied bytes ”h]”(j)�”}”(hŒ ``copied``”h]”j)�”}”(hjŸh]”hŒcopied”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÍhjûžubj2)�”}”(hhh]”hÝ)�”}”(hŒ>pointer to output variable to store the number of copied bytes”h]”hŒ>pointer to output variable to store the number of copied bytes”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸh´MÍhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸh´MÍhjMžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj1žubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj<Ÿh]”hŒ Description”…”�”}”(hj>Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÏhj1žubhÝ)�”}”(hŒcThis macro copies at most **len** bytes from the fifo into the **to** buffer and returns -EFAULT/0.”h]”(hŒThis macro copies at most ”…”�”}”(hjRŸh²hh³Nh´Nubjõ)�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hjZŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRŸubhŒ bytes from the fifo into the ”…”�”}”(hjRŸh²hh³Nh´Nubjõ)�”}”(hŒ**to**”h]”hŒto”…”�”}”(hjlŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRŸubhŒ buffer and returns -EFAULT/0.”…”�”}”(hjRŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÎhj1žubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hj…Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MÑhj1žubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%kfifo_dma_in_prepare_mapped (C macro)”Œc.kfifo_dma_in_prepare_mapped”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_dma_in_prepare_mapped”h]”j)�”}”(hŒkfifo_dma_in_prepare_mapped”h]”j{)�”}”(hŒkfifo_dma_in_prepare_mapped”h]”j�)�”}”(hj®Ÿh]”hŒkfifo_dma_in_prepare_mapped”…”�”}”(hj¸Ÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´Ÿubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj°Ÿh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Måubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¬Ÿh²hh³jËŸh´Måubah}”(h]”j§Ÿah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jËŸh´Måhj©Ÿh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj©Ÿh²hh³jËŸh´Måubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjäŸjæjäŸjç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ<``kfifo_dma_in_prepare_mapped (fifo, sgl, nents, len, dma)``”h]”j)�”}”(hjêŸh]”hŒ8kfifo_dma_in_prepare_mapped (fifo, sgl, nents, len, dma)”…”�”}”(hjìŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mçhj†th²hubj•)�”}”(hŒ"setup a scatterlist for DMA input ”h]”hÝ)�”}”(hŒ!setup a scatterlist for DMA input”h]”hŒ!setup a scatterlist for DMA input”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Måhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j h´Måhj†th²hubjë)�”}”(hXê**Parameters** ``fifo`` address of the fifo to be used ``sgl`` pointer to the scatterlist array ``nents`` number of entries in the scatterlist array ``len`` number of elements to transfer ``dma`` mapped dma address to fill into **sgl** **Description** This macro fills a scatterlist for DMA input. It returns the number entries in the scatterlist array. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Méhj ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj> h]”hŒfifo”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mæhj8 ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjW h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jS h´MæhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj8 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jS h´Mæhj5 ubj)�”}”(hŒ)``sgl`` pointer to the scatterlist array ”h]”(j)�”}”(hŒ``sgl``”h]”j)�”}”(hjw h]”hŒsgl”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mçhjq ubj2)�”}”(hhh]”hÝ)�”}”(hŒ pointer to the scatterlist array”h]”hŒ pointer to the scatterlist array”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŒ h´Mçhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjq ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒ h´Mçhj5 ubj)�”}”(hŒ5``nents`` number of entries in the scatterlist array ”h]”(j)�”}”(hŒ ``nents``”h]”j)�”}”(hj° h]”hŒnents”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mèhjª ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*number of entries in the scatterlist array”h]”hŒ*number of entries in the scatterlist array”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÅ h´MèhjÆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjª ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÅ h´Mèhj5 ubj)�”}”(hŒ'``len`` number of elements to transfer ”h]”(j)�”}”(hŒ``len``”h]”j)�”}”(hjé h]”hŒlen”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjç ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Méhjã ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of elements to transfer”h]”hŒnumber of elements to transfer”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jþ h´Méhjÿ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjã ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþ h´Méhj5 ubj)�”}”(hŒ0``dma`` mapped dma address to fill into **sgl** ”h]”(j)�”}”(hŒ``dma``”h]”j)�”}”(hj"¡h]”hŒdma”…”�”}”(hj$¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mêhj¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒ'mapped dma address to fill into **sgl**”h]”(hŒ mapped dma address to fill into ”…”�”}”(hj;¡h²hh³Nh´Nubjõ)�”}”(hŒ**sgl**”h]”hŒsgl”…”�”}”(hjC¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j7¡h´Mêhj8¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7¡h´Mêhj5 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjk¡h]”hŒ Description”…”�”}”(hjm¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhji¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mìhj ubhÝ)�”}”(hŒeThis macro fills a scatterlist for DMA input. It returns the number entries in the scatterlist array.”h]”hŒeThis macro fills a scatterlist for DMA input. It returns the number entries in the scatterlist array.”…”�”}”(hj�¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mëhj ubhÝ)�”}”(hŒvNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros.”h]”hŒxNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macros.”…”�”}”(hj�¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mîhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_dma_in_finish (C macro)”Œc.kfifo_dma_in_finish”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_dma_in_finish”h]”j)�”}”(hŒkfifo_dma_in_finish”h]”j{)�”}”(hŒkfifo_dma_in_finish”h]”j�)�”}”(hj¹¡h]”hŒkfifo_dma_in_finish”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿¡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj»¡h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj·¡h²hh³jÖ¡h´Mubah}”(h]”j²¡ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÖ¡h´Mhj´¡h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj´¡h²hh³jÖ¡h´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjï¡jæjï¡jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ#``kfifo_dma_in_finish (fifo, len)``”h]”j)�”}”(hjõ¡h]”hŒkfifo_dma_in_finish (fifo, len)”…”�”}”(hj÷¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjó¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj†th²hubj•)�”}”(hŒfinish a DMA IN operation ”h]”hÝ)�”}”(hŒfinish a DMA IN operation”h]”hŒfinish a DMA IN operation”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¢h´Mhj†th²hubjë)�”}”(hXg**Parameters** ``fifo`` address of the fifo to be used ``len`` number of bytes to received **Description** This macro finishes a DMA IN operation. The in counter will be updated by the len parameter. No error checking will be done. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj*¢h]”hŒ Parameters”…”�”}”(hj,¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj$¢ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjI¢h]”hŒfifo”…”�”}”(hjK¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MhjC¢ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjb¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j^¢h´Mhj_¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjC¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j^¢h´Mhj@¢ubj)�”}”(hŒ$``len`` number of bytes to received ”h]”(j)�”}”(hŒ``len``”h]”j)�”}”(hj‚¢h]”hŒlen”…”�”}”(hj„¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj|¢ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes to received”h]”hŒnumber of bytes to received”…”�”}”(hj›¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j—¢h´Mhj˜¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—¢h´Mhj@¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj$¢ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj½¢h]”hŒ Description”…”�”}”(hj¿¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj$¢ubhÝ)�”}”(hŒ|This macro finishes a DMA IN operation. The in counter will be updated by the len parameter. No error checking will be done.”h]”hŒ|This macro finishes a DMA IN operation. The in counter will be updated by the len parameter. No error checking will be done.”…”�”}”(hjÓ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj$¢ubhÝ)�”}”(hŒvNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros.”h]”hŒxNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macros.”…”�”}”(hjâ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M hj$¢ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&kfifo_dma_out_prepare_mapped (C macro)”Œc.kfifo_dma_out_prepare_mapped”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_dma_out_prepare_mapped”h]”j)�”}”(hŒkfifo_dma_out_prepare_mapped”h]”j{)�”}”(hŒkfifo_dma_out_prepare_mapped”h]”j�)�”}”(hj £h]”hŒkfifo_dma_out_prepare_mapped”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj £h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj £h²hh³j(£h´Mubah}”(h]”j£ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j(£h´Mhj£h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj£h²hh³j(£h´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjA£jæjA£jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ=``kfifo_dma_out_prepare_mapped (fifo, sgl, nents, len, dma)``”h]”j)�”}”(hjG£h]”hŒ9kfifo_dma_out_prepare_mapped (fifo, sgl, nents, len, dma)”…”�”}”(hjI£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjE£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj†th²hubj•)�”}”(hŒ#setup a scatterlist for DMA output ”h]”hÝ)�”}”(hŒ"setup a scatterlist for DMA output”h]”hŒ"setup a scatterlist for DMA output”…”�”}”(hja£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj]£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jo£h´Mhj†th²hubjë)�”}”(hX_**Parameters** ``fifo`` address of the fifo to be used ``sgl`` pointer to the scatterlist array ``nents`` number of entries in the scatterlist array ``len`` number of elements to transfer ``dma`` mapped dma address to fill into **sgl** **Description** This macro fills a scatterlist for DMA output which at most **len** bytes to transfer. It returns the number entries in the scatterlist array. A zero means there is no space available and the scatterlist is not filled. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj|£h]”hŒ Parameters”…”�”}”(hj~£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjz£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhjv£ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj›£h]”hŒfifo”…”�”}”(hj�£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj•£ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj´£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j°£h´Mhj±£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj•£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j°£h´Mhj’£ubj)�”}”(hŒ)``sgl`` pointer to the scatterlist array ”h]”(j)�”}”(hŒ``sgl``”h]”j)�”}”(hjÔ£h]”hŒsgl”…”�”}”(hjÖ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MhjΣubj2)�”}”(hhh]”hÝ)�”}”(hŒ pointer to the scatterlist array”h]”hŒ pointer to the scatterlist array”…”�”}”(hjí£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jé£h´Mhjê£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjΣubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jé£h´Mhj’£ubj)�”}”(hŒ5``nents`` number of entries in the scatterlist array ”h]”(j)�”}”(hŒ ``nents``”h]”j)�”}”(hj ¤h]”hŒnents”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj¤ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*number of entries in the scatterlist array”h]”hŒ*number of entries in the scatterlist array”…”�”}”(hj&¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j"¤h´Mhj#¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"¤h´Mhj’£ubj)�”}”(hŒ'``len`` number of elements to transfer ”h]”(j)�”}”(hŒ``len``”h]”j)�”}”(hjF¤h]”hŒlen”…”�”}”(hjH¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhj@¤ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of elements to transfer”h]”hŒnumber of elements to transfer”…”�”}”(hj_¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[¤h´Mhj\¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj@¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[¤h´Mhj’£ubj)�”}”(hŒ0``dma`` mapped dma address to fill into **sgl** ”h]”(j)�”}”(hŒ``dma``”h]”j)�”}”(hj¤h]”hŒdma”…”�”}”(hj�¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M hjy¤ubj2)�”}”(hhh]”hÝ)�”}”(hŒ'mapped dma address to fill into **sgl**”h]”(hŒ mapped dma address to fill into ”…”�”}”(hj˜¤h²hh³Nh´Nubjõ)�”}”(hŒ**sgl**”h]”hŒsgl”…”�”}”(hj ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”¤h´M hj•¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjy¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”¤h´M hj’£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjv£ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjȤh]”hŒ Description”…”�”}”(hjʤh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƤubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M"hjv£ubhÝ)�”}”(hŒÚThis macro fills a scatterlist for DMA output which at most **len** bytes to transfer. It returns the number entries in the scatterlist array. A zero means there is no space available and the scatterlist is not filled.”h]”(hŒhj†th²hubj•)�”}”(hŒfinish a DMA OUT operation ”h]”hÝ)�”}”(hŒfinish a DMA OUT operation”h]”hŒfinish a DMA OUT operation”…”�”}”(hj~¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M<hjz¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jŒ¥h´M<hj†th²hubjë)�”}”(hXi**Parameters** ``fifo`` address of the fifo to be used ``len`` number of bytes transferred **Description** This macro finishes a DMA OUT operation. The out counter will be updated by the len parameter. No error checking will be done. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj™¥h]”hŒ Parameters”…”�”}”(hj›¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M@hj“¥ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj¸¥h]”hŒfifo”…”�”}”(hjº¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M=hj²¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hjÑ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÍ¥h´M=hjÎ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj²¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍ¥h´M=hj¯¥ubj)�”}”(hŒ$``len`` number of bytes transferred ”h]”(j)�”}”(hŒ``len``”h]”j)�”}”(hjñ¥h]”hŒlen”…”�”}”(hjó¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjï¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M>hjë¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes transferred”h]”hŒnumber of bytes transferred”…”�”}”(hj ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¦h´M>hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjë¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¦h´M>hj¯¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj“¥ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj,¦h]”hŒ Description”…”�”}”(hj.¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M@hj“¥ubhÝ)�”}”(hŒ~This macro finishes a DMA OUT operation. The out counter will be updated by the len parameter. No error checking will be done.”h]”hŒ~This macro finishes a DMA OUT operation. The out counter will be updated by the len parameter. No error checking will be done.”…”�”}”(hjB¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M?hj“¥ubhÝ)�”}”(hŒvNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macros.”h]”hŒxNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macros.”…”�”}”(hjQ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MBhj“¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_out_peek (C macro)”Œc.kfifo_out_peek”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_out_peek”h]”j)�”}”(hŒkfifo_out_peek”h]”j{)�”}”(hŒkfifo_out_peek”h]”j�)�”}”(hjz¦h]”hŒkfifo_out_peek”…”�”}”(hj„¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj€¦ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj|¦h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MLubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjx¦h²hh³j—¦h´MLubah}”(h]”js¦ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j—¦h´MLhju¦h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhju¦h²hh³j—¦h´MLubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj°¦jæj°¦jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ!``kfifo_out_peek (fifo, buf, n)``”h]”j)�”}”(hj¶¦h]”hŒkfifo_out_peek (fifo, buf, n)”…”�”}”(hj¸¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MNhj†th²hubj•)�”}”(hŒgets some data from the fifo ”h]”hÝ)�”}”(hŒgets some data from the fifo”h]”hŒgets some data from the fifo”…”�”}”(hjЦh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MLhj̦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÞ¦h´MLhj†th²hubjë)�”}”(hX�**Parameters** ``fifo`` address of the fifo to be used ``buf`` pointer to the storage buffer ``n`` max. number of elements to get **Description** This macro gets the data from the fifo and returns the numbers of elements copied. The data is not removed from the fifo. Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjë¦h]”hŒ Parameters”…”�”}”(hjí¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MPhjå¦ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj §h]”hŒfifo”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MMhj§ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj#§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j§h´MMhj §ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§h´MMhj§ubj)�”}”(hŒ&``buf`` pointer to the storage buffer ”h]”(j)�”}”(hŒ``buf``”h]”j)�”}”(hjC§h]”hŒbuf”…”�”}”(hjE§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjA§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MNhj=§ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to the storage buffer”h]”hŒpointer to the storage buffer”…”�”}”(hj\§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jX§h´MNhjY§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jX§h´MNhj§ubj)�”}”(hŒ%``n`` max. number of elements to get ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hj|§h]”hŒn”…”�”}”(hj~§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjz§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MOhjv§ubj2)�”}”(hhh]”hÝ)�”}”(hŒmax. number of elements to get”h]”hŒmax. number of elements to get”…”�”}”(hj•§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‘§h´MOhj’§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjv§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‘§h´MOhj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjå¦ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj·§h]”hŒ Description”…”�”}”(hj¹§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MQhjå¦ubhÝ)�”}”(hŒyThis macro gets the data from the fifo and returns the numbers of elements copied. The data is not removed from the fifo.”h]”hŒyThis macro gets the data from the fifo and returns the numbers of elements copied. The data is not removed from the fifo.”…”�”}”(hjͧh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MPhjå¦ubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hjܧh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MShjå¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_out_linear (C macro)”Œc.kfifo_out_linear”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_out_linear”h]”j)�”}”(hŒkfifo_out_linear”h]”j{)�”}”(hŒkfifo_out_linear”h]”j�)�”}”(hj¨h]”hŒkfifo_out_linear”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ¨ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¨h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mfubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¨h²hh³j"¨h´Mfubah}”(h]”jþ§ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j"¨h´Mfhj¨h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¨h²hh³j"¨h´Mfubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj;¨jæj;¨jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ$``kfifo_out_linear (fifo, tail, n)``”h]”j)�”}”(hjA¨h]”hŒ kfifo_out_linear (fifo, tail, n)”…”�”}”(hjC¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mhhj†th²hubj•)�”}”(hŒ(gets a tail of/offset to available data ”h]”hÝ)�”}”(hŒ'gets a tail of/offset to available data”h]”hŒ'gets a tail of/offset to available data”…”�”}”(hj[¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MfhjW¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³ji¨h´Mfhj†th²hubjë)�”}”(hXw**Parameters** ``fifo`` address of the fifo to be used ``tail`` pointer to an unsigned int to store the value of tail ``n`` max. number of elements to point at **Description** This macro obtains the offset (tail) to the available data in the fifo buffer and returns the numbers of elements available. It returns the available count till the end of data or till the end of the buffer. So that it can be used for linear data processing (like memcpy() of (**fifo->data** + **tail**) with count returned). Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjv¨h]”hŒ Parameters”…”�”}”(hjx¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjt¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mjhjp¨ubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hj•¨h]”hŒfifo”…”�”}”(hj—¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mghj�¨ubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj®¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jª¨h´Mghj«¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jª¨h´MghjŒ¨ubj)�”}”(hŒ?``tail`` pointer to an unsigned int to store the value of tail ”h]”(j)�”}”(hŒ``tail``”h]”j)�”}”(hjΨh]”hŒtail”…”�”}”(hjШh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj̨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MhhjȨubj2)�”}”(hhh]”hÝ)�”}”(hŒ5pointer to an unsigned int to store the value of tail”h]”hŒ5pointer to an unsigned int to store the value of tail”…”�”}”(hjç¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jã¨h´Mhhjä¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjȨubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jã¨h´MhhjŒ¨ubj)�”}”(hŒ*``n`` max. number of elements to point at ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hj©h]”hŒn”…”�”}”(hj ©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mihj©ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#max. number of elements to point at”h]”hŒ#max. number of elements to point at”…”�”}”(hj ©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©h´Mihj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©h´MihjŒ¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjp¨ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjB©h]”hŒ Description”…”�”}”(hjD©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj@©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mkhjp¨ubhÝ)�”}”(hXEThis macro obtains the offset (tail) to the available data in the fifo buffer and returns the numbers of elements available. It returns the available count till the end of data or till the end of the buffer. So that it can be used for linear data processing (like memcpy() of (**fifo->data** + **tail**) with count returned).”h]”(hXThis macro obtains the offset (tail) to the available data in the fifo buffer and returns the numbers of elements available. It returns the available count till the end of data or till the end of the buffer. So that it can be used for linear data processing (like memcpy() of (”…”�”}”(hjX©h²hh³Nh´Nubjõ)�”}”(hŒ**fifo->data**”h]”hŒ fifo->data”…”�”}”(hj`©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjX©ubhŒ + ”…”�”}”(hjX©h²hh³Nh´Nubjõ)�”}”(hŒ**tail**”h]”hŒtail”…”�”}”(hjr©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjX©ubhŒ) with count returned).”…”�”}”(hjX©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mjhjp¨ubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hj‹©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mqhjp¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfifo_out_linear_ptr (C macro)”Œc.kfifo_out_linear_ptr”hNt”auh1hýhj†th²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkfifo_out_linear_ptr”h]”j)�”}”(hŒkfifo_out_linear_ptr”h]”j{)�”}”(hŒkfifo_out_linear_ptr”h]”j�)�”}”(hj´©h]”hŒkfifo_out_linear_ptr”…”�”}”(hj¾©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjº©ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¶©h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M„ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj²©h²hh³jÑ©h´M„ubah}”(h]”j­©ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÑ©h´M„hj¯©h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¯©h²hh³jÑ©h´M„ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjê©jæjê©jç‰jè‰jé‰uh1jh²hhj†th³Nh´NubhÝ)�”}”(hŒ'``kfifo_out_linear_ptr (fifo, ptr, n)``”h]”j)�”}”(hjð©h]”hŒ#kfifo_out_linear_ptr (fifo, ptr, n)”…”�”}”(hjò©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjî©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M†hj†th²hubj•)�”}”(hŒ%gets a pointer to the available data ”h]”hÝ)�”}”(hŒ$gets a pointer to the available data”h]”hŒ$gets a pointer to the available data”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M„hjªubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jªh´M„hj†th²hubjë)�”}”(hX~**Parameters** ``fifo`` address of the fifo to be used ``ptr`` pointer to data to store the pointer to tail ``n`` max. number of elements to point at **Description** Similarly to kfifo_out_linear(), this macro obtains the pointer to the available data in the fifo buffer and returns the numbers of elements available. It returns the available count till the end of available data or till the end of the buffer. So that it can be used for linear data processing (like memcpy() of **ptr** with count returned). Note that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj%ªh]”hŒ Parameters”…”�”}”(hj'ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#ªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´Mˆhjªubj )�”}”(hhh]”(j)�”}”(hŒ(``fifo`` address of the fifo to be used ”h]”(j)�”}”(hŒ``fifo``”h]”j)�”}”(hjDªh]”hŒfifo”…”�”}”(hjFªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M…hj>ªubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress of the fifo to be used”h]”hŒaddress of the fifo to be used”…”�”}”(hj]ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jYªh´M…hjZªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj>ªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jYªh´M…hj;ªubj)�”}”(hŒ5``ptr`` pointer to data to store the pointer to tail ”h]”(j)�”}”(hŒ``ptr``”h]”j)�”}”(hj}ªh]”hŒptr”…”�”}”(hjªh²hh³Nh´Nubah}”(h•]”h ]”h"]”h$]”h&]”uh1jhj{ªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M†hjwªubj2)�”}”(hhh]”hÝ)�”}”(hŒ,pointer to data to store the pointer to tail”h]”hŒ,pointer to data to store the pointer to tail”…”�”}”(hj–ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j’ªh´M†hj“ªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjwªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j’ªh´M†hj;ªubj)�”}”(hŒ*``n`` max. number of elements to point at ”h]”(j)�”}”(hŒ``n``”h]”j)�”}”(hj¶ªh]”hŒn”…”�”}”(hj¸ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M‡hj°ªubj2)�”}”(hhh]”hÝ)�”}”(hŒ#max. number of elements to point at”h]”hŒ#max. number of elements to point at”…”�”}”(hjϪh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j˪h´M‡hj̪ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj°ªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˪h´M‡hj;ªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjªubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjñªh]”hŒ Description”…”�”}”(hjóªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjïªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´M‰hjªubhÝ)�”}”(hXVSimilarly to kfifo_out_linear(), this macro obtains the pointer to the available data in the fifo buffer and returns the numbers of elements available. It returns the available count till the end of available data or till the end of the buffer. So that it can be used for linear data processing (like memcpy() of **ptr** with count returned).”h]”(hX9Similarly to kfifo_out_linear(), this macro obtains the pointer to the available data in the fifo buffer and returns the numbers of elements available. It returns the available count till the end of available data or till the end of the buffer. So that it can be used for linear data processing (like memcpy() of ”…”�”}”(hj«h²hh³Nh´Nubjõ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj«ubhŒ with count returned).”…”�”}”(hj«h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MˆhjªubhÝ)�”}”(hŒuNote that with only one concurrent reader and one concurrent writer, you don't need extra locking to use these macro.”h]”hŒwNote that with only one concurrent reader and one concurrent writer, you don’t need extra locking to use these macro.”…”�”}”(hj(«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:205: ./include/linux/kfifo.h”h´MŽhjªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj†th²hh³Nh´Nubeh}”(h]”Œkfifo-interface”ah ]”h"]”Œkfifo interface”ah$]”h&]”uh1hµhjuth²hh³hÊh´KËubeh}”(h]”Œ fifo-buffer”ah ]”h"]”Œ fifo buffer”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÈubh¶)�”}”(hhh]”(h»)�”}”(hŒrelay interface support”h]”hŒrelay interface support”…”�”}”(hjQ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjN«h²hh³hÊh´KÑubhÝ)�”}”(hŒžRelay interface support is designed to provide an efficient mechanism for tools and facilities to relay large amounts of data from kernel space to user space.”h]”hŒžRelay interface support is designed to provide an efficient mechanism for tools and facilities to relay large amounts of data from kernel space to user space.”…”�”}”(hj_«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´KÓhjN«h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒrelay interface”h]”hŒrelay interface”…”�”}”(hjp«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjm«h²hh³hÊh´KØubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_buf_full (C function)”Œc.relay_buf_full”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ*int relay_buf_full (struct rchan_buf *buf)”h]”j)�”}”(hŒ)int relay_buf_full(struct rchan_buf *buf)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj—«h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“«h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Kêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“«h²hh³j¥«h´Kêubj{)�”}”(hŒrelay_buf_full”h]”j�)�”}”(hŒrelay_buf_full”h]”hŒrelay_buf_full”…”�”}”(hj¸«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´«ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj“«h²hh³j¥«h´Kêubjœ)�”}”(hŒ(struct rchan_buf *buf)”h]”j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÔ«h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjЫubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjЫubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hjò«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjï«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jô«Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jº«sbŒc.relay_buf_full”†”asbuh1hhjЫubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjЫubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ¬h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjЫubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj-¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjЫubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÌ«ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj“«h²hh³j¥«h´Kêubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�«h²hh³j¥«h´Kêubah}”(h]”jŠ«ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¥«h´KêhjŒ«h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$boolean, is the channel buffer full?”h]”hŒ$boolean, is the channel buffer full?”…”�”}”(hjW¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´KêhjT¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŒ«h²hh³j¥«h´Kêubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjo¬jæjo¬jç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ**Parameters** ``struct rchan_buf *buf`` channel buffer **Description** Returns 1 if the buffer is full, 0 otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjy¬h]”hŒ Parameters”…”�”}”(hj{¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjw¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Kîhjs¬ubj )�”}”(hhh]”j)�”}”(hŒ)``struct rchan_buf *buf`` channel buffer ”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hj˜¬h]”hŒstruct rchan_buf *buf”…”�”}”(hjš¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Këhj’¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒchannel buffer”h]”hŒchannel buffer”…”�”}”(hj±¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j­¬h´Këhj®¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj’¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­¬h´Këhj�¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjs¬ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÓ¬h]”hŒ Description”…”�”}”(hjÕ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjѬubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Kíhjs¬ubj•)�”}”(hŒ-Returns 1 if the buffer is full, 0 otherwise.”h]”hÝ)�”}”(hjë¬h]”hŒ-Returns 1 if the buffer is full, 0 otherwise.”…”�”}”(hjí¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Kìhjé¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jú¬h´Kìhjs¬ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_reset (C function)”Œ c.relay_reset”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%void relay_reset (struct rchan *chan)”h]”j)�”}”(hŒ$void relay_reset(struct rchan *chan)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj!­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M:ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­h²hh³j/­h´M:ubj{)�”}”(hŒ relay_reset”h]”j�)�”}”(hŒ relay_reset”h]”hŒ relay_reset”…”�”}”(hjB­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>­ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj­h²hh³j/­h´M:ubjœ)�”}”(hŒ(struct rchan *chan)”h]”j¢)�”}”(hŒstruct rchan *chan”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj^­h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZ­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ­ubh)�”}”(hhh]”j�)�”}”(hŒrchan”h]”hŒrchan”…”�”}”(hj|­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjy­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j~­Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jD­sbŒ c.relay_reset”†”asbuh1hhjZ­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ­ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjª­h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZ­ubj�)�”}”(hŒchan”h]”hŒchan”…”�”}”(hj·­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjV­ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj­h²hh³j/­h´M:ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj­h²hh³j/­h´M:ubah}”(h]”j­ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j/­h´M:hj­h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒreset the channel”h]”hŒreset the channel”…”�”}”(hjá­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M:hjÞ­h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj­h²hh³j/­h´M:ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjù­jæjù­jç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hX}**Parameters** ``struct rchan *chan`` the channel **Description** This has the effect of erasing all data from all channel buffers and restarting the channel in its initial state. The buffers are not freed, so any mappings are still in effect. NOTE. Care should be taken that the channel isn't actually being used by anything when this call is made.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj®h]”hŒ Parameters”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M>hjý­ubj )�”}”(hhh]”j)�”}”(hŒ#``struct rchan *chan`` the channel ”h]”(j)�”}”(hŒ``struct rchan *chan``”h]”j)�”}”(hj"®h]”hŒstruct rchan *chan”…”�”}”(hj$®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M;hj®ubj2)�”}”(hhh]”hÝ)�”}”(hŒ the channel”h]”hŒ the channel”…”�”}”(hj;®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j7®h´M;hj8®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7®h´M;hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjý­ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj]®h]”hŒ Description”…”�”}”(hj_®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj[®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M=hjý­ubj•)�”}”(hXThis has the effect of erasing all data from all channel buffers and restarting the channel in its initial state. The buffers are not freed, so any mappings are still in effect. NOTE. Care should be taken that the channel isn't actually being used by anything when this call is made.”h]”(hÝ)�”}”(hŒ²This has the effect of erasing all data from all channel buffers and restarting the channel in its initial state. The buffers are not freed, so any mappings are still in effect.”h]”hŒ²This has the effect of erasing all data from all channel buffers and restarting the channel in its initial state. The buffers are not freed, so any mappings are still in effect.”…”�”}”(hjw®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M<hjs®ubhÝ)�”}”(hŒiNOTE. Care should be taken that the channel isn't actually being used by anything when this call is made.”h]”hŒkNOTE. Care should be taken that the channel isn’t actually being used by anything when this call is made.”…”�”}”(hj†®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M@hjs®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j…®h´M<hjý­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_open (C function)”Œ c.relay_open”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ¨struct rchan * relay_open (const char *base_filename, struct dentry *parent, size_t subbuf_size, size_t n_subbufs, const struct rchan_callbacks *cb, void *private_data)”h]”j)�”}”(hŒ¦struct rchan *relay_open(const char *base_filename, struct dentry *parent, size_t subbuf_size, size_t n_subbufs, const struct rchan_callbacks *cb, void *private_data)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj»®h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj·®h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·®h²hh³jÈ®h´MËubh)�”}”(hhh]”j�)�”}”(hŒrchan”h]”hŒrchan”…”�”}”(hjÚ®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÜ®Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ relay_open”sbŒ c.relay_open”†”asbuh1hhj·®h²hh³jÈ®h´MËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·®h²hh³jÈ®h´MËubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ¯h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj·®h²hh³jÈ®h´MËubj{)�”}”(hŒ relay_open”h]”j�)�”}”(hjø®h]”hŒ relay_open”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj·®h²hh³jÈ®h´MËubjœ)�”}”(hŒŽ(const char *base_filename, struct dentry *parent, size_t subbuf_size, size_t n_subbufs, const struct rchan_callbacks *cb, void *private_data)”h]”(j¢)�”}”(hŒconst char *base_filename”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj5¯h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj1¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1¯ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjP¯h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1¯ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjl¯h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj1¯ubj�)�”}”(hŒ base_filename”h]”hŒ base_filename”…”�”}”(hjy¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-¯ubj¢)�”}”(hŒstruct dentry *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj’¯h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjޝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjޝubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj°¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j²¯Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jö®Œ c.relay_open”†”asbuh1hhjޝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjίh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjޝubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjܯh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjޝubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjé¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjޝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-¯ubj¢)�”}”(hŒsize_t subbuf_size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j°Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jö®Œ c.relay_open”†”asbuh1hhjþ¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ¯ubj�)�”}”(hŒ subbuf_size”h]”hŒ subbuf_size”…”�”}”(hj1°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-¯ubj¢)�”}”(hŒsize_t n_subbufs”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjM°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJ°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jO°Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jö®Œ c.relay_open”†”asbuh1hhjF°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjF°ubj�)�”}”(hŒ n_subbufs”h]”hŒ n_subbufs”…”�”}”(hjy°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjF°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-¯ubj¢)�”}”(hŒ const struct rchan_callbacks *cb”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj’°h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjްubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjްubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj­°h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjްubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjްubh)�”}”(hhh]”j�)�”}”(hŒrchan_callbacks”h]”hŒrchan_callbacks”…”�”}”(hj˰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjȰubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jͰŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jö®Œ c.relay_open”†”asbuh1hhjްubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjްubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj÷°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjްubj�)�”}”(hŒcb”h]”hŒcb”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjްubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-¯ubj¢)�”}”(hŒvoid *private_data”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj9±h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj±ubj�)�”}”(hŒ private_data”h]”hŒ private_data”…”�”}”(hjF±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-¯ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj·®h²hh³jÈ®h´MËubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj³®h²hh³jÈ®h´MËubah}”(h]”j®®ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÈ®h´MËhj°®h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒcreate a new relay channel”h]”hŒcreate a new relay channel”…”�”}”(hjp±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MËhjm±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj°®h²hh³jÈ®h´MËubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjˆ±jæjˆ±jç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hX¦**Parameters** ``const char *base_filename`` base name of files to create ``struct dentry *parent`` dentry of parent directory, ``NULL`` for root directory or buffer ``size_t subbuf_size`` size of sub-buffers ``size_t n_subbufs`` number of sub-buffers ``const struct rchan_callbacks *cb`` client callback functions ``void *private_data`` user-defined data **Description** Returns channel pointer if successful, ``NULL`` otherwise. Creates a channel buffer for each cpu using the sizes and attributes specified. The created channel buffer files will be named base_filename0...base_filenameN-1. File permissions will be ``S_IRUSR``.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj’±h]”hŒ Parameters”…”�”}”(hj”±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÏhjŒ±ubj )�”}”(hhh]”(j)�”}”(hŒ;``const char *base_filename`` base name of files to create ”h]”(j)�”}”(hŒ``const char *base_filename``”h]”j)�”}”(hj±±h]”hŒconst char *base_filename”…”�”}”(hj³±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÌhj«±ubj2)�”}”(hhh]”hÝ)�”}”(hŒbase name of files to create”h]”hŒbase name of files to create”…”�”}”(hjʱh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƱh´MÌhjDZubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj«±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƱh´MÌhj¨±ubj)�”}”(hŒ\``struct dentry *parent`` dentry of parent directory, ``NULL`` for root directory or buffer ”h]”(j)�”}”(hŒ``struct dentry *parent``”h]”j)�”}”(hjê±h]”hŒstruct dentry *parent”…”�”}”(hjì±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjè±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÍhjä±ubj2)�”}”(hhh]”hÝ)�”}”(hŒAdentry of parent directory, ``NULL`` for root directory or buffer”h]”(hŒdentry of parent directory, ”…”�”}”(hj²h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²ubhŒ for root directory or buffer”…”�”}”(hj²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÿ±h´MÍhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjä±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÿ±h´MÍhj¨±ubj)�”}”(hŒ+``size_t subbuf_size`` size of sub-buffers ”h]”(j)�”}”(hŒ``size_t subbuf_size``”h]”j)�”}”(hj5²h]”hŒsize_t subbuf_size”…”�”}”(hj7²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÎhj/²ubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of sub-buffers”h]”hŒsize of sub-buffers”…”�”}”(hjN²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jJ²h´MÎhjK²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJ²h´MÎhj¨±ubj)�”}”(hŒ+``size_t n_subbufs`` number of sub-buffers ”h]”(j)�”}”(hŒ``size_t n_subbufs``”h]”j)�”}”(hjn²h]”hŒsize_t n_subbufs”…”�”}”(hjp²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjl²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÏhjh²ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of sub-buffers”h]”hŒnumber of sub-buffers”…”�”}”(hj‡²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒ²h´MÏhj„²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjh²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒ²h´MÏhj¨±ubj)�”}”(hŒ?``const struct rchan_callbacks *cb`` client callback functions ”h]”(j)�”}”(hŒ$``const struct rchan_callbacks *cb``”h]”j)�”}”(hj§²h]”hŒ const struct rchan_callbacks *cb”…”�”}”(hj©²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÐhj¡²ubj2)�”}”(hhh]”hÝ)�”}”(hŒclient callback functions”h]”hŒclient callback functions”…”�”}”(hjÀ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼²h´MÐhj½²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼²h´MÐhj¨±ubj)�”}”(hŒ)``void *private_data`` user-defined data ”h]”(j)�”}”(hŒ``void *private_data``”h]”j)�”}”(hjà²h]”hŒvoid *private_data”…”�”}”(hjâ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÑhjÚ²ubj2)�”}”(hhh]”hÝ)�”}”(hŒuser-defined data”h]”hŒuser-defined data”…”�”}”(hjù²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõ²h´MÑhjö²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚ²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõ²h´MÑhj¨±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjŒ±ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj³h]”hŒ Description”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÓhjŒ±ubj•)�”}”(hXReturns channel pointer if successful, ``NULL`` otherwise. Creates a channel buffer for each cpu using the sizes and attributes specified. The created channel buffer files will be named base_filename0...base_filenameN-1. File permissions will be ``S_IRUSR``.”h]”(hÝ)�”}”(hŒ:Returns channel pointer if successful, ``NULL`` otherwise.”h]”(hŒ'Returns channel pointer if successful, ”…”�”}”(hj5³h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj=³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5³ubhŒ otherwise.”…”�”}”(hj5³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÒhj1³ubhÝ)�”}”(hŒÉCreates a channel buffer for each cpu using the sizes and attributes specified. The created channel buffer files will be named base_filename0...base_filenameN-1. File permissions will be ``S_IRUSR``.”h]”(hŒ½Creates a channel buffer for each cpu using the sizes and attributes specified. The created channel buffer files will be named base_filename0...base_filenameN-1. File permissions will be ”…”�”}”(hjV³h²hh³Nh´Nubj)�”}”(hŒ ``S_IRUSR``”h]”hŒS_IRUSR”…”�”}”(hj^³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjV³ubhŒ.”…”�”}”(hjV³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MÔhj1³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jU³h´MÒhjŒ±ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ relay_switch_subbuf (C function)”Œc.relay_switch_subbuf”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒAsize_t relay_switch_subbuf (struct rchan_buf *buf, size_t length)”h]”j)�”}”(hŒ@size_t relay_switch_subbuf(struct rchan_buf *buf, size_t length)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj ³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¢³Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œrelay_switch_subbuf”sbŒc.relay_switch_subbuf”†”asbuh1hhj™³h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™³h²hh³jÁ³h´M!ubj{)�”}”(hŒrelay_switch_subbuf”h]”j�)�”}”(hj¾³h]”hŒrelay_switch_subbuf”…”�”}”(hjÔ³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjгubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj™³h²hh³jÁ³h´M!ubjœ)�”}”(hŒ&(struct rchan_buf *buf, size_t length)”h]”(j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjï³h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjë³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjë³ubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hj ´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j´Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¼³Œc.relay_switch_subbuf”†”asbuh1hhjë³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjë³ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj9´h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjë³ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjF´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjë³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjç³ubj¢)�”}”(hŒ size_t length”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjb´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jd´Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¼³Œc.relay_switch_subbuf”†”asbuh1hhj[´ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[´ubj�)�”}”(hŒlength”h]”hŒlength”…”�”}”(hjŽ´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjç³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj™³h²hh³jÁ³h´M!ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj•³h²hh³jÁ³h´M!ubah}”(h]”j�³ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÁ³h´M!hj’³h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒswitch to a new sub-buffer”h]”hŒswitch to a new sub-buffer”…”�”}”(hj¸´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M!hjµ´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj’³h²hh³jÁ³h´M!ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjдjæjдjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hX'**Parameters** ``struct rchan_buf *buf`` channel buffer ``size_t length`` size of current event **Description** Returns either the length passed in or 0 if full. Performs sub-buffer-switch tasks such as invoking callbacks, updating padding counts, waking up readers, etc.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÚ´h]”hŒ Parameters”…”�”}”(hjÜ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M%hjÔ´ubj )�”}”(hhh]”(j)�”}”(hŒ)``struct rchan_buf *buf`` channel buffer ”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hjù´h]”hŒstruct rchan_buf *buf”…”�”}”(hjû´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M"hjó´ubj2)�”}”(hhh]”hÝ)�”}”(hŒchannel buffer”h]”hŒchannel buffer”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµh´M"hjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjó´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµh´M"hjð´ubj)�”}”(hŒ(``size_t length`` size of current event ”h]”(j)�”}”(hŒ``size_t length``”h]”j)�”}”(hj2µh]”hŒ size_t length”…”�”}”(hj4µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0µubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M#hj,µubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of current event”h]”hŒsize of current event”…”�”}”(hjKµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jGµh´M#hjHµubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj,µubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jGµh´M#hjð´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÔ´ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjmµh]”hŒ Description”…”�”}”(hjoµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjkµubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M%hjÔ´ubj•)�”}”(hŒ Returns either the length passed in or 0 if full. Performs sub-buffer-switch tasks such as invoking callbacks, updating padding counts, waking up readers, etc.”h]”(hÝ)�”}”(hŒ1Returns either the length passed in or 0 if full.”h]”hŒ1Returns either the length passed in or 0 if full.”…”�”}”(hj‡µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M$hjƒµubhÝ)�”}”(hŒmPerforms sub-buffer-switch tasks such as invoking callbacks, updating padding counts, waking up readers, etc.”h]”hŒmPerforms sub-buffer-switch tasks such as invoking callbacks, updating padding counts, waking up readers, etc.”…”�”}”(hj–µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M&hjƒµubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j•µh´M$hjÔ´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#relay_subbufs_consumed (C function)”Œc.relay_subbufs_consumed”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ[void relay_subbufs_consumed (struct rchan *chan, unsigned int cpu, size_t subbufs_consumed)”h]”j)�”}”(hŒZvoid relay_subbufs_consumed(struct rchan *chan, unsigned int cpu, size_t subbufs_consumed)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj˵h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjǵh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Mcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚµh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjǵh²hh³jÙµh´Mcubj{)�”}”(hŒrelay_subbufs_consumed”h]”j�)�”}”(hŒrelay_subbufs_consumed”h]”hŒrelay_subbufs_consumed”…”�”}”(hjìµh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèµubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjǵh²hh³jÙµh´Mcubjœ)�”}”(hŒ?(struct rchan *chan, unsigned int cpu, size_t subbufs_consumed)”h]”(j¢)�”}”(hŒstruct rchan *chan”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶ubh)�”}”(hhh]”j�)�”}”(hŒrchan”h]”hŒrchan”…”�”}”(hj&¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j(¶Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jîµsbŒc.relay_subbufs_consumed”†”asbuh1hhj¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjT¶h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¶ubj�)�”}”(hŒchan”h]”hŒchan”…”�”}”(hja¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶ubj¢)�”}”(hŒunsigned int cpu”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjz¶h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjv¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjv¶ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj–¶h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjv¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjv¶ubj�)�”}”(hŒcpu”h]”hŒcpu”…”�”}”(hj²¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjv¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶ubj¢)�”}”(hŒsize_t subbufs_consumed”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjζh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jжŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jB¶Œc.relay_subbufs_consumed”†”asbuh1hhjǶubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjǶubj�)�”}”(hŒsubbufs_consumed”h]”hŒsubbufs_consumed”…”�”}”(hjú¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjǶubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjǵh²hh³jÙµh´Mcubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjõh²hh³jÙµh´Mcubah}”(h]”j¾µah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÙµh´MchjÀµh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.update the buffer's sub-buffers-consumed count”h]”hŒ0update the buffer’s sub-buffers-consumed count”…”�”}”(hj$·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Mchj!·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀµh²hh³jÙµh´Mcubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj<·jæj<·jç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hXï**Parameters** ``struct rchan *chan`` the channel ``unsigned int cpu`` the cpu associated with the channel buffer to update ``size_t subbufs_consumed`` number of sub-buffers to add to current buf's count **Description** Adds to the channel buffer's consumed sub-buffer count. subbufs_consumed should be the number of sub-buffers newly consumed, not the total consumed. NOTE. Kernel clients don't need to call this function if the channel mode is 'overwrite'.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjF·h]”hŒ Parameters”…”�”}”(hjH·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjD·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Mghj@·ubj )�”}”(hhh]”(j)�”}”(hŒ#``struct rchan *chan`` the channel ”h]”(j)�”}”(hŒ``struct rchan *chan``”h]”j)�”}”(hje·h]”hŒstruct rchan *chan”…”�”}”(hjg·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjc·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Mdhj_·ubj2)�”}”(hhh]”hÝ)�”}”(hŒ the channel”h]”hŒ the channel”…”�”}”(hj~·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jz·h´Mdhj{·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj_·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jz·h´Mdhj\·ubj)�”}”(hŒJ``unsigned int cpu`` the cpu associated with the channel buffer to update ”h]”(j)�”}”(hŒ``unsigned int cpu``”h]”j)�”}”(hjž·h]”hŒunsigned int cpu”…”�”}”(hj ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Mehj˜·ubj2)�”}”(hhh]”hÝ)�”}”(hŒ4the cpu associated with the channel buffer to update”h]”hŒ4the cpu associated with the channel buffer to update”…”�”}”(hj··h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j³·h´Mehj´·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj˜·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j³·h´Mehj\·ubj)�”}”(hŒP``size_t subbufs_consumed`` number of sub-buffers to add to current buf's count ”h]”(j)�”}”(hŒ``size_t subbufs_consumed``”h]”j)�”}”(hj×·h]”hŒsize_t subbufs_consumed”…”�”}”(hjÙ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MfhjÑ·ubj2)�”}”(hhh]”hÝ)�”}”(hŒ3number of sub-buffers to add to current buf's count”h]”hŒ5number of sub-buffers to add to current buf’s count”…”�”}”(hjð·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jì·h´Mfhjí·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑ·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jì·h´Mfhj\·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj@·ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¸h]”hŒ Description”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Mhhj@·ubj•)�”}”(hŒïAdds to the channel buffer's consumed sub-buffer count. subbufs_consumed should be the number of sub-buffers newly consumed, not the total consumed. NOTE. Kernel clients don't need to call this function if the channel mode is 'overwrite'.”h]”(hÝ)�”}”(hŒ”Adds to the channel buffer's consumed sub-buffer count. subbufs_consumed should be the number of sub-buffers newly consumed, not the total consumed.”h]”hŒ–Adds to the channel buffer’s consumed sub-buffer count. subbufs_consumed should be the number of sub-buffers newly consumed, not the total consumed.”…”�”}”(hj,¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Mghj(¸ubhÝ)�”}”(hŒYNOTE. Kernel clients don't need to call this function if the channel mode is 'overwrite'.”h]”hŒ_NOTE. Kernel clients don’t need to call this function if the channel mode is ‘overwrite’.”…”�”}”(hj;¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´Mkhj(¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j:¸h´Mghj@·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_close (C function)”Œ c.relay_close”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%void relay_close (struct rchan *chan)”h]”j)�”}”(hŒ$void relay_close(struct rchan *chan)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjp¸h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjl¸h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl¸h²hh³j~¸h´M„ubj{)�”}”(hŒ relay_close”h]”j�)�”}”(hŒ relay_close”h]”hŒ relay_close”…”�”}”(hj‘¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�¸ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjl¸h²hh³j~¸h´M„ubjœ)�”}”(hŒ(struct rchan *chan)”h]”j¢)�”}”(hŒstruct rchan *chan”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj­¸h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj©¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©¸ubh)�”}”(hhh]”j�)�”}”(hŒrchan”h]”hŒrchan”…”�”}”(hj˸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjȸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j͸Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j“¸sbŒ c.relay_close”†”asbuh1hhj©¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjë¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjù¸h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj©¸ubj�)�”}”(hŒchan”h]”hŒchan”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¥¸ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjl¸h²hh³j~¸h´M„ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh¸h²hh³j~¸h´M„ubah}”(h]”jc¸ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j~¸h´M„hje¸h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒclose the channel”h]”hŒclose the channel”…”�”}”(hj0¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M„hj-¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhje¸h²hh³j~¸h´M„ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjH¹jæjH¹jç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ}**Parameters** ``struct rchan *chan`` the channel **Description** Closes all channel buffers and frees the channel.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjR¹h]”hŒ Parameters”…”�”}”(hjT¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjP¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´MˆhjL¹ubj )�”}”(hhh]”j)�”}”(hŒ#``struct rchan *chan`` the channel ”h]”(j)�”}”(hŒ``struct rchan *chan``”h]”j)�”}”(hjq¹h]”hŒstruct rchan *chan”…”�”}”(hjs¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M…hjk¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒ the channel”h]”hŒ the channel”…”�”}”(hjйh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†¹h´M…hj‡¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjk¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†¹h´M…hjh¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjL¹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¬¹h]”hŒ Description”…”�”}”(hj®¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjª¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M‡hjL¹ubj•)�”}”(hŒ1Closes all channel buffers and frees the channel.”h]”hÝ)�”}”(hjĹh]”hŒ1Closes all channel buffers and frees the channel.”…”�”}”(hjƹh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M†hj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÓ¹h´M†hjL¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_flush (C function)”Œ c.relay_flush”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%void relay_flush (struct rchan *chan)”h]”j)�”}”(hŒ$void relay_flush(struct rchan *chan)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjú¹h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjö¹h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjö¹h²hh³jºh´M ubj{)�”}”(hŒ relay_flush”h]”j�)�”}”(hŒ relay_flush”h]”hŒ relay_flush”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjö¹h²hh³jºh´M ubjœ)�”}”(hŒ(struct rchan *chan)”h]”j¢)�”}”(hŒstruct rchan *chan”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj7ºh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj3ºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3ºubh)�”}”(hhh]”j�)�”}”(hŒrchan”h]”hŒrchan”…”�”}”(hjUºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jWºŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jºsbŒ c.relay_flush”†”asbuh1hhj3ºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3ºubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒºh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj3ºubj�)�”}”(hŒchan”h]”hŒchan”…”�”}”(hj�ºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3ºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/ºubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjö¹h²hh³jºh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjò¹h²hh³jºh´M ubah}”(h]”jí¹ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jºh´M hjï¹h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒclose the channel”h]”hŒclose the channel”…”�”}”(hjººh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M hj·ºh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjï¹h²hh³jºh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÒºjæjÒºjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒƒ**Parameters** ``struct rchan *chan`` the channel **Description** Flushes all channel buffers, i.e. forces buffer switch.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjܺh]”hŒ Parameters”…”�”}”(hjÞºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚºubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M¤hjÖºubj )�”}”(hhh]”j)�”}”(hŒ#``struct rchan *chan`` the channel ”h]”(j)�”}”(hŒ``struct rchan *chan``”h]”j)�”}”(hjûºh]”hŒstruct rchan *chan”…”�”}”(hjýºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùºubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M¡hjõºubj2)�”}”(hhh]”hÝ)�”}”(hŒ the channel”h]”hŒ the channel”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»h´M¡hj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»h´M¡hjòºubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖºubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj6»h]”hŒ Description”…”�”}”(hj8»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj4»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M£hjÖºubj•)�”}”(hŒ7Flushes all channel buffers, i.e. forces buffer switch.”h]”hÝ)�”}”(hjN»h]”hŒ7Flushes all channel buffers, i.e. forces buffer switch.”…”�”}”(hjP»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:218: ./kernel/relay.c”h´M¢hjL»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j]»h´M¢hjÖºubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#relay_mmap_prepare_buf (C function)”Œc.relay_mmap_prepare_buf”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒMint relay_mmap_prepare_buf (struct rchan_buf *buf, struct vm_area_desc *desc)”h]”j)�”}”(hŒLint relay_mmap_prepare_buf(struct rchan_buf *buf, struct vm_area_desc *desc)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj„»h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj€»h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€»h²hh³j’»h´KJubj{)�”}”(hŒrelay_mmap_prepare_buf”h]”j�)�”}”(hŒrelay_mmap_prepare_buf”h]”hŒrelay_mmap_prepare_buf”…”�”}”(hj¥»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡»ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj€»h²hh³j’»h´KJubjœ)�”}”(hŒ2(struct rchan_buf *buf, struct vm_area_desc *desc)”h]”(j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÁ»h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj½»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjλh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½»ubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hjß»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜ»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jỌmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j§»sbŒc.relay_mmap_prepare_buf”†”asbuh1hhj½»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½»ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ¼h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj½»ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¹»ubj¢)�”}”(hŒstruct vm_area_desc *desc”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj3¼h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/¼ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@¼h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/¼ubh)�”}”(hhh]”j�)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hjQ¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN¼ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jS¼Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jû»Œc.relay_mmap_prepare_buf”†”asbuh1hhj/¼ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjo¼h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/¼ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj}¼h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj/¼ubj�)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjмh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¹»ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj€»h²hh³j’»h´KJubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj|»h²hh³j’»h´KJubah}”(h]”jw»ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j’»h´KJhjy»h²hubjÃ)�”}”(hhh]”j›)�”}”(hhh]”j )�”}”(hŒ,mmap channel buffer to process address space”h]”hÝ)�”}”(hj¹¼h]”hŒ,mmap channel buffer to process address space”…”�”}”(hj»¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KJhj·¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj´¼h²hh³jȼh´Nubah}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³jȼh´KJhj±¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjy»h²hh³j’»h´KJubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÞ¼jæjÞ¼jç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒê**Parameters** ``struct rchan_buf *buf`` the relay channel buffer ``struct vm_area_desc *desc`` describing what to map **Description** Returns 0 if ok, negative on error Caller should already have grabbed mmap_lock.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjè¼h]”hŒ Parameters”…”�”}”(hjê¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KNhjâ¼ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct rchan_buf *buf`` the relay channel buffer ”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hj½h]”hŒstruct rchan_buf *buf”…”�”}”(hj ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KKhj½ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe relay channel buffer”h]”hŒthe relay channel buffer”…”�”}”(hj ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j½h´KKhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½h´KKhjþ¼ubj)�”}”(hŒ5``struct vm_area_desc *desc`` describing what to map ”h]”(j)�”}”(hŒ``struct vm_area_desc *desc``”h]”j)�”}”(hj@½h]”hŒstruct vm_area_desc *desc”…”�”}”(hjB½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KLhj:½ubj2)�”}”(hhh]”hÝ)�”}”(hŒdescribing what to map”h]”hŒdescribing what to map”…”�”}”(hjY½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jU½h´KLhjV½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj:½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jU½h´KLhjþ¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjâ¼ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj{½h]”hŒ Description”…”�”}”(hj}½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjy½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KNhjâ¼ubj•)�”}”(hŒQReturns 0 if ok, negative on error Caller should already have grabbed mmap_lock.”h]”(hÝ)�”}”(hŒ"Returns 0 if ok, negative on error”h]”hŒ"Returns 0 if ok, negative on error”…”�”}”(hj•½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KMhj‘½ubhÝ)�”}”(hŒ-Caller should already have grabbed mmap_lock.”h]”hŒ-Caller should already have grabbed mmap_lock.”…”�”}”(hj¤½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KOhj‘½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j£½h´KMhjâ¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_alloc_buf (C function)”Œc.relay_alloc_buf”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjÕ½h²hh³jç½h´Keubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjö½h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÕ½h²hh³jç½h´Keubj{)�”}”(hŒrelay_alloc_buf”h]”j�)�”}”(hŒrelay_alloc_buf”h]”hŒrelay_alloc_buf”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÕ½h²hh³jç½h´Keubjœ)�”}”(hŒ%(struct rchan_buf *buf, size_t *size)”h]”(j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj#¾h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾ubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hjA¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jC¾Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j ¾sbŒc.relay_alloc_buf”†”asbuh1hhj¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjo¾h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¾ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj|¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¾ubj¢)�”}”(hŒ size_t *size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj˜¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•¾ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jš¾Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j]¾Œc.relay_alloc_buf”†”asbuh1hhj‘¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘¾ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjľh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‘¾ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjѾh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÕ½h²hh³jç½h´Keubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjѽh²hh³jç½h´Keubah}”(h]”j̽ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jç½h´Kehjνh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a channel buffer”h]”hŒallocate a channel buffer”…”�”}”(hjû¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Kehjø¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjνh²hh³jç½h´Keubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¿jæj¿jç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hX **Parameters** ``struct rchan_buf *buf`` the buffer struct ``size_t *size`` total size of the buffer **Description** Returns a pointer to the resulting buffer, ``NULL`` if unsuccessful. The passed in size will get page aligned, if it isn't already.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¿h]”hŒ Parameters”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Kihj¿ubj )�”}”(hhh]”(j)�”}”(hŒ,``struct rchan_buf *buf`` the buffer struct ”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hj<¿h]”hŒstruct rchan_buf *buf”…”�”}”(hj>¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Kfhj6¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe buffer struct”h]”hŒthe buffer struct”…”�”}”(hjU¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQ¿h´KfhjR¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQ¿h´Kfhj3¿ubj)�”}”(hŒ*``size_t *size`` total size of the buffer ”h]”(j)�”}”(hŒ``size_t *size``”h]”j)�”}”(hju¿h]”hŒ size_t *size”…”�”}”(hjw¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjs¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Kghjo¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒtotal size of the buffer”h]”hŒtotal size of the buffer”…”�”}”(hjŽ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠ¿h´Kghj‹¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjo¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠ¿h´Kghj3¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj°¿h]”hŒ Description”…”�”}”(hj²¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Kihj¿ubj•)�”}”(hŒƒReturns a pointer to the resulting buffer, ``NULL`` if unsuccessful. The passed in size will get page aligned, if it isn't already.”h]”hÝ)�”}”(hŒƒReturns a pointer to the resulting buffer, ``NULL`` if unsuccessful. The passed in size will get page aligned, if it isn't already.”h]”(hŒ+Returns a pointer to the resulting buffer, ”…”�”}”(hjÊ¿h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjÒ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊ¿ubhŒR if unsuccessful. The passed in size will get page aligned, if it isn’t already.”…”�”}”(hjÊ¿h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KhhjÆ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jê¿h´Khhj¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_create_buf (C function)”Œc.relay_create_buf”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8struct rchan_buf * relay_create_buf (struct rchan *chan)”h]”j)�”}”(hŒ6struct rchan_buf *relay_create_buf(struct rchan *chan)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj Àh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Àh²hh³jÀh´K�ubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hj0Àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-Àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j2ÀŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œrelay_create_buf”sbŒc.relay_create_buf”†”asbuh1hhj Àh²hh³jÀh´K�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Àh²hh³jÀh´K�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj_Àh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj Àh²hh³jÀh´K�ubj{)�”}”(hŒrelay_create_buf”h]”j�)�”}”(hjNÀh]”hŒrelay_create_buf”…”�”}”(hjpÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlÀubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Àh²hh³jÀh´K�ubjœ)�”}”(hŒ(struct rchan *chan)”h]”j¢)�”}”(hŒstruct rchan *chan”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‹Àh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Àh²h• h³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡Àubh)�”}”(hhh]”j�)�”}”(hŒrchan”h]”hŒrchan”…”�”}”(hj©Àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦Àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j«ÀŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jLÀŒc.relay_create_buf”†”asbuh1hhj‡Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡Àubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÕÀh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‡Àubj�)�”}”(hŒchan”h]”hŒchan”…”�”}”(hjâÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒÀubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Àh²hh³jÀh´K�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj Àh²hh³jÀh´K�ubah}”(h]”jÀah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÀh´K�hjÀh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(allocate and initialize a channel buffer”h]”hŒ(allocate and initialize a channel buffer”…”�”}”(hj Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K�hj Áh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀh²hh³jÀh´K�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj$Ájæj$Ájç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ‹**Parameters** ``struct rchan *chan`` the relay channel **Description** Returns channel buffer if successful, ``NULL`` otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj.Áh]”hŒ Parameters”…”�”}”(hj0Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K‘hj(Áubj )�”}”(hhh]”j)�”}”(hŒ)``struct rchan *chan`` the relay channel ”h]”(j)�”}”(hŒ``struct rchan *chan``”h]”j)�”}”(hjMÁh]”hŒstruct rchan *chan”…”�”}”(hjOÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KŽhjGÁubj2)�”}”(hhh]”hÝ)�”}”(hŒthe relay channel”h]”hŒthe relay channel”…”�”}”(hjfÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jbÁh´KŽhjcÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjGÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbÁh´KŽhjDÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj(ÁubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjˆÁh]”hŒ Description”…”�”}”(hjŠÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K�hj(Áubj•)�”}”(hŒ9Returns channel buffer if successful, ``NULL`` otherwise.”h]”hÝ)�”}”(hj Áh]”(hŒ&Returns channel buffer if successful, ”…”�”}”(hj¢Áh²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj©Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢ÁubhŒ otherwise.”…”�”}”(hj¢Áh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K�hjžÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÁÁh´K�hj(Áubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"relay_destroy_channel (C function)”Œc.relay_destroy_channel”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void relay_destroy_channel (struct kref *kref)”h]”j)�”}”(hŒ-void relay_destroy_channel(struct kref *kref)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjèÁh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjäÁh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷Áh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäÁh²hh³jöÁh´K¯ubj{)�”}”(hŒrelay_destroy_channel”h]”j�)�”}”(hŒrelay_destroy_channel”h]”hŒrelay_destroy_channel”…”�”}”(hj Âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjäÁh²hh³jöÁh´K¯ubjœ)�”}”(hŒ(struct kref *kref)”h]”j¢)�”}”(hŒstruct kref *kref”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj%Âh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!Âubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Âubh)�”}”(hhh]”j�)�”}”(hŒkref”h]”hŒkref”…”�”}”(hjCÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@Âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jEÂŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j ÂsbŒc.relay_destroy_channel”†”asbuh1hhj!Âubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcÂh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Âubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjqÂh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!Âubj�)�”}”(hŒkref”h]”hŒkref”…”�”}”(hj~Âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!Âubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÂubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjäÁh²hh³jöÁh´K¯ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjàÁh²hh³jöÁh´K¯ubah}”(h]”jÛÁah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jöÁh´K¯hjÝÁh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒfree the channel struct”h]”hŒfree the channel struct”…”�”}”(hj¨Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K¯hj¥Âh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÝÁh²hh³jöÁh´K¯ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÀÂjæjÀÂjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ�**Parameters** ``struct kref *kref`` target kernel reference that contains the relay channel **Description** Should only be called from kref_put().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÊÂh]”hŒ Parameters”…”�”}”(hjÌÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K³hjÄÂubj )�”}”(hhh]”j)�”}”(hŒN``struct kref *kref`` target kernel reference that contains the relay channel ”h]”(j)�”}”(hŒ``struct kref *kref``”h]”j)�”}”(hjéÂh]”hŒstruct kref *kref”…”�”}”(hjëÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K°hjãÂubj2)�”}”(hhh]”hÝ)�”}”(hŒ7target kernel reference that contains the relay channel”h]”hŒ7target kernel reference that contains the relay channel”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jþÂh´K°hjÿÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjãÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþÂh´K°hjàÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÄÂubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj$Ãh]”hŒ Description”…”�”}”(hj&Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K²hjÄÂubj•)�”}”(hŒ&Should only be called from kref_put().”h]”hÝ)�”}”(hj<Ãh]”hŒ&Should only be called from kref_put().”…”�”}”(hj>Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K±hj:Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jKÃh´K±hjÄÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_destroy_buf (C function)”Œc.relay_destroy_buf”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void relay_destroy_buf (struct rchan_buf *buf)”h]”j)�”}”(hŒ-void relay_destroy_buf(struct rchan_buf *buf)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjrÃh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnÃh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K¼ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnÃh²hh³j€Ãh´K¼ubj{)�”}”(hŒrelay_destroy_buf”h]”j�)�”}”(hŒrelay_destroy_buf”h]”hŒrelay_destroy_buf”…”�”}”(hj“Ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Ãubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjnÃh²hh³j€Ãh´K¼ubjœ)�”}”(hŒ(struct rchan_buf *buf)”h]”j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¯Ãh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj«Ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«Ãubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hjÍÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊÃubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÏÃŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j•ÃsbŒc.relay_destroy_buf”†”asbuh1hhj«Ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«Ãubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjûÃh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj«Ãubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«Ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj§Ãubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjnÃh²hh³j€Ãh´K¼ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjjÃh²hh³j€Ãh´K¼ubah}”(h]”jeÃah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j€Ãh´K¼hjgÃh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1destroy an rchan_buf struct and associated buffer”h]”hŒ1destroy an rchan_buf struct and associated buffer”…”�”}”(hj2Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K¼hj/Äh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjgÃh²hh³j€Ãh´K¼ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjJÄjæjJÄjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ=**Parameters** ``struct rchan_buf *buf`` the buffer struct”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjTÄh]”hŒ Parameters”…”�”}”(hjVÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRÄubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KÀhjNÄubj )�”}”(hhh]”j)�”}”(hŒ+``struct rchan_buf *buf`` the buffer struct”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hjsÄh]”hŒstruct rchan_buf *buf”…”�”}”(hjuÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KÂhjmÄubj2)�”}”(hhh]”hÝ)�”}”(hŒthe buffer struct”h]”hŒthe buffer struct”…”�”}”(hjŒÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´K½hj‰Äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjmÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆÄh´KÂhjjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjNÄubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_remove_buf (C function)”Œc.relay_remove_buf”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)void relay_remove_buf (struct kref *kref)”h]”j)�”}”(hŒ(void relay_remove_buf(struct kref *kref)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÍÄh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÉÄh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜÄh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉÄh²hh³jÛÄh´KÑubj{)�”}”(hŒrelay_remove_buf”h]”j�)�”}”(hŒrelay_remove_buf”h]”hŒrelay_remove_buf”…”�”}”(hjîÄh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêÄubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÉÄh²hh³jÛÄh´KÑubjœ)�”}”(hŒ(struct kref *kref)”h]”j¢)�”}”(hŒstruct kref *kref”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj Åh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÅubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅubh)�”}”(hhh]”j�)�”}”(hŒkref”h]”hŒkref”…”�”}”(hj(Åh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%Åubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j*ÅŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jðÄsbŒc.relay_remove_buf”†”asbuh1hhjÅubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHÅh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjVÅh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÅubj�)�”}”(hŒkref”h]”hŒkref”…”�”}”(hjcÅh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÅubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÉÄh²hh³jÛÄh´KÑubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÅÄh²hh³jÛÄh´KÑubah}”(h]”jÀÄah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÛÄh´KÑhjÂÄh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒremove a channel buffer”h]”hŒremove a channel buffer”…”�”}”(hj�Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KÑhjŠÅh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÂÄh²hh³jÛÄh´KÑubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¥Åjæj¥Åjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hX **Parameters** ``struct kref *kref`` target kernel reference that contains the relay buffer **Description** Removes the file from the filesystem, which also frees the rchan_buf_struct and the channel buffer. Should only be called from kref_put().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¯Åh]”hŒ Parameters”…”�”}”(hj±Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­Åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KÕhj©Åubj )�”}”(hhh]”j)�”}”(hŒM``struct kref *kref`` target kernel reference that contains the relay buffer ”h]”(j)�”}”(hŒ``struct kref *kref``”h]”j)�”}”(hjÎÅh]”hŒstruct kref *kref”…”�”}”(hjÐÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KÒhjÈÅubj2)�”}”(hhh]”hÝ)�”}”(hŒ6target kernel reference that contains the relay buffer”h]”hŒ6target kernel reference that contains the relay buffer”…”�”}”(hjçÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jãÅh´KÒhjäÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãÅh´KÒhjÅÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj©ÅubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj Æh]”hŒ Description”…”�”}”(hj Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KÔhj©Åubj•)�”}”(hŒ‹Removes the file from the filesystem, which also frees the rchan_buf_struct and the channel buffer. Should only be called from kref_put().”h]”hÝ)�”}”(hŒ‹Removes the file from the filesystem, which also frees the rchan_buf_struct and the channel buffer. Should only be called from kref_put().”h]”hŒ‹Removes the file from the filesystem, which also frees the rchan_buf_struct and the channel buffer. Should only be called from kref_put().”…”�”}”(hj#Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KÓhjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j1Æh´KÓhj©Åubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_buf_empty (C function)”Œc.relay_buf_empty”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+int relay_buf_empty (struct rchan_buf *buf)”h]”j)�”}”(hŒ*int relay_buf_empty(struct rchan_buf *buf)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjXÆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjTÆh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Kßubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTÆh²hh³jfÆh´Kßubj{)�”}”(hŒrelay_buf_empty”h]”j�)�”}”(hŒrelay_buf_empty”h]”hŒrelay_buf_empty”…”�”}”(hjyÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuÆubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjTÆh²hh³jfÆh´Kßubjœ)�”}”(hŒ(struct rchan_buf *buf)”h]”j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj•Æh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‘Æubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘Æubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hj³Æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°Æubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jµÆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j{ÆsbŒc.relay_buf_empty”†”asbuh1hhj‘Æubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘Æubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjáÆh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‘Æubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjîÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘Æubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�Æubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjTÆh²hh³jfÆh´Kßubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjPÆh²hh³jfÆh´Kßubah}”(h]”jKÆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jfÆh´KßhjMÆh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%boolean, is the channel buffer empty?”h]”hŒ%boolean, is the channel buffer empty?”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KßhjÇh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjMÆh²hh³jfÆh´Kßubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj0Çjæj0Çjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ€**Parameters** ``struct rchan_buf *buf`` channel buffer **Description** Returns 1 if the buffer is empty, 0 otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj:Çh]”hŒ Parameters”…”�”}”(hj<Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8Çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Kãhj4Çubj )�”}”(hhh]”j)�”}”(hŒ)``struct rchan_buf *buf`` channel buffer ”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hjYÇh]”hŒstruct rchan_buf *buf”…”�”}”(hj[Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjWÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KàhjSÇubj2)�”}”(hhh]”hÝ)�”}”(hŒchannel buffer”h]”hŒchannel buffer”…”�”}”(hjrÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jnÇh´KàhjoÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjSÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jnÇh´KàhjPÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj4ÇubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj”Çh]”hŒ Description”…”�”}”(hj–Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj’Çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Kâhj4Çubj•)�”}”(hŒ.Returns 1 if the buffer is empty, 0 otherwise.”h]”hÝ)�”}”(hj¬Çh]”hŒ.Returns 1 if the buffer is empty, 0 otherwise.”…”�”}”(hj®Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´KáhjªÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j»Çh´Káhj4Çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œwakeup_readers (C function)”Œc.wakeup_readers”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+void wakeup_readers (struct irq_work *work)”h]”j)�”}”(hŒ*void wakeup_readers(struct irq_work *work)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjâÇh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞÇh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞÇh²hh³jðÇh´M ubj{)�”}”(hŒwakeup_readers”h]”j�)�”}”(hŒwakeup_readers”h]”hŒwakeup_readers”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿÇubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÞÇh²hh³jðÇh´M ubjœ)�”}”(hŒ(struct irq_work *work)”h]”j¢)�”}”(hŒstruct irq_work *work”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈubh)�”}”(hhh]”j�)�”}”(hŒirq_work”h]”hŒirq_work”…”�”}”(hj=Èh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:Èubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j?ÈŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÈsbŒc.wakeup_readers”†”asbuh1hhjÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjkÈh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÈubj�)�”}”(hŒwork”h]”hŒwork”…”�”}”(hjxÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÈubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÞÇh²hh³jðÇh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÚÇh²hh³jðÇh´M ubah}”(h]”jÕÇah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jðÇh´M hj×Çh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$wake up readers waiting on a channel”h]”hŒ$wake up readers waiting on a channel”…”�”}”(hj¢Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M hjŸÈh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj×Çh²hh³jðÇh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjºÈjæjºÈjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ�**Parameters** ``struct irq_work *work`` contains the channel buffer **Description** This is the function used to defer reader waking”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÄÈh]”hŒ Parameters”…”�”}”(hjÆÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mhj¾Èubj )�”}”(hhh]”j)�”}”(hŒ6``struct irq_work *work`` contains the channel buffer ”h]”(j)�”}”(hŒ``struct irq_work *work``”h]”j)�”}”(hjãÈh]”hŒstruct irq_work *work”…”�”}”(hjåÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M hjÝÈubj2)�”}”(hhh]”hÝ)�”}”(hŒcontains the channel buffer”h]”hŒcontains the channel buffer”…”�”}”(hjüÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jøÈh´M hjùÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÝÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jøÈh´M hjÚÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¾ÈubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÉh]”hŒ Description”…”�”}”(hj Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M hj¾Èubj•)�”}”(hŒ0This is the function used to defer reader waking”h]”hÝ)�”}”(hj6Éh]”hŒ0This is the function used to defer reader waking”…”�”}”(hj8Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M hj4Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jEÉh´M hj¾Èubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__relay_reset (C function)”Œc.__relay_reset”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=void __relay_reset (struct rchan_buf *buf, unsigned int init)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hjhÉh²hh³jzÉh´Mubj{)�”}”(hŒ __relay_reset”h]”j�)�”}”(hŒ __relay_reset”h]”hŒ __relay_reset”…”�”}”(hj�Éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰Éubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjhÉh²hh³jzÉh´Mubjœ)�”}”(hŒ*(struct rchan_buf *buf, unsigned int init)”h]”(j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj©Éh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¥Éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥Éubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hjÇÉh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄÉubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÉÉŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�ÉsbŒc.__relay_reset”†”asbuh1hhj¥Éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçÉh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥Éubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjõÉh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¥Éubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥Éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¡Éubj¢)�”}”(hŒunsigned int init”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj7Êh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊubj�)�”}”(hŒinit”h]”hŒinit”…”�”}”(hjSÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¡Éubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjhÉh²hh³jzÉh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjdÉh²hh³jzÉh´Mubah}”(h]”j_Éah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jzÉh´MhjaÉh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒreset a channel buffer”h]”hŒreset a channel buffer”…”�”}”(hj}Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MhjzÊh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjaÉh²hh³jzÉh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj•Êjæj•Êjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒÄ**Parameters** ``struct rchan_buf *buf`` the channel buffer ``unsigned int init`` 1 if this is a first-time initialization **Description** See relay_reset() for description of effect.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŸÊh]”hŒ Parameters”…”�”}”(hj¡Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mhj™Êubj )�”}”(hhh]”(j)�”}”(hŒ-``struct rchan_buf *buf`` the channel buffer ”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hj¾Êh]”hŒstruct rchan_buf *buf”…”�”}”(hjÀÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼Êubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mhj¸Êubj2)�”}”(hhh]”hÝ)�”}”(hŒthe channel buffer”h]”hŒthe channel buffer”…”�”}”(hj×Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÓÊh´MhjÔÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸Êubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓÊh´MhjµÊubj)�”}”(hŒ?``unsigned int init`` 1 if this is a first-time initialization ”h]”(j)�”}”(hŒ``unsigned int init``”h]”j)�”}”(hj÷Êh]”hŒunsigned int init”…”�”}”(hjùÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MhjñÊubj2)�”}”(hhh]”hÝ)�”}”(hŒ(1 if this is a first-time initialization”h]”hŒ(1 if this is a first-time initialization”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Ëh´Mhj Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjñÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Ëh´MhjµÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj™ÊubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj2Ëh]”hŒ Description”…”�”}”(hj4Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mhj™Êubj•)�”}”(hŒ,See relay_reset() for description of effect.”h]”hÝ)�”}”(hjJËh]”hŒ,See relay_reset() for description of effect.”…”�”}”(hjLËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MhjHËubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jYËh´Mhj™Êubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_close_buf (C function)”Œc.relay_close_buf”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,void relay_close_buf (struct rchan_buf *buf)”h]”j)�”}”(hŒ+void relay_close_buf(struct rchan_buf *buf)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj€Ëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj|Ëh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|Ëh²hh³jŽËh´M¦ubj{)�”}”(hŒrelay_close_buf”h]”j�)�”}”(hŒrelay_close_buf”h]”hŒrelay_close_buf”…”�”}”(hj¡Ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Ëubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj|Ëh²hh³jŽËh´M¦ubjœ)�”}”(hŒ(struct rchan_buf *buf)”h]”j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj½Ëh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¹Ëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹Ëubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hjÛËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÝËŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j£ËsbŒc.relay_close_buf”†”asbuh1hhj¹Ëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹Ëubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Ìh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¹Ëubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹Ëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµËubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj|Ëh²hh³jŽËh´M¦ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjxËh²hh³jŽËh´M¦ubah}”(h]”jsËah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŽËh´M¦hjuËh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒclose a channel buffer”h]”hŒclose a channel buffer”…”�”}”(hj@Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¦hj=Ìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjuËh²hh³jŽËh´M¦ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjXÌjæjXÌjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hX**Parameters** ``struct rchan_buf *buf`` channel buffer **Description** Marks the buffer finalized and restores the default callbacks. The channel buffer and channel buffer data structure are then freed automatically when the last reference is given up.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjbÌh]”hŒ Parameters”…”�”}”(hjdÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mªhj\Ìubj )�”}”(hhh]”j)�”}”(hŒ)``struct rchan_buf *buf`` channel buffer ”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hj�Ìh]”hŒstruct rchan_buf *buf”…”�”}”(hjƒÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M§hj{Ìubj2)�”}”(hhh]”hÝ)�”}”(hŒchannel buffer”h]”hŒchannel buffer”…”�”}”(hjšÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–Ìh´M§hj—Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{Ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–Ìh´M§hjxÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj\ÌubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¼Ìh]”hŒ Description”…”�”}”(hj¾Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjºÌubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M©hj\Ìubj•)�”}”(hŒµMarks the buffer finalized and restores the default callbacks. The channel buffer and channel buffer data structure are then freed automatically when the last reference is given up.”h]”hÝ)�”}”(hŒµMarks the buffer finalized and restores the default callbacks. The channel buffer and channel buffer data structure are then freed automatically when the last reference is given up.”h]”hŒµMarks the buffer finalized and restores the default callbacks. The channel buffer and channel buffer data structure are then freed automatically when the last reference is given up.”…”�”}”(hjÖÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¨hjÒÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jäÌh´M¨hj\Ìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_stats (C function)”Œ c.relay_stats”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2size_t relay_stats (struct rchan *chan, int flags)”h]”j)�”}”(hŒ1size_t relay_stats(struct rchan *chan, int flags)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÍŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ relay_stats”sbŒ c.relay_stats”†”asbuh1hhjÍh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍh²hh³j/Íh´M»ubj{)�”}”(hŒ relay_stats”h]”j�)�”}”(hj,Íh]”hŒ relay_stats”…”�”}”(hjBÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>Íubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÍh²hh³j/Íh´M»ubjœ)�”}”(hŒ(struct rchan *chan, int flags)”h]”(j¢)�”}”(hŒstruct rchan *chan”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj]Íh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjYÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjYÍubh)�”}”(hhh]”j�)�”}”(hŒrchan”h]”hŒrchan”…”�”}”(hj{Íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxÍubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j}ÍŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j*ÍŒ c.relay_stats”†”asbuh1hhjYÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjYÍubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj§Íh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjYÍubj�)�”}”(hŒchan”h]”hŒchan”…”�”}”(hj´Íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjUÍubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÍÍh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÉÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉÍubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjéÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjUÍubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÍh²hh³j/Íh´M»ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÍh²hh³j/Íh´M»ubah}”(h]”jþÌah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j/Íh´M»hjÍh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒget channel buffer statistics”h]”hŒget channel buffer statistics”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M»hjÎh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÍh²hh³j/Íh´M»ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj+Îjæj+Îjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ»**Parameters** ``struct rchan *chan`` the channel ``int flags`` select particular information to get **Description** Returns the count of certain field that caller specifies.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj5Îh]”hŒ Parameters”…”�”}”(hj7Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj3Îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¿hj/Îubj )�”}”(hhh]”(j)�”}”(hŒ#``struct rchan *chan`` the channel ”h]”(j)�”}”(hŒ``struct rchan *chan``”h]”j)�”}”(hjTÎh]”hŒstruct rchan *chan”…”�”}”(hjVÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¼hjNÎubj2)�”}”(hhh]”hÝ)�”}”(hŒ the channel”h]”hŒ the channel”…”�”}”(hjmÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jiÎh´M¼hjjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjNÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jiÎh´M¼hjKÎubj)�”}”(hŒ3``int flags`` select particular information to get ”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hj�Îh]”hŒ int flags”…”�”}”(hj�Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹Îubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M½hj‡Îubj2)�”}”(hhh]”hÝ)�”}”(hŒ$select particular information to get”h]”hŒ$select particular information to get”…”�”}”(hj¦Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¢Îh´M½hj£Îubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‡Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¢Îh´M½hjKÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj/ÎubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÈÎh]”hŒ Description”…”�”}”(hjÊÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÆÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¿hj/Îubj•)�”}”(hŒ9Returns the count of certain field that caller specifies.”h]”hÝ)�”}”(hjàÎh]”hŒ9Returns the count of certain field that caller specifies.”…”�”}”(hjâÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¾hjÞÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jïÎh´M¾hj/Îubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_file_open (C function)”Œc.relay_file_open”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjÏh²hh³j$Ïh´Mßubj{)�”}”(hŒrelay_file_open”h]”j�)�”}”(hŒrelay_file_open”h]”hŒrelay_file_open”…”�”}”(hj7Ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3Ïubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÏh²hh³j$Ïh´Mßubjœ)�”}”(hŒ((struct inode *inode, struct file *filp)”h]”(j¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjSÏh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjOÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOÏubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjqÏh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jsÏŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j9ÏsbŒc.relay_file_open”†”asbuh1hhjOÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOÏubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŸÏh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjOÏubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj¬Ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjKÏubj¢)�”}”(hŒstruct file *filp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÅÏh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÁÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁÏubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjãÏh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjàÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jåÏŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j�ÏŒc.relay_file_open”†”asbuh1hhjÁÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁÏubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÁÏubj�)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjKÏubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÏh²hh³j$Ïh´Mßubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÏh²hh³j$Ïh´Mßubah}”(h]”j Ïah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j$Ïh´Mßhj Ïh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒopen file op for relay files”h]”hŒopen file op for relay files”…”�”}”(hjFÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MßhjCÐh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj Ïh²hh³j$Ïh´Mßubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj^Ðjæj^Ðjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ”**Parameters** ``struct inode *inode`` the inode ``struct file *filp`` the file **Description** Increments the channel buffer refcount.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjhÐh]”hŒ Parameters”…”�”}”(hjjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MãhjbÐubj )�”}”(hhh]”(j)�”}”(hŒ"``struct inode *inode`` the inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hj‡Ðh]”hŒstruct inode *inode”…”�”}”(hj‰Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Màhj�Ðubj2)�”}”(hhh]”hÝ)�”}”(hŒ the inode”h]”hŒ the inode”…”�”}”(hj Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœÐh´Màhj�Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœÐh´Màhj~Ðubj)�”}”(hŒ``struct file *filp`` the file ”h]”(j)�”}”(hŒ``struct file *filp``”h]”j)�”}”(hjÀÐh]”hŒstruct file *filp”…”�”}”(hjÂÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MáhjºÐubj2)�”}”(hhh]”hÝ)�”}”(hŒthe file”h]”hŒthe file”…”�”}”(hjÙÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÕÐh´MáhjÖÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjºÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕÐh´Máhj~Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjbÐubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjûÐh]”hŒ Description”…”�”}”(hjýÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjùÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MãhjbÐubj•)�”}”(hŒ'Increments the channel buffer refcount.”h]”hÝ)�”}”(hjÑh]”hŒ'Increments the channel buffer refcount.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MâhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j"Ñh´MâhjbÐubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$relay_file_mmap_prepare (C function)”Œc.relay_file_mmap_prepare”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7int relay_file_mmap_prepare (struct vm_area_desc *desc)”h]”j)�”}”(hŒ6int relay_file_mmap_prepare(struct vm_area_desc *desc)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjIÑh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjEÑh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXÑh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEÑh²hh³jWÑh´Mïubj{)�”}”(hŒrelay_file_mmap_prepare”h]”j�)�”}”(hŒrelay_file_mmap_prepare”h]”hŒrelay_file_mmap_prepare”…”�”}”(hjjÑh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfÑubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjEÑh²hh³jWÑh´Mïubjœ)�”}”(hŒ(struct vm_area_desc *desc)”h]”j¢)�”}”(hŒstruct vm_area_desc *desc”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj†Ñh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‚Ñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚Ñubh)�”}”(hhh]”j�)�”}”(hŒ vm_area_desc”h]”hŒ vm_area_desc”…”�”}”(hj¤Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡Ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¦ÑŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jlÑsbŒc.relay_file_mmap_prepare”†”asbuh1hhj‚Ñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄÑh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚Ñubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÒÑh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‚Ñubj�)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjßÑh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚Ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj~Ñubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjEÑh²hh³jWÑh´Mïubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjAÑh²hh³jWÑh´Mïubah}”(h]”j<Ñah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jWÑh´Mïhj>Ñh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒmmap file op for relay files”h]”hŒmmap file op for relay files”…”�”}”(hj Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MïhjÒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj>Ñh²hh³jWÑh´Mïubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj!Òjæj!Òjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ¢**Parameters** ``struct vm_area_desc *desc`` describing what to map **Description** Calls upon relay_mmap_prepare_buf() to map the file into user space.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj+Òh]”hŒ Parameters”…”�”}”(hj-Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)Òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Móhj%Òubj )�”}”(hhh]”j)�”}”(hŒ5``struct vm_area_desc *desc`` describing what to map ”h]”(j)�”}”(hŒ``struct vm_area_desc *desc``”h]”j)�”}”(hjJÒh]”hŒstruct vm_area_desc *desc”…”�”}”(hjLÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MðhjDÒubj2)�”}”(hhh]”hÝ)�”}”(hŒdescribing what to map”h]”hŒdescribing what to map”…”�”}”(hjcÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j_Òh´Mðhj`Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjDÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j_Òh´MðhjAÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj%ÒubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj…Òh]”hŒ Description”…”�”}”(hj‡Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mòhj%Òubj•)�”}”(hŒDCalls upon relay_mmap_prepare_buf() to map the file into user space.”h]”hÝ)�”}”(hj�Òh]”hŒDCalls upon relay_mmap_prepare_buf() to map the file into user space.”…”�”}”(hjŸÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mñhj›Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¬Òh´Mñhj%Òubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_file_poll (C function)”Œc.relay_file_poll”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ>__poll_t relay_file_poll (struct file *filp, poll_table *wait)”h]”j)�”}”(hŒ=__poll_t relay_file_poll(struct file *filp, poll_table *wait)”h]”(h)�”}”(hhh]”j�)�”}”(hŒ__poll_t”h]”hŒ__poll_t”…”�”}”(hjÖÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jØÒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œrelay_file_poll”sbŒc.relay_file_poll”†”asbuh1hhjÏÒh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Müubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏÒh²hh³j÷Òh´Müubj{)�”}”(hŒrelay_file_poll”h]”j�)�”}”(hjôÒh]”hŒrelay_file_poll”…”�”}”(hj Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÏÒh²hh³j÷Òh´Müubjœ)�”}”(hŒ%(struct file *filp, poll_table *wait)”h]”(j¢)�”}”(hŒstruct file *filp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj%Óh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!Óubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Óubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjCÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@Óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jEÓŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jòÒŒc.relay_file_poll”†”asbuh1hhj!Óubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Óubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjoÓh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!Óubj�)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hj|Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!Óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓubj¢)�”}”(hŒpoll_table *wait”h]”(h)�”}”(hhh]”j�)�”}”(hŒ poll_table”h]”hŒ poll_table”…”�”}”(hj˜Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•Óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jšÓŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jòÒŒc.relay_file_poll”†”asbuh1hhj‘Óubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘Óubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÄÓh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‘Óubj�)�”}”(hŒwait”h]”hŒwait”…”�”}”(hjÑÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘Óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÏÒh²hh³j÷Òh´Müubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjËÒh²hh³j÷Òh´Müubah}”(h]”jÆÒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j÷Òh´MühjÈÒh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒpoll file op for relay files”h]”hŒpoll file op for relay files”…”�”}”(hjûÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MühjøÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÈÒh²hh³j÷Òh´Müubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÔjæjÔjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ}**Parameters** ``struct file *filp`` the file ``poll_table *wait`` poll table **Description** Poll implemention.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÔh]”hŒ Parameters”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MhjÔubj )�”}”(hhh]”(j)�”}”(hŒ``struct file *filp`` the file ”h]”(j)�”}”(hŒ``struct file *filp``”h]”j)�”}”(hj<Ôh]”hŒstruct file *filp”…”�”}”(hj>Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mýhj6Ôubj2)�”}”(hhh]”hÝ)�”}”(hŒthe file”h]”hŒthe file”…”�”}”(hjUÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQÔh´MýhjRÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQÔh´Mýhj3Ôubj)�”}”(hŒ ``poll_table *wait`` poll table ”h]”(j)�”}”(hŒ``poll_table *wait``”h]”j)�”}”(hjuÔh]”hŒpoll_table *wait”…”�”}”(hjwÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MþhjoÔubj2)�”}”(hhh]”hÝ)�”}”(hŒ poll table”h]”hŒ poll table”…”�”}”(hjŽÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠÔh´Mþhj‹Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjoÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠÔh´Mþhj3Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÔubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj°Ôh]”hŒ Description”…”�”}”(hj²Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MhjÔubj•)�”}”(hŒPoll implemention.”h]”hÝ)�”}”(hjÈÔh]”hŒPoll implemention.”…”�”}”(hjÊÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MÿhjÆÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j×Ôh´MÿhjÔubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelay_file_release (C function)”Œc.relay_file_release”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ?int relay_file_release (struct inode *inode, struct file *filp)”h]”j)�”}”(hŒ>int relay_file_release(struct inode *inode, struct file *filp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjþÔh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjúÔh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Õh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúÔh²hh³j Õh´Mubj{)�”}”(hŒrelay_file_release”h]”j�)�”}”(hŒrelay_file_release”h]”hŒrelay_file_release”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjúÔh²hh³j Õh´Mubjœ)�”}”(hŒ((struct inode *inode, struct file *filp)”h]”(j¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj;Õh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj7Õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7Õubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjYÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVÕubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j[ÕŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j!ÕsbŒc.relay_file_release”†”asbuh1hhj7Õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7Õubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‡Õh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj7Õubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj”Õh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7Õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj3Õubj¢)�”}”(hŒstruct file *filp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj­Õh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj©Õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©Õubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjËÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈÕubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÍÕŒmodname”NŒ classname”Nj] j` )�”}”jc ]”juÕŒc.relay_file_release”†”asbuh1hhj©Õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©Õubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj÷Õh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj©Õubj�)�”}”(hŒfilp”h]”hŒfilp”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©Õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj3Õubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjúÔh²hh³j Õh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjöÔh²hh³j Õh´Mubah}”(h]”jñÔah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j Õh´MhjóÔh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒrelease file op for relay files”h]”hŒrelease file op for relay files”…”�”}”(hj.Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mhj+Öh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjóÔh²hh³j Õh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjFÖjæjFÖjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ»**Parameters** ``struct inode *inode`` the inode ``struct file *filp`` the file **Description** Decrements the channel refcount, as the filesystem is no longer using it.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjPÖh]”hŒ Parameters”…”�”}”(hjRÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjNÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MhjJÖubj )�”}”(hhh]”(j)�”}”(hŒ"``struct inode *inode`` the inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hjoÖh]”hŒstruct inode *inode”…”�”}”(hjqÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MhjiÖubj2)�”}”(hhh]”hÝ)�”}”(hŒ the inode”h]”hŒ the inode”…”�”}”(hjˆÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j„Öh´Mhj…Öubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjiÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„Öh´MhjfÖubj)�”}”(hŒ``struct file *filp`` the file ”h]”(j)�”}”(hŒ``struct file *filp``”h]”j)�”}”(hj¨Öh]”hŒstruct file *filp”…”�”}”(hjªÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mhj¢Öubj2)�”}”(hhh]”hÝ)�”}”(hŒthe file”h]”hŒthe file”…”�”}”(hjÁÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j½Öh´Mhj¾Öubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¢Öubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½Öh´MhjfÖubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjJÖubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjãÖh]”hŒ Description”…”�”}”(hjåÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjáÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MhjJÖubj•)�”}”(hŒIDecrements the channel refcount, as the filesystem is no longer using it.”h]”hÝ)�”}”(hŒIDecrements the channel refcount, as the filesystem is no longer using it.”h]”hŒIDecrements the channel refcount, as the filesystem is no longer using it.”…”�”}”(hjýÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MhjùÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j ×h´MhjJÖubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)relay_file_read_subbuf_avail (C function)”Œc.relay_file_read_subbuf_avail”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLsize_t relay_file_read_subbuf_avail (size_t read_pos, struct rchan_buf *buf)”h]”j)�”}”(hŒKsize_t relay_file_read_subbuf_avail(size_t read_pos, struct rchan_buf *buf)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj5×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j7׌modname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œrelay_file_read_subbuf_avail”sbŒc.relay_file_read_subbuf_avail”†”asbuh1hhj.×h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.×h²hh³jV×h´Mpubj{)�”}”(hŒrelay_file_read_subbuf_avail”h]”j�)�”}”(hjS×h]”hŒrelay_file_read_subbuf_avail”…”�”}”(hji×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hje×ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj.×h²hh³jV×h´Mpubjœ)�”}”(hŒ((size_t read_pos, struct rchan_buf *buf)”h]”(j¢)�”}”(hŒsize_t read_pos”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj‡×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‰×Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jQ׌c.relay_file_read_subbuf_avail”†”asbuh1hhj€×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€×ubj�)�”}”(hŒread_pos”h]”hŒread_pos”…”�”}”(hj³×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj€×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj|×ubj¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÌ×h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÈ×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈ×ubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”•€h]”hŒ rchan_buf”…”�”}”(hjê×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjç×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jì׌modname”NŒ classname”Nj] j` )�”}”jc ]”jQ׌c.relay_file_read_subbuf_avail”†”asbuh1hhjÈ×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈ×ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÈ×ubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hj#Øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈ×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj|×ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj.×h²hh³jV×h´Mpubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj*×h²hh³jV×h´Mpubah}”(h]”j%×ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jV×h´Mphj'×h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$return bytes available in sub-buffer”h]”hŒ$return bytes available in sub-buffer”…”�”}”(hjMØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MphjJØh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj'×h²hh³jV×h´Mpubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjeØjæjeØjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒj**Parameters** ``size_t read_pos`` file read position ``struct rchan_buf *buf`` relay channel buffer”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjoØh]”hŒ Parameters”…”�”}”(hjqØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjmØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MthjiØubj )�”}”(hhh]”(j)�”}”(hŒ'``size_t read_pos`` file read position ”h]”(j)�”}”(hŒ``size_t read_pos``”h]”j)�”}”(hjŽØh]”hŒsize_t read_pos”…”�”}”(hj�Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒØubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MqhjˆØubj2)�”}”(hhh]”hÝ)�”}”(hŒfile read position”h]”hŒfile read position”…”�”}”(hj§Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j£Øh´Mqhj¤Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjˆØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j£Øh´Mqhj…Øubj)�”}”(hŒ.``struct rchan_buf *buf`` relay channel buffer”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hjÇØh]”hŒstruct rchan_buf *buf”…”�”}”(hjÉØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅØubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MshjÁØubj2)�”}”(hhh]”hÝ)�”}”(hŒrelay channel buffer”h]”hŒrelay channel buffer”…”�”}”(hjàØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MrhjÝØubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÁØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÜØh´Mshj…Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjiØubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&relay_file_read_start_pos (C function)”Œc.relay_file_read_start_pos”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8size_t relay_file_read_start_pos (struct rchan_buf *buf)”h]”j)�”}”(hŒ7size_t relay_file_read_start_pos(struct rchan_buf *buf)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj$Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!Ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j&ÙŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œrelay_file_read_start_pos”sbŒc.relay_file_read_start_pos”†”asbuh1hhjÙh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M‹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙh²hh³jEÙh´M‹ubj{)�”}”(hŒrelay_file_read_start_pos”h]”j�)�”}”(hjBÙh]”hŒrelay_file_read_start_pos”…”�”}”(hjXÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTÙubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÙh²hh³jEÙh´M‹ubjœ)�”}”(hŒ(struct rchan_buf *buf)”h]”j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjsÙh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjoÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoÙubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hj‘Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j“ÙŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j@ÙŒc.relay_file_read_start_pos”†”asbuh1hhjoÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoÙubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj½Ùh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjoÙubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjÊÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjkÙubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÙh²hh³jEÙh´M‹ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÙh²hh³jEÙh´M‹ubah}”(h]”jÙah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jEÙh´M‹hjÙh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%find the first available byte to read”h]”hŒ%find the first available byte to read”…”�”}”(hjôÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M‹hjñÙh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÙh²hh³jEÙh´M‹ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj Újæj Újç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒí**Parameters** ``struct rchan_buf *buf`` relay channel buffer **Description** If the read_pos is in the middle of padding, return the position of the first actually available byte, otherwise return the original value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÚh]”hŒ Parameters”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M�hjÚubj )�”}”(hhh]”j)�”}”(hŒ/``struct rchan_buf *buf`` relay channel buffer ”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hj5Úh]”hŒstruct rchan_buf *buf”…”�”}”(hj7Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MŒhj/Úubj2)�”}”(hhh]”hÝ)�”}”(hŒrelay channel buffer”h]”hŒrelay channel buffer”…”�”}”(hjNÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jJÚh´MŒhjKÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJÚh´MŒhj,Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÚubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjpÚh]”hŒ Description”…”�”}”(hjrÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´MŽhjÚubj•)�”}”(hŒ‹If the read_pos is in the middle of padding, return the position of the first actually available byte, otherwise return the original value.”h]”hÝ)�”}”(hŒ‹If the read_pos is in the middle of padding, return the position of the first actually available byte, otherwise return the original value.”h]”hŒ‹If the read_pos is in the middle of padding, return the position of the first actually available byte, otherwise return the original value.”…”�”}”(hjŠÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M�hj†Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j˜Úh´M�hjÚubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$relay_file_read_end_pos (C function)”Œc.relay_file_read_end_pos”hNt”auh1hýhjm«h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒUsize_t relay_file_read_end_pos (struct rchan_buf *buf, size_t read_pos, size_t count)”h]”j)�”}”(hŒTsize_t relay_file_read_end_pos(struct rchan_buf *buf, size_t read_pos, size_t count)”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÂÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿Úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÄÚŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œrelay_file_read_end_pos”sbŒc.relay_file_read_end_pos”†”asbuh1hhj»Úh²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäÚh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»Úh²hh³jãÚh´M¨ubj{)�”}”(hŒrelay_file_read_end_pos”h]”j�)�”}”(hjàÚh]”hŒrelay_file_read_end_pos”…”�”}”(hjöÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòÚubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj»Úh²hh³jãÚh´M¨ubjœ)�”}”(hŒ6(struct rchan_buf *buf, size_t read_pos, size_t count)”h]”(j¢)�”}”(hŒstruct rchan_buf *buf”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj Ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Ûubh)�”}”(hhh]”j�)�”}”(hŒ rchan_buf”h]”hŒ rchan_buf”…”�”}”(hj/Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,Ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j1ÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÞÚŒc.relay_file_read_end_pos”†”asbuh1hhj Ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Ûubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj[Ûh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj Ûubj�)�”}”(hŒbuf”h]”hŒbuf”…”�”}”(hjhÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Ûubj¢)�”}”(hŒsize_t read_pos”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj„Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j†ÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÞÚŒc.relay_file_read_end_pos”†”asbuh1hhj}Ûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}Ûubj�)�”}”(hŒread_pos”h]”hŒread_pos”…”�”}”(hj°Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}Ûubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Ûubj¢)�”}”(hŒ size_t count”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÌÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÎÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÞÚŒc.relay_file_read_end_pos”†”asbuh1hhjÅÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅÛubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjøÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Ûubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj»Úh²hh³jãÚh´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj·Úh²hh³jãÚh´M¨ubah}”(h]”j²Úah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jãÚh´M¨hj´Úh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒreturn the new read position”h]”hŒreturn the new read position”…”�”}”(hj"Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¨hjÜh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj´Úh²hh³jãÚh´M¨ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj:Üjæj:Üjç‰jè‰jé‰uh1jh²hhjm«h³Nh´Nubjë)�”}”(hŒ™**Parameters** ``struct rchan_buf *buf`` relay channel buffer ``size_t read_pos`` file read position ``size_t count`` number of bytes to be read”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjDÜh]”hŒ Parameters”…”�”}”(hjFÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjBÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M¬hj>Üubj )�”}”(hhh]”(j)�”}”(hŒ/``struct rchan_buf *buf`` relay channel buffer ”h]”(j)�”}”(hŒ``struct rchan_buf *buf``”h]”j)�”}”(hjcÜh]”hŒstruct rchan_buf *buf”…”�”}”(hjeÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjaÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´Mªhj]Üubj2)�”}”(hhh]”hÝ)�”}”(hŒrelay channel buffer”h]”hŒrelay channel buffer”…”�”}”(hj|Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jxÜh´MªhjyÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj]Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jxÜh´MªhjZÜubj)�”}”(hŒ'``size_t read_pos`` file read position ”h]”(j)�”}”(hŒ``size_t read_pos``”h]”j)�”}”(hjœÜh]”hŒsize_t read_pos”…”�”}”(hjžÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M©hj–Üubj2)�”}”(hhh]”hÝ)�”}”(hŒfile read position”h]”hŒfile read position”…”�”}”(hjµÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±Üh´M©hj²Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±Üh´M©hjZÜubj)�”}”(hŒ+``size_t count`` number of bytes to be read”h]”(j)�”}”(hŒ``size_t count``”h]”j)�”}”(hjÕÜh]”hŒ size_t count”…”�”}”(hj×Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M«hjÏÜubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes to be read”h]”hŒnumber of bytes to be read”…”�”}”(hjîÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:221: ./kernel/relay.c”h´M«hjëÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêÜh´M«hjZÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj>Üubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjm«h²hh³Nh´Nubeh}”(h]”Œrelay-interface”ah ]”h"]”Œrelay interface”ah$]”h&]”uh1hµhjN«h²hh³hÊh´KØubeh}”(h]”Œrelay-interface-support”ah ]”h"]”Œrelay interface support”ah$]”h&]”uh1hµhh·h²hh³hÊh´KÑubh¶)�”}”(hhh]”(h»)�”}”(hŒModule Support”h]”hŒModule Support”…”�”}”(hj)Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj&Ýh²hh³hÊh´Káubh¶)�”}”(hhh]”(h»)�”}”(hŒKernel module auto-loading”h]”hŒKernel module auto-loading”…”�”}”(hj:Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj7Ýh²hh³hÊh´Käubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__request_module (C function)”Œc.__request_module”hNt”auh1hýhj7Ýh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6int __request_module (bool wait, const char *fmt, ...)”h]”j)�”}”(hŒ5int __request_module(bool wait, const char *fmt, ...)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjaÝh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj]Ýh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:230: ./kernel/module/kmod.c”h´Kuubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]Ýh²hh³joÝh´Kuubj{)�”}”(hŒ__request_module”h]”j�)�”}”(hŒ__request_module”h]”hŒ__request_module”…”�”}”(hj‚Ýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~Ýubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj]Ýh²hh³joÝh´Kuubjœ)�”}”(hŒ!(bool wait, const char *fmt, ...)”h]”(j¢)�”}”(hŒ bool wait”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjžÝh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjšÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«Ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšÝubj�)�”}”(hŒwait”h]”hŒwait”…”�”}”(hj¹Ýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–Ýubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÒÝh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÎÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎÝubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjíÝh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÎÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎÝubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Þh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÎÝubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–Ýubj¢)�”}”(hŒ...”h]”jã)�”}”(hjÚh]”hŒ...”…”�”}”(hj/Þh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj+Þubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–Ýubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj]Ýh²hh³joÝh´Kuubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjYÝh²hh³joÝh´Kuubah}”(h]”jTÝah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³joÝh´KuhjVÝh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒtry to load a kernel module”h]”hŒtry to load a kernel module”…”�”}”(hjXÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:230: ./kernel/module/kmod.c”h´KuhjUÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjVÝh²hh³joÝh´Kuubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjpÞjæjpÞjç‰jè‰jé‰uh1jh²hhj7Ýh³Nh´Nubjë)�”}”(hX¥**Parameters** ``bool wait`` wait (or not) for the operation to complete ``const char *fmt`` printf style format string for the name of the module ``...`` arguments as specified in the format string **Description** Load a module using the user mode module loader. The function returns zero on success or a negative errno code or positive exit code from "modprobe" on failure. Note that a successful module load does not mean the module did not then unload and exit on an error of its own. Callers must check that the service they requested is now available not blindly invoke it. If module auto-loading support is disabled then this function simply returns -ENOENT.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjzÞh]”hŒ Parameters”…”�”}”(hj|Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjxÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:230: ./kernel/module/kmod.c”h´KyhjtÞubj )�”}”(hhh]”(j)�”}”(hŒ:``bool wait`` wait (or not) for the operation to complete ”h]”(j)�”}”(hŒ ``bool wait``”h]”j)�”}”(hj™Þh]”hŒ bool wait”…”�”}”(hj›Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—Þubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:230: ./kernel/module/kmod.c”h´Kvhj“Þubj2)�”}”(hhh]”hÝ)�”}”(hŒ+wait (or not) for the operation to complete”h]”hŒ+wait (or not) for the operation to complete”…”�”}”(hj²Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j®Þh´Kvhj¯Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj“Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j®Þh´Kvhj�Þubj)�”}”(hŒJ``const char *fmt`` printf style format string for the name of the module ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hjÒÞh]”hŒconst char *fmt”…”�”}”(hjÔÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÐÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:230: ./kernel/module/kmod.c”h´KwhjÌÞubj2)�”}”(hhh]”hÝ)�”}”(hŒ5printf style format string for the name of the module”h]”hŒ5printf style format string for the name of the module”…”�”}”(hjëÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jçÞh´KwhjèÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÌÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jçÞh´Kwhj�Þubj)�”}”(hŒ4``...`` arguments as specified in the format string ”h]”(j)�”}”(hŒ``...``”h]”j)�”}”(hj ßh]”hŒ...”…”�”}”(hj ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:230: ./kernel/module/kmod.c”h´Kxhjßubj2)�”}”(hhh]”hÝ)�”}”(hŒ+arguments as specified in the format string”h]”hŒ+arguments as specified in the format string”…”�”}”(hj$ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ßh´Kxhj!ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ßh´Kxhj�Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjtÞubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjFßh]”hŒ Description”…”�”}”(hjHßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjDßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:230: ./kernel/module/kmod.c”h´KzhjtÞubhÝ)�”}”(hXlLoad a module using the user mode module loader. The function returns zero on success or a negative errno code or positive exit code from "modprobe" on failure. Note that a successful module load does not mean the module did not then unload and exit on an error of its own. Callers must check that the service they requested is now available not blindly invoke it.”h]”hXpLoad a module using the user mode module loader. The function returns zero on success or a negative errno code or positive exit code from “modprobeâ€� on failure. Note that a successful module load does not mean the module did not then unload and exit on an error of its own. Callers must check that the service they requested is now available not blindly invoke it.”…”�”}”(hj\ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:230: ./kernel/module/kmod.c”h´KyhjtÞubhÝ)�”}”(hŒUIf module auto-loading support is disabled then this function simply returns -ENOENT.”h]”hŒUIf module auto-loading support is disabled then this function simply returns -ENOENT.”…”�”}”(hjkßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:230: ./kernel/module/kmod.c”h´K€hjtÞubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj7Ýh²hh³Nh´Nubeh}”(h]”Œkernel-module-auto-loading”ah ]”h"]”Œkernel module auto-loading”ah$]”h&]”uh1hµhj&Ýh²hh³hÊh´Käubh¶)�”}”(hhh]”(h»)�”}”(hŒModule debugging”h]”hŒModule debugging”…”�”}”(hjŒßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj‰ßh²hh³hÊh´KêubhÝ)�”}”(hŒàEnabling CONFIG_MODULE_STATS enables module debugging statistics which are useful to monitor and root cause memory pressure issues with module loading. These statistics are useful to allow us to improve production workloads.”h]”hŒàEnabling CONFIG_MODULE_STATS enables module debugging statistics which are useful to monitor and root cause memory pressure issues with module loading. These statistics are useful to allow us to improve production workloads.”…”�”}”(hjšßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:236: ./kernel/module/stats.c”h´Khj‰ßh²hubhÝ)�”}”(hX9The current module debugging statistics supported help keep track of module loading failures to enable improvements either for kernel module auto-loading usage (request_module()) or interactions with userspace. Statistics are provided to track all possible failures in the finit_module() path and memory wasted in this process space. Each of the failure counters are associated to a type of module loading failure which is known to incur a certain amount of memory allocation loss. In the worst case loading a module will fail after a 3 step memory allocation process:”h]”hX9The current module debugging statistics supported help keep track of module loading failures to enable improvements either for kernel module auto-loading usage (request_module()) or interactions with userspace. Statistics are provided to track all possible failures in the finit_module() path and memory wasted in this process space. Each of the failure counters are associated to a type of module loading failure which is known to incur a certain amount of memory allocation loss. In the worst case loading a module will fail after a 3 step memory allocation process:”…”�”}”(hj©ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:236: ./kernel/module/stats.c”h´Khj‰ßh²hubj•)�”}”(hXöa) memory allocated with kernel_read_file_from_fd() b) module decompression processes the file read from kernel_read_file_from_fd(), and vmap() is used to map the decompressed module to a new local buffer which represents a copy of the decompressed module passed from userspace. The buffer from kernel_read_file_from_fd() is freed right away. c) layout_and_allocate() allocates space for the final resting place where we would keep the module if it were to be processed successfully. ”h]”jM)�”}”(hhh]”(j )�”}”(hŒ0memory allocated with kernel_read_file_from_fd()”h]”hÝ)�”}”(hjÁßh]”hŒ0memory allocated with kernel_read_file_from_fd()”…”�”}”(hjÃßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:236: ./kernel/module/stats.c”h´K#hj¿ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¼ßubj )�”}”(hXmodule decompression processes the file read from kernel_read_file_from_fd(), and vmap() is used to map the decompressed module to a new local buffer which represents a copy of the decompressed module passed from userspace. The buffer from kernel_read_file_from_fd() is freed right away.”h]”hÝ)�”}”(hXmodule decompression processes the file read from kernel_read_file_from_fd(), and vmap() is used to map the decompressed module to a new local buffer which represents a copy of the decompressed module passed from userspace. The buffer from kernel_read_file_from_fd() is freed right away.”h]”hXmodule decompression processes the file read from kernel_read_file_from_fd(), and vmap() is used to map the decompressed module to a new local buffer which represents a copy of the decompressed module passed from userspace. The buffer from kernel_read_file_from_fd() is freed right away.”…”�”}”(hjÛßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:236: ./kernel/module/stats.c”h´K$hj×ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¼ßubj )�”}”(hŒŠlayout_and_allocate() allocates space for the final resting place where we would keep the module if it were to be processed successfully. ”h]”hÝ)�”}”(hŒ‰layout_and_allocate() allocates space for the final resting place where we would keep the module if it were to be processed successfully.”h]”hŒ‰layout_and_allocate() allocates space for the final resting place where we would keep the module if it were to be processed successfully.”…”�”}”(hjôßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:236: ./kernel/module/stats.c”h´K)hjðßubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¼ßubeh}”(h]”h ]”h"]”h$]”h&]”j×MŒ loweralpha”jÙMhjÚMj“?uh1jMhj¸ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÐßh´K#hj‰ßh²hubhÝ)�”}”(hXRIf a failure occurs after these three different allocations only one counter will be incremented with the summation of the allocated bytes freed incurred during this failure. Likewise, if module loading failed only after step b) a separate counter is used and incremented for the bytes freed and not used during both of those allocations.”h]”hXRIf a failure occurs after these three different allocations only one counter will be incremented with the summation of the allocated bytes freed incurred during this failure. Likewise, if module loading failed only after step b) a separate counter is used and incremented for the bytes freed and not used during both of those allocations.”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:236: ./kernel/module/stats.c”h´K-hj‰ßh²hubhÝ)�”}”(hX3Virtual memory space can be limited, for example on x86 virtual memory size defaults to 128 MiB. We should strive to limit and avoid wasting virtual memory allocations when possible. These module debugging statistics help to evaluate how much memory is being wasted on bootup due to module loading failures.”h]”hX3Virtual memory space can be limited, for example on x86 virtual memory size defaults to 128 MiB. We should strive to limit and avoid wasting virtual memory allocations when possible. These module debugging statistics help to evaluate how much memory is being wasted on bootup due to module loading failures.”…”�”}”(hj%àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:236: ./kernel/module/stats.c”h´K3hj‰ßh²hubhÝ)�”}”(hŒyAll counters are designed to be incremental. Atomic counters are used so to remain simple and avoid delays and deadlocks.”h]”hŒyAll counters are designed to be incremental. Atomic counters are used so to remain simple and avoid delays and deadlocks.”…”�”}”(hj4àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:236: ./kernel/module/stats.c”h´K9hj‰ßh²hubh¶)�”}”(hhh]”(h»)�”}”(hŒ4dup_failed_modules - tracks duplicate failed modules”h]”hŒ4dup_failed_modules - tracks duplicate failed modules”…”�”}”(hjFàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjCàh²hh³hÊh´KðubhÝ)�”}”(hX;Linked list of modules which failed to be loaded because an already existing module with the same name was already being processed or already loaded. The finit_module() system call incurs heavy virtual memory allocations. In the worst case an finit_module() system call can end up allocating virtual memory 3 times:”h]”hX;Linked list of modules which failed to be loaded because an already existing module with the same name was already being processed or already loaded. The finit_module() system call incurs heavy virtual memory allocations. In the worst case an finit_module() system call can end up allocating virtual memory 3 times:”…”�”}”(hjTàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:242: ./kernel/module/stats.c”h´K@hjCàh²hubj•)�”}”(hŒî1) kernel_read_file_from_fd() call uses vmalloc() 2) optional module decompression uses vmap() 3) layout_and allocate() can use vzalloc() or an arch specific variation of vmalloc to deal with ELF sections requiring special permissions ”h]”jM)�”}”(hhh]”(j )�”}”(hŒ.kernel_read_file_from_fd() call uses vmalloc()”h]”hÝ)�”}”(hjlàh]”hŒ.kernel_read_file_from_fd() call uses vmalloc()”…”�”}”(hjnàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:242: ./kernel/module/stats.c”h´KFhjjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjgàubj )�”}”(hŒ)optional module decompression uses vmap()”h]”hÝ)�”}”(hj„àh]”hŒ)optional module decompression uses vmap()”…”�”}”(hj†àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:242: ./kernel/module/stats.c”h´KGhj‚àubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjgàubj )�”}”(hŒ‰layout_and allocate() can use vzalloc() or an arch specific variation of vmalloc to deal with ELF sections requiring special permissions ”h]”hÝ)�”}”(hŒˆlayout_and allocate() can use vzalloc() or an arch specific variation of vmalloc to deal with ELF sections requiring special permissions”h]”hŒˆlayout_and allocate() can use vzalloc() or an arch specific variation of vmalloc to deal with ELF sections requiring special permissions”…”�”}”(hjžàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:242: ./kernel/module/stats.c”h´KHhjšàubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjgàubeh}”(h]”h ]”h"]”h$]”h&]”j×MjØMjÙMhjÚMj“?uh1jMhjcàubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j{àh´KFhjCàh²hubhÝ)�”}”(hŒñIn practice on a typical boot today most finit_module() calls fail due to the module with the same name already being loaded or about to be processed. All virtual memory allocated to these failed modules will be freed with no functional use.”h]”hŒñIn practice on a typical boot today most finit_module() calls fail due to the module with the same name already being loaded or about to be processed. All virtual memory allocated to these failed modules will be freed with no functional use.”…”�”}”(hj¿àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:242: ./kernel/module/stats.c”h´KKhjCàh²hubhÝ)�”}”(hX&To help with this the dup_failed_modules allows us to track modules which failed to load due to the fact that a module was already loaded or being processed. There are only two points at which we can fail such calls, we list them below along with the number of virtual memory allocation calls:”h]”hX&To help with this the dup_failed_modules allows us to track modules which failed to load due to the fact that a module was already loaded or being processed. There are only two points at which we can fail such calls, we list them below along with the number of virtual memory allocation calls:”…”�”}”(hjÎàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:242: ./kernel/module/stats.c”h´KPhjCàh²hubj•)�”}”(hX²a) FAIL_DUP_MOD_BECOMING: at the end of early_mod_check() before layout_and_allocate(). - with module decompression: 2 virtual memory allocation calls - without module decompression: 1 virtual memory allocation calls b) FAIL_DUP_MOD_LOAD: after layout_and_allocate() on add_unformed_module() - with module decompression 3 virtual memory allocation calls - without module decompression 2 virtual memory allocation calls ”h]”jM)�”}”(hhh]”(j )�”}”(hŒÕFAIL_DUP_MOD_BECOMING: at the end of early_mod_check() before layout_and_allocate(). - with module decompression: 2 virtual memory allocation calls - without module decompression: 1 virtual memory allocation calls”h]”hÝ)�”}”(hŒÕFAIL_DUP_MOD_BECOMING: at the end of early_mod_check() before layout_and_allocate(). - with module decompression: 2 virtual memory allocation calls - without module decompression: 1 virtual memory allocation calls”h]”hŒÕFAIL_DUP_MOD_BECOMING: at the end of early_mod_check() before layout_and_allocate(). - with module decompression: 2 virtual memory allocation calls - without module decompression: 1 virtual memory allocation calls”…”�”}”(hjèàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:242: ./kernel/module/stats.c”h´KVhjäàubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjáàubj )�”}”(hŒÇFAIL_DUP_MOD_LOAD: after layout_and_allocate() on add_unformed_module() - with module decompression 3 virtual memory allocation calls - without module decompression 2 virtual memory allocation calls ”h]”hÝ)�”}”(hŒÆFAIL_DUP_MOD_LOAD: after layout_and_allocate() on add_unformed_module() - with module decompression 3 virtual memory allocation calls - without module decompression 2 virtual memory allocation calls”h]”hŒÆFAIL_DUP_MOD_LOAD: after layout_and_allocate() on add_unformed_module() - with module decompression 3 virtual memory allocation calls - without module decompression 2 virtual memory allocation calls”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:242: ./kernel/module/stats.c”h´KZhjýàubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjáàubeh}”(h]”h ]”h"]”h$]”h&]”j×MjàjÙMhjÚMj“?uh1jMhjÝàubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jöàh´KVhjCàh²hubhÝ)�”}”(hŒ·We should strive to get this list to be as small as possible. If this list is not empty it is a reflection of possible work or optimizations possible either in-kernel or in userspace.”h]”hŒ·We should strive to get this list to be as small as possible. If this list is not empty it is a reflection of possible work or optimizations possible either in-kernel or in userspace.”…”�”}”(hj"áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:242: ./kernel/module/stats.c”h´K^hjCàh²hubeh}”(h]”Œ2dup-failed-modules-tracks-duplicate-failed-modules”ah ]”h"]”Œ4dup_failed_modules - tracks duplicate failed modules”ah$]”h&]”uh1hµhj‰ßh²hh³hÊh´Kðubh¶)�”}”(hhh]”(h»)�”}”(hŒ"module statistics debugfs counters”h]”hŒ"module statistics debugfs counters”…”�”}”(hj<áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj9áh²hh³hÊh´KöubhÝ)�”}”(hŒˆThe total amount of wasted virtual memory allocation space during module loading can be computed by adding the total from the summation:”h]”hŒˆThe total amount of wasted virtual memory allocation space during module loading can be computed by adding the total from the summation:”…”�”}”(hjJáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´Kghj9áh²hubj•)�”}”(hŒt* **invalid_kread_bytes** + **invalid_decompress_bytes** + **invalid_becoming_bytes** + **invalid_mod_bytes** ”h]”j›)�”}”(hhh]”j )�”}”(hŒl**invalid_kread_bytes** + **invalid_decompress_bytes** + **invalid_becoming_bytes** + **invalid_mod_bytes** ”h]”hÝ)�”}”(hŒk**invalid_kread_bytes** + **invalid_decompress_bytes** + **invalid_becoming_bytes** + **invalid_mod_bytes**”h]”(jõ)�”}”(hŒ**invalid_kread_bytes**”h]”hŒinvalid_kread_bytes”…”�”}”(hjháh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjdáubhŒ + ”…”�”}”(hjdáh²hh³Nh´Nubjõ)�”}”(hŒ**invalid_decompress_bytes**”h]”hŒinvalid_decompress_bytes”…”�”}”(hjzáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjdáubhŒ + ”…”�”}”hjdásbjõ)�”}”(hŒ**invalid_becoming_bytes**”h]”hŒinvalid_becoming_bytes”…”�”}”(hjŒáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjdáubhŒ + ”…”�”}”hjdásbjõ)�”}”(hŒ**invalid_mod_bytes**”h]”hŒinvalid_mod_bytes”…”�”}”(hjžáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjdáubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´Kjhj`áubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj]áubah}”(h]”h ]”h"]”h$]”h&]”jôjæuh1jšh³j²áh´KjhjYáubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j²áh´Kjhj9áh²hubhÝ)�”}”(hŒPThe following debugfs counters are available to inspect module loading failures:”h]”hŒPThe following debugfs counters are available to inspect module loading failures:”…”�”}”(hjÅáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´Kohj9áh²hubj•)�”}”(hXà * total_mod_size: total bytes ever used by all modules we've dealt with on this system * total_text_size: total bytes of the .text and .init.text ELF section sizes we've dealt with on this system * invalid_kread_bytes: bytes allocated and then freed on failures which happen due to the initial kernel_read_file_from_fd(). kernel_read_file_from_fd() uses vmalloc(). These should typically not happen unless your system is under memory pressure. * invalid_decompress_bytes: number of bytes allocated and freed due to memory allocations in the module decompression path that use vmap(). These typically should not happen unless your system is under memory pressure. * invalid_becoming_bytes: total number of bytes allocated and freed used to read the kernel module userspace wants us to read before we promote it to be processed to be added to our **modules** linked list. These failures can happen if we had a check in between a successful kernel_read_file_from_fd() call and right before we allocate the our private memory for the module which would be kept if the module is successfully loaded. The most common reason for this failure is when userspace is racing to load a module which it does not yet see loaded. The first module to succeed in add_unformed_module() will add a module to our :c:type:`modules` list and subsequent loads of modules with the same name will error out at the end of early_mod_check(). The check for module_patient_check_exists() at the end of early_mod_check() prevents duplicate allocations on layout_and_allocate() for modules already being processed. These duplicate failed modules are non-fatal, however they typically are indicative of userspace not seeing a module in userspace loaded yet and unnecessarily trying to load a module before the kernel even has a chance to begin to process prior requests. Although duplicate failures can be non-fatal, we should try to reduce vmalloc() pressure proactively, so ideally after boot this will be close to as 0 as possible. If module decompression was used we also add to this counter the cost of the initial kernel_read_file_from_fd() of the compressed module. If module decompression was not used the value represents the total allocated and freed bytes in kernel_read_file_from_fd() calls for these type of failures. These failures can occur because: * module_sig_check() - module signature checks * elf_validity_cache_copy() - some ELF validation issue * early_mod_check(): * blacklisting * failed to rewrite section headers * version magic * live patch requirements didn't check out * the module was detected as being already present * invalid_mod_bytes: these are the total number of bytes allocated and freed due to failures after we did all the sanity checks of the module which userspace passed to us and after our first check that the module is unique. A module can still fail to load if we detect the module is loaded after we allocate space for it with layout_and_allocate(), we do this check right before processing the module as live and run its initialization routines. Note that you have a failure of this type it also means the respective kernel_read_file_from_fd() memory space was also freed and not used, and so we increment this counter with twice the size of the module. Additionally if you used module decompression the size of the compressed module is also added to this counter. * modcount: how many modules we've loaded in our kernel life time * failed_kreads: how many modules failed due to failed kernel_read_file_from_fd() * failed_decompress: how many failed module decompression attempts we've had. These really should not happen unless your compression / decompression might be broken. * failed_becoming: how many modules failed after we kernel_read_file_from_fd() it and before we allocate memory for it with layout_and_allocate(). This counter is never incremented if you manage to validate the module and call layout_and_allocate() for it. * failed_load_modules: how many modules failed once we've allocated our private space for our module using layout_and_allocate(). These failures should hopefully mostly be dealt with already. Races in theory could still exist here, but it would just mean the kernel had started processing two threads concurrently up to early_mod_check() and one thread won. These failures are good signs the kernel or userspace is doing something seriously stupid or that could be improved. We should strive to fix these, but it is perhaps not easy to fix them. A recent example are the modules requests incurred for frequency modules, a separate module request was being issued for each CPU on a system. ”h]”(j•)�”}”(hXŸ * total_mod_size: total bytes ever used by all modules we've dealt with on this system * total_text_size: total bytes of the .text and .init.text ELF section sizes we've dealt with on this system * invalid_kread_bytes: bytes allocated and then freed on failures which happen due to the initial kernel_read_file_from_fd(). kernel_read_file_from_fd() uses vmalloc(). These should typically not happen unless your system is under memory pressure. * invalid_decompress_bytes: number of bytes allocated and freed due to memory allocations in the module decompression path that use vmap(). These typically should not happen unless your system is under memory pressure. * invalid_becoming_bytes: total number of bytes allocated and freed used to read the kernel module userspace wants us to read before we promote it to be processed to be added to our **modules** linked list. These failures can happen if we had a check in between a successful kernel_read_file_from_fd() call and right before we allocate the our private memory for the module which would be kept if the module is successfully loaded. The most common reason for this failure is when userspace is racing to load a module which it does not yet see loaded. The first module to succeed in add_unformed_module() will add a module to our :c:type:`modules` list and subsequent loads of modules with the same name will error out at the end of early_mod_check(). The check for module_patient_check_exists() at the end of early_mod_check() prevents duplicate allocations on layout_and_allocate() for modules already being processed. These duplicate failed modules are non-fatal, however they typically are indicative of userspace not seeing a module in userspace loaded yet and unnecessarily trying to load a module before the kernel even has a chance to begin to process prior requests. Although duplicate failures can be non-fatal, we should try to reduce vmalloc() pressure proactively, so ideally after boot this will be close to as 0 as possible. If module decompression was used we also add to this counter the cost of the initial kernel_read_file_from_fd() of the compressed module. If module decompression was not used the value represents the total allocated and freed bytes in kernel_read_file_from_fd() calls for these type of failures. These failures can occur because: * module_sig_check() - module signature checks * elf_validity_cache_copy() - some ELF validation issue * early_mod_check(): * blacklisting * failed to rewrite section headers * version magic * live patch requirements didn't check out * the module was detected as being already present * invalid_mod_bytes: these are the total number of bytes allocated and freed due to failures after we did all the sanity checks of the module which userspace passed to us and after our first check that the module is unique. A module can still fail to load if we detect the module is loaded after we allocate space for it with layout_and_allocate(), we do this check right before processing the module as live and run its initialization routines. Note that you have a failure of this type it also means the respective kernel_read_file_from_fd() memory space was also freed and not used, and so we increment this counter with twice the size of the module. Additionally if you used module decompression the size of the compressed module is also added to this counter. ”h]”(j›)�”}”(hhh]”(j )�”}”(hŒTtotal_mod_size: total bytes ever used by all modules we've dealt with on this system”h]”hÝ)�”}”(hŒTtotal_mod_size: total bytes ever used by all modules we've dealt with on this system”h]”hŒVtotal_mod_size: total bytes ever used by all modules we’ve dealt with on this system”…”�”}”(hjãáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´Krhjßáubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÜáubj )�”}”(hŒjtotal_text_size: total bytes of the .text and .init.text ELF section sizes we've dealt with on this system”h]”hÝ)�”}”(hŒjtotal_text_size: total bytes of the .text and .init.text ELF section sizes we've dealt with on this system”h]”hŒltotal_text_size: total bytes of the .text and .init.text ELF section sizes we’ve dealt with on this system”…”�”}”(hjüáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´Kthjøáubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÜáubj )�”}”(hŒõinvalid_kread_bytes: bytes allocated and then freed on failures which happen due to the initial kernel_read_file_from_fd(). kernel_read_file_from_fd() uses vmalloc(). These should typically not happen unless your system is under memory pressure.”h]”hÝ)�”}”(hŒõinvalid_kread_bytes: bytes allocated and then freed on failures which happen due to the initial kernel_read_file_from_fd(). kernel_read_file_from_fd() uses vmalloc(). These should typically not happen unless your system is under memory pressure.”h]”hŒõinvalid_kread_bytes: bytes allocated and then freed on failures which happen due to the initial kernel_read_file_from_fd(). kernel_read_file_from_fd() uses vmalloc(). These should typically not happen unless your system is under memory pressure.”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´Kvhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÜáubj )�”}”(hŒØinvalid_decompress_bytes: number of bytes allocated and freed due to memory allocations in the module decompression path that use vmap(). These typically should not happen unless your system is under memory pressure.”h]”hÝ)�”}”(hŒØinvalid_decompress_bytes: number of bytes allocated and freed due to memory allocations in the module decompression path that use vmap(). These typically should not happen unless your system is under memory pressure.”h]”hŒØinvalid_decompress_bytes: number of bytes allocated and freed due to memory allocations in the module decompression path that use vmap(). These typically should not happen unless your system is under memory pressure.”…”�”}”(hj.âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´Kzhj*âubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÜáubj )�”}”(hX„invalid_becoming_bytes: total number of bytes allocated and freed used to read the kernel module userspace wants us to read before we promote it to be processed to be added to our **modules** linked list. These failures can happen if we had a check in between a successful kernel_read_file_from_fd() call and right before we allocate the our private memory for the module which would be kept if the module is successfully loaded. The most common reason for this failure is when userspace is racing to load a module which it does not yet see loaded. The first module to succeed in add_unformed_module() will add a module to our :c:type:`modules` list and subsequent loads of modules with the same name will error out at the end of early_mod_check(). The check for module_patient_check_exists() at the end of early_mod_check() prevents duplicate allocations on layout_and_allocate() for modules already being processed. These duplicate failed modules are non-fatal, however they typically are indicative of userspace not seeing a module in userspace loaded yet and unnecessarily trying to load a module before the kernel even has a chance to begin to process prior requests. Although duplicate failures can be non-fatal, we should try to reduce vmalloc() pressure proactively, so ideally after boot this will be close to as 0 as possible. If module decompression was used we also add to this counter the cost of the initial kernel_read_file_from_fd() of the compressed module. If module decompression was not used the value represents the total allocated and freed bytes in kernel_read_file_from_fd() calls for these type of failures. These failures can occur because: ”h]”hÝ)�”}”(hXƒinvalid_becoming_bytes: total number of bytes allocated and freed used to read the kernel module userspace wants us to read before we promote it to be processed to be added to our **modules** linked list. These failures can happen if we had a check in between a successful kernel_read_file_from_fd() call and right before we allocate the our private memory for the module which would be kept if the module is successfully loaded. The most common reason for this failure is when userspace is racing to load a module which it does not yet see loaded. The first module to succeed in add_unformed_module() will add a module to our :c:type:`modules` list and subsequent loads of modules with the same name will error out at the end of early_mod_check(). The check for module_patient_check_exists() at the end of early_mod_check() prevents duplicate allocations on layout_and_allocate() for modules already being processed. These duplicate failed modules are non-fatal, however they typically are indicative of userspace not seeing a module in userspace loaded yet and unnecessarily trying to load a module before the kernel even has a chance to begin to process prior requests. Although duplicate failures can be non-fatal, we should try to reduce vmalloc() pressure proactively, so ideally after boot this will be close to as 0 as possible. If module decompression was used we also add to this counter the cost of the initial kernel_read_file_from_fd() of the compressed module. If module decompression was not used the value represents the total allocated and freed bytes in kernel_read_file_from_fd() calls for these type of failures. These failures can occur because:”h]”(hŒ´invalid_becoming_bytes: total number of bytes allocated and freed used to read the kernel module userspace wants us to read before we promote it to be processed to be added to our ”…”�”}”(hjGâh²hh³Nh´Nubjõ)�”}”(hŒ **modules**”h]”hŒmodules”…”�”}”(hjOâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGâubhX´ linked list. These failures can happen if we had a check in between a successful kernel_read_file_from_fd() call and right before we allocate the our private memory for the module which would be kept if the module is successfully loaded. The most common reason for this failure is when userspace is racing to load a module which it does not yet see loaded. The first module to succeed in add_unformed_module() will add a module to our ”…”�”}”(hjGâh²hh³Nh´Nubh)�”}”(hŒ:c:type:`modules`”h]”j)�”}”(hjcâh]”hŒmodules”…”�”}”(hjeâh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjaâubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰j] j¶�j¹�Œmodules”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K~hjGâubhXÿ list and subsequent loads of modules with the same name will error out at the end of early_mod_check(). The check for module_patient_check_exists() at the end of early_mod_check() prevents duplicate allocations on layout_and_allocate() for modules already being processed. These duplicate failed modules are non-fatal, however they typically are indicative of userspace not seeing a module in userspace loaded yet and unnecessarily trying to load a module before the kernel even has a chance to begin to process prior requests. Although duplicate failures can be non-fatal, we should try to reduce vmalloc() pressure proactively, so ideally after boot this will be close to as 0 as possible. If module decompression was used we also add to this counter the cost of the initial kernel_read_file_from_fd() of the compressed module. If module decompression was not used the value represents the total allocated and freed bytes in kernel_read_file_from_fd() calls for these type of failures. These failures can occur because:”…”�”}”(hjGâh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j€âh´K~hjCâubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÜáubeh}”(h]”h ]”h"]”h$]”h&]”jôjæuh1jšh³jñáh´KrhjØáubj•)�”}”(hX(* module_sig_check() - module signature checks * elf_validity_cache_copy() - some ELF validation issue * early_mod_check(): * blacklisting * failed to rewrite section headers * version magic * live patch requirements didn't check out * the module was detected as being already present ”h]”j›)�”}”(hhh]”(j )�”}”(hŒ,module_sig_check() - module signature checks”h]”hÝ)�”}”(hj âh]”hŒ,module_sig_check() - module signature checks”…”�”}”(hj¢âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K—hjžâubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj›âubj )�”}”(hŒ5elf_validity_cache_copy() - some ELF validation issue”h]”hÝ)�”}”(hj¸âh]”hŒ5elf_validity_cache_copy() - some ELF validation issue”…”�”}”(hjºâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K˜hj¶âubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj›âubj )�”}”(hŒµearly_mod_check(): * blacklisting * failed to rewrite section headers * version magic * live patch requirements didn't check out * the module was detected as being already present ”h]”(hÝ)�”}”(hŒearly_mod_check():”h]”hŒearly_mod_check():”…”�”}”(hjÒâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K™hjÎâubj›)�”}”(hhh]”(j )�”}”(hŒ blacklisting”h]”hÝ)�”}”(hjæâh]”hŒ blacklisting”…”�”}”(hjèâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K›hjäâubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjáâubj )�”}”(hŒ!failed to rewrite section headers”h]”hÝ)�”}”(hjþâh]”hŒ!failed to rewrite section headers”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´Kœhjüâubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjáâubj )�”}”(hŒ version magic”h]”hÝ)�”}”(hjãh]”hŒ version magic”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K�hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjáâubj )�”}”(hŒ(live patch requirements didn't check out”h]”hÝ)�”}”(hj.ãh]”hŒ*live patch requirements didn’t check out”…”�”}”(hj0ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´Kžhj,ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjáâubj )�”}”(hŒ1the module was detected as being already present ”h]”hÝ)�”}”(hŒ0the module was detected as being already present”h]”hŒ0the module was detected as being already present”…”�”}”(hjHãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´KŸhjDãubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjáâubeh}”(h]”h ]”h"]”h$]”h&]”jôjæuh1jšh³jõâh´K›hjÎâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj›âubeh}”(h]”h ]”h"]”h$]”h&]”jôjæuh1jšh³j¯âh´K—hj—âubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¯âh´K—hjØáubj›)�”}”(hhh]”j )�”}”(hXüinvalid_mod_bytes: these are the total number of bytes allocated and freed due to failures after we did all the sanity checks of the module which userspace passed to us and after our first check that the module is unique. A module can still fail to load if we detect the module is loaded after we allocate space for it with layout_and_allocate(), we do this check right before processing the module as live and run its initialization routines. Note that you have a failure of this type it also means the respective kernel_read_file_from_fd() memory space was also freed and not used, and so we increment this counter with twice the size of the module. Additionally if you used module decompression the size of the compressed module is also added to this counter. ”h]”hÝ)�”}”(hXûinvalid_mod_bytes: these are the total number of bytes allocated and freed due to failures after we did all the sanity checks of the module which userspace passed to us and after our first check that the module is unique. A module can still fail to load if we detect the module is loaded after we allocate space for it with layout_and_allocate(), we do this check right before processing the module as live and run its initialization routines. Note that you have a failure of this type it also means the respective kernel_read_file_from_fd() memory space was also freed and not used, and so we increment this counter with twice the size of the module. Additionally if you used module decompression the size of the compressed module is also added to this counter.”h]”hXûinvalid_mod_bytes: these are the total number of bytes allocated and freed due to failures after we did all the sanity checks of the module which userspace passed to us and after our first check that the module is unique. A module can still fail to load if we detect the module is loaded after we allocate space for it with layout_and_allocate(), we do this check right before processing the module as live and run its initialization routines. Note that you have a failure of this type it also means the respective kernel_read_file_from_fd() memory space was also freed and not used, and so we increment this counter with twice the size of the module. Additionally if you used module decompression the size of the compressed module is also added to this counter.”…”�”}”(hj|ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K¡hjxãubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjuãubah}”(h]”h ]”h"]”h$]”h&]”jôjæuh1jšh³jŠãh´K¡hjØáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jñáh´KrhjÔáubj›)�”}”(hhh]”(j )�”}”(hŒ?modcount: how many modules we've loaded in our kernel life time”h]”hÝ)�”}”(hj¢ãh]”hŒAmodcount: how many modules we’ve loaded in our kernel life time”…”�”}”(hj¤ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K­hj ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj�ãubj )�”}”(hŒOfailed_kreads: how many modules failed due to failed kernel_read_file_from_fd()”h]”hÝ)�”}”(hjºãh]”hŒOfailed_kreads: how many modules failed due to failed kernel_read_file_from_fd()”…”�”}”(hj¼ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K®hj¸ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj�ãubj )�”}”(hŒ£failed_decompress: how many failed module decompression attempts we've had. These really should not happen unless your compression / decompression might be broken.”h]”hÝ)�”}”(hŒ£failed_decompress: how many failed module decompression attempts we've had. These really should not happen unless your compression / decompression might be broken.”h]”hŒ¥failed_decompress: how many failed module decompression attempts we’ve had. These really should not happen unless your compression / decompression might be broken.”…”�”}”(hjÔãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K¯hjÐãubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj�ãubj )�”}”(hŒþfailed_becoming: how many modules failed after we kernel_read_file_from_fd() it and before we allocate memory for it with layout_and_allocate(). This counter is never incremented if you manage to validate the module and call layout_and_allocate() for it.”h]”hÝ)�”}”(hŒþfailed_becoming: how many modules failed after we kernel_read_file_from_fd() it and before we allocate memory for it with layout_and_allocate(). This counter is never incremented if you manage to validate the module and call layout_and_allocate() for it.”h]”hŒþfailed_becoming: how many modules failed after we kernel_read_file_from_fd() it and before we allocate memory for it with layout_and_allocate(). This counter is never incremented if you manage to validate the module and call layout_and_allocate() for it.”…”�”}”(hjíãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K²hjéãubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj�ãubj )�”}”(hX°failed_load_modules: how many modules failed once we've allocated our private space for our module using layout_and_allocate(). These failures should hopefully mostly be dealt with already. Races in theory could still exist here, but it would just mean the kernel had started processing two threads concurrently up to early_mod_check() and one thread won. These failures are good signs the kernel or userspace is doing something seriously stupid or that could be improved. We should strive to fix these, but it is perhaps not easy to fix them. A recent example are the modules requests incurred for frequency modules, a separate module request was being issued for each CPU on a system. ”•h]”hÝ)�”}”(hX®failed_load_modules: how many modules failed once we've allocated our private space for our module using layout_and_allocate(). These failures should hopefully mostly be dealt with already. Races in theory could still exist here, but it would just mean the kernel had started processing two threads concurrently up to early_mod_check() and one thread won. These failures are good signs the kernel or userspace is doing something seriously stupid or that could be improved. We should strive to fix these, but it is perhaps not easy to fix them. A recent example are the modules requests incurred for frequency modules, a separate module request was being issued for each CPU on a system.”h]”hX°failed_load_modules: how many modules failed once we’ve allocated our private space for our module using layout_and_allocate(). These failures should hopefully mostly be dealt with already. Races in theory could still exist here, but it would just mean the kernel had started processing two threads concurrently up to early_mod_check() and one thread won. These failures are good signs the kernel or userspace is doing something seriously stupid or that could be improved. We should strive to fix these, but it is perhaps not easy to fix them. A recent example are the modules requests incurred for frequency modules, a separate module request was being issued for each CPU on a system.”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:248: ./kernel/module/stats.c”h´K¶hjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj�ãubeh}”(h]”h ]”h"]”h$]”h&]”jôjæuh1jšh³j±ãh´K­hjÔáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jñáh´Krhj9áh²hubeh}”(h]”Œ"module-statistics-debugfs-counters”ah ]”h"]”Œ"module statistics debugfs counters”ah$]”h&]”uh1hµhj‰ßh²hh³hÊh´Köubeh}”(h]”Œmodule-debugging”ah ]”h"]”Œmodule debugging”ah$]”h&]”uh1hµhj&Ýh²hh³hÊh´Kêubh¶)�”}”(hhh]”(h»)�”}”(hŒInter Module support”h]”hŒInter Module support”…”�”}”(hj:äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj7äh²hh³hÊh´KüubhÝ)�”}”(hŒ:Refer to the files in kernel/module/ for more information.”h]”hŒ:Refer to the files in kernel/module/ for more information.”…”�”}”(hjHäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´Kþhj7äh²hubeh}”(h]”Œinter-module-support”ah ]”h"]”Œinter module support”ah$]”h&]”uh1hµhj&Ýh²hh³hÊh´Küubeh}”(h]”Œmodule-support”ah ]”h"]”Œmodule support”ah$]”h&]”uh1hµhh·h²hh³hÊh´Káubh¶)�”}”(hhh]”(h»)�”}”(hŒHardware Interfaces”h]”hŒHardware Interfaces”…”�”}”(hjiäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjfäh²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒ DMA Channels”h]”hŒ DMA Channels”…”�”}”(hjzäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjwäh²hh³hÊh´Mubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrequest_dma (C function)”Œ c.request_dma”hNt”auh1hýhjwäh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hj�äh²hh³j¯äh´KBubj{)�”}”(hŒ request_dma”h]”j�)�”}”(hŒ request_dma”h]”hŒ request_dma”…”�”}”(hjÂäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾äubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�äh²hh³j¯äh´KBubjœ)�”}”(hŒ+(unsigned int dmanr, const char *device_id)”h]”(j¢)�”}”(hŒunsigned int dmanr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÞäh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìäh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚäubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjúäh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚäubj�)�”}”(hŒdmanr”h]”hŒdmanr”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÖäubj¢)�”}”(hŒconst char *device_id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj/åh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj+åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<åh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+åubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjJåh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj+åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+åubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjfåh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj+åubj�)�”}”(hŒ device_id”h]”hŒ device_id”…”�”}”(hjsåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÖäubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�äh²hh³j¯äh´KBubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj™äh²hh³j¯äh´KBubah}”(h]”j”äah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¯äh´KBhj–äh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(request and reserve a system DMA channel”h]”hŒ(request and reserve a system DMA channel”…”�”}”(hj�åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´KBhjšåh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj–äh²hh³j¯äh´KBubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjµåjæjµåjç‰jè‰jé‰uh1jh²hhjwäh³Nh´Nubjë)�”}”(hŒ‡**Parameters** ``unsigned int dmanr`` DMA channel number ``const char * device_id`` reserving device ID string, used in /proc/dma”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¿åh]”hŒ Parameters”…”�”}”(hjÁåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´KFhj¹åubj )�”}”(hhh]”(j)�”}”(hŒ*``unsigned int dmanr`` DMA channel number ”h]”(j)�”}”(hŒ``unsigned int dmanr``”h]”j)�”}”(hjÞåh]”hŒunsigned int dmanr”…”�”}”(hjàåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜåubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´KChjØåubj2)�”}”(hhh]”hÝ)�”}”(hŒDMA channel number”h]”hŒDMA channel number”…”�”}”(hj÷åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jóåh´KChjôåubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jóåh´KChjÕåubj)�”}”(hŒH``const char * device_id`` reserving device ID string, used in /proc/dma”h]”(j)�”}”(hŒ``const char * device_id``”h]”j)�”}”(hjæh]”hŒconst char * device_id”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´KEhjæubj2)�”}”(hhh]”hÝ)�”}”(hŒ-reserving device ID string, used in /proc/dma”h]”hŒ-reserving device ID string, used in /proc/dma”…”�”}”(hj0æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´KDhj-æubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,æh´KEhjÕåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹åubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjwäh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œfree_dma (C function)”Œ c.free_dma”hNt”auh1hýhjwäh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ"void free_dma (unsigned int dmanr)”h]”j)�”}”(hŒ!void free_dma(unsigned int dmanr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjqæh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjmæh²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´KUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmæh²hh³jæh´KUubj{)�”}”(hŒfree_dma”h]”j�)�”}”(hŒfree_dma”h]”hŒfree_dma”…”�”}”(hj’æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽæubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjmæh²hh³jæh´KUubjœ)�”}”(hŒ(unsigned int dmanr)”h]”j¢)�”}”(hŒunsigned int dmanr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj®æh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjªæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªæubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÊæh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjªæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØæh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªæubj�)�”}”(hŒdmanr”h]”hŒdmanr”…”�”}”(hjææh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¦æubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjmæh²hh³jæh´KUubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjiæh²hh³jæh´KUubah}”(h]”jdæah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jæh´KUhjfæh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"free a reserved system DMA channel”h]”hŒ"free a reserved system DMA channel”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´KUhj çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjfæh²hh³jæh´KUubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj(çjæj(çjç‰jè‰jé‰uh1jh²hhjwäh³Nh´Nubjë)�”}”(hŒ;**Parameters** ``unsigned int dmanr`` DMA channel number”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj2çh]”hŒ Parameters”…”�”}”(hj4çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´KYhj,çubj )�”}”(hhh]”j)�”}”(hŒ)``unsigned int dmanr`` DMA channel number”h]”(j)�”}”(hŒ``unsigned int dmanr``”h]”j)�”}”(hjQçh]”hŒunsigned int dmanr”…”�”}”(hjSçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjOçubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´K[hjKçubj2)�”}”(hhh]”hÝ)�”}”(hŒDMA channel number”h]”hŒDMA channel number”…”�”}”(hjjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:262: ./kernel/dma.c”h´KVhjgçubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjKçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jfçh´K[hjHçubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj,çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjwäh²hh³Nh´Nubeh}”(h]”Œ dma-channels”ah ]”h"]”Œ dma channels”ah$]”h&]”uh1hµhjfäh²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒResources Management”h]”hŒResources Management”…”�”}”(hj�çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjšçh²hh³hÊh´M ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&request_resource_conflict (C function)”Œc.request_resource_conflict”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒYstruct resource * request_resource_conflict (struct resource *root, struct resource *new)”h]”j)�”}”(hŒWstruct resource *request_resource_conflict(struct resource *root, struct resource *new)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÄçh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÀçh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒçh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀçh²hh³jÑçh´Mubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjãçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjàçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jåçŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œrequest_resource_conflict”sbŒc.request_resource_conflict”†”asbuh1hhjÀçh²hh³jÑçh´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀçh²hh³jÑçh´Mubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÀçh²hh³jÑçh´Mubj{)�”}”(hŒrequest_resource_conflict”h]”j�)�”}”(hjèh]”hŒrequest_resource_conflict”…”�”}”(hj#èh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÀçh²hh³jÑçh´Mubjœ)�”}”(hŒ-(struct resource *root, struct resource *new)”h]”(j¢)�”}”(hŒstruct resource *root”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj>èh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj:èubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:èubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj\èh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYèubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j^èŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÿçŒc.request_resource_conflict”†”asbuh1hhj:èubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:èubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjˆèh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj:èubj�)�”}”(hŒroot”h]”hŒroot”…”�”}”(hj•èh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:èubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6èubj¢)�”}”(hŒstruct resource *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj®èh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjªèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªèubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjÌèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉèubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÎèŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÿçŒc.request_resource_conflict”†”asbuh1hhjªèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªèubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjøèh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjªèubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªèubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6èubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÀçh²hh³jÑçh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¼çh²hh³jÑçh´Mubah}”(h]”j·çah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÑçh´Mhj¹çh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-request and reserve an I/O or memory resource”h]”hŒ-request and reserve an I/O or memory resource”…”�”}”(hj/éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´Mhj,éh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¹çh²hh³jÑçh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjGéjæjGéjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hŒË**Parameters** ``struct resource *root`` root resource descriptor ``struct resource *new`` resource descriptor desired by caller **Description** Returns 0 for success, conflict resource on error.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjQéh]”hŒ Parameters”…”�”}”(hjSéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjOéubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MhjKéubj )�”}”(hhh]”(j)�”}”(hŒ3``struct resource *root`` root resource descriptor ”h]”(j)�”}”(hŒ``struct resource *root``”h]”j)�”}”(hjpéh]”hŒstruct resource *root”…”�”}”(hjréh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjnéubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´Mhjjéubj2)�”}”(hhh]”hÝ)�”}”(hŒroot resource descriptor”h]”hŒroot resource descriptor”…”�”}”(hj‰éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j…éh´Mhj†éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…éh´Mhjgéubj)�”}”(hŒ?``struct resource *new`` resource descriptor desired by caller ”h]”(j)�”}”(hŒ``struct resource *new``”h]”j)�”}”(hj©éh]”hŒstruct resource *new”…”�”}”(hj«éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§éubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´Mhj£éubj2)�”}”(hhh]”hÝ)�”}”(hŒ%resource descriptor desired by caller”h]”hŒ%resource descriptor desired by caller”…”�”}”(hjÂéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¾éh´Mhj¿éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾éh´Mhjgéubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjKéubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjäéh]”hŒ Description”…”�”}”(hjæéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâéubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MhjKéubhÝ)�”}”(hŒ2Returns 0 for success, conflict resource on error.”h]”hŒ2Returns 0 for success, conflict resource on error.”…”�”}”(hjúéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MhjKéubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œfind_next_res (C function)”Œc.find_next_res”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ–int find_next_res (struct resource *parent, resource_size_t start, resource_size_t end, unsigned long flags, unsigned long desc, struct resource *res)”h]”j)�”}”(hŒ•int find_next_res(struct resource *parent, resource_size_t start, resource_size_t end, unsigned long flags, unsigned long desc, struct resource *res)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj)êh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj%êh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%êh²hh³j7êh´MLubj{)�”}”(hŒ find_next_res”h]”j�)�”}”(hŒ find_next_res”h]”hŒ find_next_res”…”�”}”(hjJêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFêubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj%êh²hh³j7êh´MLubjœ)�”}”(hŒ„(struct resource *parent, resource_size_t start, resource_size_t end, unsigned long flags, unsigned long desc, struct resource *res)”h]”(j¢)�”}”(hŒstruct resource *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjfêh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjbêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjbêubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj„êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j†êŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jLêsbŒc.find_next_res”†”asbuh1hhjbêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjbêubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj²êh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjbêubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hj¿êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj^êubj¢)�”}”(hŒresource_size_t start”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjÛêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÝêŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j êŒc.find_next_res”†”asbuh1hhjÔêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔêubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj^êubj¢)�”}”(hŒresource_size_t end”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hj#ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j%ëŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j êŒc.find_next_res”†”asbuh1hhjëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëubj�)�”}”(hŒend”h]”hŒend”…”�”}”(hjOëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj^êubj¢)�”}”(hŒunsigned long flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjhëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdëubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj„ëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’ëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdëubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj^êubj¢)�”}”(hŒunsigned long desc”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¹ëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjµëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµëubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÕëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjµëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµëubj�)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hjñëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj^êubj¢)�”}”(hŒstruct resource *res”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj ìh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj(ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%ìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j*ìŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j êŒc.find_next_res”†”asbuh1hhjìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjTìh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjìubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hjaìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj^êubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj%êh²hh³j7êh´MLubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj!êh²hh³j7êh´MLubah}”(h]”jêah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j7êh´MLhjêh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCFinds the lowest resource that covers part of [**start**..**end**].”h]”(hŒ/Finds the lowest resource that covers part of [”…”�”}”(hj‹ìh²hh³Nh´Nubjõ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hj“ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹ìubhŒ ..**end**].”…”�”}”(hj‹ìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MLhjˆìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjêh²hh³j7êh´MLubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjµìjæjµìjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hXÂ**Parameters** ``struct resource *parent`` resource tree root to search ``resource_size_t start`` start address of the resource searched for ``resource_size_t end`` end address of same resource ``unsigned long flags`` flags which the resource must have ``unsigned long desc`` descriptor the resource must have ``struct resource *res`` return ptr, if resource found **Description** If a resource is found, returns 0 and *****res is overwritten with the part of the resource that's within [**start**..**end**]; if none is found, returns -ENODEV. Returns -EINVAL for invalid parameters. The caller must specify **start**, **end**, **flags**, and **desc** (which may be IORES_DESC_NONE).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¿ìh]”hŒ Parameters”…”�”}”(hjÁìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MPhj¹ìubj )�”}”(hhh]”(j)�”}”(hŒ9``struct resource *parent`` resource tree root to search ”h]”(j)�”}”(hŒ``struct resource *parent``”h]”j)�”}”(hjÞìh]”hŒstruct resource *parent”…”�”}”(hjàìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MShjØìubj2)�”}”(hhh]”hÝ)�”}”(hŒresource tree root to search”h]”hŒresource tree root to search”…”�”}”(hj÷ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jóìh´MShjôìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jóìh´MShjÕìubj)�”}”(hŒE``resource_size_t start`` start address of the resource searched for ”h]”(j)�”}”(hŒ``resource_size_t start``”h]”j)�”}”(hjíh]”hŒresource_size_t start”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MThjíubj2)�”}”(hhh]”hÝ)�”}”(hŒ*start address of the resource searched for”h]”hŒ*start address of the resource searched for”…”�”}”(hj0íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,íh´MThj-íubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,íh´MThjÕìubj)�”}”(hŒ5``resource_size_t end`` end address of same resource ”h]”(j)�”}”(hŒ``resource_size_t end``”h]”j)�”}”(hjPíh]”hŒresource_size_t end”…”�”}”(hjRíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNíubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MUhjJíubj2)�”}”(hhh]”hÝ)�”}”(hŒend address of same resource”h]”hŒend address of same resource”…”�”}”(hjiíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jeíh´MUhjfíubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jeíh´MUhjÕìubj)�”}”(hŒ;``unsigned long flags`` flags which the resource must have ”h]”(j)�”}”(hŒ``unsigned long flags``”h]”j)�”}”(hj‰íh]”hŒunsigned long flags”…”�”}”(hj‹íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡íubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MVhjƒíubj2)�”}”(hhh]”hÝ)�”}”(hŒ"flags which the resource must have”h]”hŒ"flags which the resource must have”…”�”}”(hj¢íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jžíh´MVhjŸíubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjƒíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jžíh´MVhjÕìubj)�”}”(hŒ9``unsigned long desc`` descriptor the resource must have ”h]”(j)�”}”(hŒ``unsigned long desc``”h]”j)�”}”(hjÂíh]”hŒunsigned long desc”…”�”}”(hjÄíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀíubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MWhj¼íubj2)�”}”(hhh]”hÝ)�”}”(hŒ!descriptor the resource must have”h]”hŒ!descriptor the resource must have”…”�”}”(hjÛíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j×íh´MWhjØíubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¼íubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j×íh´MWhjÕìubj)�”}”(hŒ7``struct resource *res`` return ptr, if resource found ”h]”(j)�”}”(hŒ``struct resource *res``”h]”j)�”}”(hjûíh]”hŒstruct resource *res”…”�”}”(hjýíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùíubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MXhjõíubj2)�”}”(hhh]”hÝ)�”}”(hŒreturn ptr, if resource found”h]”hŒreturn ptr, if resource found”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jîh´MXhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîh´MXhjÕìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹ìubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj6îh]”hŒ Description”…”�”}”(hj8îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj4îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MZhj¹ìubhÝ)�”}”(hŒËIf a resource is found, returns 0 and *****res is overwritten with the part of the resource that's within [**start**..**end**]; if none is found, returns -ENODEV. Returns -EINVAL for invalid parameters.”h]”(hŒ&If a resource is found, returns 0 and ”…”�”}”(hjLîh²hh³Nh´Nubjõ)�”}”(hŒN*****res is overwritten with the part of the resource that's within [**start**”h]”hŒL***res is overwritten with the part of the resource that’s within [**start”…”�”}”(hjTîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjLîubhŒW..**end**]; if none is found, returns -ENODEV. Returns -EINVAL for invalid parameters.”…”�”}”(hjLîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MMhj¹ìubhÝ)�”}”(hŒcThe caller must specify **start**, **end**, **flags**, and **desc** (which may be IORES_DESC_NONE).”h]”(hŒThe caller must specify ”…”�”}”(hjmîh²hh³Nh´Nubjõ)�”}”(hŒ **start**”h]”hŒstart”…”�”}”(hjuîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjmîubhŒ, ”…”�”}”(hjmîh²hh³Nh´Nubjõ)�”}”(hŒ**end**”h]”hŒend”…”�”}”(hj‡îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjmîubhŒ, ”…”�”}”hjmîsbjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj™îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjmîubhŒ, and ”…”�”}”(hjmîh²hh³Nh´Nubjõ)�”}”(hŒ**desc**”h]”hŒdesc”…”�”}”(hj«îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjmîubhŒ (which may be IORES_DESC_NONE).”…”�”}”(hjmîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MRhj¹ìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ reallocate_resource (C function)”Œc.reallocate_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ†int reallocate_resource (struct resource *root, struct resource *old, resource_size_t newsize, struct resource_constraint *constraint)”h]”j)�”}”(hŒ…int reallocate_resource(struct resource *root, struct resource *old, resource_size_t newsize, struct resource_constraint *constraint)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjäîh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjàîh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóîh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàîh²hh³jòîh´M)ubj{)�”}”(hŒreallocate_resource”h]”j�)�”}”(hŒreallocate_resource”h]”hŒreallocate_resource”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjàîh²hh³jòîh´M)ubjœ)�”}”(hŒn(struct resource *root, struct resource *old, resource_size_t newsize, struct resource_constraint *constraint)”h]”(j¢)�”}”(hŒstruct resource *root”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj!ïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj?ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<ïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jAïŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jïsbŒc.reallocate_resource”†”asbuh1hhjïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjïubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjmïh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjïubj�)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjzïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjïubj¢)�”}”(hŒstruct resource *old”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj“ïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�ïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ïubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj±ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®ïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j³ïŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j[ïŒc.reallocate_resource”†”asbuh1hhj�ïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ïubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÝïh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ïubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hjêïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjïubj¢)�”}”(hŒresource_size_t newsize”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jðŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j[ïŒc.reallocate_resource”†”asbuh1hhjÿïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿïubj�)�”}”(hŒnewsize”h]”hŒnewsize”…”�”}”(hj2ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjïubj¢)�”}”(hŒ&struct resource_constraint *constraint”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjKðh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjGðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGðubh)�”}”(hhh]”j�)�”}”(hŒresource_constraint”h]”hŒresource_constraint”…”�”}”(hjiðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jkðŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j[ïŒc.reallocate_resource”†”asbuh1hhjGðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGðubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj•ðh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjGðubj�)�”}”(hŒ constraint”h]”hŒ constraint”…”�”}”(hj¢ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjGðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjïubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjàîh²hh³jòîh´M)ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÜîh²hh³jòîh´M)ubah}”(h]”j×îah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jòîh´M)hjÙîh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ›allocate a slot in the resource tree given range & alignment. The resource will be relocated if the new size cannot be reallocated in the current location.”h]”hŒ›allocate a slot in the resource tree given range & alignment. The resource will be relocated if the new size cannot be reallocated in the current location.”…”�”}”(hjÌðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M)hjÉðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÙîh²hh³jòîh´M)ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjäðjæjäðjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX-**Parameters** ``struct resource *root`` root resource descriptor ``struct resource *old`` resource descriptor desired by caller ``resource_size_t newsize`` new size of the resource descriptor ``struct resource_constraint *constraint`` the memory range and alignment constraints to be met.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjîðh]”hŒ Parameters”…”�”}”(hjððh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjìðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M-hjèðubj )�”}”(hhh]”(j)�”}”(hŒ3``struct resource *root`` root resource descriptor ”h]”(j)�”}”(hŒ``struct resource *root``”h]”j)�”}”(hj ñh]”hŒstruct resource *root”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M-hjñubj2)�”}”(hhh]”hÝ)�”}”(hŒroot resource descriptor”h]”hŒroot resource descriptor”…”�”}”(hj&ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j"ñh´M-hj#ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"ñh´M-hjñubj)�”}”(hŒ?``struct resource *old`` resource descriptor desired by caller ”h]”(j)�”}”(hŒ``struct resource *old``”h]”j)�”}”(hjFñh]”hŒstruct resource *old”…”�”}”(hjHñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M.hj@ñubj2)�”}”(hhh]”hÝ)�”}”(hŒ%resource descriptor desired by caller”h]”hŒ%resource descriptor desired by caller”…”�”}”(hj_ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[ñh´M.hj\ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj@ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[ñh´M.hjñubj)�”}”(hŒ@``resource_size_t newsize`` new size of the resource descriptor ”h]”(j)�”}”(hŒ``resource_size_t newsize``”h]”j)�”}”(hjñh]”hŒresource_size_t newsize”…”�”}”(hj�ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M/hjyñubj2)�”}”(hhh]”hÝ)�”}”(hŒ#new size of the resource descriptor”h]”hŒ#new size of the resource descriptor”…”�”}”(hj˜ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”ñh´M/hj•ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjyñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”ñh´M/hjñubj)�”}”(hŒ```struct resource_constraint *constraint`` the memory range and alignment constraints to be met.”h]”(j)�”}”(hŒ*``struct resource_constraint *constraint``”h]”j)�”}”(hj¸ñh]”hŒ&struct resource_constraint *constraint”…”�”}”(hjºñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M1hj²ñubj2)�”}”(hhh]”hÝ)�”}”(hŒ5the memory range and alignment constraints to be met.”h]”hŒ5the memory range and alignment constraints to be met.”…”�”}”(hjÑñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M0hjÎñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj²ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍñh´M1hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjèðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlookup_resource (C function)”Œc.lookup_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPstruct resource * lookup_resource (struct resource *root, resource_size_t start)”h]”j)�”}”(hŒNstruct resource *lookup_resource(struct resource *root, resource_size_t start)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjòh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj òh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòh²hh³jòh´M…ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj1òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.òubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j3òŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œlookup_resource”sbŒc.lookup_resource”†”asbuh1hhjòh²hh³jòh´M…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòh²hh³jòh´M…ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj`òh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjòh²hh³jòh´M…ubj{)�”}”(hŒlookup_resource”h]”j�)�”}”(hjOòh]”hŒlookup_resource”…”�”}”(hjqòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmòubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjòh²hh³jòh´M…ubjœ)�”}”(hŒ.(struct resource *root, resource_size_t start)”h]”(j¢)�”}”(hŒstruct resource *root”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjŒòh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjˆòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™òh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆòubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjªòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§òubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¬òŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jMòŒc.lookup_resource”†”asbuh1hhjˆòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆòubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÖòh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjˆòubj�)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjãòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„òubj¢)�”}”(hŒresource_size_t start”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjÿòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjüòubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jóŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jMòŒc.lookup_resource”†”asbuh1hhjøòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøòubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj+óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjøòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„òubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjòh²hh³jòh´M…ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj òh²hh³jòh´M…ubah}”(h]”jòah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jòh´M…hjòh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5find an existing resource by a resource start address”h]”hŒ5find an existing resource by a resource start address”…”�”}”(hjUóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M…hjRóh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjòh²hh³jòh´M…ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjmójæjmójç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hŒÅ**Parameters** ``struct resource *root`` root resource descriptor ``resource_size_t start`` resource start address **Description** Returns a pointer to the resource if found, NULL otherwise”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjwóh]”hŒ Parameters”…”�”}”(hjyóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjuóubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M‰hjqóubj )�”}”(hhh]”(j)�”}”(hŒ3``struct resource *root`` root resource descriptor ”h]”(j)�”}”(hŒ``struct resource *root``”h]”j)�”}”(hj–óh]”hŒstruct resource *root”…”�”}”(hj˜óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”óubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M†hj�óubj2)�”}”(hhh]”hÝ)�”}”(hŒroot resource descriptor”h]”hŒroot resource descriptor”…”�”}”(hj¯óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j«óh´M†hj¬óubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�óubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j«óh´M†hj�óubj)�”}”(hŒ1``resource_size_t start`` resource start address ”h]”(j)�”}”(hŒ``resource_size_t start``”h]”j)�”}”(hjÏóh]”hŒresource_size_t start”…”�”}”(hjÑóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍóubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M‡hjÉóubj2)�”}”(hhh]”hÝ)�”}”(hŒresource start address”h]”hŒresource start address”…”�”}”(hjèóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jäóh´M‡hjåóubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÉóubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jäóh´M‡hj�óubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjqóubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj ôh]”hŒ Description”…”�”}”(hj ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M‰hjqóubhÝ)�”}”(hŒ:Returns a pointer to the resource if found, NULL otherwise”h]”hŒ:Returns a pointer to the resource if found, NULL otherwise”…”�”}”(hj ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´Mˆhjqóubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%insert_resource_conflict (C function)”Œc.insert_resource_conflict”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒZstruct resource * insert_resource_conflict (struct resource *parent, struct resource *new)”h]”j)�”}”(hŒXstruct resource *insert_resource_conflict(struct resource *parent, struct resource *new)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjOôh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjKôh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKôh²hh³j\ôh´MÏubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjnôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jpôŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œinsert_resource_conflict”sbŒc.insert_resource_conflict”†”asbuh1hhjKôh²hh³j\ôh´MÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKôh²hh³j\ôh´MÏubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�ôh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjKôh²hh³j\ôh´MÏubj{)�”}”(hŒinsert_resource_conflict”h]”j�)�”}”(hjŒôh]”hŒinsert_resource_conflict”…”�”}”(hj®ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªôubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjKôh²hh³j\ôh´MÏubjœ)�”}”(hŒ/(struct resource *parent, struct resource *new)”h]”(j¢)�”}”(hŒstruct resource *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÉôh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÅôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅôubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjçôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jéôŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŠôŒc.insert_resource_conflict”†”asbuh1hhjÅôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅôubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÅôubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hj õh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁôubj¢)�”}”(hŒstruct resource *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj9õh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj5õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5õubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjWõh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTõubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jYõŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŠôŒc.insert_resource_conflict”†”asbuh1hhj5õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5õubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒõh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj5õubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj�õh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁôubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjKôh²hh³j\ôh´MÏubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjGôh²hh³j\ôh´MÏubah}”(h]”jBôah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j\ôh´MÏhjDôh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Inserts resource in the resource tree”h]”hŒ%Inserts resource in the resource tree”…”�”}”(hjºõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÏhj·õh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjDôh²hh³j\ôh´MÏubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÒõjæjÒõjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hXT**Parameters** ``struct resource *parent`` parent of the new resource ``struct resource *new`` new resource to insert **Description** Returns 0 on success, conflict resource if the resource can't be inserted. This function is equivalent to request_resource_conflict when no conflict happens. If a conflict happens, and the conflicting resources entirely fit within the range of the new resource, then the new resource is inserted and the conflicting resources become children of the new resource. This function is intended for producers of resources, such as FW modules and bus drivers.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÜõh]”hŒ Parameters”…”�”}”(hjÞõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚõubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÓhjÖõubj )�”}”(hhh]”(j)�”}”(hŒ7``struct resource *parent`` parent of the new resource ”h]”(j)�”}”(hŒ``struct resource *parent``”h]”j)�”}”(hjûõh]”hŒstruct resource *parent”…”�”}”(hjýõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùõubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÐhjõõubj2)�”}”(hhh]”hÝ)�”}”(hŒparent of the new resource”h]”hŒparent of the new resource”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jöh´MÐhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jöh´MÐhjòõubj)�”}”(hŒ0``struct resource *new`` new resource to insert ”h]”(j)�”}”(hŒ``struct resource *new``”h]”j)�”}”(hj4öh]”hŒstruct resource *new”…”�”}”(hj6öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2öubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÑhj.öubj2)�”}”(hhh]”hÝ)�”}”(hŒnew resource to insert”h]”hŒnew resource to insert”…”�”}”(hjMöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jIöh´MÑhjJöubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.öubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIöh´MÑhjòõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖõubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjoöh]”hŒ Description”…”�”}”(hjqöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjmöubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÓhjÖõubhÝ)�”}”(hŒJReturns 0 on success, conflict resource if the resource can't be inserted.”h]”hŒLReturns 0 on success, conflict resource if the resource can’t be inserted.”…”�”}”(hj…öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÒhjÖõubhÝ)�”}”(hXThis function is equivalent to request_resource_conflict when no conflict happens. If a conflict happens, and the conflicting resources entirely fit within the range of the new resource, then the new resource is inserted and the conflicting resources become children of the new resource.”h]”hXThis function is equivalent to request_resource_conflict when no conflict happens. If a conflict happens, and the conflicting resources entirely fit within the range of the new resource, then the new resource is inserted and the conflicting resources become children of the new resource.”…”�”}”(hj”öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÔhjÖõubhÝ)�”}”(hŒYThis function is intended for producers of resources, such as FW modules and bus drivers.”h]”hŒYThis function is intended for producers of resources, such as FW modules and bus drivers.”…”�”}”(hj£öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÚhjÖõubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œresource_alignment (C function)”Œc.resource_alignment”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ?resource_size_t resource_alignment (const struct resource *res)”h]”j)�”}”(hŒ>resource_size_t resource_alignment(const struct resource *res)”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjÕöh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j×öŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œresource_alignment”sbŒc.resource_alignment”†”asbuh1hhjÎöh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷öh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎöh²hh³jööh´MÔubj{)�”}”(hŒresource_alignment”h]”j�)�”}”(hjóöh]”hŒresource_alignment”…”�”}”(hj ÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÎöh²hh³jööh´MÔubjœ)�”}”(hŒ(const struct resource *res)”h]”j¢)�”}”(hŒconst struct resource *res”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj$÷h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ÷ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj?÷h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ÷ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj]÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_÷Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jñöŒc.resource_alignment”†”asbuh1hhj ÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ÷ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‰÷h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ÷ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hj–÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÎöh²hh³jööh´MÔubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÊöh²hh³jööh´MÔubah}”(h]”jÅöah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jööh´MÔhjÇöh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒcalculate resource's alignment”h]”hŒ calculate resource’s alignment”…”�”}”(hjÀ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÔhj½÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÇöh²hh³jööh´MÔubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjØ÷jæjØ÷jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hŒ“**Parameters** ``const struct resource *res`` resource pointer **Description** Returns alignment on success, 0 (invalid alignment) on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjâ÷h]”hŒ Parameters”…”�”}”(hjä÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjà÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MØhjÜ÷ubj )�”}”(hhh]”j)�”}”(hŒ0``const struct resource *res`` resource pointer ”h]”(j)�”}”(hŒ``const struct resource *res``”h]”j)�”}”(hjøh]”hŒconst struct resource *res”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÕhjû÷ubj2)�”}”(hhh]”hÝ)�”}”(hŒresource pointer”h]”hŒresource pointer”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jøh´MÕhjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjû÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jøh´MÕhjø÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜ÷ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj<øh]”hŒ Description”…”�”}”(hj>øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:øubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M×hjÜ÷ubhÝ)�”}”(hŒ?Returns alignment on success, 0 (invalid alignment) on failure.”h]”hŒ?Returns alignment on success, 0 (invalid alignment) on failure.”…”�”}”(hjRøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÖhjÜ÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*release_mem_region_adjustable (C function)”Œc.release_mem_region_adjustable”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPvoid release_mem_region_adjustable (resource_size_t start, resource_size_t size)”h]”j)�”}”(hŒOvoid release_mem_region_adjustable(resource_size_t start, resource_size_t size)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�øh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj}øh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}øh²hh³j�øh´MÓubj{)�”}”(hŒrelease_mem_region_adjustable”h]”j�)�”}”(hŒrelease_mem_region_adjustable”h]”hŒrelease_mem_region_adjustable”…”�”}”(hj¢øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžøubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj}øh²hh³j�øh´MÓubjœ)�”}”(hŒ-(resource_size_t start, resource_size_t size)”h]”(j¢)�”}”(hŒresource_size_t start”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjÁøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾øubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÃøŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¤øsbŒc.release_mem_region_adjustable”†”asbuh1hhjºøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáøh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºøubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjïøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶øubj¢)�”}”(hŒresource_size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hj ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ùŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÝøŒc.release_mem_region_adjustable”†”asbuh1hhjùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjùubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj7ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶øubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj}øh²hh³j�øh´MÓubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjyøh²hh³j�øh´MÓubah}”(h]”jtøah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�øh´MÓhjvøh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+release a previously reserved memory region”h]”hŒ+release a previously reserved memory region”…”�”}”(hjaùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÓhj^ùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjvøh²hh³j�øh´MÓubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjyùjæjyùjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX**Parameters** ``resource_size_t start`` resource start address ``resource_size_t size`` resource region size **Description** This interface is intended for memory hot-delete. The requested region is released from a currently busy memory resource. The requested region must either match exactly or fit into a single busy resource entry. In the latter case, the remaining resource is adjusted accordingly. **Note** - Additional release conditions, such as overlapping region, can be supported after they are confirmed as valid cases. - When a busy memory resource gets split into two entries, its children are reassigned to the correct parent based on their range. If a child memory resource overlaps with more than one parent, enhance the logic as needed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjƒùh]”hŒ Parameters”…”�”}”(hj…ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M×hj}ùubj )�”}”(hhh]”(j)�”}”(hŒ1``resource_size_t start`` resource start address ”h]”(j)�”}”(hŒ``resource_size_t start``”h]”j)�”}”(hj¢ùh]”hŒresource_size_t start”…”�”}”(hj¤ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÔhjœùubj2)�”}”(hhh]”hÝ)�”}”(hŒresource start address”h]”hŒresource start address”…”�”}”(hj»ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·ùh´MÔhj¸ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·ùh´MÔhj™ùubj)�”}”(hŒ.``resource_size_t size`` resource region size ”h]”(j)�”}”(hŒ``resource_size_t size``”h]”j)�”}”(hjÛùh]”hŒresource_size_t size”…”�”}”(hjÝùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÕhjÕùubj2)�”}”(hhh]”hÝ)�”}”(hŒresource region size”h]”hŒresource region size”…”�”}”(hjôùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jðùh´MÕ•hjñùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðùh´MÕhj™ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj}ùubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjúh]”hŒ Description”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´M×hj}ùubhÝ)�”}”(hXThis interface is intended for memory hot-delete. The requested region is released from a currently busy memory resource. The requested region must either match exactly or fit into a single busy resource entry. In the latter case, the remaining resource is adjusted accordingly.”h]”hXThis interface is intended for memory hot-delete. The requested region is released from a currently busy memory resource. The requested region must either match exactly or fit into a single busy resource entry. In the latter case, the remaining resource is adjusted accordingly.”…”�”}”(hj,úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÖhj}ùubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj=úh]”hŒNote”…”�”}”(hj?úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÛhj}ùubj›)�”}”(hhh]”(j )�”}”(hŒtAdditional release conditions, such as overlapping region, can be supported after they are confirmed as valid cases.”h]”hÝ)�”}”(hŒtAdditional release conditions, such as overlapping region, can be supported after they are confirmed as valid cases.”h]”hŒtAdditional release conditions, such as overlapping region, can be supported after they are confirmed as valid cases.”…”�”}”(hjZúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÜhjVúubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjSúubj )�”}”(hŒÜWhen a busy memory resource gets split into two entries, its children are reassigned to the correct parent based on their range. If a child memory resource overlaps with more than one parent, enhance the logic as needed.”h]”hÝ)�”}”(hŒÜWhen a busy memory resource gets split into two entries, its children are reassigned to the correct parent based on their range. If a child memory resource overlaps with more than one parent, enhance the logic as needed.”h]”hŒÜWhen a busy memory resource gets split into two entries, its children are reassigned to the correct parent based on their range. If a child memory resource overlaps with more than one parent, enhance the logic as needed.”…”�”}”(hjsúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MÞhjoúubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjSúubeh}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³jhúh´MÜhj}ùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&merge_system_ram_resource (C function)”Œc.merge_system_ram_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ5void merge_system_ram_resource (struct resource *res)”h]”j)�”}”(hŒ4void merge_system_ram_resource(struct resource *res)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj®úh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjªúh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½úh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªúh²hh³j¼úh´MJubj{)�”}”(hŒmerge_system_ram_resource”h]”j�)�”}”(hŒmerge_system_ram_resource”h]”hŒmerge_system_ram_resource”…”�”}”(hjÏúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËúubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjªúh²hh³j¼úh´MJubjœ)�”}”(hŒ(struct resource *res)”h]”j¢)�”}”(hŒstruct resource *res”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjëúh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjçúubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçúubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ûŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÑúsbŒc.merge_system_ram_resource”†”asbuh1hhjçúubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçúubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj7ûh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjçúubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hjDûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçúubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjãúubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjªúh²hh³j¼úh´MJubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¦úh²hh³j¼úh´MJubah}”(h]”j¡úah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¼úh´MJhj£úh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ]mark the System RAM resource mergeable and try to merge it with adjacent, mergeable resources”h]”hŒ]mark the System RAM resource mergeable and try to merge it with adjacent, mergeable resources”…”�”}”(hjnûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MJhjkûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj£úh²hh³j¼úh´MJubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj†ûjæj†ûjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX**Parameters** ``struct resource *res`` resource descriptor **Description** This interface is intended for memory hotplug, whereby lots of contiguous system ram resources are added (e.g., via add_memory*()) by a driver, and the actual resource boundaries are not of interest (e.g., it might be relevant for DIMMs). Only resources that are marked mergeable, that have the same parent, and that don't have any children are considered. All mergeable resources must be immutable during the request. **Note** - The caller has to make sure that no pointers to resources that are marked mergeable are used anymore after this call - the resource might be freed and the pointer might be stale! - release_mem_region_adjustable() will split on demand on memory hotunplug”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�ûh]”hŒ Parameters”…”�”}”(hj’ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŽûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MNhjŠûubj )�”}”(hhh]”j)�”}”(hŒ-``struct resource *res`` resource descriptor ”h]”(j)�”}”(hŒ``struct resource *res``”h]”j)�”}”(hj¯ûh]”hŒstruct resource *res”…”�”}”(hj±ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MLhj©ûubj2)�”}”(hhh]”hÝ)�”}”(hŒresource descriptor”h]”hŒresource descriptor”…”�”}”(hjÈûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄûh´MLhjÅûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj©ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄûh´MLhj¦ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŠûubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjêûh]”hŒ Description”…”�”}”(hjìûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjèûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MNhjŠûubhÝ)�”}”(hX¢This interface is intended for memory hotplug, whereby lots of contiguous system ram resources are added (e.g., via add_memory*()) by a driver, and the actual resource boundaries are not of interest (e.g., it might be relevant for DIMMs). Only resources that are marked mergeable, that have the same parent, and that don't have any children are considered. All mergeable resources must be immutable during the request.”h]”hX¤This interface is intended for memory hotplug, whereby lots of contiguous system ram resources are added (e.g., via add_memory*()) by a driver, and the actual resource boundaries are not of interest (e.g., it might be relevant for DIMMs). Only resources that are marked mergeable, that have the same parent, and that don’t have any children are considered. All mergeable resources must be immutable during the request.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MMhjŠûubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjüh]”hŒNote”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MThjŠûubj›)�”}”(hhh]”(j )�”}”(hŒ²The caller has to make sure that no pointers to resources that are marked mergeable are used anymore after this call - the resource might be freed and the pointer might be stale!”h]”hÝ)�”}”(hŒ²The caller has to make sure that no pointers to resources that are marked mergeable are used anymore after this call - the resource might be freed and the pointer might be stale!”h]”hŒ²The caller has to make sure that no pointers to resources that are marked mergeable are used anymore after this call - the resource might be freed and the pointer might be stale!”…”�”}”(hj.üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MUhj*üubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj'üubj )�”}”(hŒHrelease_mem_region_adjustable() will split on demand on memory hotunplug”h]”hÝ)�”}”(hjEüh]”hŒHrelease_mem_region_adjustable() will split on demand on memory hotunplug”…”�”}”(hjGüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:268: ./kernel/resource.c”h´MXhjCüubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj'üubeh}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³j<üh´MUhjŠûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrequest_resource (C function)”Œc.request_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBint request_resource (struct resource *root, struct resource *new)”h]”j)�”}”(hŒAint request_resource(struct resource *root, struct resource *new)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj�üh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj}üh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�üh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}üh²hh³j�üh´M&ubj{)�”}”(hŒrequest_resource”h]”j�)�”}”(hŒrequest_resource”h]”hŒrequest_resource”…”�”}”(hj¢üh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžüubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj}üh²hh³j�üh´M&ubjœ)�”}”(hŒ-(struct resource *root, struct resource *new)”h]”(j¢)�”}”(hŒstruct resource *root”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¾üh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjºüubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºüubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjÜüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÞüŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¤üsbŒc.request_resource”†”asbuh1hhjºüubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºüubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ýh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjºüubj�)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶üubj¢)�”}”(hŒstruct resource *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj0ýh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj,ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,ýubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjNýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jPýŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jøüŒc.request_resource”†”asbuh1hhj,ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,ýubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjzýh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj,ýubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj‡ýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶üubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj}üh²hh³j�üh´M&ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjyüh²hh³j�üh´M&ubah}”(h]”jtüah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�üh´M&hjvüh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-request and reserve an I/O or memory resource”h]”hŒ-request and reserve an I/O or memory resource”…”�”}”(hj±ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M&hj®ýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjvüh²hh³j�üh´M&ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÉýjæjÉýjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hŒÍ**Parameters** ``struct resource *root`` root resource descriptor ``struct resource *new`` resource descriptor desired by caller **Description** Returns 0 for success, negative error code on error.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÓýh]”hŒ Parameters”…”�”}”(hjÕýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M*hjÍýubj )�”}”(hhh]”(j)�”}”(hŒ3``struct resource *root`` root resource descriptor ”h]”(j)�”}”(hŒ``struct resource *root``”h]”j)�”}”(hjòýh]”hŒstruct resource *root”…”�”}”(hjôýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjðýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M'hjìýubj2)�”}”(hhh]”hÝ)�”}”(hŒroot resource descriptor”h]”hŒroot resource descriptor”…”�”}”(hj þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jþh´M'hjþubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjìýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþh´M'hjéýubj)�”}”(hŒ?``struct resource *new`` resource descriptor desired by caller ”h]”(j)�”}”(hŒ``struct resource *new``”h]”j)�”}”(hj+þh]”hŒstruct resource *new”…”�”}”(hj-þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)þubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M(hj%þubj2)�”}”(hhh]”hÝ)�”}”(hŒ%resource descriptor desired by caller”h]”hŒ%resource descriptor desired by caller”…”�”}”(hjDþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@þh´M(hjAþubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%þubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@þh´M(hjéýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÍýubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjfþh]”hŒ Description”…”�”}”(hjhþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjdþubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M*hjÍýubhÝ)�”}”(hŒ4Returns 0 for success, negative error code on error.”h]”hŒ4Returns 0 for success, negative error code on error.”…”�”}”(hj|þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M)hjÍýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrelease_resource (C function)”Œc.release_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+int release_resource (struct resource *old)”h]”j)�”}”(hŒ*int release_resource(struct resource *old)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj«þh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj§þh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§þh²hh³j¹þh´M7ubj{)�”}”(hŒrelease_resource”h]”j�)�”}”(hŒrelease_resource”h]”hŒrelease_resource”…”�”}”(hjÌþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈþubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj§þh²hh³j¹þh´M7ubjœ)�”}”(hŒ(struct resource *old)”h]”j¢)�”}”(hŒstruct resource *old”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjèþh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjäþubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäþubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÿŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÎþsbŒc.release_resource”†”asbuh1hhjäþubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäþubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj4ÿh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjäþubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hjAÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäþubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjàþubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj§þh²hh³j¹þh´M7ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj£þh²hh³j¹þh´M7ubah}”(h]”jžþah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¹þh´M7hj þh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&release a previously reserved resource”h]”hŒ&release a previously reserved resource”…”�”}”(hjkÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M7hjhÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj þh²hh³j¹þh´M7ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjƒÿjæjƒÿjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hŒ;**Parameters** ``struct resource *old`` resource pointer”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�ÿh]”hŒ Parameters”…”�”}”(hj�ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M;hj‡ÿubj )�”}”(hhh]”j)�”}”(hŒ)``struct resource *old`` resource pointer”h]”(j)�”}”(hŒ``struct resource *old``”h]”j)�”}”(hj¬ÿh]”hŒstruct resource *old”…”�”}”(hj®ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M=hj¦ÿubj2)�”}”(hhh]”hÝ)�”}”(hŒresource pointer”h]”hŒresource pointer”…”�”}”(hjÅÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M8hjÂÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁÿh´M=hj£ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‡ÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ walk_iomem_res_desc (C function)”Œc.walk_iomem_res_desc”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒˆint walk_iomem_res_desc (unsigned long desc, unsigned long flags, u64 start, u64 end, void *arg, int (*func)(struct resource *, void *))”h]”j)�”}”(hŒ…int walk_iomem_res_desc(unsigned long desc, unsigned long flags, u64 start, u64 end, void *arg, int (*func)(struct resource*, void*))”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M·ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³jh´M·ubj{)�”}”(hŒwalk_iomem_res_desc”h]”j�)�”}”(hŒwalk_iomem_res_desc”h]”hŒwalk_iomem_res_desc”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjh²hh³jh´M·ubjœ)�”}”(hŒn(unsigned long desc, unsigned long flags, u64 start, u64 end, void *arg, int (*func)(struct resource*, void*))”h]”(j¢)�”}”(hŒunsigned long desc”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?ubj�)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;ubj¢)�”}”(hŒunsigned long flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;ubj¢)�”}”(hŒ u64 start”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jêŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j)sbŒc.walk_iomem_res_desc”†”asbuh1hhjáubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;ubj¢)�”}”(hŒu64 end”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒc.walk_iomem_res_desc”†”asbuh1hhj+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+ubj�)�”}”(hŒend”h]”hŒend”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;ubj¢)�”}”(hŒ void *arg”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjsubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjsubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjsubj�)�”}”(hŒarg”h]”hŒarg”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;ubj¢)�”}”(hŒ$int (*func)(struct resource*, void*)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµubj�)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j7Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒc.walk_iomem_res_desc”†”asbuh1hhjµubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµubjã)�”}”(hjù?h]”hŒ,”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjµubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³jh´M·ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjþÿh²hh³jh´M·ubah}”(h]”jùÿah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´M·hjûÿh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒOWalks through iomem resources and calls func() with matching resource ranges. *”h]”hŒOWalks through iomem resources and calls func() with matching resource ranges. *”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M·hj¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjûÿh²hh³jh´M·ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj×jæj×jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hXv**Parameters** ``unsigned long desc`` I/O resource descriptor. Use IORES_DESC_NONE to skip **desc** check. ``unsigned long flags`` I/O resource flags ``u64 start`` start addr ``u64 end`` end addr ``void *arg`` function argument for the callback **func** ``int (*func)(struct resource *, void *)`` callback function that is called for each qualifying resource area **Description** All the memory ranges which overlap start,end and also match flags and desc are valid candidates. **NOTE** For a new descriptor search, define a new IORES_DESC in and set it in 'desc' of a target resource entry.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjáh]”hŒ Parameters”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M»hjÛubj )�”}”(hhh]”(j)�”}”(hŒ\``unsigned long desc`` I/O resource descriptor. Use IORES_DESC_NONE to skip **desc** check. ”h]”(j)�”}”(hŒ``unsigned long desc``”h]”j)�”}”(hjh]”hŒunsigned long desc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mºhjúubj2)�”}”(hhh]”hÝ)�”}”(hŒDI/O resource descriptor. Use IORES_DESC_NONE to skip **desc** check.”h]”(hŒ5I/O resource descriptor. Use IORES_DESC_NONE to skip ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**desc**”h]”hŒdesc”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ check.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Mºhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mºhj÷ubj)�”}”(hŒ+``unsigned long flags`` I/O resource flags ”h]”(j)�”}”(hŒ``unsigned long flags``”h]”j)�”}”(hjKh]”hŒunsigned long flags”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M»hjEubj2)�”}”(hhh]”hÝ)�”}”(hŒI/O resource flags”h]”hŒI/O resource flags”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j`h´M»hjaubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`h´M»hj÷ubj)�”}”(hŒ``u64 start`` start addr ”h]”(j)�”}”(hŒ ``u64 start``”h]”j)�”}”(hj„h]”hŒ u64 start”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M¼hj~ubj2)�”}”(hhh]”hÝ)�”}”(hŒ start addr”h]”hŒ start addr”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™h´M¼hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™h´M¼hj÷ubj)�”}”(hŒ``u64 end`` end addr ”h]”(j)�”}”(hŒ ``u64 end``”h]”j)�”}”(hj½h]”hŒu64 end”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M½hj·ubj2)�”}”(hhh]”hÝ)�”}”(hŒend addr”h]”hŒend addr”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒh´M½hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒh´M½hj÷ubj)�”}”(hŒ:``void *arg`` function argument for the callback **func** ”h]”(j)�”}”(hŒ ``void *arg``”h]”j)�”}”(hjöh]”hŒ void *arg”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M¾hjðubj2)�”}”(hhh]”hÝ)�”}”(hŒ+function argument for the callback **func**”h]”(hŒ#function argument for the callback ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**func**”h]”hŒfunc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´M¾hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M¾hj÷ubj)�”}”(hŒn``int (*func)(struct resource *, void *)`` callback function that is called for each qualifying resource area ”h]”(j)�”}”(hŒ*``int (*func)(struct resource *, void *)``”h]”j)�”}”(hj=h]”hŒ&int (*func)(struct resource *, void *)”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M¿hj7ubj2)�”}”(hhh]”hÝ)�”}”(hŒBcallback function that is called for each qualifying resource area”h]”hŒBcallback function that is called for each qualifying resource area”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jRh´M¿hjSubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jRh´M¿hj÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÛubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjxh]”hŒ Description”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MÁhjÛubhÝ)�”}”(hŒaAll the memory ranges which overlap start,end and also match flags and desc are valid candidates.”h]”hŒaAll the memory ranges which overlap start,end and also match flags and desc are valid candidates.”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MÀhjÛubhÝ)�”}”(hŒ**NOTE**”h]”jõ)�”}”(hjŸh]”hŒNOTE”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MÃhjÛubhÝ)�”}”(hŒyFor a new descriptor search, define a new IORES_DESC in and set it in 'desc' of a target resource entry.”h]”hŒ}For a new descriptor search, define a new IORES_DESC in and set it in ‘desc’ of a target resource entry.”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MÄhjÛubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œregion_intersects (C function)”Œc.region_intersects”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒcint region_intersects (resource_size_t start, size_t size, unsigned long flags, unsigned long desc)”h]”j)�”}”(hŒbint region_intersects(resource_size_t start, size_t size, unsigned long flags, unsigned long desc)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjàh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàh²hh³jòh´M˜ubj{)�”}”(hŒregion_intersects”h]”j�)�”}”(hŒregion_intersects”h]”hŒregion_intersects”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjàh²hh³jòh´M˜ubjœ)�”}”(hŒM(resource_size_t start, size_t size, unsigned long flags, unsigned long desc)”h]”(j¢)�”}”(hŒresource_size_t start”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j&Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jsbŒc.region_intersects”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jpŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j@Œc.region_intersects”†”asbuh1hhjgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒunsigned long flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒunsigned long desc”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒdesc”h]”hŒdesc”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjàh²hh³jòh´M˜ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÜh²hh³jòh´M˜ubah}”(h]”j×ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jòh´M˜hjÙh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5determine intersection of region with known resources”h]”hŒ5determine intersection of region with known resources”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M˜hjch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÙh²hh³jòh´M˜ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj~jæj~jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hXÐ**Parameters** ``resource_size_t start`` region start address ``size_t size`` size of region ``unsigned long flags`` flags of resource (in iomem_resource) ``unsigned long desc`` descriptor of resource (in iomem_resource) or IORES_DESC_NONE **Description** Check if the specified region partially overlaps or fully eclipses a resource identified by **flags** and **desc** (optional with IORES_DESC_NONE). Return REGION_DISJOINT if the region does not overlap **flags**/**desc**, return REGION_MIXED if the region overlaps **flags**/**desc** and another resource, and return REGION_INTERSECTS if the region overlaps **flags**/**desc** and no other defined resource. Note that REGION_INTERSECTS is also returned in the case when the specified region overlaps RAM and undefined memory holes. region_intersect() is used by memory remapping functions to ensure the user is not remapping RAM and is a vast speed up over walking through the resource table page by page.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjˆh]”hŒ Parameters”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mœhj‚ubj )�”}”(hhh]”(j)�”}”(hŒ/``resource_size_t start`` region start address ”h]”(j)�”}”(hŒ``resource_size_t start``”h]”j)�”}”(hj§h]”hŒresource_size_t start”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M™hj¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒregion start address”h]”hŒregion start address”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼h´M™hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼h´M™hjžubj)�”}”(hŒ``size_t size`` size of region ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjàh]”hŒ size_t size”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MšhjÚubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of region”h]”hŒsize of region”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõh´Mšhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõh´Mšhjžubj)�”}”(hŒ>``unsigned long flags`` flags of resource (in iomem_resource) ”h]”(j)�”}”(hŒ``unsigned long flags``”h]”j)�”}”(hjh]”hŒunsigned long flags”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M›hjubj2)�”}”(hhh]”hÝ)�”}”(hŒ%flags of resource (in iomem_resource)”h]”hŒ%flags of resource (in iomem_resource)”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.h´M›hj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.h´M›hjžubj)�”}”(hŒU``unsigned long desc`` descriptor of resource (in iomem_resource) or IORES_DESC_NONE ”h]”(j)�”}”(hŒ``unsigned long desc``”h]”j)�”}”(hjRh]”hŒunsigned long desc”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MœhjLubj2)�”}”(hhh]”hÝ)�”}”(hŒ=descriptor of resource (in iomem_resource) or IORES_DESC_NONE”h]”hŒ=descriptor of resource (in iomem_resource) or IORES_DESC_NONE”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jgh´Mœhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jgh´Mœhjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‚ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mžhj‚ubhÝ)�”}”(hXCheck if the specified region partially overlaps or fully eclipses a resource identified by **flags** and **desc** (optional with IORES_DESC_NONE). Return REGION_DISJOINT if the region does not overlap **flags**/**desc**, return REGION_MIXED if the region overlaps **flags**/**desc** and another resource, and return REGION_INTERSECTS if the region overlaps **flags**/**desc** and no other defined resource. Note that REGION_INTERSECTS is also returned in the case when the specified region overlaps RAM and undefined memory holes.”h]”(hŒ\Check if the specified region partially overlaps or fully eclipses a resource identified by ”…”�”}”(hj£h²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ubhŒ and ”…”�”}”(hj£h²hh³Nh´Nubjõ)�”}”(hŒ**desc**”h]”hŒdesc”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ubhŒX (optional with IORES_DESC_NONE). Return REGION_DISJOINT if the region does not overlap ”…”�”}”(hj£h²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ubhŒ/”…”�”}”(hj£h²hh³Nh´Nubjõ)�”}”(hŒ**desc**”h]”hŒdesc”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ubhŒ-, return REGION_MIXED if the region overlaps ”…”�”}”(hj£h²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ubhŒ/”…”�”}”hj£sbjõ)�”}”(hŒ**desc**”h]”hŒdesc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ubhŒK and another resource, and return REGION_INTERSECTS if the region overlaps ”…”�”}”(hj£h²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ubhŒ/”…”�”}”hj£sbjõ)�”}”(hŒ**desc**”h]”hŒdesc”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ubhŒ› and no other defined resource. Note that REGION_INTERSECTS is also returned in the case when the specified region overlaps RAM and undefined memory holes.”…”�”}”(hj£h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M�hj‚ubhÝ)�”}”(hŒ­region_intersect() is used by memory remapping functions to ensure the user is not remapping RAM and is a vast speed up over walking through the resource table page by page.”h]”hŒ­region_intersect() is used by memory remapping functions to ensure the user is not remapping RAM and is a vast speed up over walking through the resource table page by page.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M¦hj‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ find_resource_space (C function)”Œc.find_resource_space”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒƒint find_resource_space (struct resource *root, struct resource *new, resource_size_t size, struct resource_constraint *constraint)”h]”j)�”}”(hŒ‚int find_resource_space(struct resource *root, struct resource *new, resource_size_t size, struct resource_constraint *constraint)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjmh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmh²hh³jh´Mubj{)�”}”(hŒfind_resource_space”h]”j�)�”}”(hŒfind_resource_space”h]”hŒfind_resource_space”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjmh²hh³jh´Mubjœ)�”}”(hŒk(struct resource *root, struct resource *new, resource_size_t size, struct resource_constraint *constraint)”h]”(j¢)�”}”(hŒstruct resource *root”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÎŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j”sbŒc.find_resource_space”†”asbuh1hhjªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjªubj�)�”}”(hŒroot”h]”hŒroot”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¦ubj¢)�”}”(hŒstruct resource *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj; ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j@ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jèŒc.find_resource_space”†”asbuh1hhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¦ubj¢)�”}”(hŒresource_size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hj“ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj� ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j• Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jèŒc.find_resource_space”†”asbuh1hhjŒ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŒ ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¦ubj¢)�”}”(hŒ&struct resource_constraint *constraint”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÔ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔ ubh)�”}”(hhh]”j�)�”}”(hŒresource_constraint”h]”hŒresource_constraint”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjó ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jø Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jèŒc.find_resource_space”†”asbuh1hhjÔ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj" h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔ ubj�)�”}”(hŒ constraint”h]”hŒ constraint”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjmh²hh³jh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjih²hh³jh´Mubah}”(h]”jdah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´Mhjfh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Find empty space in the resource tree”h]”hŒ%Find empty space in the resource tree”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MhjV h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjfh²hh³jh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjq jæjq jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX<**Parameters** ``struct resource *root`` Root resource descriptor ``struct resource *new`` Resource descriptor awaiting an empty resource space ``resource_size_t size`` The minimum size of the empty space ``struct resource_constraint *constraint`` The range and alignment constraints to be met **Description** Finds an empty space under **root** in the resource tree satisfying range and alignment **constraints**. **Return** * ``0`` - if successful, **new** members start, end, and flags are altered. * ``-EBUSY`` - if no empty space was found.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj{ h]”hŒ Parameters”…”�”}”(hj} h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjy ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhju ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct resource *root`` Root resource descriptor ”h]”(j)�”}”(hŒ``struct resource *root``”h]”j)�”}”(hjš h]”hŒstruct resource *root”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhj” ubj2)�”}”(hhh]”hÝ)�”}”(hŒRoot resource descriptor”h]”hŒRoot resource descriptor”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¯ h´Mhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj” ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¯ h´Mhj‘ ubj)�”}”(hŒN``struct resource *new`` Resource descriptor awaiting an empty resource space ”h]”(j)�”}”(hŒ``struct resource *new``”h]”j)�”}”(hjÓ h]”hŒstruct resource *new”…”�”}”(hjÕ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MhjÍ ubj2)�”}”(hhh]”hÝ)�”}”(hŒ4Resource descriptor awaiting an empty resource space”h]”hŒ4Resource descriptor awaiting an empty resource space”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jè h´Mhjé ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jè h´Mhj‘ ubj)�”}”(hŒ=``resource_size_t size`` The minimum size of the empty space ”h]”(j)�”}”(hŒ``resource_size_t size``”h]”j)�”}”(hj h]”hŒresource_size_t size”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhj ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#The minimum size of the empty space”h]”hŒ#The minimum size of the empty space”…”�”}”(hj% h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j! h´Mhj" ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j! h´Mhj‘ ubj)�”}”(hŒY``struct resource_constraint *constraint`` The range and alignment constraints to be met ”h]”(j)�”}”(hŒ*``struct resource_constraint *constraint``”h]”j)�”}”(hjE h]”hŒ&struct resource_constraint *constraint”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjC ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhj? ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-The range and alignment constraints to be met”h]”hŒ-The range and alignment constraints to be met”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jZ h´Mhj[ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj? ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZ h´Mhj‘ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hju ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj€ h]”hŒ Description”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhju ubhÝ)�”}”(hŒhFinds an empty space under **root** in the resource tree satisfying range and alignment **constraints**.”h]”(hŒFinds an empty space under ”…”�”}”(hj– h²hh³Nh´Nubjõ)�”}”(hŒ**root**”h]”hŒroot”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj– ubhŒ5 in the resource tree satisfying range and alignment ”…”�”}”(hj– h²hh³Nh´Nubjõ)�”}”(hŒ**constraints**”h]”hŒ constraints”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj– ubhŒ.”…”�”}”(hj– h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhju ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjË h]”hŒReturn”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÉ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhju ubj›)�”}”(hhh]”(j )�”}”(hŒQ``0`` - if successful, **new** members start, end, and flags are altered.”h]”hÝ)�”}”(hjæ h]”(j)�”}”(hŒ``0``”h]”hŒ0”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjè ubhŒ - if successful, ”…”�”}”(hjè h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjè ubhŒ+ members start, end, and flags are altered.”…”�”}”(hjè h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhjä ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjá ubj )�”}”(hŒ,``-EBUSY`` - if no empty space was found.”h]”hÝ)�”}”(hj h]”(j)�”}”(hŒ ``-EBUSY``”h]”hŒ-EBUSY”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubhŒ" - if no empty space was found.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjá ubeh}”(h]”h ]”h"]”h$]”h&]”jôjæuh1jšh³j h´Mhju ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œallocate_resource (C function)”Œc.allocate_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒÅint allocate_resource (struct resource *root, struct resource *new, resource_size_t size, resource_size_t min, resource_size_t max, resource_size_t align, resource_alignf alignf, void *alignf_data)”h]”j)�”}”(hŒÄint allocate_resource(struct resource *root, struct resource *new, resource_size_t size, resource_size_t min, resource_size_t max, resource_size_t align, resource_alignf alignf, void *alignf_data)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjd h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjd h²hh³jv h´MZubj{)�”}”(hŒallocate_resource”h]”j�)�”}”(hŒallocate_resource”h]”hŒallocate_resource”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj… ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjd h²hh³jv h´MZubjœ)�”}”(hŒ¯(struct resource *root, struct resource *new, resource_size_t size, resource_size_t min, resource_size_t max, resource_size_t align, resource_alignf alignf, void *alignf_data)”h]”(j¢)�”}”(hŒstruct resource *root”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¥ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¡ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj² h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡ ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÅ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‹ sbŒc.allocate_resource”†”asbuh1hhj¡ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjñ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¡ ubj�)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj� ubj¢)�”}”(hŒstruct resource *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2 ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j7 Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jß Œc.allocate_resource”†”asbuh1hhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hja h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj� ubj¢)�”}”(hŒresource_size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jß Œc.allocate_resource”†”asbuh1hhjƒ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj� ubj¢)�”}”(hŒresource_size_t min”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjÒ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÔ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jß Œc.allocate_resource”†”asbuh1hhjË ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjË ubj�)�”}”(hŒmin”h]”hŒmin”…”�”}”(hjþ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjË ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj� ubj¢)�”}”(hŒresource_size_t max”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jß Œc.allocate_resource”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒmax”h]”hŒmax”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj� ubj¢)�”}”(hŒresource_size_t align”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jdŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jß Œc.allocate_resource”†”asbuh1hhj[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[ubj�)�”}”(hŒalign”h]”hŒalign”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj� ubj¢)�”}”(hŒresource_alignf alignf”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_alignf”h]”hŒresource_alignf”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¬Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jß Œc.allocate_resource”†”asbuh1hhj£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£ubj�)�”}”(hŒalignf”h]”hŒalignf”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj� ubj¢)�”}”(hŒvoid *alignf_data”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjëubj�)�”}”(hŒ alignf_data”h]”hŒ alignf_data”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj� ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjd h²hh³jv h´MZubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj` h²hh³jv h´MZubah}”(h]”j[ ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jv h´MZhj] h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒŽallocate empty slot in the resource tree given range & alignment. The resource will be reallocated with a new size if it was already allocated”h]”hŒŽallocate empty slot in the resource tree given range & alignment. The resource will be reallocated with a new size if it was already allocated”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MZhj?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj] h²hh³jv h´MZubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjZjæjZjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX**Parameters** ``struct resource *root`` root resource descriptor ``struct resource *new`` resource descriptor desired by caller ``resource_size_t size`` requested resource region size ``resource_size_t min`` minimum boundary to allocate ``resource_size_t max`` maximum boundary to allocate ``resource_size_t align`` alignment requested, in bytes ``resource_alignf alignf`` alignment function, optional, called if not NULL ``void *alignf_data`` arbitrary data to pass to the **alignf** function”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjdh]”hŒ Parameters”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M^hj^ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct resource *root`` root resource descriptor ”h]”(j)�”}”(hŒ``struct resource *root``”•h]”j)�”}”(hjƒh]”hŒstruct resource *root”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M\hj}ubj2)�”}”(hhh]”hÝ)�”}”(hŒroot resource descriptor”h]”hŒroot resource descriptor”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j˜h´M\hj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˜h´M\hjzubj)�”}”(hŒ?``struct resource *new`` resource descriptor desired by caller ”h]”(j)�”}”(hŒ``struct resource *new``”h]”j)�”}”(hj¼h]”hŒstruct resource *new”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M]hj¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%resource descriptor desired by caller”h]”hŒ%resource descriptor desired by caller”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÑh´M]hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÑh´M]hjzubj)�”}”(hŒ8``resource_size_t size`` requested resource region size ”h]”(j)�”}”(hŒ``resource_size_t size``”h]”j)�”}”(hjõh]”hŒresource_size_t size”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M^hjïubj2)�”}”(hhh]”hÝ)�”}”(hŒrequested resource region size”h]”hŒrequested resource region size”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´M^hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M^hjzubj)�”}”(hŒ5``resource_size_t min`` minimum boundary to allocate ”h]”(j)�”}”(hŒ``resource_size_t min``”h]”j)�”}”(hj.h]”hŒresource_size_t min”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M_hj(ubj2)�”}”(hhh]”hÝ)�”}”(hŒminimum boundary to allocate”h]”hŒminimum boundary to allocate”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jCh´M_hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jCh´M_hjzubj)�”}”(hŒ5``resource_size_t max`` maximum boundary to allocate ”h]”(j)�”}”(hŒ``resource_size_t max``”h]”j)�”}”(hjgh]”hŒresource_size_t max”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M`hjaubj2)�”}”(hhh]”hÝ)�”}”(hŒmaximum boundary to allocate”h]”hŒmaximum boundary to allocate”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|h´M`hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|h´M`hjzubj)�”}”(hŒ8``resource_size_t align`` alignment requested, in bytes ”h]”(j)�”}”(hŒ``resource_size_t align``”h]”j)�”}”(hj h]”hŒresource_size_t align”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mahjšubj2)�”}”(hhh]”hÝ)�”}”(hŒalignment requested, in bytes”h]”hŒalignment requested, in bytes”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµh´Mahj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµh´Mahjzubj)�”}”(hŒL``resource_alignf alignf`` alignment function, optional, called if not NULL ”h]”(j)�”}”(hŒ``resource_alignf alignf``”h]”j)�”}”(hjÙh]”hŒresource_alignf alignf”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MbhjÓubj2)�”}”(hhh]”hÝ)�”}”(hŒ0alignment function, optional, called if not NULL”h]”hŒ0alignment function, optional, called if not NULL”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jîh´Mbhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîh´Mbhjzubj)�”}”(hŒG``void *alignf_data`` arbitrary data to pass to the **alignf** function”h]”(j)�”}”(hŒ``void *alignf_data``”h]”j)�”}”(hjh]”hŒvoid *alignf_data”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mdhj ubj2)�”}”(hhh]”hÝ)�”}”(hŒ1arbitrary data to pass to the **alignf** function”h]”(hŒarbitrary data to pass to the ”…”�”}”(hj+h²hh³Nh´Nubjõ)�”}”(hŒ **alignf**”h]”hŒalignf”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+ubhŒ function”…”�”}”(hj+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mchj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'h´Mdhjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œinsert_resource (C function)”Œc.insert_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCint insert_resource (struct resource *parent, struct resource *new)”h]”j)�”}”(hŒBint insert_resource(struct resource *parent, struct resource *new)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjzh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Méubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjzh²hh³jŒh´Méubj{)�”}”(hŒinsert_resource”h]”j�)�”}”(hŒinsert_resource”h]”hŒinsert_resource”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjzh²hh³jŒh´Méubjœ)�”}”(hŒ/(struct resource *parent, struct resource *new)”h]”(j¢)�”}”(hŒstruct resource *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj·ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¡sbŒc.insert_resource”†”asbuh1hhj·ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj·ubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³ubj¢)�”}”(hŒstruct resource *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jMŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jõŒc.insert_resource”†”asbuh1hhj)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj)ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjzh²hh³jŒh´Méubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjvh²hh³jŒh´Méubah}”(h]”jqah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŒh´Méhjsh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Inserts a resource in the resource tree”h]”hŒ'Inserts a resource in the resource tree”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Méhj«h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjsh²hh³jŒh´Méubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÆjæjÆjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX(**Parameters** ``struct resource *parent`` parent of the new resource ``struct resource *new`` new resource to insert **Description** Returns 0 on success, -EBUSY if the resource can't be inserted. This function is intended for producers of resources, such as FW modules and bus drivers.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÐh]”hŒ Parameters”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MíhjÊubj )�”}”(hhh]”(j)�”}”(hŒ7``struct resource *parent`` parent of the new resource ”h]”(j)�”}”(hŒ``struct resource *parent``”h]”j)�”}”(hjïh]”hŒstruct resource *parent”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mêhjéubj2)�”}”(hhh]”hÝ)�”}”(hŒparent of the new resource”h]”hŒparent of the new resource”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Mêhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mêhjæubj)�”}”(hŒ0``struct resource *new`` new resource to insert ”h]”(j)�”}”(hŒ``struct resource *new``”h]”j)�”}”(hj(h]”hŒstruct resource *new”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mëhj"ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew resource to insert”h]”hŒnew resource to insert”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j=h´Mëhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j=h´Mëhjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÊubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjch]”hŒ Description”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MíhjÊubhÝ)�”}”(hŒ?Returns 0 on success, -EBUSY if the resource can't be inserted.”h]”hŒAReturns 0 on success, -EBUSY if the resource can’t be inserted.”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MìhjÊubhÝ)�”}”(hŒYThis function is intended for producers of resources, such as FW modules and bus drivers.”h]”hŒYThis function is intended for producers of resources, such as FW modules and bus drivers.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MîhjÊubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*insert_resource_expand_to_fit (C function)”Œc.insert_resource_expand_to_fit”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPvoid insert_resource_expand_to_fit (struct resource *root, struct resource *new)”h]”j)�”}”(hŒOvoid insert_resource_expand_to_fit(struct resource *root, struct resource *new)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj³h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Müubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³h²hh³jÅh´Müubj{)�”}”(hŒinsert_resource_expand_to_fit”h]”j�)�”}”(hŒinsert_resource_expand_to_fit”h]”hŒinsert_resource_expand_to_fit”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj³h²hh³jÅh´Müubjœ)�”}”(hŒ-(struct resource *root, struct resource *new)”h]”(j¢)�”}”(hŒstruct resource *root”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjðubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÚsbŒc.insert_resource_expand_to_fit”†”asbuh1hhjðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjðubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjðubj�)�”}”(hŒroot”h]”hŒroot”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjìubj¢)�”}”(hŒstruct resource *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjbubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j†Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j.Œc.insert_resource_expand_to_fit”†”asbuh1hhjbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjbubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjbubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjìubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj³h²hh³jÅh´Müubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¯h²hh³jÅh´Müubah}”(h]”jªah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÅh´Mühj¬h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Insert a resource into the resource tree”h]”hŒ(Insert a resource into the resource tree”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mühjäh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¬h²hh³jÅh´Müubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÿjæjÿjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX**Parameters** ``struct resource *root`` root resource descriptor ``struct resource *new`` new resource to insert **Description** Insert a resource into the resource tree, possibly expanding it in order to make it encompass any conflicting resources.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhjubj )�”}”(hhh]”(j)�”}”(hŒ3``struct resource *root`` root resource descriptor ”h]”(j)�”}”(hŒ``struct resource *root``”h]”j)�”}”(hj(h]”hŒstruct resource *root”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mýhj"ubj2)�”}”(hhh]”hÝ)�”}”(hŒroot resource descriptor”h]”hŒroot resource descriptor”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j=h´Mýhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j=h´Mýhjubj)�”}”(hŒ0``struct resource *new`` new resource to insert ”h]”(j)�”}”(hŒ``struct resource *new``”h]”j)�”}”(hjah]”hŒstruct resource *new”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mþhj[ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew resource to insert”h]”hŒnew resource to insert”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jvh´Mþhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jvh´Mþhjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjœh]”hŒ Description”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MhjubhÝ)�”}”(hŒxInsert a resource into the resource tree, possibly expanding it in order to make it encompass any conflicting resources.”h]”hŒxInsert a resource into the resource tree, possibly expanding it in order to make it encompass any conflicting resources.”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mÿhjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œremove_resource (C function)”Œc.remove_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ*int remove_resource (struct resource *old)”h]”j)�”}”(hŒ)int remove_resource(struct resource *old)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÝh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝh²hh³jïh´M%ubj{)�”}”(hŒremove_resource”h]”j�)�”}”(hŒremove_resource”h]”hŒremove_resource”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÝh²hh³jïh´M%ubjœ)�”}”(hŒ(struct resource *old)”h]”j¢)�”}”(hŒstruct resource *old”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j>Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jsbŒc.remove_resource”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÝh²hh³jïh´M%ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÙh²hh³jïh´M%ubah}”(h]”jÔah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jïh´M%hjÖh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Remove a resource in the resource tree”h]”hŒ&Remove a resource in the resource tree”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M%hjžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÖh²hh³jïh´M%ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¹jæj¹jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX[**Parameters** ``struct resource *old`` resource to remove **Description** Returns 0 on success, -EINVAL if the resource is not valid. This function removes a resource previously inserted by insert_resource() or insert_resource_conflict(), and moves the children (if any) up to where they were before. insert_resource() and insert_resource_conflict() insert a new resource, and move any conflicting resources down to the children of the new resource. insert_resource(), insert_resource_conflict() and remove_resource() are intended for producers of resources, such as FW modules and bus drivers.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÃh]”hŒ Parameters”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M)hj½ubj )�”}”(hhh]”j)�”}”(hŒ,``struct resource *old`` resource to remove ”h]”(j)�”}”(hŒ``struct resource *old``”h]”j)�”}”(hjâh]”hŒstruct resource *old”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M&hjÜubj2)�”}”(hhh]”hÝ)�”}”(hŒresource to remove”h]”hŒresource to remove”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷h´M&hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷h´M&hjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj½ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M(hj½ubhÝ)�”}”(hŒ;Returns 0 on success, -EINVAL if the resource is not valid.”h]”hŒ;Returns 0 on success, -EINVAL if the resource is not valid.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M'hj½ubhÝ)�”}”(hX<This function removes a resource previously inserted by insert_resource() or insert_resource_conflict(), and moves the children (if any) up to where they were before. insert_resource() and insert_resource_conflict() insert a new resource, and move any conflicting resources down to the children of the new resource.”h]”hX<This function removes a resource previously inserted by insert_resource() or insert_resource_conflict(), and moves the children (if any) up to where they were before. insert_resource() and insert_resource_conflict() insert a new resource, and move any conflicting resources down to the children of the new resource.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M)hj½ubhÝ)�”}”(hŒ�insert_resource(), insert_resource_conflict() and remove_resource() are intended for producers of resources, such as FW modules and bus drivers.”h]”hŒ�insert_resource(), insert_resource_conflict() and remove_resource() are intended for producers of resources, such as FW modules and bus drivers.”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M/hj½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œadjust_resource (C function)”Œc.adjust_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒWint adjust_resource (struct resource *res, resource_size_t start, resource_size_t size)”h]”j)�”}”(hŒVint adjust_resource(struct resource *res, resource_size_t start, resource_size_t size)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj|h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mdubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|h²hh³jŽh´Mdubj{)�”}”(hŒadjust_resource”h]”j�)�”}”(hŒadjust_resource”h]”hŒadjust_resource”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj|h²hh³jŽh´Mdubjœ)�”}”(hŒC(struct resource *res, resource_size_t start, resource_size_t size)”h]”(j¢)�”}”(hŒstruct resource *res”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÝŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j£sbŒc.adjust_resource”†”asbuh1hhj¹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¹ubj�)�”}”(hŒres”h]”hŒres”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµubj¢)�”}”(hŒresource_size_t start”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j÷Œc.adjust_resource”†”asbuh1hhj+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+ubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµubj¢)�”}”(hŒresource_size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j|Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j÷Œc.adjust_resource”†”asbuh1hhjsubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjsubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj|h²hh³jŽh´Mdubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjxh²hh³jŽh´Mdubah}”(h]”jsah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŽh´Mdhjuh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"modify a resource's start and size”h]”hŒ$modify a resource’s start and size”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MdhjÍh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjuh²hh³jŽh´Mdubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjèjæjèjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX]**Parameters** ``struct resource *res`` resource to modify ``resource_size_t start`` new start value ``resource_size_t size`` new size **Description** Given an existing resource, change its start and size to match the arguments. Returns 0 on success, -EBUSY if it can't fit. Existing children of the resource are assumed to be immutable.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjòh]”hŒ Parameters”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhhjìubj )�”}”(hhh]”(j)�”}”(hŒ,``struct resource *res`` resource to modify ”h]”(j)�”}”(hŒ``struct resource *res``”h]”j)�”}”(hjh]”hŒstruct resource *res”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mehj ubj2)�”}”(hhh]”hÝ)�”}”(hŒresource to modify”h]”hŒresource to modify”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j&h´Mehj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&h´Mehjubj)�”}”(hŒ*``resource_size_t start`` new start value ”h]”(j)�”}”(hŒ``resource_size_t start``”h]”j)�”}”(hjJh]”hŒresource_size_t start”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MfhjDubj2)�”}”(hhh]”hÝ)�”}”(hŒnew start value”h]”hŒnew start value”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j_h´Mfhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j_h´Mfhjubj)�”}”(hŒ"``resource_size_t size`` new size ”h]”(j)�”}”(hŒ``resource_size_t size``”h]”j)�”}”(hjƒh]”hŒresource_size_t size”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mghj}ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew size”h]”hŒnew size”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j˜h´Mghj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˜h´Mghjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjìubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¾h]”hŒ Description”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MihjìubhÝ)�”}”(hŒ»Given an existing resource, change its start and size to match the arguments. Returns 0 on success, -EBUSY if it can't fit. Existing children of the resource are assumed to be immutable.”h]”hŒ½Given an existing resource, change its start and size to match the arguments. Returns 0 on success, -EBUSY if it can’t fit. Existing children of the resource are assumed to be immutable.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhhjìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__request_region (C function)”Œc.__request_region”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒƒstruct resource * __request_region (struct resource *parent, resource_size_t start, resource_size_t n, const char *name, int flags)”h]”j)�”}”(hŒ�struct resource *__request_region(struct resource *parent, resource_size_t start, resource_size_t n, const char *name, int flags)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÿh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿh²hh³jh´MXubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j$Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ__request_region”sbŒc.__request_region”†”asbuh1hhjÿh²hh³jh´MXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿh²hh³jh´MXubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÿh²hh³jh´MXubj{)�”}”(hŒ__request_region”h]”j�)�”}”(hj@h]”hŒ__request_region”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÿh²hh³jh´MXubjœ)�”}”(hŒ`(struct resource *parent, resource_size_t start, resource_size_t n, const char *name, int flags)”h]”(j¢)�”}”(hŒstruct resource *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j>Œc.__request_region”†”asbuh1hhjyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjyubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuubj¢)�”}”(hŒresource_size_t start”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjíubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jòŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j>Œc.__request_region”†”asbuh1hhjéubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuubj¢)�”}”(hŒresource_size_t n”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j:Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j>Œc.__request_region”†”asbuh1hhj1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1ubj�)�”}”(hj�h]”hŒn”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjxubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjxubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjxubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÿh²hh³jh´MXubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjûh²hh³jh´MXubah}”(h]”jöah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´MXhjøh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!create a new busy resource region”h]”hŒ!create a new busy resource region”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MXhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjøh²hh³jh´MXubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj7jæj7jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX**Parameters** ``struct resource *parent`` parent resource descriptor ``resource_size_t start`` resource start address ``resource_size_t n`` resource region size ``const char *name`` reserving caller's ID string ``int flags`` IO resource flags”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjAh]”hŒ Parameters”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M\hj;ubj )�”}”(hhh]”(j)�”}”(hŒ7``struct resource *parent`` parent resource descriptor ”h]”(j)�”}”(hŒ``struct resource *parent``”h]”j)�”}”(hj`h]”hŒstruct resource *parent”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MYhjZubj2)�”}”(hhh]”hÝ)�”}”(hŒparent resource descriptor”h]”hŒparent resource descriptor”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³juh´MYhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³juh´MYhjWubj)�”}”(hŒ1``resource_size_t start`` resource start address ”h]”(j)�”}”(hŒ``resource_size_t start``”h]”j)�”}”(hj™h]”hŒresource_size_t start”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MZhj“ubj2)�”}”(hhh]”hÝ)�”}”(hŒresource start address”h]”hŒresource start address”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j®h´MZhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j®h´MZhjWubj)�”}”(hŒ+``resource_size_t n`` resource region size ”h]”(j)�”}”(hŒ``resource_size_t n``”h]”j)�”}”(hjÒh]”hŒresource_size_t n”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M[hjÌubj2)�”}”(hhh]”hÝ)�”}”(hŒresource region size”h]”hŒresource region size”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jçh´M[hjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jçh´M[hjWubj)�”}”(hŒ2``const char *name`` reserving caller's ID string ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hj h]”hŒconst char *name”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M\hjubj2)�”}”(hhh]”hÝ)�”}”(hŒreserving caller's ID string”h]”hŒreserving caller’s ID string”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´M\hj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M\hjWubj)�”}”(hŒ``int flags`` IO resource flags”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hjDh]”hŒ int flags”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M^hj>ubj2)�”}”(hhh]”hÝ)�”}”(hŒIO resource flags”h]”hŒIO resource flags”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M]hjZubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jYh´M^hjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__release_region (C function)”Œc.__release_region”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒYvoid __release_region (struct resource *parent, resource_size_t start, resource_size_t n)”h]”j)�”}”(hŒXvoid __release_region(struct resource *parent, resource_size_t start, resource_size_t n)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjšh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšh²hh³j¬h´Mzubj{)�”}”(hŒ__release_region”h]”j�)�”}”(hŒ__release_region”h]”hŒ__release_region”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjšh²hh³j¬h´Mzubjœ)�”}”(hŒC(struct resource *parent, resource_size_t start, resource_size_t n)”h]”(j¢)�”}”(hŒstruct resource *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jûŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÁsbŒc.__release_region”†”asbuh1hhj×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj×ubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓubj¢)�”}”(hŒresource_size_t start”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jRŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒc.__release_region”†”asbuh1hhjIubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjIubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓubj¢)�”}”(hŒresource_size_t n”h]”(h)�”}”(hhh]”j�)�”}”(hŒresource_size_t”h]”hŒresource_size_t”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jšŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒc.__release_region”†”asbuh1hhj‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘ubj�)�”}”(hj�h]”hŒn”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjšh²hh³j¬h´Mzubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj–h²hh³j¬h´Mzubah}”(h]”j‘ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¬h´Mzhj“h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-release a previously reserved resource region”h]”hŒ-release a previously reserved resource region”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mzhjêh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj“h²hh³j¬h´Mzubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hŒþ**Parameters** ``struct resource *parent`` parent resource descriptor ``resource_size_t start`` resource start address ``resource_size_t n`` resource region size **Description** The described resource region must match a currently busy region.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M~hj ubj )�”}”(hhh]”(j)�”}”(hŒ7``struct resource *parent`` parent resource descriptor ”h]”(j)�”}”(hŒ``struct resource *parent``”h]”j)�”}”(hj.h]”hŒstruct resource *parent”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M{hj(ubj2)�”}”(hhh]”hÝ)�”}”(hŒparent resource descriptor”h]”hŒparent resource descriptor”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jCh´M{hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jCh´M{hj%ubj)�”}”(hŒ1``resource_size_t start`` resource start address ”h]”(j)�”}”(hŒ``resource_size_t start``”h]”j)�”}”(hjgh]”hŒresource_size_t start”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M|hjaubj2)�”}”(hhh]”hÝ)�”}”(hŒresource start address”h]”hŒresource start address”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|h´M|hj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|h´M|hj%ubj)�”}”(hŒ+``resource_size_t n`` resource region size ”h]”(j)�”}”(hŒ``resource_size_t n``”h]”j)�”}”(hj h]”hŒresource_size_t n”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M}hjšubj2)�”}”(hhh]”hÝ)�”}”(hŒresource region size”h]”hŒresource region size”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµh´M}hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµh´M}hj%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÛh]”hŒ Description”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mhj ubhÝ)�”}”(hŒAThe described resource region must match a currently busy region.”h]”hŒAThe described resource region must match a currently busy region.”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M~hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"devm_request_resource (C function)”Œc.devm_request_resource”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ[int devm_request_resource (struct device *dev, struct resource *root, struct resource *new)”h]”j)�”}”(hŒZint devm_request_resource(struct device *dev, struct resource *root, struct resource *new)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj h²hh³j. h´M†ubj{)�”}”(hŒdevm_request_resource”h]”j�)�”}”(hŒdevm_request_resource”h]”hŒdevm_request_resource”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj= ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj h²hh³j. h´M†ubjœ)�”}”(hŒA(struct device *dev, struct resource *root, struct resource *new)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjY ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjY ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjx ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j} Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jC sbŒc.devm_request_resource”†”asbuh1hhjY ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj› h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjY ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj© h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjY ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjY ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjU ubj¢)�”}”(hŒstruct resource *root”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjË ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjË ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjí h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjê ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jï Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j— Œc.devm_request_resource”†”asbuh1hhjË ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjË ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjË ubj�)�”}”(hŒroot”h]”hŒroot”…”�”}”(hj&!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjË ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjU ubj¢)�”}”(hŒstruct resource *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj?!h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;!ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hj]!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_!Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j— Œc.devm_request_resource”†”asbuh1hhj;!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;!ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‰!h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;!ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj–!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjU ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj h²hh³j. h´M†ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj h²hh³j. h´M†ubah}”(h]”j ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j. h´M†hj h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-request and reserve an I/O or memory resource”h]”hŒ-request and reserve an I/O or memory resource”…”�”}”(hjÀ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M†hj½!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj h²hh³j. h´M†ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjØ!jæjØ!jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hXR**Parameters** ``struct device *dev`` device for which to request the resource ``struct resource *root`` root of the resource tree from which to request the resource ``struct resource *new`` descriptor of the resource to request **Description** This is a device-managed version of request_resource(). There is usually no need to release resources requested by this function explicitly since that will be taken care of when the device is unbound from its driver. If for some reason the resource needs to be released explicitly, because of ordering issues for example, drivers must call devm_release_resource() rather than the regular release_resource(). When a conflict is detected between any existing resources and the newly requested resource, an error message will be printed. Returns 0 on success or a negative error code on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjâ!h]”hŒ Parameters”…”�”}”(hjä!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjà!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MŠhjÜ!ubj )�”}”(hhh]”(j)�”}”(hŒ@``struct device *dev`` device for which to request the resource ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj"h]”hŒstruct device *dev”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M‡hjû!ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(device for which to request the resource”h]”hŒ(device for which to request the resource”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j"h´M‡hj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjû!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"h´M‡hjø!ubj)�”}”(hŒW``struct resource *root`` root of the resource tree from which to request the resource ”h]”(j)�”}”(hŒ``struct resource *root``”h]”j)�”}”(hj:"h]”hŒstruct resource *root”…”�”}”(hj<"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mˆhj4"ubj2)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hj #h²hh³j#h´M·ubj{)�”}”(hŒdevm_release_resource”h]”j�)�”}”(hŒdevm_release_resource”h]”hŒdevm_release_resource”…”�”}”(hj2#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.#ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj #h²hh³j#h´M·ubjœ)�”}”(hŒ*(struct device *dev, struct resource *new)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjN#h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJ#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ#ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjl#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hji#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jn#Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j4#sbŒc.devm_release_resource”†”asbuh1hhjJ#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ#ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjš#h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjJ#ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj§#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJ#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjF#ubj¢)�”}”(hŒstruct resource *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÀ#h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¼#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼#ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjÞ#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jà#Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jˆ#Œc.devm_release_resource”†”asbuh1hhj¼#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼#ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj $h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¼#ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjF#ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj #h²hh³j#h´M·ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj #h²hh³j#h´M·ubah}”(h]”j#ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j#h´M·hj#h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'release a previously requested resource”h]”hŒ'release a previously requested resource”…”�”}”(hjA$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M·hj>$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj#h²hh³j#h´M·ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjY$jæjY$jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hŒí**Parameters** ``struct device *dev`` device for which to release the resource ``struct resource *new`` descriptor of the resource to release **Description** Releases a resource previously requested using devm_request_resource().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjc$h]”hŒ Parameters”…”�”}”(hje$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhja$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M»hj]$ubj )�”}”(hhh]”(j)�”}”(hŒ@``struct device *dev`` device for which to release the resource ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj‚$h]”hŒstruct device *dev”…”�”}”(hj„$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M¸hj|$ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(device for which to release the resource”h]”hŒ(device for which to release the resource”…”�”}”(hj›$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j—$h´M¸hj˜$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—$h´M¸hjy$ubj)�”}”(hŒ?``struct resource *new`` descriptor of the resource to release ”h]”(j)�”}”(hŒ``struct resource *new``”h]”j)�”}”(hj»$h]”hŒstruct resource *new”…”�”}”(hj½$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M¹hjµ$ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%descriptor of the resource to release”h]”hŒ%descriptor of the resource to release”…”�”}”(hjÔ$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÐ$h´M¹hjÑ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµ$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÐ$h´M¹hjy$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj]$ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjö$h]”hŒ Description”…”�”}”(hjø$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjô$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M»hj]$ubhÝ)�”}”(hŒGReleases a resource previously requested using devm_request_resource().”h]”hŒGReleases a resource previously requested using devm_request_resource().”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´Mºhj]$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)devm_request_free_mem_region (C function)”Œc.devm_request_free_mem_region”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒnstruct resource * devm_request_free_mem_region (struct device *dev, struct resource *base, unsigned long size)”h]”j)�”}”(hŒlstruct resource *devm_request_free_mem_region(struct device *dev, struct resource *base, unsigned long size)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj;%h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj7%h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7%h²hh³jH%h´M1ubh)�”}”(hhh]”j�)�”}”(hŒresource”•3h]”hŒresource”…”�”}”(hjZ%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjW%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j\%Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œdevm_request_free_mem_region”sbŒc.devm_request_free_mem_region”†”asbuh1hhj7%h²hh³jH%h´M1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7%h²hh³jH%h´M1ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‰%h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj7%h²hh³jH%h´M1ubj{)�”}”(hŒdevm_request_free_mem_region”h]”j�)�”}”(hjx%h]”hŒdevm_request_free_mem_region”…”�”}”(hjš%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–%ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj7%h²hh³jH%h´M1ubjœ)�”}”(hŒ?(struct device *dev, struct resource *base, unsigned long size)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjµ%h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj±%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂ%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±%ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÓ%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐ%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÕ%Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jv%Œc.devm_request_free_mem_region”†”asbuh1hhj±%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±%ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÿ%h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj±%ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj &h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj­%ubj¢)�”}”(hŒstruct resource *base”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj%&h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!&ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjC&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jE&Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jv%Œc.devm_request_free_mem_region”†”asbuh1hhj!&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!&ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjo&h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!&ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hj|&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj­%ubj¢)�”}”(hŒunsigned long size”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj•&h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘&ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj±&h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘&ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjÍ&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj­%ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj7%h²hh³jH%h´M1ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj3%h²hh³jH%h´M1ubah}”(h]”j.%ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jH%h´M1hj0%h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*find free region for device private memory”h]”hŒ*find free region for device private memory”…”�”}”(hj÷&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M1hjô&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj0%h²hh³jH%h´M1ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj'jæj'jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX¡**Parameters** ``struct device *dev`` device struct to bind the resource to ``struct resource *base`` resource tree to look in ``unsigned long size`` size in bytes of the device memory to add **Description** This function tries to find an empty range of physical address big enough to contain the new resource, so that it can later be hotplugged as ZONE_DEVICE memory, which in turn allocates struct pages.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj'h]”hŒ Parameters”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M5hj'ubj )�”}”(hhh]”(j)�”}”(hŒ=``struct device *dev`` device struct to bind the resource to ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj8'h]”hŒstruct device *dev”…”�”}”(hj:'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M3hj2'ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%device struct to bind the resource to”h]”hŒ%device struct to bind the resource to”…”�”}”(hjQ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jM'h´M3hjN'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jM'h´M3hj/'ubj)�”}”(hŒ3``struct resource *base`` resource tree to look in ”h]”(j)�”}”(hŒ``struct resource *base``”h]”j)�”}”(hjq'h]”hŒstruct resource *base”…”�”}”(hjs'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M5hjk'ubj2)�”}”(hhh]”hÝ)�”}”(hŒresource tree to look in”h]”hŒresource tree to look in”…”�”}”(hjŠ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†'h´M5hj‡'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjk'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†'h´M5hj/'ubj)�”}”(hŒA``unsigned long size`` size in bytes of the device memory to add ”h]”(j)�”}”(hŒ``unsigned long size``”h]”j)�”}”(hjª'h]”hŒunsigned long size”…”�”}”(hj¬'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M4hj¤'ubj2)�”}”(hhh]”hÝ)�”}”(hŒ)size in bytes of the device memory to add”h]”hŒ)size in bytes of the device memory to add”…”�”}”(hjÃ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¿'h´M4hjÀ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¤'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿'h´M4hj/'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj'ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjå'h]”hŒ Description”…”�”}”(hjç'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M6hj'ubhÝ)�”}”(hŒÆThis function tries to find an empty range of physical address big enough to contain the new resource, so that it can later be hotplugged as ZONE_DEVICE memory, which in turn allocates struct pages.”h]”hŒÆThis function tries to find an empty range of physical address big enough to contain the new resource, so that it can later be hotplugged as ZONE_DEVICE memory, which in turn allocates struct pages.”…”�”}”(hjû'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´M6hj'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"alloc_free_mem_region (C function)”Œc.alloc_free_mem_region”hNt”auh1hýhjšçh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒzstruct resource * alloc_free_mem_region (struct resource *base, unsigned long size, unsigned long align, const char *name)”h]”j)�”}”(hŒxstruct resource *alloc_free_mem_region(struct resource *base, unsigned long size, unsigned long align, const char *name)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj*(h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj&(h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&(h²hh³j7(h´MQubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjI(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjF(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jK(Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œalloc_free_mem_region”sbŒc.alloc_free_mem_region”†”asbuh1hhj&(h²hh³j7(h´MQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&(h²hh³j7(h´MQubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjx(h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj&(h²hh³j7(h´MQubj{)�”}”(hŒalloc_free_mem_region”h]”j�)�”}”(hjg(h]”hŒalloc_free_mem_region”…”�”}”(hj‰(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…(ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj&(h²hh³j7(h´MQubjœ)�”}”(hŒR(struct resource *base, unsigned long size, unsigned long align, const char *name)”h]”(j¢)�”}”(hŒstruct resource *base”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¤(h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj (ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj (ubh)�”}”(hhh]”j�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjÂ(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÄ(Œmodname”NŒ classname”Nj] j` )�”}”jc ]”je(Œc.alloc_free_mem_region”†”asbuh1hhj (ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj (ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjî(h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj (ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hjû(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj (ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjœ(ubj¢)�”}”(hŒunsigned long size”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj")h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj0)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjL)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjœ(ubj¢)�”}”(hŒunsigned long align”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hje)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhja)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hja)ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhja)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hja)ubj�)�”}”(hŒalign”h]”hŒalign”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hja)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjœ(ubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¶)h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj²)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj²)ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÑ)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj²)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj²)ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjí)h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj²)ubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjú)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjœ(ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj&(h²hh³j7(h´MQubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj"(h²hh³j7(h´MQubah}”(h]”j(ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j7(h´MQhj(h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'find a free region relative to **base**”h]”(hŒfind a free region relative to ”…”�”}”(hj$*h²hh³Nh´Nubjõ)�”}”(hŒ**base**”h]”hŒbase”…”�”}”(hj,*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MQhj!*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj(h²hh³j7(h´MQubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjJ*jæjJ*jç‰jè‰jé‰uh1jh²hhjšçh³Nh´Nubjë)�”}”(hX"**Parameters** ``struct resource *base`` resource that will parent the new resource ``unsigned long size`` size in bytes of memory to allocate from **base** ``unsigned long align`` alignment requirements for the allocation ``const char *name`` resource name **Description** Buses like CXL, that can dynamically instantiate new memory regions, need a method to allocate physical address space for those regions. Allocate and insert a new resource to cover a free, unclaimed by a descendant of **base**, range in the span of **base**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjT*h]”hŒ Parameters”…”�”}”(hjV*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjR*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MUhjN*ubj )�”}”(hhh]”(j)�”}”(hŒE``struct resource *base`` resource that will parent the new resource ”h]”(j)�”}”(hŒ``struct resource *base``”h]”j)�”}”(hjs*h]”hŒstruct resource *base”…”�”}”(hju*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjq*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MRhjm*ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*resource that will parent the new resource”h]”hŒ*resource that will parent the new resource”…”�”}”(hjŒ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆ*h´MRhj‰*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjm*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆ*h´MRhjj*ubj)�”}”(hŒI``unsigned long size`` size in bytes of memory to allocate from **base** ”h]”(j)�”}”(hŒ``unsigned long size``”h]”j)�”}”(hj¬*h]”hŒunsigned long size”…”�”}”(hj®*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjª*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MShj¦*ubj2)�”}”(hhh]”hÝ)�”}”(hŒ1size in bytes of memory to allocate from **base**”h]”(hŒ)size in bytes of memory to allocate from ”…”�”}”(hjÅ*h²hh³Nh´Nubjõ)�”}”(hŒ**base**”h]”hŒbase”…”�”}”(hjÍ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁ*h´MShjÂ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁ*h´MShjj*ubj)�”}”(hŒB``unsigned long align`` alignment requirements for the allocation ”h]”(j)�”}”(hŒ``unsigned long align``”h]”j)�”}”(hjó*h]”hŒunsigned long align”…”�”}”(hjõ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MThjí*ubj2)�”}”(hhh]”hÝ)�”}”(hŒ)alignment requirements for the allocation”h]”hŒ)alignment requirements for the allocation”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+h´MThj +ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjí*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+h´MThjj*ubj)�”}”(hŒ#``const char *name`` resource name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hj,+h]”hŒconst char *name”…”�”}”(hj.+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MUhj&+ubj2)�”}”(hhh]”hÝ)�”}”(hŒ resource name”h]”hŒ resource name”…”�”}”(hjE+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jA+h´MUhjB+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj&+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jA+h´MUhjj*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjN*ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjg+h]”hŒ Description”…”�”}”(hji+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhje+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MWhjN*ubhÝ)�”}”(hXBuses like CXL, that can dynamically instantiate new memory regions, need a method to allocate physical address space for those regions. Allocate and insert a new resource to cover a free, unclaimed by a descendant of **base**, range in the span of **base**.”h]”(hŒÚBuses like CXL, that can dynamically instantiate new memory regions, need a method to allocate physical address space for those regions. Allocate and insert a new resource to cover a free, unclaimed by a descendant of ”…”�”}”(hj}+h²hh³Nh´Nubjõ)�”}”(hŒ**base**”h]”hŒbase”…”�”}”(hj…+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj}+ubhŒ, range in the span of ”…”�”}”(hj}+h²hh³Nh´Nubjõ)�”}”(hŒ**base**”h]”hŒbase”…”�”}”(hj—+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj}+ubhŒ.”…”�”}”(hj}+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:271: ./kernel/resource.c”h´MVhjN*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjšçh²hh³Nh´Nubeh}”(h]”Œresources-management”ah ]”h"]”Œresources management”ah$]”h&]”uh1hµhjfäh²hh³hÊh´M ubh¶)�”}”(hhh]”(h»)�”}”(hŒ MTRR Handling”h]”hŒ MTRR Handling”…”�”}”(hjÂ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj¿+h²hh³hÊh´Mubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œarch_phys_wc_add (C function)”Œc.arch_phys_wc_add”hNt”auh1hýhj¿+h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=int arch_phys_wc_add (unsigned long base, unsigned long size)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hjå+h²hh³j÷+h´MÕubj{)�”}”(hŒarch_phys_wc_add”h]”j�)�”}”(hŒarch_phys_wc_add”h]”hŒarch_phys_wc_add”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjå+h²hh³j÷+h´MÕubjœ)�”}”(hŒ((unsigned long base, unsigned long size)”h]”(j¢)�”}”(hŒunsigned long base”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj&,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj",ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj",ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjB,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj",ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj",ubj�)�”}”(hŒbase”h]”hŒbase”…”�”}”(hj^,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj",ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,ubj¢)�”}”(hŒunsigned long size”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjw,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjs,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjs,ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj“,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjs,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjs,ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj¯,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjs,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjå+h²hh³j÷+h´MÕubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjá+h²hh³j÷+h´MÕubah}”(h]”jÜ+ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j÷+h´MÕhjÞ+h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5add a WC MTRR and handle errors if PAT is unavailable”h]”hŒ5add a WC MTRR and handle errors if PAT is unavailable”…”�”}”(hjÙ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œd/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:277: ./arch/x86/kernel/cpu/mtrr/mtrr.c”h´MÕhjÖ,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÞ+h²hh³j÷+h´MÕubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjñ,jæjñ,jç‰jè‰jé‰uh1jh²hhj¿+h³Nh´Nubjë)�”}”(hXõ**Parameters** ``unsigned long base`` Physical base address ``unsigned long size`` Size of region **Description** If PAT is available, this does nothing. If PAT is unavailable, it attempts to add a WC MTRR covering size bytes starting at base and logs an error if this fails. The called should provide a power of two size on an equivalent power of two boundary. Drivers must store the return value to pass to mtrr_del_wc_if_needed, but drivers should not try to interpret that return value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjû,h]”hŒ Parameters”…”�”}”(hjý,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjù,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œd/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:277: ./arch/x86/kernel/cpu/mtrr/mtrr.c”h´MÙhjõ,ubj )�”}”(hhh]”(j)�”}”(hŒ-``unsigned long base`` Physical base address ”h]”(j)�”}”(hŒ``unsigned long base``”h]”j)�”}”(hj-h]”hŒunsigned long base”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œd/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:277: ./arch/x86/kernel/cpu/mtrr/mtrr.c”h´MÖhj-ubj2)�”}”(hhh]”hÝ)�”}”(hŒPhysical base address”h]”hŒPhysical base address”…”�”}”(hj3-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j/-h´MÖhj0-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j/-h´MÖhj-ubj)�”}”(hŒ&``unsigned long size`` Size of region ”h]”(j)�”}”(hŒ``unsigned long size``”h]”j)�”}”(hjS-h]”hŒunsigned long size”…”�”}”(hjU-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œd/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:277: ./arch/x86/kernel/cpu/mtrr/mtrr.c”h´M×hjM-ubj2)�”}”(hhh]”hÝ)�”}”(hŒSize of region”h]”hŒSize of region”…”�”}”(hjl-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh-h´M×hji-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjM-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh-h´M×hj-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjõ,ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŽ-h]”hŒ Description”…”�”}”(hj�-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œd/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:277: ./arch/x86/kernel/cpu/mtrr/mtrr.c”h´MÙhjõ,ubhÝ)�”}”(hŒ¢If PAT is available, this does nothing. If PAT is unavailable, it attempts to add a WC MTRR covering size bytes starting at base and logs an error if this fails.”h]”hŒ¢If PAT is available, this does nothing. If PAT is unavailable, it attempts to add a WC MTRR covering size bytes starting at base and logs an error if this fails.”…”�”}”(hj¤-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œd/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:277: ./arch/x86/kernel/cpu/mtrr/mtrr.c”h´MØhjõ,ubhÝ)�”}”(hŒUThe called should provide a power of two size on an equivalent power of two boundary.”h]”hŒUThe called should provide a power of two size on an equivalent power of two boundary.”…”�”}”(hj³-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œd/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:277: ./arch/x86/kernel/cpu/mtrr/mtrr.c”h´MÜhjõ,ubhÝ)�”}”(hŒ€Drivers must store the return value to pass to mtrr_del_wc_if_needed, but drivers should not try to interpret that return value.”h]”hŒ€Drivers must store the return value to pass to mtrr_del_wc_if_needed, but drivers should not try to interpret that return value.”…”�”}”(hjÂ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œd/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:277: ./arch/x86/kernel/cpu/mtrr/mtrr.c”h´Mßhjõ,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj¿+h²hh³Nh´Nubeh}”(h]”Œ mtrr-handling”ah ]”h"]”Œ mtrr handling”ah$]”h&]”uh1hµhjfäh²hh³hÊh´Mubeh}”(h]”Œhardware-interfaces”ah ]”h"]”Œhardware interfaces”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒSecurity Framework”h]”hŒSecurity Framework”…”�”}”(hjë-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjè-h²hh³hÊh´Mubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_file_alloc (C function)”Œc.lsm_file_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ&int lsm_file_alloc (struct file *file)”h]”j)�”}”(hŒ%int lsm_file_alloc(struct file *file)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj.h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.h²hh³j .h´K�ubj{)�”}”(hŒlsm_file_alloc”h]”j�)�”}”(hŒlsm_file_alloc”h]”hŒlsm_file_alloc”…”�”}”(hj3.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/.ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj.h²hh³j .h´K�ubjœ)�”}”(hŒ(struct file *file)”h]”j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjO.h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjK.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjK.ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjm.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjj.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jo.Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j5.sbŒc.lsm_file_alloc”†”asbuh1hhjK.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjK.ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj›.h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjK.ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj¨.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjK.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjG.ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj.h²hh³j .h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj .h²hh³j .h´K�ubah}”(h]”j.ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j .h´K�hj.h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a composite file blob”h]”hŒallocate a composite file blob”…”�”}”(hjÒ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K�hjÏ.h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj.h²hh³j .h´K�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjê.jæjê.jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ´**Parameters** ``struct file *file`` the file that needs a blob **Description** Allocate the file blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjô.h]”hŒ Parameters”…”�”}”(hjö.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjò.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K¡hjî.ubj )�”}”(hhh]”j)�”}”(hŒ1``struct file *file`` the file that needs a blob ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hj/h]”hŒstruct file *file”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Kžhj /ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe file that needs a blob”h]”hŒthe file that needs a blob”…”�”}”(hj,/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(/h´Kžhj)/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj /ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(/h´Kžhj /ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjî.ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjN/h]”hŒ Description”…”�”}”(hjP/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjL/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K hjî.ubhÝ)�”}”(hŒ*Allocate the file blob for all the modules”h]”hŒ*Allocate the file blob for all the modules”…”�”}”(hjd/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KŸhjî.ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hjs/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K¡hjî.ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#lsm_backing_file_alloc (C function)”Œc.lsm_backing_file_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6int lsm_backing_file_alloc (struct file *backing_file)”h]”j)�”}”(hŒ5int lsm_backing_file_alloc(struct file *backing_file)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¢/h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjž/h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K²ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±/h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž/h²hh³j°/h´K²ubj{)�”}”(hŒlsm_backing_file_alloc”h]”j�)�”}”(hŒlsm_backing_file_alloc”h]”hŒlsm_backing_file_alloc”…”�”}”(hjÃ/h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿/ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjž/h²hh³j°/h´K²ubjœ)�”}”(hŒ(struct file *backing_file)”h]”j¢)�”}”(hŒstruct file *backing_file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjß/h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÛ/ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì/h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ/ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjý/h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjú/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÿ/Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÅ/sbŒc.lsm_backing_file_alloc”†”asbuh1hhjÛ/ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ/ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj+0h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÛ/ubj�)�”}”(hŒ backing_file”h]”hŒ backing_file”…”�”}”(hj80h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ/ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×/ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjž/h²hh³j°/h´K²ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjš/h²hh³j°/h´K²ubah}”(h]”j•/ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j°/h´K²hj—/h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&allocate a composite backing file blob”h]”hŒ&allocate a composite backing file blob”…”�”}”(hjb0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K²hj_0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj—/h²hh³j°/h´K²ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjz0jæjz0jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ»**Parameters** ``struct file *backing_file`` the backing file **Description** Allocate the backing file blob for all the modules. Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj„0h]”hŒ Parameters”…”�”}”(hj†0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K¶hj~0ubj )�”}”(hhh]”j)�”}”(hŒ/``struct file *backing_file`` the backing file ”h]”(j)�”}”(hŒ``struct file *backing_file``”h]”j)�”}”(hj£0h]”hŒstruct file *backing_file”…”�”}”(hj¥0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K³hj�0ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe backing file”h]”hŒthe backing file”…”�”}”(hj¼0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¸0h´K³hj¹0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�0ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¸0h´K³hjš0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj~0ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÞ0h]”hŒ Description”…”�”}”(hjà0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜ0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Kµhj~0ubhÝ)�”}”(hŒ3Allocate the backing file blob for all the modules.”h]”hŒ3Allocate the backing file blob for all the modules.”…”�”}”(hjô0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K´hj~0ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´K¶hj~0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_blob_alloc (C function)”Œc.lsm_blob_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int lsm_blob_alloc (void **dest, size_t size, gfp_t gfp)”h]”j)�”}”(hŒ7int lsm_blob_alloc(void **dest, size_t size, gfp_t gfp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj21h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj.1h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.1h²hh³j@1h´KÊubj{)�”}”(hŒlsm_blob_alloc”h]”j�)�”}”(hŒlsm_blob_alloc”h]”hŒlsm_blob_alloc”…”�”}”(hjS1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjO1ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj.1h²hh³j@1h´KÊubjœ)�”}”(hŒ%(void **dest, size_t size, gfp_t gfp)”h]”(j¢)�”}”(hŒ void **dest”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjo1h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjk1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk1ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹1h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjk1ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj˜1h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjk1ubj�)�”}”(hŒdest”h]”hŒdest”…”�”}”(hj¥1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjk1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjg1ubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjÁ1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÃ1Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jU1sbŒc.lsm_blob_alloc”†”asbuh1hhjº1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjº1ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjï1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjº1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjg1ubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj 2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j 2Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÝ1Œc.lsm_blob_alloc”†”asbuh1hhj2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2ubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj72h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjg1ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj.1h²hh³j@1h´KÊubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj*1h²hh³j@1h´KÊubah}”(h]”j%1ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j@1h´KÊhj'1h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a composite blob”h]”hŒallocate a composite blob”…”�”}”(hja2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KÊhj^2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj'1h²hh³j@1h´KÊubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjy2jæjy2jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒò**Parameters** ``void **dest`` the destination for the blob ``size_t size`` the size of the blob ``gfp_t gfp`` allocation type **Description** Allocate a blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjƒ2h]”hŒ Parameters”…”�”}”(hj…2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KÎhj}2ubj )�”}”(hhh]”(j)�”}”(hŒ-``void **dest`` the destination for the blob ”h]”(j)�”}”(hŒ``void **dest``”h]”j)�”}”(hj¢2h]”hŒ void **dest”…”�”}”(hj¤2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj 2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KËhjœ2ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe destination for the blob”h]”hŒthe destination for the blob”…”�”}”(hj»2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·2h´KËhj¸2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·2h´KËhj™2ubj)�”}”(hŒ%``size_t size`` the size of the blob ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjÛ2h]”hŒ size_t size”…”�”}”(hjÝ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KÌhjÕ2ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe size of the blob”h]”hŒthe size of the blob”…”�”}”(hjô2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jð2h´KÌhjñ2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕ2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð2h´KÌhj™2ubj)�”}”(hŒ``gfp_t gfp`` allocation type ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hj3h]”hŒ gfp_t gfp”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KÍhj3ubj2)�”}”(hhh]”hÝ)�”}”(hŒallocation type”h]”hŒallocation type”…”�”}”(hj-3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j)3h´KÍhj*3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)3h´KÍhj™2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj}2ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjO3h]”hŒ Description”…”�”}”(hjQ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjM3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KÏhj}2ubhÝ)�”}”(hŒ#Allocate a blob for all the modules”h]”hŒ#Allocate a blob for all the modules”…”�”}”(hje3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KÎhj}2ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hjt3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KÐhj}2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_cred_alloc (C function)”Œc.lsm_cred_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1int lsm_cred_alloc (struct cred *cred, gfp_t gfp)”h]”j)�”}”(hŒ0int lsm_cred_alloc(struct cred *cred, gfp_t gfp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj£3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŸ3h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Káubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŸ3h²hh³j±3h´Káubj{)�”}”(hŒlsm_cred_alloc”h]”j�)�”}”(hŒlsm_cred_alloc”h]”hŒlsm_cred_alloc”…”�”}”(hjÄ3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀ3ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŸ3h²hh³j±3h´Káubjœ)�”}”(hŒ(struct cred *cred, gfp_t gfp)”h]”(j¢)�”}”(hŒstruct cred *cred”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjà3h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÜ3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜ3ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjþ3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjû3ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÆ3sbŒc.lsm_cred_alloc”†”asbuh1hhjÜ3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜ3ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj,4h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÜ3ubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj94h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜ3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjØ3ubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjU4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjR4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jW4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j4Œc.lsm_cred_alloc”†”asbuh1hhjN4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjN4ubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj�4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjØ3ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjŸ3h²hh³j±3h´Káubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj›3h²hh³j±3h´Káubah}”(h]”j–3ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j±3h´Káhj˜3h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a composite cred blob”h]”hŒallocate a composite cred blob”…”�”}”(hj«4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Káhj¨4h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj˜3h²hh³j±3h´Káubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÃ4jæjÃ4jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÕ**Parameters** ``struct cred *cred`` the cred that needs a blob ``gfp_t gfp`` allocation type **Description** Allocate the cred blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÍ4h]”hŒ Parameters”…”�”}”(hjÏ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjË4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KåhjÇ4ubj )�”}”(hhh]”(j)�”}”(hŒ1``struct cred *cred`` the cred that needs a blob ”h]”(j)�”}”(hŒ``struct cred *cred``”h]”j)�”}”(hjì4h]”hŒstruct cred *cred”…”�”}”(hjî4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjê4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Kâhjæ4ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe cred that needs a blob”h]”hŒthe cred that needs a blob”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j5h´Kâhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæ4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j5h´Kâhjã4ubj)�”}”(hŒ``gfp_t gfp`` allocation type ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hj%5h]”hŒ gfp_t gfp”…”�”}”(hj'5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Kãhj5ubj2)�”}”(hhh]”hÝ)�”}”(hŒallocation type”h]”hŒallocation type”…”�”}”(hj>5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:5h´Kãhj;5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:5h´Kãhjã4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÇ4ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj`5h]”hŒ Description”…”�”}”(hjb5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KåhjÇ4ubhÝ)�”}”(hŒ*Allocate the cred blob for all the modules”h]”hŒ*Allocate the cred blob for all the modules”…”�”}”(hjv5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KähjÇ4ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hj…5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KæhjÇ4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_inode_alloc (C function)”Œc.lsm_inode_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4int lsm_inode_alloc (struct inode *inode, gfp_t gfp)”h]”j)�”}”(hŒ3int lsm_inode_alloc(struct inode *inode, gfp_t gfp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj´5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj°5h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Kïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°5h²hh³jÂ5h´Kïubj{)�”}”(hŒlsm_inode_alloc”h]”j�)�”}”(hŒlsm_inode_alloc”h]”hŒlsm_inode_alloc”…”�”}”(hjÕ5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÑ5ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj°5h²hh³jÂ5h´Kïubjœ)�”}”(hŒ (struct inode *inode, gfp_t gfp)”h]”(j¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjñ5h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjí5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjí5ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj 6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j6Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j×5sbŒc.lsm_inode_alloc”†”asbuh1hhjí5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjí5ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj=6h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjí5ubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjJ6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjí5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjé5ubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjf6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjc6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jh6Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j+6Œc.lsm_inode_alloc”†”asbuh1hhj_6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_6ubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj’6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjé5ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj°5h²hh³jÂ5h´Kïubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¬5h²hh³jÂ5h´Kïubah}”(h]”j§5ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÂ5h´Kïhj©5h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a composite inode blob”h]”hŒallocate a composite inode blob”…”�”}”(hj¼6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Kïhj¹6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj©5h²hh³jÂ5h´Kïubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÔ6jæjÔ6jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÚ**Parameters** ``struct inode *inode`` the inode that needs a blob ``gfp_t gfp`` allocation flags **Description** Allocate the inode blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÞ6h]”hŒ Parameters”…”�”}”(hjà6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜ6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KóhjØ6ubj )�”}”(hhh]”(j)�”}”(hŒ4``struct inode *inode`` the inode that needs a blob ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hjý6h]”hŒstruct inode *inode”…”�”}”(hjÿ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Kðhj÷6ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe inode that needs a blob”h]”hŒthe inode that needs a blob”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j7h´Kðhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj÷6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7h´Kðhjô6ubj)�”}”(hŒ``gfp_t gfp`` allocation flags ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hj67h]”hŒ gfp_t gfp”…”�”}”(hj87h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj47ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Kñhj07ubj2)�”}”(hhh]”hÝ)�”}”(hŒallocation flags”h]”hŒallocation flags”…”�”}”(hjO7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jK7h´KñhjL7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj07ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jK7h´Kñhjô6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjØ6ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjq7h]”hŒ Description”…”�”}”(hjs7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjo7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KóhjØ6ubhÝ)�”}”(hŒ+Allocate the inode blob for all the modules”h]”hŒ+Allocate the inode blob for all the modules”…”�”}”(hj‡7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KòhjØ6ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hj–7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KôhjØ6ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_task_alloc (C function)”Œc.lsm_task_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-int lsm_task_alloc (struct task_struct *task)”h]”j)�”}”(hŒ,int lsm_task_alloc(struct task_struct *task)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÅ7h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁ7h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁ7h²hh³jÓ7h´Mubj{)�”}”(hŒlsm_task_alloc”h]”j�)�”}”(hŒlsm_task_alloc”h]”hŒlsm_task_alloc”…”�”}”(hjæ7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâ7ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÁ7h²hh³jÓ7h´Mubjœ)�”}”(hŒ(struct task_struct *task)”h]”j¢)�”}”(hŒstruct task_struct *task”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjþ7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ7ubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj 8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j"8Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jè7sbŒc.lsm_task_alloc”†”asbuh1hhjþ7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ7ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjN8h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjþ7ubj�)�”}”(hŒtask”h]”hŒtask”…”�”}”(hj[8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjú7ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÁ7h²hh³jÓ7h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj½7h²hh³jÓ7h´Mubah}”(h]”j¸7ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÓ7h´Mhjº7h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a composite task blob”h]”hŒallocate a composite task blob”…”�”}”(hj…8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj‚8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjº7h²hh³jÓ7h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�8jæj�8jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ»**Parameters** ``struct task_struct *task`` the task that needs a blob **Description** Allocate the task blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj§8h]”hŒ Parameters”…”�”}”(hj©8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj¡8ubj )�”}”(hhh]”j)�”}”(hŒ8``struct task_struct *task`` the task that needs a blob ”h]”(j)�”}”(hŒ``struct task_struct *task``”h]”j)�”}”(hjÆ8h]”hŒstruct task_struct *task”…”�”}”(hjÈ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÀ8ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe task that needs a blob”h]”hŒthe task that needs a blob”…”�”}”(hjß8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÛ8h´MhjÜ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÀ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛ8h´Mhj½8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡8ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj9h]”hŒ Description”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj¡8ubhÝ)�”}”(hŒ*Allocate the task blob for all the modules”h]”hŒ*Allocate the task blob for all the modules”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj¡8ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hj&9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj¡8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_ipc_alloc (C function)”Œc.lsm_ipc_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-int lsm_ipc_alloc (struct kern_ipc_perm *kip)”h]”j)�”}”(hŒ,int lsm_ipc_alloc(struct kern_ipc_perm *kip)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjU9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjQ9h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQ9h²hh³jc9h´Mubj{)�”}”(hŒ lsm_ipc_alloc”h]”j�)�”}”(hŒ lsm_ipc_alloc”h]”hŒ lsm_ipc_alloc”…”�”}”(hjv9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjr9ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjQ9h²hh³jc9h´Mubjœ)�”}”(hŒ(struct kern_ipc_perm *kip)”h]”j¢)�”}”(hŒstruct kern_ipc_perm *kip”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj’9h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjŽ9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽ9ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj°9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j²9Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jx9sbŒc.lsm_ipc_alloc”†”asbuh1hhjŽ9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽ9ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÞ9h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjŽ9ubj�)�”}”(hŒkip”h]”hŒkip”…”�”}”(hjë9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽ9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŠ9ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjQ9h²hh³jc9h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjM9h²hh³jc9h´Mubah}”(h]”jH9ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jc9h´MhjJ9h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a composite ipc blob”h]”hŒallocate a composite ipc blob”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjJ9h²hh³jc9h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj-:jæj-:jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒº**Parameters** ``struct kern_ipc_perm *kip`` the ipc that needs a blob **Description** Allocate the ipc blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj7:h]”hŒ Parameters”…”�”}”(hj9:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj1:ubj )�”}”(hhh]”j)�”}”(hŒ8``struct kern_ipc_perm *kip`` the ipc that needs a blob ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *kip``”h]”j)�”}”(hjV:h]”hŒstruct kern_ipc_perm *kip”…”�”}”(hjX:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjP:ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe ipc that needs a blob”h]”hŒthe ipc that needs a blob”…”�”}”(hjo:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jk:h´Mhjl:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjP:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jk:h´MhjM:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj1:ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‘:h]”hŒ Description”…”�”}”(hj“:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj1:ubhÝ)�”}”(hŒ)Allocate the ipc blob for all the modules”h]”hŒ)Allocate the ipc blob for all the modules”…”�”}”(hj§:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj1:ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hj¶:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj1:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_key_alloc (C function)”Œc.lsm_key_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ#int lsm_key_alloc (struct key *key)”h]”j)�”}”(hŒ"int lsm_key_alloc(struct key *key)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjå:h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjá:h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjá:h²hh³jó:h´M ubj{)�”}”(hŒ lsm_key_alloc”h]”j�)�”}”(hŒ lsm_key_alloc”h]”hŒ lsm_key_alloc”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjá:h²hh³jó:h´M ubjœ)�”}”(hŒ(struct key *key)”h]”j¢)�”}”(hŒstruct key *key”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj";h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;ubh)�”}”(hhh]”j�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hj@;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj=;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jB;Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j;sbŒc.lsm_key_alloc”†”asbuh1hhj;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjn;h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;ubj�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hj{;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjá:h²hh³jó:h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÝ:h²hh³jó:h´M ubah}”(h]”jØ:ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jó:h´M hjÚ:h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a composite key blob”h]”hŒallocate a composite key blob”…”�”}”(hj¥;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj¢;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÚ:h²hh³jó:h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj½;jæj½;jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ°**Parameters** ``struct key *key`` the key that needs a blob **Description** Allocate the key blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÇ;h]”hŒ Parameters”…”�”}”(hjÉ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”•h´M$hjÁ;ubj )�”}”(hhh]”j)�”}”(hŒ.``struct key *key`` the key that needs a blob ”h]”(j)�”}”(hŒ``struct key *key``”h]”j)�”}”(hjæ;h]”hŒstruct key *key”…”�”}”(hjè;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjä;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M!hjà;ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe key that needs a blob”h]”hŒthe key that needs a blob”…”�”}”(hjÿ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jû;h´M!hjü;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjà;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jû;h´M!hjÝ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÁ;ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj!<h]”hŒ Description”…”�”}”(hj#<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M#hjÁ;ubhÝ)�”}”(hŒ)Allocate the key blob for all the modules”h]”hŒ)Allocate the key blob for all the modules”…”�”}”(hj7<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M"hjÁ;ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hjF<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M$hjÁ;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_msg_msg_alloc (C function)”Œc.lsm_msg_msg_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ*int lsm_msg_msg_alloc (struct msg_msg *mp)”h]”j)�”}”(hŒ)int lsm_msg_msg_alloc(struct msg_msg *mp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hju<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjq<h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjq<h²hh³jƒ<h´M.ubj{)�”}”(hŒlsm_msg_msg_alloc”h]”j�)�”}”(hŒlsm_msg_msg_alloc”h]”hŒlsm_msg_msg_alloc”…”�”}”(hj–<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’<ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjq<h²hh³jƒ<h´M.ubjœ)�”}”(hŒ(struct msg_msg *mp)”h]”j¢)�”}”(hŒstruct msg_msg *mp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj²<h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®<ubh)�”}”(hhh]”j�)�”}”(hŒmsg_msg”h]”hŒmsg_msg”…”�”}”(hjÐ<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍ<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÒ<Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j˜<sbŒc.lsm_msg_msg_alloc”†”asbuh1hhj®<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®<ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjþ<h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj®<ubj�)�”}”(hŒmp”h]”hŒmp”…”�”}”(hj =h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjª<ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjq<h²hh³jƒ<h´M.ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjm<h²hh³jƒ<h´M.ubah}”(h]”jh<ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jƒ<h´M.hjj<h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!allocate a composite msg_msg blob”h]”hŒ!allocate a composite msg_msg blob”…”�”}”(hj5=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M.hj2=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjj<h²hh³jƒ<h´M.ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjM=jæjM=jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ·**Parameters** ``struct msg_msg *mp`` the msg_msg that needs a blob **Description** Allocate the ipc blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjW=h]”hŒ Parameters”…”�”}”(hjY=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjU=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M2hjQ=ubj )�”}”(hhh]”j)�”}”(hŒ5``struct msg_msg *mp`` the msg_msg that needs a blob ”h]”(j)�”}”(hŒ``struct msg_msg *mp``”h]”j)�”}”(hjv=h]”hŒstruct msg_msg *mp”…”�”}”(hjx=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjt=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M/hjp=ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe msg_msg that needs a blob”h]”hŒthe msg_msg that needs a blob”…”�”}”(hj�=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‹=h´M/hjŒ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjp=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹=h´M/hjm=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjQ=ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj±=h]”hŒ Description”…”�”}”(hj³=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M1hjQ=ubhÝ)�”}”(hŒ)Allocate the ipc blob for all the modules”h]”hŒ)Allocate the ipc blob for all the modules”…”�”}”(hjÇ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M0hjQ=ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hjÖ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M2hjQ=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_bdev_alloc (C function)”Œc.lsm_bdev_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.int lsm_bdev_alloc (struct block_device *bdev)”h]”j)�”}”(hŒ-int lsm_bdev_alloc(struct block_device *bdev)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj>h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>h²hh³j>h´M<ubj{)�”}”(hŒlsm_bdev_alloc”h]”j�)�”}”(hŒlsm_bdev_alloc”h]”hŒlsm_bdev_alloc”…”�”}”(hj&>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj">ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj>h²hh³j>h´M<ubjœ)�”}”(hŒ(struct block_device *bdev)”h]”j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjB>h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj>>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>>ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj`>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jb>Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j(>sbŒc.lsm_bdev_alloc”†”asbuh1hhj>>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>>ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŽ>h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj>>ubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hj›>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj:>ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj>h²hh³j>h´M<ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjý=h²hh³j>h´M<ubah}”(h]”jø=ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j>h´M<hjú=h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&allocate a composite block_device blob”h]”hŒ&allocate a composite block_device blob”…”�”}”(hjÅ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M<hjÂ>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjú=h²hh³j>h´M<ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÝ>jæjÝ>jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÌ**Parameters** ``struct block_device *bdev`` the block_device that needs a blob **Description** Allocate the block_device blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjç>h]”hŒ Parameters”…”�”}”(hjé>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjå>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M@hjá>ubj )�”}”(hhh]”j)�”}”(hŒA``struct block_device *bdev`` the block_device that needs a blob ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hj?h]”hŒstruct block_device *bdev”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M=hj?ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the block_device that needs a blob”h]”hŒ"the block_device that needs a blob”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j?h´M=hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j?h´M=hjý>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjá>ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjA?h]”hŒ Description”…”�”}”(hjC?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj??ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M?hjá>ubhÝ)�”}”(hŒ2Allocate the block_device blob for all the modules”h]”hŒ2Allocate the block_device blob for all the modules”…”�”}”(hjW?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M>hjá>ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hjf?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M@hjá>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_bpf_map_alloc (C function)”Œc.lsm_bpf_map_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+int lsm_bpf_map_alloc (struct bpf_map *map)”h]”j)�”}”(hŒ*int lsm_bpf_map_alloc(struct bpf_map *map)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj•?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘?h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘?h²hh³j£?h´MKubj{)�”}”(hŒlsm_bpf_map_alloc”h]”j�)�”}”(hŒlsm_bpf_map_alloc”h]”hŒlsm_bpf_map_alloc”…”�”}”(hj¶?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²?ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‘?h²hh³j£?h´MKubjœ)�”}”(hŒ(struct bpf_map *map)”h]”j¢)�”}”(hŒstruct bpf_map *map”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÒ?h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÎ?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎ?ubh)�”}”(hhh]”j�)�”}”(hŒbpf_map”h]”hŒbpf_map”…”�”}”(hjð?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjí?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jò?Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¸?sbŒc.lsm_bpf_map_alloc”†”asbuh1hhjÎ?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎ?ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÎ?ubj�)�”}”(hŒmap”h]”hŒmap”…”�”}”(hj+@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎ?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÊ?ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‘?h²hh³j£?h´MKubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�?h²hh³j£?h´MKubah}”(h]”jˆ?ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j£?h´MKhjŠ?h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!allocate a composite bpf_map blob”h]”hŒ!allocate a composite bpf_map blob”…”�”}”(hjU@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MKhjR@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŠ?h²hh³j£?h´MKubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjm@jæjm@jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¼**Parameters** ``struct bpf_map *map`` the bpf_map that needs a blob **Description** Allocate the bpf_map blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjw@h]”hŒ Parameters”…”�”}”(hjy@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhju@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MOhjq@ubj )�”}”(hhh]”j)�”}”(hŒ6``struct bpf_map *map`` the bpf_map that needs a blob ”h]”(j)�”}”(hŒ``struct bpf_map *map``”h]”j)�”}”(hj–@h]”hŒstruct bpf_map *map”…”�”}”(hj˜@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MLhj�@ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe bpf_map that needs a blob”h]”hŒthe bpf_map that needs a blob”…”�”}”(hj¯@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j«@h´MLhj¬@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j«@h´MLhj�@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjq@ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÑ@h]”hŒ Description”…”�”}”(hjÓ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MNhjq@ubhÝ)�”}”(hŒ-Allocate the bpf_map blob for all the modules”h]”hŒ-Allocate the bpf_map blob for all the modules”…”�”}”(hjç@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MMhjq@ubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hjö@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MOhjq@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_bpf_prog_alloc (C function)”Œc.lsm_bpf_prog_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.int lsm_bpf_prog_alloc (struct bpf_prog *prog)”h]”j)�”}”(hŒ-int lsm_bpf_prog_alloc(struct bpf_prog *prog)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj%Ah²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj!Ah²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4Ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Ah²hh³j3Ah´MXubj{)�”}”(hŒlsm_bpf_prog_alloc”h]”j�)�”}”(hŒlsm_bpf_prog_alloc”h]”hŒlsm_bpf_prog_alloc”…”�”}”(hjFAh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjBAubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj!Ah²hh³j3Ah´MXubjœ)�”}”(hŒ(struct bpf_prog *prog)”h]”j¢)�”}”(hŒstruct bpf_prog *prog”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjbAh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj^Aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoAh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj^Aubh)�”}”(hhh]”j�)�”}”(hŒbpf_prog”h]”hŒbpf_prog”…”�”}”(hj€Ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}Aubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‚AŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jHAsbŒc.lsm_bpf_prog_alloc”†”asbuh1hhj^Aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj^Aubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj®Ah²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj^Aubj�)�”}”(hŒprog”h]”hŒprog”…”�”}”(hj»Ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^Aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjZAubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj!Ah²hh³j3Ah´MXubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjAh²hh³j3Ah´MXubah}”(h]”jAah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j3Ah´MXhjAh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"allocate a composite bpf_prog blob”h]”hŒ"allocate a composite bpf_prog blob”…”�”}”(hjåAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MXhjâAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjAh²hh³j3Ah´MXubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjýAjæjýAjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÀ**Parameters** ``struct bpf_prog *prog`` the bpf_prog that needs a blob **Description** Allocate the bpf_prog blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjBh]”hŒ Parameters”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjBubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M\hjBubj )�”}”(hhh]”j)�”}”(hŒ9``struct bpf_prog *prog`` the bpf_prog that needs a blob ”h]”(j)�”}”(hŒ``struct bpf_prog *prog``”h]”j)�”}”(hj&Bh]”hŒstruct bpf_prog *prog”…”�”}”(hj(Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MYhj Bubj2)�”}”(hhh]”hÝ)�”}”(hŒthe bpf_prog that needs a blob”h]”hŒthe bpf_prog that needs a blob”…”�”}”(hj?Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;Bh´MYhjah"]”h$]”h&]”uh1j1hj±Bh²hh³jÃBh´Meubj{)�”}”(hŒlsm_bpf_token_alloc”h]”j�)�”}”(hŒlsm_bpf_token_alloc”h]”hŒlsm_bpf_token_alloc”…”�”}”(hjÖBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒBubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj±Bh²hh³jÃBh´Meubjœ)�”}”(hŒ(struct bpf_token *token)”h]”j¢)�”}”(hŒstruct bpf_token *token”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjòBh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjîBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîBubh)�”}”(hhh]”j�)�”}”(hŒ bpf_token”h]”hŒ bpf_token”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jCŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jØBsbŒc.lsm_bpf_token_alloc”†”asbuh1hhjîBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîBubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj>Ch²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjîBubj�)�”}”(hŒtoken”h]”hŒtoken”…”�”}”(hjKCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjêBubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj±Bh²hh³jÃBh´Meubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj­Bh²hh³jÃBh´Meubah}”(h]”j¨Bah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÃBh´MehjªBh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#allocate a composite bpf_token blob”h]”hŒ#allocate a composite bpf_token blob”…”�”}”(hjuCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MehjrCh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjªBh²hh³jÃBh´Meubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�Cjæj�Cjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÄ**Parameters** ``struct bpf_token *token`` the bpf_token that needs a blob **Description** Allocate the bpf_token blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj—Ch]”hŒ Parameters”…”�”}”(hj™Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj•Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mihj‘Cubj )�”}”(hhh]”j)�”}”(hŒ<``struct bpf_token *token`` the bpf_token that needs a blob ”h]”(j)�”}”(hŒ``struct bpf_token *token``”h]”j)�”}”(hj¶Ch]”hŒstruct bpf_token *token”…”�”}”(hj¸Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mfhj°Cubj2)�”}”(hhh]”hÝ)�”}”(hŒthe bpf_token that needs a blob”h]”hŒthe bpf_token that needs a blob”…”�”}”(hjÏCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jËCh´MfhjÌCubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj°Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jËCh´Mfhj­Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‘CubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjñCh]”hŒ Description”…”�”}”(hjóCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjïCubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhhj‘CubhÝ)�”}”(hŒ/Allocate the bpf_token blob for all the modules”h]”hŒ/Allocate the bpf_token blob for all the modules”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mghj‘CubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mihj‘Cubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!lsm_superblock_alloc (C function)”Œc.lsm_superblock_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1int lsm_superblock_alloc (struct super_block *sb)”h]”j)�”}”(hŒ0int lsm_superblock_alloc(struct super_block *sb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjEDh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjADh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Msubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjADh²hh³jSDh´Msubj{)�”}”(hŒlsm_superblock_alloc”h]”j�)�”}”(hŒlsm_superblock_alloc”h]”hŒlsm_superblock_alloc”…”�”}”(hjfDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbDubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjADh²hh³jSDh´Msubjœ)�”}”(hŒ(struct super_block *sb)”h]”j¢)�”}”(hŒstruct super_block *sb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‚Dh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj~Dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~Dubh)�”}”(hhh]”j�)�”}”(hŒ super_block”h]”hŒ super_block”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¢DŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jhDsbŒc.lsm_superblock_alloc”†”asbuh1hhj~Dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~Dubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÎDh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj~Dubj�)�”}”(hŒsb”h]”hŒsb”…”�”}”(hjÛDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~Dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjzDubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjADh²hh³jSDh´Msubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj=Dh²hh³jSDh´Msubah}”(h]”j8Dah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jSDh´Mshj:Dh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$allocate a composite superblock blob”h]”hŒ$allocate a composite superblock blob”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MshjEh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj:Dh²hh³jSDh´Msubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjEjæjEjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÅ**Parameters** ``struct super_block *sb`` the superblock that needs a blob **Description** Allocate the superblock blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj'Eh]”hŒ Parameters”…”�”}”(hj)Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%Eubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mwhj!Eubj )�”}”(hhh]”j)�”}”(hŒ<``struct super_block *sb`` the superblock that needs a blob ”h]”(j)�”}”(hŒ``struct super_block *sb``”h]”j)�”}”(hjFEh]”hŒstruct super_block *sb”…”�”}”(hjHEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDEubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mthj@Eubj2)�”}”(hhh]”hÝ)�”}”(hŒ the superblock that needs a blob”h]”hŒ the superblock that needs a blob”…”�”}”(hj_Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[Eh´Mthj\Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj@Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[Eh´Mthj=Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj!EubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�Eh]”hŒ Description”…”�”}”(hjƒEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mvhj!EubhÝ)�”}”(hŒ0Allocate the superblock blob for all the modules”h]”hŒ0Allocate the superblock blob for all the modules”…”�”}”(hj—Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Muhj!EubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hj¦Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mwhj!Eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_fill_user_ctx (C function)”Œc.lsm_fill_user_ctx”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒpint lsm_fill_user_ctx (struct lsm_ctx __user *uctx, u32 *uctx_len, void *val, size_t val_len, u64 id, u64 flags)”h]”j)�”}”(hŒoint lsm_fill_user_ctx(struct lsm_ctx __user *uctx, u32 *uctx_len, void *val, size_t val_len, u64 id, u64 flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÕEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÑEh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÑEh²hh³jãEh´M�ubj{)�”}”(hŒlsm_fill_user_ctx”h]”j�)�”}”(hŒlsm_fill_user_ctx”h]”hŒlsm_fill_user_ctx”…”�”}”(hjöEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòEubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÑEh²hh³jãEh´M�ubjœ)�”}”(hŒZ(struct lsm_ctx __user *uctx, u32 *uctx_len, void *val, size_t val_len, u64 id, u64 flags)”h]”(j¢)�”}”(hŒstruct lsm_ctx __user *uctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFubh)�”}”(hhh]”j�)�”}”(hŒlsm_ctx”h]”hŒlsm_ctx”…”�”}”(hj0Fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-Fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j2FŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jøEsbŒc.lsm_fill_user_ctx”†”asbuh1hhjFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFubhŒ__user”…”�”}”(hjFh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjpFh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjFubj�)�”}”(hŒuctx”h]”hŒuctx”…”�”}”(hj}Fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Fubj¢)�”}”(hŒ u32 *uctx_len”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj™Fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–Fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j›FŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jLFŒc.lsm_fill_user_ctx”†”asbuh1hhj’Fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’Fubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÅFh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj’Fubj�)�”}”(hŒuctx_len”h]”hŒuctx_len”…”�”}”(hjÒFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’Fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Fubj¢)�”}”(hŒ void *val”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjëFh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjçFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçFubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjçFubj�)�”}”(hŒval”h]”hŒval”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Fubj¢)�”}”(hŒsize_t val_len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj0Gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-Gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j2GŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jLFŒc.lsm_fill_user_ctx”†”asbuh1hhj)Gubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)Gubj�)�”}”(hŒval_len”h]”hŒval_len”…”�”}”(hj\Gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)Gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Fubj¢)�”}”(hŒu64 id”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjxGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jzGŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jLFŒc.lsm_fill_user_ctx”†”asbuh1hhjqGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–Gh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqGubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hj¤Gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Fubj¢)�”}”(hŒ u64 flags”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjÀGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½Gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÂGŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jLFŒc.lsm_fill_user_ctx”†”asbuh1hhj¹Gubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹Gubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjìGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹Gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Fubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÑEh²hh³jãEh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÍEh²hh³jãEh´M�ubah}”(h]”jÈEah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jãEh´M�hjÊEh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Fill a user space lsm_ctx structure”h]”hŒ#Fill a user space lsm_ctx structure”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjHh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÊEh²hh³jãEh´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj.Hjæj.Hjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXy**Parameters** ``struct lsm_ctx __user *uctx`` a userspace LSM context to be filled ``u32 *uctx_len`` available uctx size (input), used uctx size (output) ``void *val`` the new LSM context value ``size_t val_len`` the size of the new LSM context value ``u64 id`` LSM id ``u64 flags`` LSM defined flags **Description** Fill all of the fields in a userspace lsm_ctx structure. If **uctx** is NULL simply calculate the required size to output via **utc_len** and return success. Returns 0 on success, -E2BIG if userspace buffer is not large enough, -EFAULT on a copyout error, -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj8Hh]”hŒ Parameters”…”�”}”(hj:Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6Hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M…hj2Hubj )�”}”(hhh]”(j)�”}”(hŒE``struct lsm_ctx __user *uctx`` a userspace LSM context to be filled ”h]”(j)�”}”(hŒ``struct lsm_ctx __user *uctx``”h]”j)�”}”(hjWHh]”hŒstruct lsm_ctx __user *uctx”…”�”}”(hjYHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUHubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‚hjQHubj2)�”}”(hhh]”hÝ)�”}”(hŒ$a userspace LSM context to be filled”h]”hŒ$a userspace LSM context to be filled”…”�”}”(hjpHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlHh´M‚hjmHubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlHh´M‚hjNHubj)�”}”(hŒG``u32 *uctx_len`` available uctx size (input), used uctx size (output) ”h]”(j)�”}”(hŒ``u32 *uctx_len``”h]”j)�”}”(hj�Hh]”hŒ u32 *uctx_len”…”�”}”(hj’Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽHubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MƒhjŠHubj2)�”}”(hhh]”hÝ)�”}”(hŒ4available uctx size (input), used uctx size (output)”h]”hŒ4available uctx size (input), used uctx size (output)”…”�”}”(hj©Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥Hh´Mƒhj¦Hubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥Hh´MƒhjNHubj)�”}”(hŒ(``void *val`` the new LSM context value ”h]”(j)�”}”(hŒ ``void *val``”h]”j)�”}”(hjÉHh]”hŒ void *val”…”�”}”(hjËHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇHubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„hjÃHubj2)�”}”(hhh]”hÝ)�”}”(hŒthe new LSM context value”h]”hŒthe new LSM context value”…”�”}”(hjâHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÞHh´M„hjßHubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÃHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞHh´M„hjNHubj)�”}”(hŒ9``size_t val_len`` the size of the new LSM context value ”h]”(j)�”}”(hŒ``size_t val_len``”h]”j)�”}”(hjIh]”hŒsize_t val_len”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M…hjüHubj2)�”}”(hhh]”hÝ)�”}”(hŒ%the size of the new LSM context value”h]”hŒ%the size of the new LSM context value”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jIh´M…hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjüHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIh´M…hjNHubj)�”}”(hŒ``u64 id`` LSM id ”h]”(j)�”}”(hŒ ``u64 id``”h]”j)�”}”(hj;Ih]”hŒu64 id”…”�”}”(hj=Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M†hj5Iubj2)�”}”(hhh]”hÝ)�”}”(hŒLSM id”h]”hŒLSM id”…”�”}”(hjTIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jPIh´M†hjQIubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj5Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jPIh´M†hjNHubj)�”}”(hŒ ``u64 flags`` LSM defined flags ”h]”(j)�”}”(hŒ ``u64 flags``”h]”j)�”}”(hjtIh]”hŒ u64 flags”…”�”}”(hjvIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrIubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡hjnIubj2)�”}”(hhh]”hÝ)�”}”(hŒLSM defined flags”h]”hŒLSM defined flags”…”�”}”(hj�Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰Ih´M‡hjŠIubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjnIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰Ih´M‡hjNHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj2HubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¯Ih]”hŒ Description”…”�”}”(hj±Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­Iubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‰hj2HubhÝ)�”}”(hŒžFill all of the fields in a userspace lsm_ctx structure. If **uctx** is NULL simply calculate the required size to output via **utc_len** and return success.”h]”(hŒ=Fill all of the fields in a userspace lsm_ctx structure. If ”…”�”}”(hjÅIh²hh³Nh´Nubjõ)�”}”(hŒ**uctx**”h]”hŒuctx”…”�”}”(hjÍIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅIubhŒ: is NULL simply calculate the required size to output via ”…”�”}”(hjÅIh²hh³Nh´Nubjõ)�”}”(hŒ **utc_len**”h]”hŒutc_len”…”�”}”(hjßIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅIubhŒ and return success.”…”�”}”(hjÅIh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mˆhj2HubhÝ)�”}”(hŒ‡Returns 0 on success, -E2BIG if userspace buffer is not large enough, -EFAULT on a copyout error, -ENOMEM if memory can't be allocated.”h]”hŒ‰Returns 0 on success, -E2BIG if userspace buffer is not large enough, -EFAULT on a copyout error, -ENOMEM if memory can’t be allocated.”…”�”}”(hjøIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŒhj2Hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,security_binder_set_context_mgr (C function)”Œ!c.security_binder_set_context_mgr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hj#Jh²hh³j5Jh´Múubj{)�”}”(hŒsecurity_binder_set_context_mgr”h]”j�)�”}”(hŒsecurity_binder_set_context_mgr”h]”hŒsecurity_binder_set_context_mgr”…”�”}”(hjHJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDJubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj#Jh²hh³j5Jh´Múubjœ)�”}”(hŒ(const struct cred *mgr)”h]”j¢)�”}”(hŒconst struct cred *mgr”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjdJh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj`Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`Jubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj`Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`Jubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj�Jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŸJŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jJJsbŒ!c.security_binder_set_context_mgr”†”asbuh1hhj`Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½Jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`Jubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjËJh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj`Jubj�)�”}”(hŒmgr”h]”hŒmgr”…”�”}”(hjØJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj\Jubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj#Jh²hh³j5Jh´Múubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjJh²hh³j5Jh´Múubah}”(h]”jJah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j5Jh´MúhjJh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Check if becoming binder ctx mgr is ok”h]”hŒ&Check if becoming binder ctx mgr is ok”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MúhjÿJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjJh²hh³j5Jh´Múubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjKjæjKjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÜ**Parameters** ``const struct cred *mgr`` task credentials of current binder process **Description** Check whether **mgr** is allowed to be the binder context manager. **Return** Return 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj$Kh]”hŒ Parameters”…”�”}”(hj&Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MþhjKubj )�”}”(hhh]”j)�”}”(hŒF``const struct cred *mgr`` task credentials of current binder process ”h]”(j)�”}”(hŒ``const struct cred *mgr``”h]”j)�”}”(hjCKh]”hŒconst struct cred *mgr”…”�”}”(hjEKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mûhj=Kubj2)�”}”(hhh]”hÝ)�”}”(hŒ*task credentials of current binder process”h]”hŒ*task credentials of current binder process”…”�”}”(hj\Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jXKh´MûhjYKubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jXKh´Mûhj:Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjKubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj~Kh]”hŒ Description”…”�”}”(hj€Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MýhjKubhÝ)�”}”(hŒBCheck whether **mgr** is allowed to be the binder context manager.”h]”(hŒCheck whether ”…”�”}”(hj”Kh²hh³Nh´Nubjõ)�”}”(hŒ**mgr**”h]”hŒmgr”…”�”}”(hjœKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”KubhŒ- is allowed to be the binder context manager.”…”�”}”(hj”Kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MühjKubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj·Kh]”hŒReturn”…”�”}”(hj¹Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµKubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MþhjKubhÝ)�”}”(hŒ"Return 0 if permission is granted.”h]”hŒ"Return 0 if permission is granted.”…”�”}”(hjÍKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÿhjKubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_binder_transaction (C function)”Œc.security_binder_transaction”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPint security_binder_transaction (const struct cred *from, const struct cred *to)”h]”j)�”}”(hŒOint security_binder_transaction(const struct cred *from, const struct cred *to)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjüKh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjøKh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøKh²hh³j Lh´Mubj{)�”}”(hŒsecurity_binder_transaction”h]”j�)�”}”(hŒsecurity_binder_transaction”h]”hŒsecurity_binder_transaction”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjøKh²hh³j Lh´Mubjœ)�”}”(hŒ0(const struct cred *from, const struct cred *to)”h]”(j¢)�”}”(hŒconst struct cred *from”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj9Lh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj5Lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5Lubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjTLh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj5Lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5Lubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjrLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jtLŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jLsbŒc.security_binder_transaction”†”asbuh1hhj5Lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’Lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5Lubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj5Lubj�)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hj­Lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj1Lubj¢)�”}”(hŒconst struct cred *to”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÆLh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÂLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂLubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjáLh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÂLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂLubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjÿLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjüLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jMŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŽLŒc.security_binder_transaction”†”asbuh1hhjÂLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂLubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj+Mh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÂLubj�)�”}”(hŒto”h]”hŒto”…”�”}”(hj8Mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj1Lubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjøKh²hh³j Lh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjôKh²hh³j Lh´Mubah}”(h]”jïKah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j Lh´MhjñKh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if a binder transaction is allowed”h]”hŒ(Check if a binder transaction is allowed”…”�”}”(hjbMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj_Mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjñKh²hh³j Lh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjzMjæjzMjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``const struct cred *from`` sending process ``const struct cred *to`` receiving process **Description** Check whether **from** is allowed to invoke a binder transaction call to **to**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj„Mh]”hŒ Parameters”…”�”}”(hj†Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj~Mubj )�”}”(hhh]”(j)�”}”(hŒ,``const struct cred *from`` sending process ”h]”(j)�”}”(hŒ``const struct cred *from``”h]”j)�”}”(hj£Mh]”hŒconst struct cred *from”…”�”}”(hj¥Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj�Mubj2)�”}”(hhh]”hÝ)�”}”(hŒsending process”h]”hŒsending process”…”�”}”(hj¼Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¸Mh´Mhj¹Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¸Mh´MhjšMubj)�”}”(hŒ,``const struct cred *to`` receiving process ”h]”(j)�”}”(hŒ``const struct cred *to``”h]”j)�”}”(hjÜMh]”hŒconst struct cred *to”…”�”}”(hjÞMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚMubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÖMubj2)�”}”(hhh]”hÝ)�”}”(hŒreceiving process”h]”hŒreceiving process”…”�”}”(hjõMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jñMh´M hjòMubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÖMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñMh´M hjšMubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj~MubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjNh]”hŒ Description”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjNubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj~MubhÝ)�”}”(hŒPCheck whether **from** is allowed to invoke a binder transaction call to **to**.”h]”(hŒCheck whether ”…”�”}”(hj-Nh²hh³Nh´Nubjõ)�”}”(hŒ**from**”h]”hŒfrom”…”�”}”(hj5Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-NubhŒ3 is allowed to invoke a binder transaction call to ”…”�”}”(hj-Nh²hh³Nh´Nubjõ)�”}”(hŒ**to**”h]”hŒto”…”�”}”(hjGNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-NubhŒ.”…”�”}”(hj-Nh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj~MubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjbNh]”hŒReturn”…”�”}”(hjdNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj~MubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjxNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj~Mubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,security_binder_transfer_binder (C function)”Œ!c.security_binder_transfer_binder”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒTint security_binder_transfer_binder (const struct cred *from, const struct cred *to)”h]”j)�”}”(hŒSint security_binder_transfer_binder(const struct cred *from, const struct cred *to)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj§Nh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj£Nh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£Nh²hh³jµNh´Mubj{)�”}”(hŒsecurity_binder_transfer_binder”h]”j�)�”}”(hŒsecurity_binder_transfer_binder”h]”hŒsecurity_binder_transfer_binder”…”�”}”(hjÈNh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄNubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj£Nh²hh³jµNh´Mubjœ)�”}”(hŒ0(const struct cred *from, const struct cred *to)”h]”(j¢)�”}”(hŒconst struct cred *from”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjäNh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjàNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñNh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàNubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÿNh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjàNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàNubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jOŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÊNsbŒ!c.security_binder_transfer_binder”†”asbuh1hhjàNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàNubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjKOh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjàNubj�)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hjXOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjàNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÜNubj¢)�”}”(hŒconst struct cred *to”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjqOh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjmOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmOubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjŒOh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjmOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmOubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjªOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§Oubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¬OŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j9OŒ!c.security_binder_transfer_binder”†”asbuh1hhjmOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmOubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÖOh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjmOubj�)�”}”(hŒto”h]”hŒto”…”�”}”(hjãOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÜNubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj£Nh²hh³jµNh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŸNh²hh³jµNh´Mubah}”(h]”jšNah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jµNh´MhjœNh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Check if a binder transfer is allowed”h]”hŒ%Check if a binder transfer is allowed”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj Ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjœNh²hh³jµNh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj%Pjæj%Pjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒû**Parameters** ``const struct cred *from`` sending process ``const struct cred *to`` receiving process **Description** Check whether **from** is allowed to transfer a binder reference to **to**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj/Ph]”hŒ Parameters”…”�”}”(hj1Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-Pubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj)Pubj )�”}”(hhh]”(j)�”}”(hŒ,``const struct cred *from`` sending process ”h]”(j)�”}”(hŒ``const struct cred *from``”h]”j)�”}”(hjNPh]”hŒconst struct cred *from”…”�”}”(hjPPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjHPubj2)�”}”(hhh]”hÝ)�”}”(hŒsending process”h]”hŒsending process”…”�”}”(hjgPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jcPh´MhjdPubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjHPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jcPh´MhjEPubj)�”}”(hŒ,``const struct cred *to`` receiving process ”h]”(j)�”}”(hŒ``const struct cred *to``”h]”j)�”}”(hj‡Ph]”hŒconst struct cred *to”…”�”}”(hj‰Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj�Pubj2)�”}”(hhh]”hÝ)�”}”(hŒreceiving process”h]”hŒreceiving process”…”�”}”(hj Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœPh´Mhj�Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœPh´MhjEPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj)PubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÂPh]”hŒ Description”…”�”}”(hjÄPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÀPubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj)PubhÝ)�”}”(hŒKCheck whether **from** is allowed to transfer a binder reference to **to**.”h]”(hŒCheck whether ”…”�”}”(hjØPh²hh³Nh´Nubjõ)�”}”(hŒ**from**”h]”hŒfrom”…”�”}”(hjàPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØPubhŒ. is allowed to transfer a binder reference to ”…”�”}”(hjØPh²hh³Nh´Nubjõ)�”}”(hŒ**to**”h]”hŒto”…”�”}”(hjòPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØPubhŒ.”…”�”}”(hjØPh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj)PubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj Qh]”hŒReturn”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj)PubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj#Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj)Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*security_binder_transfer_file (C function)”Œc.security_binder_transfer_file”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkint security_binder_transfer_file (const struct cred *from, const struct cred *to, const struct file *file)”h]”j)�”}”(hŒjint security_binder_transfer_file(const struct cred *from, const struct cred *to, const struct file *file)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjRQh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjNQh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNQh²hh³j`Qh´M%ubj{)�”}”(hŒsecurity_binder_transfer_file”h]”j�)�”}”(hŒsecurity_binder_transfer_file”h]”hŒsecurity_binder_transfer_file”…”�”}”(hjsQh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoQubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjNQh²hh³j`Qh´M%ubjœ)�”}”(hŒI(const struct cred *from, const struct cred *to, const struct file *file)”h]”(j¢)�”}”(hŒconst struct cred *from”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj�Qh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‹Qubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹Qubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjªQh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‹Qubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Qh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹Qubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjÈQh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÊQŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY juQsbŒc.security_binder_transfer_file”†”asbuh1hhj‹Qubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹Qubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjöQh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‹Qubj�)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹Qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‡Qubj¢)�”}”(hŒconst struct cred *to”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj7Rh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjURh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jWRŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jäQŒc.security_binder_transfer_file”†”asbuh1hhjRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRubjã)�”}”(hjæ•h]”hŒ*”…”�”}”(hj�Rh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjRubj�)�”}”(hŒto”h]”hŒto”…”�”}”(hjŽRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‡Qubj¢)�”}”(hŒconst struct file *file”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj§Rh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj£Rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£Rubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÂRh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj£Rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£Rubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjàRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jâRŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jäQŒc.security_binder_transfer_file”†”asbuh1hhj£Rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£Rubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj£Rubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£Rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‡Qubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjNQh²hh³j`Qh´M%ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjJQh²hh³j`Qh´M%ubah}”(h]”jEQah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j`Qh´M%hjGQh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Check if a binder file xfer is allowed”h]”hŒ&Check if a binder file xfer is allowed”…”�”}”(hjCSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M%hj@Sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjGQh²hh³j`Qh´M%ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj[Sjæj[Sjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX'**Parameters** ``const struct cred *from`` sending process ``const struct cred *to`` receiving process ``const struct file *file`` file being transferred **Description** Check whether **from** is allowed to transfer **file** to **to**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjeSh]”hŒ Parameters”…”�”}”(hjgSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcSubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M)hj_Subj )�”}”(hhh]”(j)�”}”(hŒ,``const struct cred *from`` sending process ”h]”(j)�”}”(hŒ``const struct cred *from``”h]”j)�”}”(hj„Sh]”hŒconst struct cred *from”…”�”}”(hj†Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚Subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M&hj~Subj2)�”}”(hhh]”hÝ)�”}”(hŒsending process”h]”hŒsending process”…”�”}”(hj�Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™Sh´M&hjšSubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™Sh´M&hj{Subj)�”}”(hŒ,``const struct cred *to`` receiving process ”h]”(j)�”}”(hŒ``const struct cred *to``”h]”j)�”}”(hj½Sh]”hŒconst struct cred *to”…”�”}”(hj¿Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»Subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M'hj·Subj2)�”}”(hhh]”hÝ)�”}”(hŒreceiving process”h]”hŒreceiving process”…”�”}”(hjÖSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒSh´M'hjÓSubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒSh´M'hj{Subj)�”}”(hŒ3``const struct file *file`` file being transferred ”h]”(j)�”}”(hŒ``const struct file *file``”h]”j)�”}”(hjöSh]”hŒconst struct file *file”…”�”}”(hjøSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôSubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M(hjðSubj2)�”}”(hhh]”hÝ)�”}”(hŒfile being transferred”h]”hŒfile being transferred”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Th´M(hj Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Th´M(hj{Subeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj_SubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj1Th]”hŒ Description”…”�”}”(hj3Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/Tubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M*hj_SubhÝ)�”}”(hŒACheck whether **from** is allowed to transfer **file** to **to**.”h]”(hŒCheck whether ”…”�”}”(hjGTh²hh³Nh´Nubjõ)�”}”(hŒ**from**”h]”hŒfrom”…”�”}”(hjOTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGTubhŒ is allowed to transfer ”…”�”}”(hjGTh²hh³Nh´Nubjõ)�”}”(hŒ**file**”h]”hŒfile”…”�”}”(hjaTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGTubhŒ to ”…”�”}”(hjGTh²hh³Nh´Nubjõ)�”}”(hŒ**to**”h]”hŒto”…”�”}”(hjsTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGTubhŒ.”…”�”}”(hjGTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M)hj_SubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjŽTh]”hŒReturn”…”�”}”(hj�Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒTubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hj_SubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj¤Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M,hj_Subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_ptrace_access_check (C function)”Œc.security_ptrace_access_check”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOint security_ptrace_access_check (struct task_struct *child, unsigned int mode)”h]”j)�”}”(hŒNint security_ptrace_access_check(struct task_struct *child, unsigned int mode)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÓTh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÏTh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏTh²hh³jáTh´M5ubj{)�”}”(hŒsecurity_ptrace_access_check”h]”j�)�”}”(hŒsecurity_ptrace_access_check”h]”hŒsecurity_ptrace_access_check”…”�”}”(hjôTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjðTubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÏTh²hh³jáTh´M5ubjœ)�”}”(hŒ.(struct task_struct *child, unsigned int mode)”h]”(j¢)�”}”(hŒstruct task_struct *child”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj Uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Uubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj.Uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+Uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j0UŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jöTsbŒc.security_ptrace_access_check”†”asbuh1hhj Uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Uubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj\Uh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj Uubj�)�”}”(hŒchild”h]”hŒchild”…”�”}”(hjiUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjUubj¢)�”}”(hŒunsigned int mode”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‚Uh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~Uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~Uubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjžUh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~Uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬Uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~Uubj�)�”}”(hŒmode”h]”hŒmode”…”�”}”(hjºUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjUubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÏTh²hh³jáTh´M5ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjËTh²hh³jáTh´M5ubah}”(h]”jÆTah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jáTh´M5hjÈTh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCheck if tracing is allowed”h]”hŒCheck if tracing is allowed”…”�”}”(hjäUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M5hjáUh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÈTh²hh³jáTh´M5ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjüUjæjüUjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX-**Parameters** ``struct task_struct *child`` target process ``unsigned int mode`` PTRACE_MODE flags **Description** Check permission before allowing the current process to trace the **child** process. Security modules may also want to perform a process tracing check during an execve in the set_security or apply_creds hooks of tracing check during an execve in the bprm_set_creds hook of binprm_security_ops if the process is being traced and its security attributes would be changed by the execve. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjVh]”hŒ Parameters”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M9hjVubj )�”}”(hhh]”(j)�”}”(hŒ-``struct task_struct *child`` target process ”h]”(j)�”}”(hŒ``struct task_struct *child``”h]”j)�”}”(hj%Vh]”hŒstruct task_struct *child”…”�”}”(hj'Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M6hjVubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget process”h]”hŒtarget process”…”�”}”(hj>Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:Vh´M6hj;Vubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:Vh´M6hjVubj)�”}”(hŒ(``unsigned int mode`` PTRACE_MODE flags ”h]”(j)�”}”(hŒ``unsigned int mode``”h]”j)�”}”(hj^Vh]”hŒunsigned int mode”…”�”}”(hj`Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\Vubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M7hjXVubj2)�”}”(hhh]”hÝ)�”}”(hŒPTRACE_MODE flags”h]”hŒPTRACE_MODE flags”…”�”}”(hjwVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jsVh´M7hjtVubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjXVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jsVh´M7hjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjVubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj™Vh]”hŒ Description”…”�”}”(hj›Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M9hjVubhÝ)�”}”(hX€Check permission before allowing the current process to trace the **child** process. Security modules may also want to perform a process tracing check during an execve in the set_security or apply_creds hooks of tracing check during an execve in the bprm_set_creds hook of binprm_security_ops if the process is being traced and its security attributes would be changed by the execve.”h]”(hŒBCheck permission before allowing the current process to trace the ”…”�”}”(hj¯Vh²hh³Nh´Nubjõ)�”}”(hŒ **child**”h]”hŒchild”…”�”}”(hj·Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯VubhX5 process. Security modules may also want to perform a process tracing check during an execve in the set_security or apply_creds hooks of tracing check during an execve in the bprm_set_creds hook of binprm_security_ops if the process is being traced and its security attributes would be changed by the execve.”…”�”}”(hj¯Vh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8hjVubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÒVh]”hŒReturn”…”�”}”(hjÔVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÐVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M?hjVubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjèVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M@hjVubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_ptrace_traceme (C function)”Œc.security_ptrace_traceme”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int security_ptrace_traceme (struct task_struct *parent)”h]”j)�”}”(hŒ7int security_ptrace_traceme(struct task_struct *parent)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjWh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&Wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjWh²hh³j%Wh´MHubj{)�”}”(hŒsecurity_ptrace_traceme”h]”j�)�”}”(hŒsecurity_ptrace_traceme”h]”hŒsecurity_ptrace_traceme”…”�”}”(hj8Wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4Wubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjWh²hh³j%Wh´MHubjœ)�”}”(hŒ(struct task_struct *parent)”h]”j¢)�”}”(hŒstruct task_struct *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjTWh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjPWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPWubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjrWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jtWŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j:WsbŒc.security_ptrace_traceme”†”asbuh1hhjPWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’Wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPWubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Wh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjPWubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hj­Wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjLWubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjWh²hh³j%Wh´MHubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjWh²hh³j%Wh´MHubah}”(h]”j Wah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j%Wh´MHhj Wh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCheck if tracing is allowed”h]”hŒCheck if tracing is allowed”…”�”}”(hj×Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MHhjÔWh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj Wh²hh³j%Wh´MHubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjïWjæjïWjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX9**Parameters** ``struct task_struct *parent`` tracing process **Description** Check that the **parent** process has sufficient permission to trace the current process before allowing the current process to present itself to the **parent** process for tracing. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjùWh]”hŒ Parameters”…”�”}”(hjûWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷Wubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MLhjóWubj )�”}”(hhh]”j)�”}”(hŒ/``struct task_struct *parent`` tracing process ”h]”(j)�”}”(hŒ``struct task_struct *parent``”h]”j)�”}”(hjXh]”hŒstruct task_struct *parent”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MIhjXubj2)�”}”(hhh]”hÝ)�”}”(hŒtracing process”h]”hŒtracing process”…”�”}”(hj1Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j-Xh´MIhj.Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-Xh´MIhjXubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjóWubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjSXh]”hŒ Description”…”�”}”(hjUXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjQXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MKhjóWubhÝ)�”}”(hŒµCheck that the **parent** process has sufficient permission to trace the current process before allowing the current process to present itself to the **parent** process for tracing.”h]”(hŒCheck that the ”…”�”}”(hjiXh²hh³Nh´Nubjõ)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hjqXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjiXubhŒ} process has sufficient permission to trace the current process before allowing the current process to present itself to the ”…”�”}”(hjiXh²hh³Nh´Nubjõ)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hjƒXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjiXubhŒ process for tracing.”…”�”}”(hjiXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MJhjóWubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjžXh]”hŒReturn”…”�”}”(hj Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MNhjóWubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj´Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MOhjóWubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_capget (C function)”Œc.security_capget”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒƒint security_capget (const struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted)”h]”j)�”}”(hŒ‚int security_capget(const struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjãXh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjßXh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòXh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjßXh²hh³jñXh´MWubj{)�”}”(hŒsecurity_capget”h]”j�)�”}”(hŒsecurity_capget”h]”hŒsecurity_capget”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjßXh²hh³jñXh´MWubjœ)�”}”(hŒo(const struct task_struct *target, kernel_cap_t *effective, kernel_cap_t *inheritable, kernel_cap_t *permitted)”h]”(j¢)�”}”(hŒ const struct task_struct *target”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj Yh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-Yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjYubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj;Yh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjYubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjYYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVYubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j[YŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jYsbŒc.security_capget”†”asbuh1hhjYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjYubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‡Yh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjYubj�)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hj”Yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjYubj¢)�”}”(hŒkernel_cap_t *effective”h]”(h)�”}”(hhh]”j�)�”}”(hŒ kernel_cap_t”h]”hŒ kernel_cap_t”…”�”}”(hj°Yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­Yubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j²YŒmodname”NŒ classname”Nj] j` )�”}”jc ]”juYŒc.security_capget”†”asbuh1hhj©Yubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©Yubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÜYh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj©Yubj�)�”}”(hŒ effective”h]”hŒ effective”…”�”}”(hjéYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©Yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjYubj¢)�”}”(hŒkernel_cap_t *inheritable”h]”(h)�”}”(hhh]”j�)�”}”(hŒ kernel_cap_t”h]”hŒ kernel_cap_t”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”juYŒc.security_capget”†”asbuh1hhjþYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþYubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj1Zh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjþYubj�)�”}”(hŒ inheritable”h]”hŒ inheritable”…”�”}”(hj>Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjYubj¢)�”}”(hŒkernel_cap_t *permitted”h]”(h)�”}”(hhh]”j�)�”}”(hŒ kernel_cap_t”h]”hŒ kernel_cap_t”…”�”}”(hjZZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjWZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j\ZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”juYŒc.security_capget”†”asbuh1hhjSZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSZubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj†Zh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjSZubj�)�”}”(hŒ permitted”h]”hŒ permitted”…”�”}”(hj“Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjYubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjßXh²hh³jñXh´MWubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÛXh²hh³jñXh´MWubah}”(h]”jÖXah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jñXh´MWhjØXh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Get the capability sets for a process”h]”hŒ%Get the capability sets for a process”…”�”}”(hj½Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MWhjºZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjØXh²hh³jñXh´MWubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÕZjæjÕZjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXG**Parameters** ``const struct task_struct *target`` target process ``kernel_cap_t *effective`` effective capability set ``kernel_cap_t *inheritable`` inheritable capability set ``kernel_cap_t *permitted`` permitted capability set **Description** Get the **effective**, **inheritable**, and **permitted** capability sets for the **target** process. The hook may also perform permission checking to determine if the current process is allowed to see the capability sets of the **target** process. **Return** Returns 0 if the capability sets were successfully obtained.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjßZh]”hŒ Parameters”…”�”}”(hjáZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝZubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M[hjÙZubj )�”}”(hhh]”(j)�”}”(hŒ4``const struct task_struct *target`` target process ”h]”(j)�”}”(hŒ$``const struct task_struct *target``”h]”j)�”}”(hjþZh]”hŒ const struct task_struct *target”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjüZubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MXhjøZubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget process”h]”hŒtarget process”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[h´MXhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjøZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[h´MXhjõZubj)�”}”(hŒ5``kernel_cap_t *effective`` effective capability set ”h]”(j)�”}”(hŒ``kernel_cap_t *effective``”h]”j)�”}”(hj7[h]”hŒkernel_cap_t *effective”…”�”}”(hj9[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MYhj1[ubj2)�”}”(hhh]”hÝ)�”}”(hŒeffective capability set”h]”hŒeffective capability set”…”�”}”(hjP[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jL[h´MYhjM[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jL[h´MYhjõZubj)�”}”(hŒ9``kernel_cap_t *inheritable`` inheritable capability set ”h]”(j)�”}”(hŒ``kernel_cap_t *inheritable``”h]”j)�”}”(hjp[h]”hŒkernel_cap_t *inheritable”…”�”}”(hjr[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjn[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MZhjj[ubj2)�”}”(hhh]”hÝ)�”}”(hŒinheritable capability set”h]”hŒinheritable capability set”…”�”}”(hj‰[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j…[h´MZhj†[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…[h´MZhjõZubj)�”}”(hŒ5``kernel_cap_t *permitted`` permitted capability set ”h]”(j)�”}”(hŒ``kernel_cap_t *permitted``”h]”j)�”}”(hj©[h]”hŒkernel_cap_t *permitted”…”�”}”(hj«[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M[hj£[ubj2)�”}”(hhh]”hÝ)�”}”(hŒpermitted capability set”h]”hŒpermitted capability set”…”�”}”(hjÂ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¾[h´M[hj¿[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾[h´M[hjõZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÙZubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjä[h]”hŒ Description”…”�”}”(hjæ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M]hjÙZubhÝ)�”}”(hŒùGet the **effective**, **inheritable**, and **permitted** capability sets for the **target** process. The hook may also perform permission checking to determine if the current process is allowed to see the capability sets of the **target** process.”h]”(hŒGet the ”…”�”}”(hjú[h²hh³Nh´Nubjõ)�”}”(hŒ **effective**”h]”hŒ effective”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjú[ubhŒ, ”…”�”}”(hjú[h²hh³Nh´Nubjõ)�”}”(hŒ**inheritable**”h]”hŒ inheritable”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjú[ubhŒ, and ”…”�”}”(hjú[h²hh³Nh´Nubjõ)�”}”(hŒ **permitted**”h]”hŒ permitted”…”�”}”(hj&\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjú[ubhŒ capability sets for the ”…”�”}”(hjú[h²hh³Nh´Nubjõ)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hj8\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjú[ubhŒŠ process. The hook may also perform permission checking to determine if the current process is allowed to see the capability sets of the ”…”�”}”(hjú[h²hh³Nh´Nubjõ)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hjJ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjú[ubhŒ process.”…”�”}”(hjú[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M\hjÙZubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hje\h]”hŒReturn”…”�”}”(hjg\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjc\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MahjÙZubhÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hj¦\h²hh³j¸\h´Mmubj{)�”}”(hŒsecurity_capset”h]”j�)�”}”(hŒsecurity_capset”h]”hŒsecurity_capset”…”�”}”(hjË\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇ\ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¦\h²hh³j¸\h´Mmubjœ)�”}”(hŒ‰(struct cred *new, const struct cred *old, const kernel_cap_t *effective, const kernel_cap_t *inheritable, const kernel_cap_t *permitted)”h]”(j¢)�”}”(hŒstruct cred *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjç\h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjã\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjã\ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j]Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÍ\sbŒc.security_capset”†”asbuh1hhjã\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjã\ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj3]h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjã\ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj@]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjã\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjß\ubj¢)�”}”(hŒconst struct cred *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjY]h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjU]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjU]ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjt]h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjU]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjU]ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj’]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j”]Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j!]Œc.security_capset”†”asbuh1hhjU]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjU]ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¾]h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjU]ubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hjË]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjU]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjß\ubj¢)�”}”(hŒconst kernel_cap_t *effective”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjä]h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjà]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjà]ubh)�”}”(hhh]”j�)�”}”(hŒ kernel_cap_t”h]”hŒ kernel_cap_t”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿ]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j^Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j!]Œc.security_capset”†”asbuh1hhjà]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjà]ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj.^h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjà]ubj�)�”}”(hŒ effective”h]”hŒ effective”…”�”}”(hj;^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjà]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjß\ubj¢)�”}”(hŒconst kernel_cap_t *inheritable”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjT^h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjP^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjP^ubh)�”}”(hhh]”j�)�”}”(hŒ kernel_cap_t”h]”hŒ kernel_cap_t”…”�”}”(hjr^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjo^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jt^Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j!]Œc.security_capset”†”asbuh1hhjP^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjP^ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjž^h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjP^ubj�)�”}”(hŒ inheritable”h]”hŒ inheritable”…”�”}”(hj«^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjP^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjß\ubj¢)�”}”(hŒconst kernel_cap_t *permitted”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÄ^h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÀ^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀ^ubh)�”}”(hhh]”j�)�”}”(hŒ kernel_cap_t”h]”hŒ kernel_cap_t”…”�”}”(hjâ^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjß^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jä^Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j!]Œc.security_capset”†”asbuh1hhjÀ^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀ^ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÀ^ubj�)�”}”(hŒ permitted”h]”hŒ permitted”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀ^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjß\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¦\h²hh³j¸\h´Mmubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¢\h²hh³j¸\h´Mmubah}”(h]”j�\ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¸\h´MmhjŸ\h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Set the capability sets for a process”h]”hŒ%Set the capability sets for a process”…”�”}”(hjE_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MmhjB_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŸ\h²hh³j¸\h´Mmubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj]_jæj]_jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX **Parameters** ``struct cred *new`` new credentials for the target process ``const struct cred *old`` current credentials of the target process ``const kernel_cap_t *effective`` effective capability set ``const kernel_cap_t *inheritable`` inheritable capability set ``const kernel_cap_t *permitted`` permitted capability set **Description** Set the **effective**, **inheritable**, and **permitted** capability sets for the current process. **Return** Returns 0 and update **new** if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjg_h]”hŒ Parameters”…”�”}”(hji_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhje_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mqhja_ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct cred *new`` new credentials for the target process ”h]”(j)�”}”(hŒ``struct cred *new``”h]”j)�”}”(hj†_h]”hŒstruct cred *new”…”�”}”(hjˆ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mnhj€_ubj2)�”}”(hhh]”hÝ)�”}”(hŒ&new credentials for the target process”h]”hŒ&new credentials for the target process”…”�”}”(hjŸ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›_h´Mnhjœ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›_h´Mnhj}_ubj)�”}”(hŒE``const struct cred *old`` current credentials of the target process ”h]”(j)�”}”(hŒ``const struct cred *old``”h]”j)�”}”(hj¿_h]”hŒconst struct cred *old”…”�”}”(hjÁ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mohj¹_ubj2)�”}”(hhh]”hÝ)�”}”(hŒ)current credentials of the target process”h]”hŒ)current credentials of the target process”…”�”}”(hjØ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔ_h´MohjÕ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔ_h´Mohj}_ubj)�”}”(hŒ;``const kernel_cap_t *effective`` effective capability set ”h]”(j)�”}”(hŒ!``const kernel_cap_t *effective``”h]”j)�”}”(hjø_h]”hŒconst kernel_cap_t *effective”…”�”}”(hjú_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjö_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mphjò_ubj2)�”}”(hhh]”hÝ)�”}”(hŒeffective capability set”h]”hŒeffective capability set”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j `h´Mphj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjò_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j `h´Mphj}_ubj)�”}”(hŒ?``const kernel_cap_t *inheritable`` inheritable capability set ”h]”(j)�”}”(hŒ#``const kernel_cap_t *inheritable``”h]”j)�”}”(hj1`h]”hŒconst kernel_cap_t *inheritable”…”�”}”(hj3`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mqhj+`ubj2)�”}”(hhh]”hÝ)�”}”(hŒinheritable capability set”h]”hŒinheritable capability set”…”�”}”(hjJ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jF`h´MqhjG`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj+`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jF`h´Mqhj}_ubj)�”}”(hŒ;``const kernel_cap_t *permitted`` permitted capability set ”h]”(j)�”}”(hŒ!``const kernel_cap_t *permitted``”h]”j)�”}”(hjj`h]”hŒconst kernel_cap_t *permitted”…”�”}”(hjl`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mrhjd`ubj2)�”}”(hhh]”hÝ)�”}”(hŒpermitted capability set”h]”hŒpermitted capability set”…”�”}”(hjƒ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j`h´Mrhj€`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjd`ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`h´Mrhj}_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hja_ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¥`h]”hŒ Description”…”�”}”(hj§`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mthja_ubhÝ)�”}”(hŒbSet the **effective**, **inheritable**, and **permitted** capability sets for the current process.”h]”(hŒSet the ”…”�”}”(hj»`h²hh³Nh´Nubjõ)�”}”(hŒ **effective**”h]”hŒ effective”…”�”}”(hjÃ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»`ubhŒ, ”…”�”}”(hj»`h²hh³Nh´Nubjõ)�”}”(hŒ**inheritable**”h]”hŒ inheritable”…”�”}”(hjÕ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»`ubhŒ, and ”…”�”}”(hj»`h²hh³Nh´Nubjõ)�”}”(hŒ **permitted**”h]”hŒ permitted”…”�”}”(hjç`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»`ubhŒ) capability sets for the current process.”…”�”}”(hj»`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mshja_ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjah]”hŒReturn”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mvhja_ubhÝ)�”}”(hŒ6Returns 0 and update **new** if permission is granted.”h]”(hŒReturns 0 and update ”…”�”}”(hjah²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaubhŒ if permission is granted.”…”�”}”(hjah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mwhja_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_capable (C function)”Œc.security_capable”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒeint security_capable (const struct cred *cred, struct user_namespace *ns, int cap, unsigned int opts)”h]”j)�”}”(hŒdint security_capable(const struct cred *cred, struct user_namespace *ns, int cap, unsigned int opts)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjYah²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjUah²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUah²hh³jgah´Mƒubj{)�”}”(hŒsecurity_capable”h]”j�)�”}”(hŒsecurity_capable”h]”hŒsecurity_capable”…”�”}”(hjzah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvaubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjUah²hh³jgah´Mƒubjœ)�”}”(hŒP(const struct cred *cred, struct user_namespace *ns, int cap, unsigned int opts)”h]”(j¢)�”}”(hŒconst struct cred *cred”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj–ah²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj’aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’aubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj±ah²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj’aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’aubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjÏah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌaubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÑaŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j|asbŒc.security_capable”†”asbuh1hhj’aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’aubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjýah²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj’aubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽaubj¢)�”}”(hŒstruct user_namespace *ns”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj#bh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjbubh)�”}”(hhh]”j�)�”}”(hŒuser_namespace”h]”hŒuser_namespace”…”�”}”(hjAbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jCbŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jëaŒc.security_capable”†”asbuh1hhjbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjbubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjmbh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjbubj�)�”}”(hŒns”h]”hŒns”…”�”}”(hjzbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽaubj¢)�”}”(hŒint cap”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj“bh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�bubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�bubj�)�”}”(hŒcap”h]”hŒcap”…”�”}”(hj¯bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽaubj¢)�”}”(hŒunsigned int opts”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÈbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÄbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄbubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjäbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÄbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄbubj�)�”}”(hŒopts”h]”hŒopts”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽaubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjUah²hh³jgah´Mƒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjQah²hh³jgah´Mƒubah}”(h]”jLaah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jgah´MƒhjNah²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/Check if a process has the necessary capability”h]”hŒ/Check if a process has the necessary capability”…”�”}”(hj*ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mƒhj'ch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjNah²hh³jgah´Mƒubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjBcjæjBcjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX÷**Parameters** ``const struct cred *cred`` credentials to examine ``struct user_namespace *ns`` user namespace ``int cap`` capability requested ``unsigned int opts`` capability check options **Description** Check whether the **tsk** process has the **cap** capability in the indicated credentials. **cap** contains the capability . **opts** contains options for the capable check . **Return** Returns 0 if the capability is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjLch]”hŒ Parameters”…”�”}”(hjNch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJcubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡hjFcubj )�”}”(hhh]”(j)�”}”(hŒ3``const struct cred *cred`` credentials to examine ”h]”(j)�”}”(hŒ``const struct cred *cred``”h]”j)�”}”(hjkch]”hŒconst struct cred *cred”…”�”}”(hjmch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjicubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„hjecubj2)�”}”(hhh]”hÝ)�”}”(hŒcredentials to examine”h]”hŒcredentials to examine”…”�”}”(hj„ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j€ch´M„hj�cubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjecubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€ch´M„hjbcubj)�”}”(hŒ-``struct user_namespace *ns`` user namespace ”h]”(j)�”}”(hŒ``struct user_namespace *ns``”h]”j)�”}”(hj¤ch]”hŒstruct user_namespace *ns”…”�”}”(hj¦ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢cubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M…hjžcubj2)�”}”(hhh]”hÝ)�”}”(hŒuser namespace”h]”hŒuser namespace”…”�”}”(hj½ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¹ch´M…hjºcubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjžcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¹ch´M…hjbcubj)�”}”(hŒ!``int cap`` capability requested ”h]”(j)�”}”(hŒ ``int cap``”h]”j)�”}”(hjÝch]”hŒint cap”…”�”}”(hjßch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛcubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M†hj×cubj2)�”}”(hhh]”hÝ)�”}”(hŒcapability requested”h]”hŒcapability requested”…”�”}”(hjöch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jòch´M†hjócubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj×cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jòch´M†hjbcubj)�”}”(hŒ/``unsigned int opts`` capability check options ”h]”(j)�”}”(hŒ``unsigned int opts``”h]”j)�”}”(hjdh]”hŒunsigned int opts”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡hjdubj2)�”}”(hhh]”hÝ)�”}”(hŒcapability check options”h]”hŒcapability check options”…”�”}”(hj/dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+dh´M‡hj,dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+dh´M‡hjbcubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjFcubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjQdh]”hŒ Description”…”�”}”(hjSdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjOdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‰hjFcubhÝ)�”}”(hŒåCheck whether the **tsk** process has the **cap** capability in the indicated credentials. **cap** contains the capability . **opts** contains options for the capable check .”h]”(hŒCheck whether the ”…”�”}”(hjgdh²hh³Nh´Nubjõ)�”}”(hŒ**tsk**”h]”hŒtsk”…”�”}”(hjodh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjgdubhŒ process has the ”…”�”}”(hjgdh²hh³Nh´Nubjõ)�”}”(hŒ**cap**”h]”hŒcap”…”�”}”(hj�dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjgdubhŒ+ capability in the indicated credentials. ”…”�”}”(hjgdh²hh³Nh´Nubjõ)�”}”(hŒ**cap**”h]”hŒcap”…”�”}”(hj“dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjgdubhŒ7 contains the capability . ”…”�”}”(hjgdh²hh³Nh´Nubjõ)�”}”(hŒ**opts**”h]”hŒopts”…”�”}”(hj¥dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjgdubhŒC contains options for the capable check .”…”�”}”(hjgdh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MˆhjFcubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÀdh]”hŒReturn”…”�”}”(hjÂdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾dubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŒhjFcubhÝ)�”}”(hŒ'Returns 0 if the capability is granted.”h]”hŒ'Returns 0 if the capability is granted.”…”�”}”(hjÖdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjFcubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_quotactl (C function)”Œc.security_quotactl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPint security_quotactl (int cmds, int type, int id, const struct super_block *sb)”h]”j)�”}”(hŒOint security_quotactl(int cmds, int type, int id, const struct super_block *sb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjeh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeh²hh³jeh´M˜ubj{)�”}”(hŒsecurity_quotactl”h]”j�)�”}”(hŒsecurity_quotactl”h]”hŒsecurity_quotactl”…”�”}”(hj&eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"eubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjeh²hh³jeh´M˜ubjœ)�”}”(hŒ:(int cmds, int type, int id, const struct super_block *sb)”h]”(j¢)�”}”(hŒint cmds”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjBeh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj>eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>eubj�)�”}”(hŒcmds”h]”hŒcmds”…”�”}”(hj^eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj:eubj¢)�”}”(hŒint type”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjweh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjseubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjseubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj“eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjseubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj:eubj¢)�”}”(hŒint id”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¬eh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¨eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¨eubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hjÈeh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj:eubj¢)�”}”(hŒconst struct super_block *sb”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjáeh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÝeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝeubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjüeh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÝeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝeubh)�”}”(hhh]”j�)�”}”(hŒ super_block”h]”hŒ super_block”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jfŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j(esbŒc.security_quotactl”†”asbuh1hhjÝeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝeubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjHfh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÝeubj�)�”}”(hŒsb”h]”hŒsb”…”�”}”(hjUfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj:eubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjeh²hh³jeh´M˜ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjýdh²hh³jeh´M˜ubah}”(h]”jødah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jeh´M˜hjúdh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4Check if a quotactl() syscall is allowed for this fs”h]”hŒ4Check if a quotactl() syscall is allowed for this fs”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜hj|fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjúdh²hh³jeh´M˜ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj—fjæj—fjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒþ**Parameters** ``int cmds`` commands ``int type`` type ``int id`` id ``const struct super_block *sb`` filesystem **Description** Check whether the quotactl syscall is allowed for this **sb**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¡fh]”hŒ Parameters”…”�”}”(hj£fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸfubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mœhj›fubj )�”}”(hhh]”(j)�”}”(hŒ``int cmds`` commands ”h]”(j)�”}”(hŒ ``int cmds``”h]”j)�”}”(hjÀfh]”hŒint cmds”…”�”}”(hjÂfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™hjºfubj2)�”}”(hhh]”hÝ)�”}”(hŒcommands”h]”hŒcommands”…”�”}”(hjÙfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÕfh´M™hjÖfubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjºfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕfh´M™hj·fubj)�”}”(hŒ``int type`` type ”h]”(j)�”}”(hŒ ``int type``”h]”j)�”}”(hjùfh]”hŒint type”…”�”}”(hjûfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mšhjófubj2)�”}”(hhh]”hÝ)�”}”(hŒtype”h]”hŒtype”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jgh´Mšhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjófubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jgh´Mšhj·fubj)�”}”(hŒ``int id`` id ”h]”(j)�”}”(hŒ ``int id``”h]”j)�”}”(hj2gh]”hŒint id”…”�”}”(hj4gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0gubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M›hj,gubj2)�”}”(hhh]”hÝ)�”}”(hŒid”h]”hŒid”…”�”}”(hjKgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jGgh´M›hjHgubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj,gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jGgh´M›hj·fubj)�”}”(hŒ,``const struct super_block *sb`` filesystem ”h]”(j)�”}”(hŒ ``const struct super_block *sb``”h]”j)�”}”(hjkgh]”hŒconst struct super_block *sb”…”�”}”(hjmgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjigubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mœhjegubj2)�”}”(hhh]”hÝ)�”}”(hŒ filesystem”h]”hŒ filesystem”…”�”}”(hj„gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j€gh´Mœhj�gubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjegubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€gh´Mœhj·fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj›fubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¦gh]”hŒ Description”…”�”}”(hj¨gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤gubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mžhj›fubhÝ)�”}”(hŒ>Check whether the quotactl syscall is allowed for this **sb**.”h]”(hŒ7Check whether the quotactl syscall is allowed for this ”…”�”}”(hj¼gh²hh³Nh´Nubjõ)�”}”(hŒ**sb**”h]”hŒsb”…”�”}”(hjÄgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼gubhŒ.”…”�”}”(hj¼gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hj›fubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjßgh]”hŒReturn”…”�”}”(hjágh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝgubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŸhj›fubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjõgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj›fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_quota_on (C function)”Œc.security_quota_on”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-int security_quota_on (struct dentry *dentry)”h]”j)�”}”(hŒ,int security_quota_on(struct dentry *dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj$hh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj hh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj hh²hh³j2hh´M¨ubj{)�”}”(hŒsecurity_quota_on”h]”j�)�”}”(hŒsecurity_quota_on”h]”hŒsecurity_quota_on”…”�”}”(hjEhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjAhubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj hh²hh³j2hh´M¨ubjœ)�”}”(hŒ(struct dentry *dentry)”h]”j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjahh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj]hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnhh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]hubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�hŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jGhsbŒc.security_quota_on”†”asbuh1hhj]hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸhh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]hubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj­hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj]hubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjºhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjYhubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj hh²hh³j2hh´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjhh²hh³j2hh´M¨ubah}”(h]”jhah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j2hh´M¨hjhh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if QUOTAON is allowed for a dentry”h]”hŒ(Check if QUOTAON is allowed for a dentry”…”�”}”(hjähh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¨hjáhh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjhh²hh³j2hh´M¨ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjühjæjühjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¦**Parameters** ``struct dentry *dentry`` dentry **Description** Check whether QUOTAON is allowed for **dentry**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjih]”hŒ Parameters”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¬hjiubj )�”}”(hhh]”j)�”}”(hŒ!``struct dentry *dentry`` dentry ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj%ih]”hŒstruct dentry *dentry”…”�”}”(hj'ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M©hjiubj2)�”}”(hhh]”hÝ)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj>ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:ih´M©hj;iubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:ih´• M©hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjiubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj`ih]”hŒ Description”…”�”}”(hjbih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^iubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M«hjiubhÝ)�”}”(hŒ0Check whether QUOTAON is allowed for **dentry**.”h]”(hŒ%Check whether QUOTAON is allowed for ”…”�”}”(hjvih²hh³Nh´Nubjõ)�”}”(hŒ **dentry**”h]”hŒdentry”…”�”}”(hj~ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjviubhŒ.”…”�”}”(hjvih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MªhjiubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj™ih]”hŒReturn”…”�”}”(hj›ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—iubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¬hjiubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj¯ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M­hjiubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_syslog (C function)”Œc.security_syslog”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒint security_syslog (int type)”h]”j)�”}”(hŒint security_syslog(int type)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÞih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚih²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚih²hh³jìih´Mµubj{)�”}”(hŒsecurity_syslog”h]”j�)�”}”(hŒsecurity_syslog”h]”hŒsecurity_syslog”…”�”}”(hjÿih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjûiubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÚih²hh³jìih´Mµubjœ)�”}”(hŒ (int type)”h]”j¢)�”}”(hŒint type”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj7jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÚih²hh³jìih´Mµubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÖih²hh³jìih´Mµubah}”(h]”jÑiah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jìih´MµhjÓih²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5Check if accessing the kernel message ring is allowed”h]”hŒ5Check if accessing the kernel message ring is allowed”…”�”}”(hjajh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mµhj^jh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÓih²hh³jìih´Mµubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjyjjæjyjjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``int type`` SYSLOG_ACTION_* type **Description** Check permission before accessing the kernel message ring or changing logging to the console. See the syslog(2) manual page for an explanation of the **type** values. **Return** Return 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjƒjh]”hŒ Parameters”…”�”}”(hj…jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¹hj}jubj )�”}”(hhh]”j)�”}”(hŒ"``int type`` SYSLOG_ACTION_* type ”h]”(j)�”}”(hŒ ``int type``”h]”j)�”}”(hj¢jh]”hŒint type”…”�”}”(hj¤jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj jubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¶hjœjubj2)�”}”(hhh]”hÝ)�”}”(hŒSYSLOG_ACTION_* type”h]”hŒSYSLOG_ACTION_* type”…”�”}”(hj»jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·jh´M¶hj¸jubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·jh´M¶hj™jubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj}jubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÝjh]”hŒ Description”…”�”}”(hjßjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¸hj}jubhÝ)�”}”(hŒ§Check permission before accessing the kernel message ring or changing logging to the console. See the syslog(2) manual page for an explanation of the **type** values.”h]”(hŒ—Check permission before accessing the kernel message ring or changing logging to the console. See the syslog(2) manual page for an explanation of the ”…”�”}”(hjójh²hh³Nh´Nubjõ)�”}”(hŒ**type**”h]”hŒtype”…”�”}”(hjûjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjójubhŒ values.”…”�”}”(hjójh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M·hj}jubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjkh]”hŒReturn”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M»hj}jubhÝ)�”}”(hŒ"Return 0 if permission is granted.”h]”hŒ"Return 0 if permission is granted.”…”�”}”(hj,kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¼hj}jubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_settime64 (C function)”Œc.security_settime64”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOint security_settime64 (const struct timespec64 *ts, const struct timezone *tz)”h]”j)�”}”(hŒNint security_settime64(const struct timespec64 *ts, const struct timezone *tz)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj[kh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjWkh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjWkh²hh³jikh´MÄubj{)�”}”(hŒsecurity_settime64”h]”j�)�”}”(hŒsecurity_settime64”h]”hŒsecurity_settime64”…”�”}”(hj|kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxkubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjWkh²hh³jikh´MÄubjœ)�”}”(hŒ8(const struct timespec64 *ts, const struct timezone *tz)”h]”(j¢)�”}”(hŒconst struct timespec64 *ts”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj˜kh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj”kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”kubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj³kh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj”kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”kubh)�”}”(hhh]”j�)�”}”(hŒ timespec64”h]”hŒ timespec64”…”�”}”(hjÑkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎkubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÓkŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j~ksbŒc.security_settime64”†”asbuh1hhj”kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”kubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÿkh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj”kubj�)�”}”(hŒts”h]”hŒts”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�kubj¢)�”}”(hŒconst struct timezone *tz”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj%lh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!lubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj@lh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!lubh)�”}”(hhh]”j�)�”}”(hŒtimezone”h]”hŒtimezone”…”�”}”(hj^lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j`lŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jíkŒc.security_settime64”†”asbuh1hhj!lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!lubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŠlh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!lubj�)�”}”(hŒtz”h]”hŒtz”…”�”}”(hj—lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjWkh²hh³jikh´MÄubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjSkh²hh³jikh´MÄubah}”(h]”jNkah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jikh´MÄhjPkh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Check if changing the system time is allowed”h]”hŒ,Check if changing the system time is allowed”…”�”}”(hjÁlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÄhj¾lh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjPkh²hh³jikh´MÄubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÙljæjÙljç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX?**Parameters** ``const struct timespec64 *ts`` new time ``const struct timezone *tz`` timezone **Description** Check permission to change the system time, struct timespec64 is defined in and timezone is defined in . **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjãlh]”hŒ Parameters”…”�”}”(hjålh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjálubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÈhjÝlubj )�”}”(hhh]”(j)�”}”(hŒ)``const struct timespec64 *ts`` new time ”h]”(j)�”}”(hŒ``const struct timespec64 *ts``”h]”j)�”}”(hjmh]”hŒconst struct timespec64 *ts”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÅhjülubj2)�”}”(hhh]”hÝ)�”}”(hŒnew time”h]”hŒnew time”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jmh´MÅhjmubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjülubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmh´MÅhjùlubj)�”}”(hŒ'``const struct timezone *tz`` timezone ”h]”(j)�”}”(hŒ``const struct timezone *tz``”h]”j)�”}”(hj;mh]”hŒconst struct timezone *tz”…”�”}”(hj=mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9mubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÆhj5mubj2)�”}”(hhh]”hÝ)�”}”(hŒtimezone”h]”hŒtimezone”…”�”}”(hjTmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jPmh´MÆhjQmubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj5mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jPmh´MÆhjùlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÝlubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjvmh]”hŒ Description”…”�”}”(hjxmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtmubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÈhjÝlubhÝ)�”}”(hŒ—Check permission to change the system time, struct timespec64 is defined in and timezone is defined in .”h]”hŒ—Check permission to change the system time, struct timespec64 is defined in and timezone is defined in .”…”�”}”(hjŒmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÇhjÝlubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj�mh]”hŒReturn”…”�”}”(hjŸmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj›mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÊhjÝlubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj³mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MËhjÝlubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_vm_enough_memory_mm (C function)”Œc.security_vm_enough_memory_mm”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCint security_vm_enough_memory_mm (struct mm_struct *mm, long pages)”h]”j)�”}”(hŒBint security_vm_enough_memory_mm(struct mm_struct *mm, long pages)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjâmh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞmh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞmh²hh³jðmh´MÓubj{)�”}”(hŒsecurity_vm_enough_memory_mm”h]”j�)�”}”(hŒsecurity_vm_enough_memory_mm”h]”hŒsecurity_vm_enough_memory_mm”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿmubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÞmh²hh³jðmh´MÓubjœ)�”}”(hŒ"(struct mm_struct *mm, long pages)”h]”(j¢)�”}”(hŒstruct mm_struct *mm”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjnubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnubh)�”}”(hhh]”j�)�”}”(hŒ mm_struct”h]”hŒ mm_struct”…”�”}”(hj=nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j?nŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jnsbŒc.security_vm_enough_memory_mm”†”asbuh1hhjnubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjknh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjnubj�)�”}”(hŒmm”h]”hŒmm”…”�”}”(hjxnh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjnubj¢)�”}”(hŒ long pages”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‘nh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�nubj�)�”}”(hŒpages”h]”hŒpages”…”�”}”(hj­nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjnubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÞmh²hh³jðmh´MÓubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÚmh²hh³jðmh´MÓubah}”(h]”jÕmah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jðmh´MÓhj×mh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Check if allocating a new mem map is allowed”h]”hŒ,Check if allocating a new mem map is allowed”…”�”}”(hj×nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓhjÔnh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj×mh²hh³jðmh´MÓubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjïnjæjïnjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXÆ**Parameters** ``struct mm_struct *mm`` mm struct ``long pages`` number of pages **Description** Check permissions for allocating a new virtual mapping. If all LSMs return a positive value, __vm_enough_memory() will be called with cap_sys_admin set. If at least one LSM returns 0 or negative, __vm_enough_memory() will be called with cap_sys_admin cleared. **Return** Returns 0 if permission is granted by the LSM infrastructure to the caller.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjùnh]”hŒ Parameters”…”�”}”(hjûnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M×hjónubj )�”}”(hhh]”(j)�”}”(hŒ#``struct mm_struct *mm`` mm struct ”h]”(j)�”}”(hŒ``struct mm_struct *mm``”h]”j)�”}”(hjoh]”hŒstruct mm_struct *mm”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔhjoubj2)�”}”(hhh]”hÝ)�”}”(hŒ mm struct”h]”hŒ mm struct”…”�”}”(hj1oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j-oh´MÔhj.oubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-oh´MÔhjoubj)�”}”(hŒ``long pages`` number of pages ”h]”(j)�”}”(hŒ``long pages``”h]”j)�”}”(hjQoh]”hŒ long pages”…”�”}”(hjSoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjOoubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÕhjKoubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of pages”h]”hŒnumber of pages”…”�”}”(hjjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jfoh´MÕhjgoubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjKoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jfoh´MÕhjoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjónubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŒoh]”hŒ Description”…”�”}”(hjŽoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŠoubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M×hjónubhÝ)�”}”(hXCheck permissions for allocating a new virtual mapping. If all LSMs return a positive value, __vm_enough_memory() will be called with cap_sys_admin set. If at least one LSM returns 0 or negative, __vm_enough_memory() will be called with cap_sys_admin cleared.”h]”hXCheck permissions for allocating a new virtual mapping. If all LSMs return a positive value, __vm_enough_memory() will be called with cap_sys_admin set. If at least one LSM returns 0 or negative, __vm_enough_memory() will be called with cap_sys_admin cleared.”…”�”}”(hj¢oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÖhjónubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj³oh]”hŒReturn”…”�”}”(hjµoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±oubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÛhjónubhÝ)�”}”(hŒKReturns 0 if permission is granted by the LSM infrastructure to the caller.”h]”hŒKReturns 0 if permission is granted by the LSM infrastructure to the caller.”…”�”}”(hjÉoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÜhjónubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_bprm_creds_for_exec (C function)”Œc.security_bprm_creds_for_exec”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjôoh²hh³jph´Möubj{)�”}”(hŒsecurity_bprm_creds_for_exec”h]”j�)�”}”(hŒsecurity_bprm_creds_for_exec”h]”hŒsecurity_bprm_creds_for_exec”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjpubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjôoh²hh³jph´Möubjœ)�”}”(hŒ(struct linux_binprm *bprm)”h]”j¢)�”}”(hŒstruct linux_binprm *bprm”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj5ph²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj1pubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1pubh)�”}”(hhh]”j�)�”}”(hŒ linux_binprm”h]”hŒ linux_binprm”…”�”}”(hjSph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jUpŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jpsbŒc.security_bprm_creds_for_exec”†”asbuh1hhj1pubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1pubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�ph²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj1pubj�)�”}”(hŒbprm”h]”hŒbprm”…”�”}”(hjŽph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-pubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjôoh²hh³jph´Möubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjðoh²hh³jph´Möubah}”(h]”jëoah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jph´Möhjíoh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Prepare the credentials for exec()”h]”hŒ"Prepare the credentials for exec()”…”�”}”(hj¸ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Möhjµph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjíoh²hh³jph´Möubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÐpjæjÐpjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXž**Parameters** ``struct linux_binprm *bprm`` binary program information **Description** If the setup in prepare_exec_creds did not setup **bprm->cred->security** properly for executing **bprm->file**, update the LSM's portion of **bprm->cred->security** to be what commit_creds needs to install for the new program. This hook may also optionally check permissions (e.g. for transitions between security domains). The hook must set **bprm->secureexec** to 1 if AT_SECURE should be set to request libc enable secure mode. **bprm** contains the linux_binprm structure. If execveat(2) is called with the AT_EXECVE_CHECK flag, bprm->is_check is set. The result must be the same as without this flag even if the execution will never really happen and **bprm** will always be dropped. This hook must not change current->cred, only **bprm->cred**. **Return** Returns 0 if the hook is successful and permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÚph]”hŒ Parameters”…”�”}”(hjÜph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØpubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MúhjÔpubj )�”}”(hhh]”j)�”}”(hŒ9``struct linux_binprm *bprm`` binary program information ”h]”(j)�”}”(hŒ``struct linux_binprm *bprm``”h]”j)�”}”(hjùph]”hŒstruct linux_binprm *bprm”…”�”}”(hjûph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷pubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M÷hjópubj2)�”}”(hhh]”hÝ)�”}”(hŒbinary program information”h]”hŒbinary program information”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jqh´M÷hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjópubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqh´M÷hjðpubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÔpubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj4qh]”hŒ Description”…”�”}”(hj6qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj2qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MùhjÔpubhÝ)�”}”(hXàIf the setup in prepare_exec_creds did not setup **bprm->cred->security** properly for executing **bprm->file**, update the LSM's portion of **bprm->cred->security** to be what commit_creds needs to install for the new program. This hook may also optionally check permissions (e.g. for transitions between security domains). The hook must set **bprm->secureexec** to 1 if AT_SECURE should be set to request libc enable secure mode. **bprm** contains the linux_binprm structure.”h]”(hŒ1If the setup in prepare_exec_creds did not setup ”…”�”}”(hjJqh²hh³Nh´Nubjõ)�”}”(hŒ**bprm->cred->security**”h]”hŒbprm->cred->security”…”�”}”(hjRqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJqubhŒ properly for executing ”…”�”}”(hjJqh²hh³Nh´Nubjõ)�”}”(hŒ**bprm->file**”h]”hŒ bprm->file”…”�”}”(hjdqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJqubhŒ , update the LSM’s portion of ”…”�”}”(hjJqh²hh³Nh´Nubjõ)�”}”(hŒ**bprm->cred->security**”h]”hŒbprm->cred->security”…”�”}”(hjvqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJqubhŒ´ to be what commit_creds needs to install for the new program. This hook may also optionally check permissions (e.g. for transitions between security domains). The hook must set ”…”�”}”(hjJqh²hh³Nh´Nubjõ)�”}”(hŒ**bprm->secureexec**”h]”hŒbprm->secureexec”…”�”}”(hjˆqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJqubhŒF to 1 if AT_SECURE should be set to request libc enable secure mode. ”…”�”}”(hjJqh²hh³Nh´Nubjõ)�”}”(hŒ**bprm**”h]”hŒbprm”…”�”}”(hjšqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJqubhŒ% contains the linux_binprm structure.”…”�”}”(hjJqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MøhjÔpubhÝ)�”}”(hŒÔIf execveat(2) is called with the AT_EXECVE_CHECK flag, bprm->is_check is set. The result must be the same as without this flag even if the execution will never really happen and **bprm** will always be dropped.”h]”(hŒ´If execveat(2) is called with the AT_EXECVE_CHECK flag, bprm->is_check is set. The result must be the same as without this flag even if the execution will never really happen and ”…”�”}”(hj³qh²hh³Nh´Nubjõ)�”}”(hŒ**bprm**”h]”hŒbprm”…”�”}”(hj»qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj³qubhŒ will always be dropped.”…”�”}”(hj³qh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÔpubhÝ)�”}”(hŒ=This hook must not change current->cred, only **bprm->cred**.”h]”(hŒ.This hook must not change current->cred, only ”…”�”}”(hjÔqh²hh³Nh´Nubjõ)�”}”(hŒ**bprm->cred**”h]”hŒ bprm->cred”…”�”}”(hjÜqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔqubhŒ.”…”�”}”(hjÔqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÔpubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj÷qh]”hŒReturn”…”�”}”(hjùqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõqubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÔpubhÝ)�”}”(hŒ>Returns 0 if the hook is successful and permission is granted.”h]”hŒ>Returns 0 if the hook is successful and permission is granted.”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÔpubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*security_bprm_creds_from_file (C function)”Œc.security_bprm_creds_from_file”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒVint security_bprm_creds_from_file (struct linux_binprm *bprm, const struct file *file)”h]”j)�”}”(hŒUint security_bprm_creds_from_file(struct linux_binprm *bprm, const struct file *file)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjah"]”h$]”h&]”uh1j1hj8rh²hh³jJrh´Mubj{)�”}”(hŒsecurity_bprm_creds_from_file”h]”j�)�”}”(hŒsecurity_bprm_creds_from_file”h]”hŒsecurity_bprm_creds_from_file”…”�”}”(hj]rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYrubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj8rh²hh³jJrh´Mubjœ)�”}”(hŒ4(struct linux_binprm *bprm, const struct file *file)”h]”(j¢)�”}”(hŒstruct linux_binprm *bprm”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjyrh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjurubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjurubh)�”}”(hhh]”j�)�”}”(hŒ linux_binprm”h]”hŒ linux_binprm”…”�”}”(hj—rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j™rŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j_rsbŒc.security_bprm_creds_from_file”†”asbuh1hhjurubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjurubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÅrh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjurubj�)�”}”(hŒbprm”h]”hŒbprm”…”�”}”(hjÒrh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjurubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjqrubj¢)�”}”(hŒconst struct file *file”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjërh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjçrubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjørh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçrubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjçrubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçrubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj$sh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j&sŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j³rŒc.security_bprm_creds_from_file”†”asbuh1hhjçrubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBsh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçrubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjPsh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjçrubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj]sh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjqrubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj8rh²hh³jJrh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj4rh²hh³jJrh´Mubah}”(h]”j/rah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jJrh´Mhj1rh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Update linux_binprm creds based on file”h]”hŒ'Update linux_binprm creds based on file”…”�”}”(hj‡sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj„sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj1rh²hh³jJrh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŸsjæjŸsjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXË**Parameters** ``struct linux_binprm *bprm`` binary program information ``const struct file *file`` associated file **Description** If **file** is setpcap, suid, sgid or otherwise marked to change privilege upon exec, update **bprm->cred** to reflect that change. This is called after finding the binary that will be executed without an interpreter. This ensures that the credentials will not be derived from a script that the binary will need to reopen, which when reopend may end up being a completely different file. This hook may also optionally check permissions (e.g. for transitions between security domains). The hook must set **bprm->secureexec** to 1 if AT_SECURE should be set to request libc enable secure mode. The hook must add to **bprm->per_clear** any personality flags that should be cleared from current->personality. **bprm** contains the linux_binprm structure. **Return** Returns 0 if the hook is successful and permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj©sh]”hŒ Parameters”…”�”}”(hj«sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§subah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj£subj )�”}”(hhh]”(j)�”}”(hŒ9``struct linux_binprm *bprm`` binary program information ”h]”(j)�”}”(hŒ``struct linux_binprm *bprm``”h]”j)�”}”(hjÈsh]”hŒstruct linux_binprm *bprm”…”�”}”(hjÊsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆsubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÂsubj2)�”}”(hhh]”hÝ)�”}”(hŒbinary program information”h]”hŒbinary program information”…”�”}”(hjásh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝsh´MhjÞsubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝsh´Mhj¿subj)�”}”(hŒ,``const struct file *file`` associated file ”h]”(j)�”}”(hŒ``const struct file *file``”h]”j)�”}”(hjth]”hŒconst struct file *file”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿsubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjûsubj2)�”}”(hhh]”hÝ)�”}”(hŒassociated file”h]”hŒassociated file”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jth´Mhjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jth´Mhj¿subeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj£subhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:tubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj£subhÝ)�”}”(hXóIf **file** is setpcap, suid, sgid or otherwise marked to change privilege upon exec, update **bprm->cred** to reflect that change. This is called after finding the binary that will be executed without an interpreter. This ensures that the credentials will not be derived from a script that the binary will need to reopen, which when reopend may end up being a completely different file. This hook may also optionally check permissions (e.g. for transitions between security domains). The hook must set **bprm->secureexec** to 1 if AT_SECURE should be set to request libc enable secure mode. The hook must add to **bprm->per_clear** any personality flags that should be cleared from current->personality. **bprm** contains the linux_binprm structure.”h]”(hŒIf ”…”�”}”(hjRth²hh³Nh´Nubjõ)�”}”(hŒ**file**”h]”hŒfile”…”�”}”(hjZth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRtubhŒR is setpcap, suid, sgid or otherwise marked to change privilege upon exec, update ”…”�”}”(hjRth²hh³Nh´Nubjõ)�”}”(hŒ**bprm->cred**”h]”hŒ bprm->cred”…”�”}”(hjlth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRtubhX� to reflect that change. This is called after finding the binary that will be executed without an interpreter. This ensures that the credentials will not be derived from a script that the binary will need to reopen, which when reopend may end up being a completely different file. This hook may also optionally check permissions (e.g. for transitions between security domains). The hook must set ”…”�”}”(hjRth²hh³Nh´Nubjõ)�”}”(hŒ**bprm->secureexec**”h]”hŒbprm->secureexec”…”�”}”(hj~th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRtubhŒ[ to 1 if AT_SECURE should be set to request libc enable secure mode. The hook must add to ”…”�”}”(hjRth²hh³Nh´Nubjõ)�”}”(hŒ**bprm->per_clear**”h]”hŒbprm->per_clear”…”�”}”(hj�th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRtubhŒJ any personality flags that should be cleared from current->personality. ”…”�”}”(hjRth²hh³Nh´Nubjõ)�”}”(hŒ**bprm**”h]”hŒbprm”…”�”}”(hj¢th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRtubhŒ% contains the linux_binprm structure.”…”�”}”(hjRth²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj£subhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj½th]”hŒReturn”…”�”}”(hj¿th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»tubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj£subhÝ)�”}”(hŒ>Returns 0 if the hook is successful and permission is granted.”h]”hŒ>Returns 0 if the hook is successful and permission is granted.”…”�”}”(hjÓth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj£subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_bprm_check (C function)”Œc.security_bprm_check”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3int security_bprm_check (struct linux_binprm *bprm)”h]”j)�”}”(hŒ2int security_bprm_check(struct linux_binprm *bprm)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþth²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M'ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþth²hh³juh´M'ubj{)�”}”(hŒsecurity_bprm_check”h]”j�)�”}”(hŒsecurity_bprm_check”h]”hŒsecurity_bprm_check”…”�”}”(hj#uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjþth²hh³juh´M'ubjœ)�”}”(hŒ(struct linux_binprm *bprm)”h]”j¢)�”}”(hŒstruct linux_binprm *bprm”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj?uh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;uubh)�”}”(hhh]”j�)�”}”(hŒ linux_binprm”h]”hŒ linux_binprm”…”�”}”(hj]uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_uŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j%usbŒc.security_bprm_check”†”asbuh1hhj;uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;uubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹uh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;uubj�)�”}”(hŒbprm”h]”hŒbprm”…”�”}”(hj˜uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7uubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjþth²hh³juh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjúth²hh³juh´M'ubah}”(h]”jõtah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³juh´M'hj÷th²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒMediate binary handler search”h]”hŒMediate binary handler search”…”�”}”(hjÂuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M'hj¿uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj÷th²hh³juh´M'ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÚujæjÚujç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct linux_binprm *bprm`` binary program information **Description** This hook mediates the point when a search for a binary handler will begin. It allows a check against the **bprm->cred->security** value which was set in the preceding creds_for_exec call. The argv list and envp list are reliably available in **bprm**. This hook may be called multiple times during a single execve. **bprm** contains the linux_binprm structure. **Return** Returns 0 if the hook is successful and permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjäuh]”hŒ Parameters”…”�”}”(hjæuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hjÞuubj )�”}”(hhh]”j)�”}”(hŒ9``struct linux_binprm *bprm`` binary program information ”h]”(j)�”}”(hŒ``struct linux_binprm *bprm``”h]”j)�”}”(hjvh]”hŒstruct linux_binprm *bprm”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M(hjýuubj2)�”}”(hhh]”hÝ)�”}”(hŒbinary program information”h]”hŒbinary program information”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jvh´M(hjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jvh´M(hjúuubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÞuubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj>vh]”hŒ Description”…”�”}”(hj@vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcred->security** value which was set in the preceding creds_for_exec call. The argv list and envp list are reliably available in **bprm**. This hook may be called multiple times during a single execve. **bprm** contains the linux_binprm structure.”h]”(hŒjThis hook mediates the point when a search for a binary handler will begin. It allows a check against the ”…”�”}”(hjTvh²hh³Nh´Nubjõ)�”}”(hŒ**bprm->cred->security**”h]”hŒbprm->cred->security”…”�”}”(hj\vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjTvubhŒr value which was set in the preceding creds_for_exec call. The argv list and envp list are reliably available in ”…”�”}”(hjTvh²hh³Nh´Nubjõ)�”}”(hŒ**bprm**”h]”hŒbprm”…”�”}”(hjnvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjTvubhŒC. This hook may be called multiple times during a single execve. ”…”�”}”(hjTvh²hh³Nh´Nubjõ)�”}”(hŒ**bprm**”h]”hŒbprm”…”�”}”(hj€vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjTvubhŒ% contains the linux_binprm structure.”…”�”}”(hjTvh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M)hjÞuubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj›vh]”hŒReturn”…”�”}”(hj�vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M/hjÞuubhÝ)�”}”(hŒ>Returns 0 if the hook is successful and permission is granted.”h]”hŒ>Returns 0 if the hook is successful and permission is granted.”…”�”}”(hj±vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M0hjÞuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ+security_bprm_committing_creds (C function)”Œ c.security_bprm_committing_creds”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEvoid security_bprm_committing_creds (const struct linux_binprm *bprm)”h]”j)�”}”(hŒDvoid security_bprm_committing_creds(const struct linux_binprm *bprm)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjàvh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÜvh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜvh²hh³jîvh´M8ubj{)�”}”(hŒsecurity_bprm_committing_creds”h]”j�)�”}”(hŒsecurity_bprm_committing_creds”h]”hŒsecurity_bprm_committing_creds”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjývubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÜvh²hh³jîvh´M8ubjœ)�”}”(hŒ!(const struct linux_binprm *bprm)”h]”j¢)�”}”(hŒconst struct linux_binprm *bprm”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj8wh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwubh)�”}”(hhh]”j�)�”}”(hŒ linux_binprm”h]”hŒ linux_binprm”…”�”}”(hjVwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jXwŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jwsbŒ c.security_bprm_committing_creds”†”asbuh1hhjwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj„wh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjwubj�)�”}”(hŒbprm”h]”hŒbprm”…”�”}”(hj‘wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjwubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÜvh²hh³jîvh´M8ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjØvh²hh³jîvh´M8ubah}”(h]”jÓvah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jîvh´M8hjÕvh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Install creds for a process during exec()”h]”hŒ)Install creds for a process during exec()”…”�”}”(hj»wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8hj¸wh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÕvh²hh³jîvh´M8ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÓwjæjÓwjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXg**Parameters** ``const struct linux_binprm *bprm`` binary program information **Description** Prepare to install the new security attributes of a process being transformed by an execve operation, based on the old credentials pointed to by **current->cred** and the information set in **bprm->cred** by the bprm_creds_for_exec hook. **bprm** points to the linux_binprm structure. This hook is a good place to perform state changes on the process such as closing open file descriptors to which access will no longer be granted when the attributes are changed. This is called immediately before commit_creds().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÝwh]”hŒ Parameters”…”�”}”(hjßwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛwubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M<hj×wubj )�”}”(hhh]”j)�”}”(hŒ?``const struct linux_binprm *bprm`` binary program information ”h]”(j)�”}”(hŒ#``const struct linux_binprm *bprm``”h]”j)�”}”(hjüwh]”hŒconst struct linux_binprm *bprm”…”�”}”(hjþwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúwubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M9hjöwubj2)�”}”(hhh]”hÝ)�”}”(hŒbinary program information”h]”hŒbinary program information”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jxh´M9hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjöwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jxh´M9hjówubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj×wubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj7xh]”hŒ Description”…”�”}”(hj9xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5xubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M;hj×wubhÝ)�”}”(hXPrepare to install the new security attributes of a process being transformed by an execve operation, based on the old credentials pointed to by **current->cred** and the information set in **bprm->cred** by the bprm_creds_for_exec hook. **bprm** points to the linux_binprm structure. This hook is a good place to perform state changes on the process such as closing open file descriptors to which access will no longer be granted when the attributes are changed. This is called immediately before commit_creds().”h]”(hŒ‘Prepare to install the new security attributes of a process being transformed by an execve operation, based on the old credentials pointed to by ”…”�”}”(hjMxh²hh³Nh´Nubjõ)�”}”(hŒ**current->cred**”h]”hŒ current->cred”…”�”}”(hjUxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMxubhŒ and the information set in ”…”�”}”(hjMxh²hh³Nh´Nubjõ)�”}”(hŒ**bprm->cred**”h]”hŒ bprm->cred”…”�”}”(hjgxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMxubhŒ# by the bprm_creds_for_exec hook. ”…”�”}”(hjMxh²hh³Nh´Nubjõ)�”}”(hŒ**bprm**”h]”hŒbprm”…”�”}”(hjyxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMxubhX  points to the linux_binprm structure. This hook is a good place to perform state changes on the process such as closing open file descriptors to which access will no longer be granted when the attributes are changed. This is called immediately before commit_creds().”…”�”}”(hjMxh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M:hj×wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*security_bprm_committed_creds (C function)”Œc.security_bprm_committed_creds”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDvoid security_bprm_committed_creds (const struct linux_binprm *bprm)”h]”j)�”}”(hŒCvoid security_bprm_committed_creds(const struct linux_binprm *bprm)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj²xh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj®xh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MIubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁxh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®xh²hh³jÀxh´MIubj{)�”}”(hŒsecurity_bprm_committed_creds”h]”j�)�”}”(hŒsecurity_bprm_committed_creds”h]”hŒsecurity_bprm_committed_creds”…”�”}”(hjÓxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏxubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj®xh²hh³jÀxh´MIubjœ)�”}”(hŒ!(const struct linux_binprm *bprm)”h]”j¢)�”}”(hŒconst struct linux_binprm *bprm”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjïxh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjëxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüxh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëxubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj yh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjëxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëxubh)�”}”(hhh]”j�)�”}”(hŒ linux_binprm”h]”hŒ linux_binprm”…”�”}”(hj(yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%yubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j*yŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÕxsbŒc.security_bprm_committed_creds”†”asbuh1hhjëxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëxubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjVyh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjëxubj�)�”}”(hŒbprm”h]”hŒbprm”…”�”}”(hjcyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjçxubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj®xh²hh³jÀxh´MIubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjªxh²hh³jÀxh´MIubah}”(h]”j¥xah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÀxh´MIhj§xh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Tidy up after cred install during exec()”h]”hŒ(Tidy up after cred install during exec()”…”�”}”(hj�yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MIhjŠyh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj§xh²hh³jÀxh´MIubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¥yjæj¥yjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXø**Parameters** ``const struct linux_binprm *bprm`` binary program information **Description** Tidy up after the installation of the new security attributes of a process being transformed by an execve operation. The new credentials have, by this point, been set to **current->cred**. **bprm** points to the linux_binprm structure. This hook is a good place to perform state changes on the process such as clearing out non-inheritable signal state. This is called immediately after commit_creds().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¯yh]”hŒ Parameters”…”�”}”(hj±yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­yubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MMhj©yubj )�”}”(hhh]”j)�”}”(hŒ?``const struct linux_binprm *bprm`` binary program information ”h]”(j)�”}”(hŒ#``const struct linux_binprm *bprm``”h]”j)�”}”(hjÎyh]”hŒconst struct linux_binprm *bprm”…”�”}”(hjÐyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌyubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MJhjÈyubj2)�”}”(hhh]”hÝ)�”}”(hŒbinary program information”h]”hŒbinary program information”…”�”}”(hjçyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jãyh´MJhjäyubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãyh´MJhjÅyubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj©yubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj zh]”hŒ Description”…”�”}”(hj zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MLhj©yubhÝ)�”}”(hX•Tidy up after the installation of the new security attributes of a process being transformed by an execve operation. The new credentials have, by this point, been set to **current->cred**. **bprm** points to the linux_binprm structure. This hook is a good place to perform state changes on the process such as clearing out non-inheritable signal state. This is called immediately after commit_creds().”h]”(hŒ«Tidy up after the installation of the new security attributes of a process being transformed by an execve operation. The new credentials have, by this point, been set to ”…”�”}”(hjzh²hh³Nh´Nubjõ)�”}”(hŒ**current->cred**”h]”hŒ current->cred”…”�”}”(hj'zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjzubhŒ. ”…”�”}”(hjzh²hh³Nh´Nubjõ)�”}”(hŒ**bprm**”h]”hŒbprm”…”�”}”(hj9zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjzubhŒÎ points to the linux_binprm structure. This hook is a good place to perform state changes on the process such as clearing out non-inheritable signal state. This is called immediately after commit_creds().”…”�”}”(hjzh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MKhj©yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_fs_context_submount (C function)”Œc.security_fs_context_submount”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒWint security_fs_context_submount (struct fs_context *fc, struct super_block *reference)”h]”j)�”}”(hŒVint security_fs_context_submount(struct fs_context *fc, struct super_block *reference)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjrzh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnzh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnzh²hh³j€zh´MYubj{)�”}”(hŒsecurity_fs_context_submount”h]”j�)�”}”(hŒsecurity_fs_context_submount”h]”hŒsecurity_fs_context_submount”…”�”}”(hj“zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�zubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjnzh²hh³j€zh´MYubjœ)�”}”(hŒ6(struct fs_context *fc, struct super_block *reference)”h]”(j¢)�”}”(hŒstruct fs_context *fc”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¯zh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj«zubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«zubh)�”}”(hhh]”j�)�”}”(hŒ fs_context”h]”hŒ fs_context”…”�”}”(hjÍzh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊzubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÏzŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j•zsbŒc.security_fs_context_submount”†”asbuh1hhj«zubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjízh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«zubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjûzh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj«zubj�)�”}”(hŒfc”h]”hŒfc”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj§zubj¢)�”}”(hŒstruct super_block *reference”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj!{h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj{ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj{ubh)�”}”(hhh]”j�)�”}”(hŒ super_block”h]”hŒ super_block”…”�”}”(hj?{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<{ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jA{Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jézŒc.security_fs_context_submount”†”asbuh1hhj{ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj{ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjk{h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj{ubj�)�”}”(hŒ reference”h]”hŒ reference”…”�”}”(hjx{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj§zubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjnzh²hh³j€zh´MYubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjjzh²hh³j€zh´MYubah}”(h]”jezah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j€zh´MYhjgzh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒInitialise fc->security”h]”hŒInitialise fc->security”…”�”}”(hj¢{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MYhjŸ{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjgzh²hh³j€zh´MYubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjº{jæjº{jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct fs_context *fc`` new filesystem context ``struct super_block *reference`` dentry reference for submount/remount **Description** Fill out the ->security field for a new fs_context. **Return** Returns 0 on success or negative error code on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÄ{h]”hŒ Parameters”…”�”}”(hjÆ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂ{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M]hj¾{ubj )�”}”(hhh]”(j)�”}”(hŒ1``struct fs_context *fc`` new filesystem context ”h]”(j)�”}”(hŒ``struct fs_context *fc``”h]”j)�”}”(hjã{h]”hŒstruct fs_context *fc”…”�”}”(hjå{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjá{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MZhjÝ{ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew filesystem context”h]”hŒnew filesystem context”…”�”}”(hjü{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jø{h´MZhjù{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÝ{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jø{h´MZhjÚ{ubj)�”}”(hŒH``struct super_block *reference`` dentry reference for submount/remount ”h]”(j)�”}”(hŒ!``struct super_block *reference``”h]”j)�”}”(hj|h]”hŒstruct super_block *reference”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M[hj|ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%dentry reference for submount/remount”h]”hŒ%dentry reference for submount/remount”…”�”}”(hj5|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j1|h´M[hj2|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1|h´M[hjÚ{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¾{ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjW|h]”hŒ Description”…”�”}”(hjY|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjU|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M]hj¾{ubhÝ)�”}”(hŒ3Fill out the ->security field for a new fs_context.”h]”hŒ3Fill out the ->security field for a new fs_context.”…”�”}”(hjm|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M\hj¾{ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj~|h]”hŒReturn”…”�”}”(hj€|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj||ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M^hj¾{ubhÝ)�”}”(hŒ7Returns 0 on success or negative error code on failure.”h]”hŒ7Returns 0 on success or negative error code on failure.”…”�”}”(hj”|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_hj¾{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_fs_context_dup (C function)”Œc.security_fs_context_dup”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNint security_fs_context_dup (struct fs_context *fc, struct fs_context *src_fc)”h]”j)�”}”(hŒMint security_fs_context_dup(struct fs_context *fc, struct fs_context *src_fc)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÃ|h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿|h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿|h²hh³jÑ|h´Mgubj{)�”}”(hŒsecurity_fs_context_dup”h]”j�)�”}”(hŒsecurity_fs_context_dup”h]”hŒsecurity_fs_context_dup”…”�”}”(hjä|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjà|ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¿|h²hh³jÑ|h´Mgubjœ)�”}”(hŒ2(struct fs_context *fc, struct fs_context *src_fc)”h]”(j¢)�”}”(hŒstruct fs_context *fc”• h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjü|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj }h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjü|ubh)�”}”(hhh]”j�)�”}”(hŒ fs_context”h]”hŒ fs_context”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j }Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jæ|sbŒc.security_fs_context_dup”†”asbuh1hhjü|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjü|ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjL}h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjü|ubj�)�”}”(hŒfc”h]”hŒfc”…”�”}”(hjY}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjü|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjø|ubj¢)�”}”(hŒstruct fs_context *src_fc”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjr}h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjn}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjn}ubh)�”}”(hhh]”j�)�”}”(hŒ fs_context”h]”hŒ fs_context”…”�”}”(hj�}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j’}Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j:}Œc.security_fs_context_dup”†”asbuh1hhjn}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjn}ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¼}h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjn}ubj�)�”}”(hŒsrc_fc”h]”hŒsrc_fc”…”�”}”(hjÉ}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjn}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjø|ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¿|h²hh³jÑ|h´Mgubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj»|h²hh³jÑ|h´Mgubah}”(h]”j¶|ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÑ|h´Mghj¸|h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒDuplicate a fs_context LSM blob”h]”hŒDuplicate a fs_context LSM blob”…”�”}”(hjó}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mghjð}h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¸|h²hh³jÑ|h´Mgubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj ~jæj ~jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX°**Parameters** ``struct fs_context *fc`` destination filesystem context ``struct fs_context *src_fc`` source filesystem context **Description** Allocate and attach a security structure to sc->security. This pointer is initialised to NULL by the caller. **fc** indicates the new filesystem context. **src_fc** indicates the original filesystem context. **Return** Returns 0 on success or a negative error code on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj~h]”hŒ Parameters”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mkhj~ubj )�”}”(hhh]”(j)�”}”(hŒ9``struct fs_context *fc`` destination filesystem context ”h]”(j)�”}”(hŒ``struct fs_context *fc``”h]”j)�”}”(hj4~h]”hŒstruct fs_context *fc”…”�”}”(hj6~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhhj.~ubj2)�”}”(hhh]”hÝ)�”}”(hŒdestination filesystem context”h]”hŒdestination filesystem context”…”�”}”(hjM~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jI~h´MhhjJ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jI~h´Mhhj+~ubj)�”}”(hŒ8``struct fs_context *src_fc`` source filesystem context ”h]”(j)�”}”(hŒ``struct fs_context *src_fc``”h]”j)�”}”(hjm~h]”hŒstruct fs_context *src_fc”…”�”}”(hjo~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjk~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mihjg~ubj2)�”}”(hhh]”hÝ)�”}”(hŒsource filesystem context”h]”hŒsource filesystem context”…”�”}”(hj†~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚~h´Mihjƒ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjg~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚~h´Mihj+~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj~ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¨~h]”hŒ Description”…”�”}”(hjª~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mkhj~ubhÝ)�”}”(hŒÑAllocate and attach a security structure to sc->security. This pointer is initialised to NULL by the caller. **fc** indicates the new filesystem context. **src_fc** indicates the original filesystem context.”h]”(hŒoAllocate and attach a security structure to sc->security. This pointer is initialised to NULL by the caller. ”…”�”}”(hj¾~h²hh³Nh´Nubjõ)�”}”(hŒ**fc**”h]”hŒfc”…”�”}”(hjÆ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾~ubhŒ' indicates the new filesystem context. ”…”�”}”(hj¾~h²hh³Nh´Nubjõ)�”}”(hŒ **src_fc**”h]”hŒsrc_fc”…”�”}”(hjØ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾~ubhŒ+ indicates the original filesystem context.”…”�”}”(hj¾~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mjhj~ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjó~h]”hŒReturn”…”�”}”(hjõ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjñ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mnhj~ubhÝ)�”}”(hŒ9Returns 0 on success or a negative error code on failure.”h]”hŒ9Returns 0 on success or a negative error code on failure.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mohj~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,security_fs_context_parse_param (C function)”Œ!c.security_fs_context_parse_param”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒWint security_fs_context_parse_param (struct fs_context *fc, struct fs_parameter *param)”h]”j)�”}”(hŒVint security_fs_context_parse_param(struct fs_context *fc, struct fs_parameter *param)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj4h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4h²hh³jFh´Mwubj{)�”}”(hŒsecurity_fs_context_parse_param”h]”j�)�”}”(hŒsecurity_fs_context_parse_param”h]”hŒsecurity_fs_context_parse_param”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjUubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj4h²hh³jFh´Mwubjœ)�”}”(hŒ3(struct fs_context *fc, struct fs_parameter *param)”h]”(j¢)�”}”(hŒstruct fs_context *fc”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqubh)�”}”(hhh]”j�)�”}”(hŒ fs_context”h]”hŒ fs_context”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j•Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j[sbŒ!c.security_fs_context_parse_param”†”asbuh1hhjqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjqubj�)�”}”(hŒfc”h]”hŒfc”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjmubj¢)�”}”(hŒstruct fs_parameter *param”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjãubh)�”}”(hhh]”j�)�”}”(hŒ fs_parameter”h]”hŒ fs_parameter”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j€Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¯Œ!c.security_fs_context_parse_param”†”asbuh1hhjãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjãubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj1€h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjãubj�)�”}”(hŒparam”h]”hŒparam”…”�”}”(hj>€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjmubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj4h²hh³jFh´Mwubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj0h²hh³jFh´Mwubah}”(h]”j+ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jFh´Mwhj-h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒConfigure a filesystem context”h]”hŒConfigure a filesystem context”…”�”}”(hjh€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mwhje€h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj-h²hh³jFh´Mwubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj€€jæj€€jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX»**Parameters** ``struct fs_context *fc`` filesystem context ``struct fs_parameter *param`` filesystem parameter **Description** Userspace provided a parameter to configure a superblock. The LSM can consume the parameter or return it to the caller for use elsewhere. **Return** If the parameter is used by the LSM it should return 0, if it is returned to the caller -ENOPARAM is returned, otherwise a negative error code is returned.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŠ€h]”hŒ Parameters”…”�”}”(hjŒ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M{hj„€ubj )�”}”(hhh]”(j)�”}”(hŒ-``struct fs_context *fc`` filesystem context ”h]”(j)�”}”(hŒ``struct fs_context *fc``”h]”j)�”}”(hj©€h]”hŒstruct fs_context *fc”…”�”}”(hj«€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mxhj£€ubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem context”h]”hŒfilesystem context”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¾€h´Mxhj¿€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾€h´Mxhj €ubj)�”}”(hŒ4``struct fs_parameter *param`` filesystem parameter ”h]”(j)�”}”(hŒ``struct fs_parameter *param``”h]”j)�”}”(hjâ€h]”hŒstruct fs_parameter *param”…”�”}”(hjä€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjà€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MyhjÜ€ubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem parameter”h]”hŒfilesystem parameter”…”�”}”(hjû€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷€h´Myhjø€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷€h´Myhj €ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj„€ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M{hj„€ubhÝ)�”}”(hŒŠUserspace provided a parameter to configure a superblock. The LSM can consume the parameter or return it to the caller for use elsewhere.”h]”hŒŠUserspace provided a parameter to configure a superblock. The LSM can consume the parameter or return it to the caller for use elsewhere.”…”�”}”(hj3�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mzhj„€ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjD�h]”hŒReturn”…”�”}”(hjF�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjB�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M}hj„€ubhÝ)�”}”(hŒ›If the parameter is used by the LSM it should return 0, if it is returned to the caller -ENOPARAM is returned, otherwise a negative error code is returned.”h]”hŒ›If the parameter is used by the LSM it should return 0, if it is returned to the caller -ENOPARAM is returned, otherwise a negative error code is returned.”…”�”}”(hjZ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M~hj„€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sb_alloc (C function)”Œc.security_sb_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.int security_sb_alloc (struct super_block *sb)”h]”j)�”}”(hŒ-int security_sb_alloc(struct super_block *sb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj‰�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj…�h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…�h²hh³j—�h´M”ubj{)�”}”(hŒsecurity_sb_alloc”h]”j�)�”}”(hŒsecurity_sb_alloc”h]”hŒsecurity_sb_alloc”…”�”}”(hjª�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj…�h²hh³j—�h´M”ubjœ)�”}”(hŒ(struct super_block *sb)”h]”j¢)�”}”(hŒstruct super_block *sb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÆ�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÂ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂ�ubh)�”}”(hhh]”j�)�”}”(hŒ super_block”h]”hŒ super_block”…”�”}”(hjä�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjá�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jæ�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¬�sbŒc.security_sb_alloc”†”asbuh1hhjÂ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂ�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÂ�ubj�)�”}”(hŒsb”h]”hŒsb”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¾�ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj…�h²hh³j—�h´M”ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj��h²hh³j—�h´M”ubah}”(h]”j|�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j—�h´M”hj~�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒAllocate a super_block LSM blob”h]”hŒAllocate a super_block LSM blob”…”�”}”(hjI‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”hjF‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj~�h²hh³j—�h´M”ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåja‚jæja‚jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXV**Parameters** ``struct super_block *sb`` filesystem superblock **Description** Allocate and attach a security structure to the sb->s_security field. The s_security field is initialized to NULL when the structure is allocated. **sb** contains the super_block structure to be modified. **Return** Returns 0 if operation was successful.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjk‚h]”hŒ Parameters”…”�”}”(hjm‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhji‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜hje‚ubj )�”}”(hhh]”j)�”}”(hŒ1``struct super_block *sb`` filesystem superblock ”h]”(j)�”}”(hŒ``struct super_block *sb``”h]”j)�”}”(hjŠ‚h]”hŒstruct super_block *sb”…”�”}”(hjŒ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M•hj„‚ubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem superblock”h]”hŒfilesystem superblock”…”�”}”(hj£‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸ‚h´M•hj ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸ‚h´M•hj�‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hje‚ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÅ‚h]”hŒ Description”…”�”}”(hjÇ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M—hje‚ubhÝ)�”}”(hŒÍAllocate and attach a security structure to the sb->s_security field. The s_security field is initialized to NULL when the structure is allocated. **sb** contains the super_block structure to be modified.”h]”(hŒ”Allocate and attach a security structure to the sb->s_security field. The s_security field is initialized to NULL when the structure is allocated. ”…”�”}”(hjÛ‚h²hh³Nh´Nubjõ)�”}”(hŒ**sb**”h]”hŒsb”…”�”}”(hjã‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛ‚ubhŒ3 contains the super_block structure to be modified.”…”�”}”(hjÛ‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M–hje‚ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjþ‚h]”hŒReturn”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjü‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mšhje‚ubhÝ)�”}”(hŒ&Returns 0 if operation was successful.”h]”hŒ&Returns 0 if operation was successful.”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M›hje‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sb_delete (C function)”Œc.security_sb_delete”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ0void security_sb_delete (struct super_block *sb)”h]”j)�”}”(hŒ/void security_sb_delete(struct super_block *sb)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjCƒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?ƒh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?ƒh²hh³jQƒh´Mªubj{)�”}”(hŒsecurity_sb_delete”h]”j�)�”}”(hŒsecurity_sb_delete”h]”hŒsecurity_sb_delete”…”�”}”(hjdƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`ƒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj?ƒh²hh³jQƒh´Mªubjœ)�”}”(hŒ(struct super_block *sb)”h]”j¢)�”}”(hŒstruct super_block *sb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj€ƒh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj|ƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|ƒubh)�”}”(hhh]”j�)�”}”(hŒ super_block”h]”hŒ super_block”…”�”}”(hjžƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›ƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ƒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jfƒsbŒc.security_sb_delete”†”asbuh1hhj|ƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾ƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|ƒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj̃h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj|ƒubj�)�”}”(hŒsb”h]”hŒsb”…”�”}”(hjÙƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|ƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjxƒubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj?ƒh²hh³jQƒh´Mªubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj;ƒh²hh³jQƒh´Mªubah}”(h]”j6ƒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jQƒh´Mªhj8ƒh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Release super_block LSM associated objects”h]”hŒ*Release super_block LSM associated objects”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mªhj„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj8ƒh²hh³jQƒh´Mªubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj„jæj„jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÃ**Parameters** ``struct super_block *sb`` filesystem superblock **Description** Release objects tied to a superblock (e.g. inodes). **sb** contains the super_block structure being released.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj%„h]”hŒ Parameters”…”�”}”(hj'„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M®hj„ubj )�”}”(hhh]”j)�”}”(hŒ1``struct super_block *sb`` filesystem superblock ”h]”(j)�”}”(hŒ``struct super_block *sb``”h]”j)�”}”(hjD„h]”hŒstruct super_block *sb”…”�”}”(hjF„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjB„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M«hj>„ubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem superblock”h]”hŒfilesystem superblock”…”�”}”(hj]„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jY„h´M«hjZ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj>„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jY„h´M«hj;„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj„ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj„h]”hŒ Description”…”�”}”(hj�„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj}„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M­hj„ubhÝ)�”}”(hŒnRelease objects tied to a superblock (e.g. inodes). **sb** contains the super_block structure being released.”h]”(hŒ5Release objects tied to a superblock (e.g. inodes). ”…”�”}”(hj•„h²hh³Nh´Nubjõ)�”}”(hŒ**sb**”h]”hŒsb”…”�”}”(hj�„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj•„ubhŒ3 contains the super_block structure being released.”…”�”}”(hj•„h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¬hj„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sb_free (C function)”Œc.security_sb_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void security_sb_free (struct super_block *sb)”h]”j)�”}”(hŒ-void security_sb_free(struct super_block *sb)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÖ„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÒ„h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒ„h²hh³jä„h´M¶ubj{)�”}”(hŒsecurity_sb_free”h]”j�)�”}”(hŒsecurity_sb_free”h]”hŒsecurity_sb_free”…”�”}”(hj÷„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjó„ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÒ„h²hh³jä„h´M¶ubjœ)�”}”(hŒ(struct super_block *sb)”h]”j¢)�”}”(hŒstruct super_block *sb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…ubh)�”}”(hhh]”j�)�”}”(hŒ super_block”h]”hŒ super_block”…”�”}”(hj1…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j3…Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jù„sbŒc.security_sb_free”†”asbuh1hhj…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj_…h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj…ubj�)�”}”(hŒsb”h]”hŒsb”…”�”}”(hjl…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj …ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÒ„h²hh³jä„h´M¶ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj΄h²hh³jä„h´M¶ubah}”(h]”jÉ„ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jä„h´M¶hjË„h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a super_block LSM blob”h]”hŒFree a super_block LSM blob”…”�”}”(hj–…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¶hj“…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjË„h²hh³jä„h´M¶ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj®…jæj®…jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¾**Parameters** ``struct super_block *sb`` filesystem superblock **Description** Deallocate and clear the sb->s_security field. **sb** contains the super_block structure to be modified.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¸…h]”hŒ Parameters”…”�”}”(hjº…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mºhj²…ubj )�”}”(hhh]”j)�”}”(hŒ1``struct super_block *sb`` filesystem superblock ”h]”(j)�”}”(hŒ``struct super_block *sb``”h]”j)�”}”(hj×…h]”hŒstruct super_block *sb”…”�”}”(hjÙ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M·hjÑ…ubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem superblock”h]”hŒfilesystem superblock”…”�”}”(hjð…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jì…h´M·hjí…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑ…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jì…h´M·hjÎ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj²…ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj†h]”hŒ Description”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¹hj²…ubhÝ)�”}”(hŒiDeallocate and clear the sb->s_security field. **sb** contains the super_block structure to be modified.”h]”(hŒ0Deallocate and clear the sb->s_security field. ”…”�”}”(hj(†h²hh³Nh´Nubjõ)�”}”(hŒ**sb**”h]”hŒsb”…”�”}”(hj0†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(†ubhŒ3 contains the super_block structure to be modified.”…”�”}”(hj(†h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¸hj²…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_sb_kern_mount (C function)”Œc.security_sb_kern_mount”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9int security_sb_kern_mount (const struct super_block *sb)”h]”j)�”}”(hŒ8int security_sb_kern_mount(const struct super_block *sb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hji†h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhje†h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje†h²hh³jw†h´Mubj{)�”}”(hŒsecurity_sb_kern_mount”h]”j�)�”}”(hŒsecurity_sb_kern_mount”h]”hŒsecurity_sb_kern_mount”…”�”}”(hjІh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj††ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhje†h²hh³jw†h´Mubjœ)�”}”(hŒ(const struct super_block *sb)”h]”j¢)�”}”(hŒconst struct super_block *sb”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¦†h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¢†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢†ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÁ†h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¢†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjΆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢†ubh)�”}”(hhh]”j�)�”}”(hŒ super_block”h]”hŒ super_block”…”�”}”(hj߆h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj܆ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jᆌmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŒ†sbŒc.security_sb_kern_mount”†”asbuh1hhj¢†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢†ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ‡h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¢†ubj�)�”}”(hŒsb”h]”hŒsb”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjž†ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hje†h²hh³jw†h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hja†h²hh³jw†h´Mubah}”(h]”j\†ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jw†h´Mhj^†h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Check if a kernel mount is allowed”h]”hŒ"Check if a kernel mount is allowed”…”�”}”(hjD‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjA‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj^†h²hh³jw†h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj\‡jæj\‡jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¸**Parameters** ``const struct super_block *sb`` filesystem superblock **Description** Mount this **sb** if allowed by permissions. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjf‡h]”hŒ Parameters”…”�”}”(hjh‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjd‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj`‡ubj )�”}”(hhh]”j)�”}”(hŒ7``const struct super_block *sb`` filesystem superblock ”h]”(j)�”}”(hŒ ``const struct super_block *sb``”h]”j)�”}”(hj…‡h]”hŒconst struct super_block *sb”…”�”}”(hj‡‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj‡ubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem superblock”h]”hŒfilesystem superblock”…”�”}”(hjž‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jš‡h´Mhj›‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jš‡h´Mhj|‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj`‡ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÀ‡h]”hŒ Description”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj`‡ubhÝ)�”}”(hŒ,Mount this **sb** if allowed by permissions.”h]”(hŒ Mount this ”…”�”}”(hjÖ‡h²hh³Nh´Nubjõ)�”}”(hŒ**sb**”h]”hŒsb”…”�”}”(hjÞ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖ‡ubhŒ if allowed by permissions.”…”�”}”(hjÖ‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj`‡ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjù‡h]”hŒReturn”…”�”}”(hjû‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj`‡ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj`‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_sb_show_options (C function)”Œc.security_sb_show_options”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIint security_sb_show_options (struct seq_file *m, struct super_block *sb)”h]”j)�”}”(hŒHint security_sb_show_options(struct seq_file *m, struct super_block *sb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj>ˆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:ˆh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:ˆh²hh³jLˆh´Mubj{)�”}”(hŒsecurity_sb_show_options”h]”j�)�”}”(hŒsecurity_sb_show_options”h]”hŒsecurity_sb_show_options”…”�”}”(hj_ˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[ˆubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj:ˆh²hh³jLˆh´Mubjœ)�”}”(hŒ,(struct seq_file *m, struct super_block *sb)”h]”(j¢)�”}”(hŒstruct seq_file *m”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj{ˆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjwˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwˆubh)�”}”(hhh]”j�)�”}”(hŒseq_file”h]”hŒseq_file”…”�”}”(hj™ˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–ˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j›ˆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jaˆsbŒc.security_sb_show_options”†”asbuh1hhjwˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹ˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwˆubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjLjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjwˆubj�)�”}”(hjn8h]”hŒm”…”�”}”(hjÔˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjsˆubj¢)�”}”(hŒstruct super_block *sb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjìˆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjèˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèˆubh)�”}”(hhh]”j�)�”}”(hŒ super_block”h]”hŒ super_block”…”�”}”(hj ‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ‰Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jµˆŒc.security_sb_show_options”†”asbuh1hhjèˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(‰h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèˆubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj6‰h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjèˆubj�)�”}”(hŒsb”h]”hŒsb”…”�”}”(hjC‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjsˆubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj:ˆh²hh³jLˆh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj6ˆh²hh³jLˆh´Mubah}”(h]”j1ˆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jLˆh´Mhj3ˆh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Output the mount options for a superblock”h]”hŒ)Output the mount options for a superblock”…”�”}”(hjm‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjj‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj3ˆh²hh³jLˆh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj…‰jæj…‰jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒî**Parameters** ``struct seq_file *m`` output file ``struct super_block *sb`` filesystem superblock **Description** Show (print on **m**) mount options for this **sb**. **Return** Returns 0 on success, negative values on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�‰h]”hŒ Parameters”…”�”}”(hj‘‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj‰‰ubj )�”}”(hhh]”(j)�”}”(hŒ#``struct seq_file *m`` output file ”h]”(j)�”}”(hŒ``struct seq_file *m``”h]”j)�”}”(hj®‰h]”hŒstruct seq_file *m”…”�”}”(hj°‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj¨‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒ output file”h]”hŒ output file”…”�”}”(hjljh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÉh´Mhjĉubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¨‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÉh´Mhj¥‰ubj)�”}”(hŒ1``struct super_block *sb`` filesystem superblock ”h]”(j)�”}”(hŒ``struct super_block *sb``”h]”j)�”}”(hjç‰h]”hŒstruct super_block *sb”…”�”}”(hjé‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjá‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem superblock”h]”hŒfilesystem superblock”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jü‰h´Mhjý‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjá‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jü‰h´Mhj¥‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‰‰ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj"Šh]”hŒ Description”…”�”}”(hj$Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Šubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj‰‰ubhÝ)�”}”(hŒ4Show (print on **m**) mount options for this **sb**.”h]”(hŒShow (print on ”…”�”}”(hj8Šh²hh³Nh´Nubjõ)�”}”(hŒ**m**”h]”hŒm”…”�”}”(hj@Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8ŠubhŒ) mount options for this ”…”�”}”(hj8Šh²hh³Nh´Nubjõ)�”}”(hŒ**sb**”h]”hŒsb”…”�”}”(hjRŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8ŠubhŒ.”…”�”}”(hj8Šh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj‰‰ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjmŠh]”hŒReturn”…”�”}”(hjoŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjkŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj‰‰ubhÝ)�”}”(hŒ1Returns 0 on success, negative values on failure.”h]”hŒ1Returns 0 on success, negative values on failure.”…”�”}”(hjƒŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj‰‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sb_statfs (C function)”Œc.security_sb_statfs”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.int security_sb_statfs (struct dentry *dentry)”h]”j)�”}”(hŒ-int security_sb_statfs(struct dentry *dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj²Šh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj®Šh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®Šh²hh³jÀŠh´Mubj{)�”}”(hŒsecurity_sb_statfs”h]”j�)�”}”(hŒsecurity_sb_statfs”h]”hŒsecurity_sb_statfs”…”�”}”(hjÓŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏŠubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj®Šh²hh³jÀŠh´Mubjœ)�”}”(hŒ(struct dentry *dentry)”h]”j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjïŠh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjëŠubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëŠubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj ‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ‹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‹Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÕŠsbŒc.security_sb_statfs”†”asbuh1hhjëŠubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-‹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëŠubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj;‹h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjëŠubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjH‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjçŠubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj®Šh²hh³jÀŠh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjªŠh²hh³jÀŠh´Mubah}”(h]”j¥Šah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÀŠh´Mhj§Šh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Check if accessing fs stats is allowed”h]”hŒ&Check if accessing fs stats is allowed”…”�”}”(hjr‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjo‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj§Šh²hh³jÀŠh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŠ‹jæjŠ‹jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct dentry *dentry`` superblock handle **Description** Check permission before obtaining filesystem statistics for the **mnt** mountpoint. **dentry** is a handle on the superblock for the filesystem. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj”‹h]”hŒ Parameters”…”�”}”(hj–‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj’‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M#hjŽ‹ubj )�”}”(hhh]”j)�”}”(hŒ,``struct dentry *dentry`` superblock handle ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj³‹h]”hŒstruct dentry *dentry”…”�”}”(hjµ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj­‹ubj2)�”}”(hhh]”hÝ)�”}”(hŒsuperblock handle”h]”hŒsuperblock handle”…”�”}”(hjÌ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÈ‹h´M hjÉ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj­‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈ‹h´M hjª‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŽ‹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjî‹h]”hŒ Description”…”�”}”(hjð‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjì‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M"hjŽ‹ubhÝ)�”}”(hŒ‘Check permission before obtaining filesystem statistics for the **mnt** mountpoint. **dentry** is a handle on the superblock for the filesystem.”h]”(hŒ@Check permission before obtaining filesystem statistics for the ”…”�”}”(hjŒh²hh³Nh´Nubjõ)�”}”(hŒ**mnt**”h]”hŒmnt”…”�”}”(hj Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒubhŒ mountpoint. ”…”�”}”(hjŒh²hh³Nh´Nubjõ)�”}”(hŒ **dentry**”h]”hŒdentry”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒubhŒ2 is a handle on the superblock for the filesystem.”…”�”}”(hjŒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M!hjŽ‹ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj9Œh]”hŒReturn”…”�”}”(hj;Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj7Œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M$hjŽ‹ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjOŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M%hjŽ‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sb_mount (C function)”Œc.security_sb_mount”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒxint security_sb_mount (const char *dev_name, const struct path *path, const char *type, unsigned long flags, void *data)”h]”j)�”}”(hŒwint security_sb_mount(const char *dev_name, const struct path *path, const char *type, unsigned long flags, void *data)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj~Œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjzŒh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjzŒh²hh³jŒŒh´M-ubj{)�”}”(hŒsecurity_sb_mount”h]”j�)�”}”(hŒsecurity_sb_mount”h]”hŒsecurity_sb_mount”…”�”}”(hjŸŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›Œubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjzŒh²hh³jŒŒh´M-ubjœ)�”}”(hŒb(const char *dev_name, const struct path *path, const char *type, unsigned long flags, void *data)”h]”(j¢)�”}”(hŒconst char *dev_name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj»Œh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj·Œubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·Œubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÖŒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj·Œubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·Œubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjòŒh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj·Œubj�)�”}”(hŒdev_name”h]”hŒdev_name”…”�”}”(hjÿŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·Œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³Œubj¢)�”}”(hŒconst struct path *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj3�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjQ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jS�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¡ŒsbŒc.security_sb_mount”†”asbuh1hhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjŒ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³Œubj¢)�”}”(hŒconst char *type”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¥�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¡�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡�ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÀ�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¡�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÜ�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¡�ubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hjé�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³Œubj¢)�”}”(hŒunsigned long flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ�ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,Žh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ�ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj:Žh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³Œubj¢)�”}”(hŒ void *data”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjSŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjOŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOŽubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjoŽh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjOŽubj�)�”}”(hŒdata”h]”hŒdata”…”�”}”(hj|Žh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³Œubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjzŒh²hh³jŒŒh´M-ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjvŒh²hh³jŒŒh´M-ubah}”(h]”jqŒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŒŒh´M-hjsŒh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Check permission for mounting a filesystem”h]”hŒ*Check permission for mounting a filesystem”…”�”}”(hj¦Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M-hj£Žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjsŒh²hh³jŒŒh´M-ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¾Žjæj¾Žjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX´**Parameters** ``const char *dev_name`` filesystem backing device ``const struct path *path`` mount point ``const char *type`` filesystem type ``unsigned long flags`` mount flags ``void *data`` filesystem specific data **Description** Check permission before an object specified by **dev_name** is mounted on the mount point named by **nd**. For an ordinary mount, **dev_name** identifies a device if the file system type requires a device. For a remount (**flags** & MS_REMOUNT), **dev_name** is irrelevant. For a loopback/bind mount (**flags** & MS_BIND), **dev_name** identifies the pathname of the object being mounted. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÈŽh]”hŒ Parameters”…”�”}”(hjÊŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÆŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M1hjÂŽubj )�”}”(hhh]”(j)�”}”(hŒ3``const char *dev_name`` filesystem backing device ”h]”(j)�”}”(hŒ``const char *dev_name``”h]”j)�”}”(hjçŽh]”hŒconst char *dev_name”…”�”}”(hjéŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M.hjáŽubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem backing device”h]”hŒfilesystem backing device”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jüŽh´M.hjýŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjáŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jüŽh´M.hjÞŽubj)�”}”(hŒ(``const struct path *path`` mount point ”h]”(j)�”}”(hŒ``const struct path *path``”h]”j)�”}”(hj �h]”hŒconst struct path *path”…”�”}”(hj"�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M/hj�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ mount point”h]”hŒ mount point”…”�”}”(hj9�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j5�h´M/hj6�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j5�h´M/hjÞŽubj)�”}”(hŒ%``const char *type`` filesystem type ”h]”(j)�”}”(hŒ``const char *type``”h]”j)�”}”(hjY�h]”hŒconst char *type”…”�”}”(hj[�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M0hjS�ubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem type”h]”hŒfilesystem type”…”�”}”(hjr�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jn�h´M0hjo�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjS�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jn�h´M0hjÞŽubj)�”}”(hŒ$``unsigned long flags`` mount flags ”h]”(j)�”}”(hŒ``unsigned long flags``”h]”j)�”}”(hj’�h]”hŒunsigned long flags”…”�”}”(hj”�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M1hjŒ�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ mount flags”h]”hŒ mount flags”…”�”}”(hj«�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j§�h´M1hj¨�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŒ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§�h´M1hjÞŽubj)�”}”(hŒ(``void *data`` filesystem specific data ”h]”(j)�”}”(hŒ``void *data``”h]”j)�”}”(hjË�h]”hŒ void *data”…”�”}”(hjÍ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M2hjÅ�ubj2)�”}”(hhh]”hÝ)�”}”(hŒfilesystem specific data”h]”hŒfilesystem specific data”…”�”}”(hjä�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jà�h´M2hjá�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jà�h´M2hjÞŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÂŽubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4hjÂŽubhÝ)�”}”(hX‡Check permission before an object specified by **dev_name** is mounted on the mount point named by **nd**. For an ordinary mount, **dev_name** identifies a device if the file system type requires a device. For a remount (**flags** & MS_REMOUNT), **dev_name** is irrelevant. For a loopback/bind mount (**flags** & MS_BIND), **dev_name** identifies the pathname of the object being mounted.”h]”(hŒ/Check permission before an object specified by ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ **dev_name**”h]”hŒdev_name”…”�”}”(hj$�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ( is mounted on the mount point named by ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**nd**”h]”hŒnd”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ. For an ordinary mount, ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ **dev_name**”h]”hŒdev_name”…”�”}”(hjH�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒP identifies a device if the file system type requires a device. For a remount (”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjZ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ & MS_REMOUNT), ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ **dev_name**”h]”hŒdev_name”…”�”}”(hjl�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ, is irrelevant. For a loopback/bind mount (”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj~�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ & MS_BIND), ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ **dev_name**”h]”hŒdev_name”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ5 identifies the pathname of the object being mounted.”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M3hjÂŽubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj«�h]”hŒReturn”…”�”}”(hj­�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M:hjÂŽubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjÁ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M;hjÂŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sb_umount (C function)”Œc.security_sb_umount”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int security_sb_umount (struct vfsmount *mnt, int flags)”h]”j)�”}”(hŒ7int security_sb_umount(struct vfsmount *mnt, int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjð�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjì�h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjì�h²hh³jþ�h´MDubj{)�”}”(hŒsecurity_sb_umount”h]”j�)�”}”(hŒsecurity_sb_umount”h]”hŒsecurity_sb_umount”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ‘ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjì�h²hh³jþ�h´MDubjœ)�”}”(hŒ!(struct vfsmount *mnt, int flags)”h]”(j¢)�”}”(hŒstruct vfsmount *mnt”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj-‘h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)‘ubh)�”}”(hhh]”j�)�”}”(hŒvfsmount”h]”hŒvfsmount”…”�”}”(hjK‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjH‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jM‘Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‘sbŒc.security_sb_umount”†”asbuh1hhj)‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)‘ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjy‘h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj)‘ubj�)�”}”(hŒmnt”h]”hŒmnt”…”�”}”(hj†‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%‘ubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŸ‘h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›‘ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj»‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%‘ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjì�h²hh³jþ�h´MDubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjè�h²hh³jþ�h´MDubah}”(h]”jã�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jþ�h´MDhjå�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Check permission for unmounting a filesystem”h]”hŒ,Check permission for unmounting a filesystem”…”�”}”(hjå‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MDhjâ‘h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjå�h²hh³jþ�h´MDubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjý‘jæjý‘jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÝ**Parameters** ``struct vfsmount *mnt`` mounted filesystem ``int flags`` unmount flags **Description** Check permission before the **mnt** file system is unmounted. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj’h]”hŒ Parameters”…”�”}”(hj ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MHhj’ubj )�”}”(hhh]”(j)�”}”(hŒ,``struct vfsmount *mnt`` mounted filesystem ”h]”(j)�”}”(hŒ``struct vfsmount *mnt``”h]”j)�”}”(hj&’h]”hŒstruct vfsmount *mnt”…”�”}”(hj(’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MEhj ’ubj2)�”}”(hhh]”hÝ)�”}”(hŒmounted filesystem”h]”hŒmounted filesystem”…”�”}”(hj?’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;’h´MEhj<’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;’h´MEhj’ubj)�”}”(hŒ``int flags`` unmount flags ”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hj_’h]”hŒ int flags”…”�”}”(hja’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MFhjY’ubj2)�”}”(hhh]”hÝ)�”}”(hŒ unmount flags”h]”hŒ unmount flags”…”�”}”(hjx’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jt’h´MFhju’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjY’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jt’h´MFhj’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj’ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjš’h]”hŒ Description”…”�”}”(hjœ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MHhj’ubhÝ)�”}”(hŒ=Check permission before the **mnt** file system is unmounted.”h]”(hŒCheck permission before the ”…”�”}”(hj°’h²hh³Nh´Nubjõ)�”}”(hŒ**mnt**”h]”hŒmnt”…”�”}”(hj¸’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°’ubhŒ file system is unmounted.”…”�”}”(hj°’h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MGhj’ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÓ’h]”hŒReturn”…”�”}”(hjÕ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MIhj’ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjé’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MJhj’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_sb_pivotroot (C function)”Œc.security_sb_pivotroot”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒTint security_sb_pivotroot (const struct path *old_path, const struct path *new_path)”h]”j)�”}”(hŒSint security_sb_pivotroot(const struct path *old_path, const struct path *new_path)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“h²hh³j&“h´MRubj{)�”}”(hŒsecurity_sb_pivotroot”•(h]”j�)�”}”(hŒsecurity_sb_pivotroot”h]”hŒsecurity_sb_pivotroot”…”�”}”(hj9“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5“ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj“h²hh³j&“h´MRubjœ)�”}”(hŒ:(const struct path *old_path, const struct path *new_path)”h]”(j¢)�”}”(hŒconst struct path *old_path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjU“h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjQ“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQ“ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjp“h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjQ“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQ“ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjŽ“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�“Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j;“sbŒc.security_sb_pivotroot”†”asbuh1hhjQ“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQ“ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¼“h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjQ“ubj�)�”}”(hŒold_path”h]”hŒold_path”…”�”}”(hjÉ“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQ“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjM“ubj¢)�”}”(hŒconst struct path *new_path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjâ“h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÞ“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞ“ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjý“h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÞ“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞ“ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j”Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jª“Œc.security_sb_pivotroot”†”asbuh1hhjÞ“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞ“ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjG”h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞ“ubj�)�”}”(hŒnew_path”h]”hŒnew_path”…”�”}”(hjT”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞ“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjM“ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj“h²hh³j&“h´MRubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj“h²hh³j&“h´MRubah}”(h]”j “ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j&“h´MRhj “h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Check permissions for pivoting the rootfs”h]”hŒ)Check permissions for pivoting the rootfs”…”�”}”(hj~”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MRhj{”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj “h²hh³j&“h´MRubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj–”jæj–”jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``const struct path *old_path`` new location for current rootfs ``const struct path *new_path`` location of the new rootfs **Description** Check permission before pivoting the root filesystem. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj ”h]”hŒ Parameters”…”�”}”(hj¢”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjž”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MVhjš”ubj )�”}”(hhh]”(j)�”}”(hŒ@``const struct path *old_path`` new location for current rootfs ”h]”(j)�”}”(hŒ``const struct path *old_path``”h]”j)�”}”(hj¿”h]”hŒconst struct path *old_path”…”�”}”(hjÁ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MShj¹”ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew location for current rootfs”h]”hŒnew location for current rootfs”…”�”}”(hjØ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔ”h´MShjÕ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔ”h´MShj¶”ubj)�”}”(hŒ;``const struct path *new_path`` location of the new rootfs ”h]”(j)�”}”(hŒ``const struct path *new_path``”h]”j)�”}”(hjø”h]”hŒconst struct path *new_path”…”�”}”(hjú”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjö”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MThjò”ubj2)�”}”(hhh]”hÝ)�”}”(hŒlocation of the new rootfs”h]”hŒlocation of the new rootfs”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j •h´MThj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjò”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j •h´MThj¶”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjš”ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj3•h]”hŒ Description”…”�”}”(hj5•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MVhjš”ubhÝ)�”}”(hŒ5Check permission before pivoting the root filesystem.”h]”hŒ5Check permission before pivoting the root filesystem.”…”�”}”(hjI•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MUhjš”ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjZ•h]”hŒReturn”…”�”}”(hj\•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjX•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MWhjš”ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjp•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MXhjš”ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_move_mount (C function)”Œc.security_move_mount”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRint security_move_mount (const struct path *from_path, const struct path *to_path)”h]”j)�”}”(hŒQint security_move_mount(const struct path *from_path, const struct path *to_path)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŸ•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›•h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›•h²hh³j­•h´M“ubj{)�”}”(hŒsecurity_move_mount”h]”j�)�”}”(hŒsecurity_move_mount”h]”hŒsecurity_move_mount”…”�”}”(hjÀ•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼•ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj›•h²hh³j­•h´M“ubjœ)�”}”(hŒ:(const struct path *from_path, const struct path *to_path)”h]”(j¢)�”}”(hŒconst struct path *from_path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÜ•h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjØ•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØ•ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj÷•h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjØ•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØ•ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j–Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j•sbŒc.security_move_mount”†”asbuh1hhjØ•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØ•ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjC–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjØ•ubj�)�”}”(hŒ from_path”h]”hŒ from_path”…”�”}”(hjP–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØ•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ•ubj¢)�”}”(hŒconst struct path *to_path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hji–h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hje–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje–ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj„–h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hje–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje–ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj¢–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸ–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¤–Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j1–Œc.security_move_mount”†”asbuh1hhje–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje–ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjΖh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhje–ubj�)�”}”(hŒto_path”h]”hŒto_path”…”�”}”(hjÛ–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hje–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ•ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj›•h²hh³j­•h´M“ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—•h²hh³j­•h´M“ubah}”(h]”j’•ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­•h´M“hj”•h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Check permissions for moving a mount”h]”hŒ$Check permissions for moving a mount”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M“hj—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”•h²hh³j­•h´M“ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj—jæj—jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒì**Parameters** ``const struct path *from_path`` source mount point ``const struct path *to_path`` destination mount point **Description** Check permission before a mount is moved. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj'—h]”hŒ Parameters”…”�”}”(hj)—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M—hj!—ubj )�”}”(hhh]”(j)�”}”(hŒ4``const struct path *from_path`` source mount point ”h]”(j)�”}”(hŒ ``const struct path *from_path``”h]”j)�”}”(hjF—h]”hŒconst struct path *from_path”…”�”}”(hjH—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”hj@—ubj2)�”}”(hhh]”hÝ)�”}”(hŒsource mount point”h]”hŒsource mount point”…”�”}”(hj_—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[—h´M”hj\—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj@—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[—h´M”hj=—ubj)�”}”(hŒ7``const struct path *to_path`` destination mount point ”h]”(j)�”}”(hŒ``const struct path *to_path``”h]”j)�”}”(hj—h]”hŒconst struct path *to_path”…”�”}”(hj�—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M•hjy—ubj2)�”}”(hhh]”hÝ)�”}”(hŒdestination mount point”h]”hŒdestination mount point”…”�”}”(hj˜—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”—h´M•hj•—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjy—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”—h´M•hj=—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj!—ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjº—h]”hŒ Description”…”�”}”(hj¼—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¸—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M—hj!—ubhÝ)�”}”(hŒ)Check permission before a mount is moved.”h]”hŒ)Check permission before a mount is moved.”…”�”}”(hjЗh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M–hj!—ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjá—h]”hŒReturn”…”�”}”(hjã—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjß—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜hj!—ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj÷—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™hj!—ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_path_notify (C function)”Œc.security_path_notify”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒSint security_path_notify (const struct path *path, u64 mask, unsigned int obj_type)”h]”j)�”}”(hŒRint security_path_notify(const struct path *path, u64 mask, unsigned int obj_type)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj&˜h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj"˜h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj"˜h²hh³j4˜h´M¢ubj{)�”}”(hŒsecurity_path_notify”h]”j�)�”}”(hŒsecurity_path_notify”h]”hŒsecurity_path_notify”…”�”}”(hjG˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjC˜ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj"˜h²hh³j4˜h´M¢ubjœ)�”}”(hŒ:(const struct path *path, u64 mask, unsigned int obj_type)”h]”(j¢)�”}”(hŒconst struct path *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjc˜h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj_˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_˜ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj~˜h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj_˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_˜ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjœ˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jž˜Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jI˜sbŒc.security_path_notify”†”asbuh1hhj_˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_˜ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjʘh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj_˜ubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjטh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj[˜ubj¢)�”}”(hŒu64 mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjó˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjð˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jõ˜Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¸˜Œc.security_path_notify”†”asbuh1hhjì˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjì˜ubj�)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì˜ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj[˜ubj¢)�”}”(hŒunsigned int obj_type”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj8™h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj4™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4™ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjT™h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj4™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4™ubj�)�”}”(hŒobj_type”h]”hŒobj_type”…”�”}”(hjp™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj[˜ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj"˜h²hh³j4˜h´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj˜h²hh³j4˜h´M¢ubah}”(h]”j˜ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j4˜h´M¢hj˜h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Check if setting a watch is allowed”h]”hŒ#Check if setting a watch is allowed”…”�”}”(hjš™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¢hj—™h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj˜h²hh³j4˜h´M¢ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj²™jæj²™jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXM**Parameters** ``const struct path *path`` file path ``u64 mask`` event mask ``unsigned int obj_type`` file path type **Description** Check permissions before setting a watch on events as defined by **mask**, on an object at **path**, whose type is defined by **obj_type**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¼™h]”hŒ Parameters”…”�”}”(hj¾™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjº™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¦hj¶™ubj )�”}”(hhh]”(j)�”}”(hŒ&``const struct path *path`` file path ”h]”(j)�”}”(hŒ``const struct path *path``”h]”j)�”}”(hjÛ™h]”hŒconst struct path *path”…”�”}”(hjÝ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M£hjÕ™ubj2)�”}”(hhh]”hÝ)�”}”(hŒ file path”h]”hŒ file path”…”�”}”(hjô™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jð™h´M£hjñ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕ™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð™h´M£hjÒ™ubj)�”}”(hŒ``u64 mask`` event mask ”h]”(j)�”}”(hŒ ``u64 mask``”h]”j)�”}”(hjšh]”hŒu64 mask”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¤hjšubj2)�”}”(hhh]”hÝ)�”}”(hŒ event mask”h]”hŒ event mask”…”�”}”(hj-šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j)šh´M¤hj*šubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)šh´M¤hjÒ™ubj)�”}”(hŒ)``unsigned int obj_type`` file path type ”h]”(j)�”}”(hŒ``unsigned int obj_type``”h]”j)�”}”(hjMšh]”hŒunsigned int obj_type”…”�”}”(hjOšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKšubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¥hjGšubj2)�”}”(hhh]”hÝ)�”}”(hŒfile path type”h]”hŒfile path type”…”�”}”(hjfšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jbšh´M¥hjcšubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjGšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbšh´M¥hjÒ™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¶™ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjˆšh]”hŒ Description”…”�”}”(hjŠšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†šubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M§hj¶™ubhÝ)�”}”(hŒ‹Check permissions before setting a watch on events as defined by **mask**, on an object at **path**, whose type is defined by **obj_type**.”h]”(hŒACheck permissions before setting a watch on events as defined by ”…”�”}”(hjžšh²hh³Nh´Nubjõ)�”}”(hŒ**mask**”h]”hŒmask”…”�”}”(hj¦šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjžšubhŒ, on an object at ”…”�”}”(hjžšh²hh³Nh´Nubjõ)�”}”(hŒ**path**”h]”hŒpath”…”�”}”(hj¸šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjžšubhŒ, whose type is defined by ”…”�”}”(hjžšh²hh³Nh´Nubjõ)�”}”(hŒ **obj_type**”h]”hŒobj_type”…”�”}”(hjÊšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjžšubhŒ.”…”�”}”(hjžšh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¦hj¶™ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjåšh]”hŒReturn”…”�”}”(hjçšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjãšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M©hj¶™ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjûšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mªhj¶™ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_inode_alloc (C function)”Œc.security_inode_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9int security_inode_alloc (struct inode *inode, gfp_t gfp)”h]”j)�”}”(hŒ8int security_inode_alloc(struct inode *inode, gfp_t gfp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj*›h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj&›h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&›h²hh³j8›h´M³ubj{)�”}”(hŒsecurity_inode_alloc”h]”j�)�”}”(hŒsecurity_inode_alloc”h]”hŒsecurity_inode_alloc”…”�”}”(hjK›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjG›ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj&›h²hh³j8›h´M³ubjœ)�”}”(hŒ (struct inode *inode, gfp_t gfp)”h]”(j¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjg›h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjc›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjc›ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj…›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‡›Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jM›sbŒc.security_inode_alloc”†”asbuh1hhjc›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjc›ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj³›h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjc›ubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÀ›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjc›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_›ubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjÜ›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙ›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÞ›Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¡›Œc.security_inode_alloc”†”asbuh1hhjÕ›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕ›ubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕ›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_›ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj&›h²hh³j8›h´M³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj"›h²hh³j8›h´M³ubah}”(h]”j›ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j8›h´M³hj›h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒAllocate an inode LSM blob”h]”hŒAllocate an inode LSM blob”…”�”}”(hj2œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³hj/œh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj›h²hh³j8›h´M³ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjJœjæjJœjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX1**Parameters** ``struct inode *inode`` the inode ``gfp_t gfp`` allocation flags **Description** Allocate and attach a security structure to **inode->i_security**. The i_security field is initialized to NULL when the inode structure is allocated. **Return** Return 0 if operation was successful.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjTœh]”hŒ Parameters”…”�”}”(hjVœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M·hjNœubj )�”}”(hhh]”(j)�”}”(hŒ"``struct inode *inode`` the inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hjsœh]”hŒstruct inode *inode”…”�”}”(hjuœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqœubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M´hjmœubj2)�”}”(hhh]”hÝ)�”}”(hŒ the inode”h]”hŒ the inode”…”�”}”(hjŒœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆœh´M´hj‰œubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjmœubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆœh´M´hjjœubj)�”}”(hŒ``gfp_t gfp`` allocation flags ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hj¬œh]”hŒ gfp_t gfp”…”�”}”(hj®œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªœubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mµhj¦œubj2)�”}”(hhh]”hÝ)�”}”(hŒallocation flags”h]”hŒallocation flags”…”�”}”(hjÅœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁœh´Mµhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁœh´Mµhjjœubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjNœubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjçœh]”hŒ Description”…”�”}”(hjéœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjåœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M·hjNœubhÝ)�”}”(hŒ–Allocate and attach a security structure to **inode->i_security**. The i_security field is initialized to NULL when the inode structure is allocated.”h]”(hŒ,Allocate and attach a security structure to ”…”�”}”(hjýœh²hh³Nh´Nubjõ)�”}”(hŒ**inode->i_security**”h]”hŒinode->i_security”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjýœubhŒU. The i_security field is initialized to NULL when the inode structure is allocated.”…”�”}”(hjýœh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¶hjNœubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj �h]”hŒReturn”…”�”}”(hj"�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MºhjNœubhÝ)�”}”(hŒ%Return 0 if operation was successful.”h]”hŒ%Return 0 if operation was successful.”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M»hjNœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_inode_free (C function)”Œc.security_inode_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void security_inode_free (struct inode *inode)”h]”j)�”}”(hŒ-void security_inode_free(struct inode *inode)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hje�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhja�h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjt�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hja�h²hh³js�h´MÑubj{)�”}”(hŒsecurity_inode_free”h]”j�)�”}”(hŒsecurity_inode_free”h]”hŒsecurity_inode_free”…”�”}”(hj†�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhja�h²hh³js�h´MÑubjœ)�”}”(hŒ(struct inode *inode)”h]”j¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¢�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjž�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž�ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÀ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÂ�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jˆ�sbŒc.security_inode_free”†”asbuh1hhjž�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjà�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjî�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjž�ubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjû�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjž�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjš�ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hja�h²hh³js�h´MÑubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj]�h²hh³js�h´MÑubah}”(h]”jX�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³js�h´MÑhjZ�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree an inode's LSM blob”h]”hŒFree an inode’s LSM blob”…”�”}”(hj%žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÑhj"žh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjZ�h²hh³js�h´MÑubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj=žjæj=žjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct inode *inode`` the inode **Description** Release any LSM resources associated with **inode**, although due to the inode's RCU protections it is possible that the resources will not be fully released until after the current RCU grace period has elapsed. It is important for LSMs to note that despite being present in a call to security_inode_free(), **inode** may still be referenced in a VFS path walk and calls to security_inode_permission() may be made during, or after, a call to security_inode_free(). For this reason the inode->i_security field is released via a call_rcu() callback and any LSMs which need to retain inode state for use in security_inode_permission() should only release that state in the inode_free_security_rcu() LSM hook callback.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjGžh]”hŒ Parameters”…”�”}”(hjIžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEžubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÕhjAžubj )�”}”(hhh]”j)�”}”(hŒ"``struct inode *inode`` the inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hjfžh]”hŒstruct inode *inode”…”�”}”(hjhžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÒhj`žubj2)�”}”(hhh]”hÝ)�”}”(hŒ the inode”h]”hŒ the inode”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{žh´MÒhj|žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{žh´MÒhj]žubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjAžubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¡žh]”hŒ Description”…”�”}”(hj£žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸžubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔhjAžubhÝ)�”}”(hŒÓRelease any LSM resources associated with **inode**, although due to the inode's RCU protections it is possible that the resources will not be fully released until after the current RCU grace period has elapsed.”h]”(hŒ*Release any LSM resources associated with ”…”�”}”(hj·žh²hh³Nh´Nubjõ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hj¿žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·žubhŒ¢, although due to the inode’s RCU protections it is possible that the resources will not be fully released until after the current RCU grace period has elapsed.”…”�”}”(hj·žh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓhjAžubhÝ)�”}”(hX÷It is important for LSMs to note that despite being present in a call to security_inode_free(), **inode** may still be referenced in a VFS path walk and calls to security_inode_permission() may be made during, or after, a call to security_inode_free(). For this reason the inode->i_security field is released via a call_rcu() callback and any LSMs which need to retain inode state for use in security_inode_permission() should only release that state in the inode_free_security_rcu() LSM hook callback.”h]”(hŒ`It is important for LSMs to note that despite being present in a call to security_inode_free(), ”…”�”}”(hjØžh²hh³Nh´Nubjõ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hjàžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØžubhXŽ may still be referenced in a VFS path walk and calls to security_inode_permission() may be made during, or after, a call to security_inode_free(). For this reason the inode->i_security field is released via a call_rcu() callback and any LSMs which need to retain inode state for use in security_inode_permission() should only release that state in the inode_free_security_rcu() LSM hook callback.”…”�”}”(hjØžh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M×hjAžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ.security_inode_init_security_anon (C function)”Œ#c.security_inode_init_security_anon”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒwint security_inode_init_security_anon (struct inode *inode, const struct qstr *name, const struct inode *context_inode)”h]”j)�”}”(hŒvint security_inode_init_security_anon(struct inode *inode, const struct qstr *name, const struct inode *context_inode)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŸh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mdubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(Ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŸh²hh³j'Ÿh´Mdubj{)�”}”(hŒ!security_inode_init_security_anon”h]”j�)�”}”(hŒ!security_inode_init_security_anon”h]”hŒ!security_inode_init_security_anon”…”�”}”(hj:Ÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6Ÿubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŸh²hh³j'Ÿh´Mdubjœ)�”}”(hŒQ(struct inode *inode, const struct qstr *name, const struct inode *context_inode)”h]”(j¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjVŸh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjRŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRŸubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjtŸh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jvŸŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j<ŸsbŒ#c.security_inode_init_security_anon”†”asbuh1hhjRŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRŸubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¢Ÿh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjRŸubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj¯Ÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjNŸubj¢)�”}”(hŒconst struct qstr *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÈŸh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÄŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄŸubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjãŸh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÄŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄŸubh)�”}”(hhh]”j�)�”}”(hŒqstr”h]”hŒqstr”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j�ŸŒ#c.security_inode_init_security_anon”†”asbuh1hhjÄŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄŸubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÄŸubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj: h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjNŸubj¢)�”}”(hŒ!const struct inode *context_inode”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjO ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj` h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjO ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjO ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjO ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŽ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j�ŸŒ#c.security_inode_init_security_anon”†”asbuh1hhjO ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjO ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¸ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjO ubj�)�”}”(hŒ context_inode”h]”hŒ context_inode”…”�”}”(hjÅ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjO ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjNŸubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjŸh²hh³j'Ÿh´Mdubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŸh²hh³j'Ÿh´Mdubah}”(h]”j Ÿah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j'Ÿh´MdhjŸh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒInitialize an anonymous inode”h]”hŒInitialize an anonymous inode”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mdhjì h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŸh²hh³j'Ÿh´Mdubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¡jæj¡jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXÚ**Parameters** ``struct inode *inode`` the inode ``const struct qstr *name`` the anonymous inode class ``const struct inode *context_inode`` an optional related inode **Description** Set up the incore security field for the new anonymous inode and return whether the inode creation is permitted by the security module or not. **Return** Returns 0 on success, -EACCES if the security module denies the creation of this inode, or another -errno upon other errors.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¡h]”hŒ Parameters”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhhj ¡ubj )�”}”(hhh]”(j)�”}”(hŒ"``struct inode *inode`` the inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hj0¡h]”hŒstruct inode *inode”…”�”}”(hj2¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mehj*¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒ the inode”h]”hŒ the inode”…”�”}”(hjI¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jE¡h´MehjF¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj*¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jE¡h´Mehj'¡ubj)�”}”(hŒ6``const struct qstr *name`` the anonymous inode class ”h]”(j)�”}”(hŒ``const struct qstr *name``”h]”j)�”}”(hji¡h]”hŒconst struct qstr *name”…”�”}”(hjk¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjg¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mfhjc¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe anonymous inode class”h]”hŒthe anonymous inode class”…”�”}”(hj‚¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j~¡h´Mfhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjc¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~¡h´Mfhj'¡ubj)�”}”(hŒ@``const struct inode *context_inode`` an optional related inode ”h]”(j)�”}”(hŒ%``const struct inode *context_inode``”h]”j)�”}”(hj¢¡h]”hŒ!const struct inode *context_inode”…”�”}”(hj¤¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mghjœ¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒan optional related inode”h]”hŒan optional related inode”…”�”}”(hj»¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·¡h´Mghj¸¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœ¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·¡h´Mghj'¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ¡ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÝ¡h]”hŒ Description”…”�”}”(hjß¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mihj ¡ubhÝ)�”}”(hŒŽSet up the incore security field for the new anonymous inode and return whether the inode creation is permitted by the security module or not.”h]”hŒŽSet up the incore security field for the new anonymous inode and return whether the inode creation is permitted by the security module or not.”…”�”}”(hjó¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhhj ¡ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¢h]”hŒReturn”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mkhj ¡ubhÝ)�”}”(hŒ|Returns 0 on success, -EACCES if the security module denies the creation of this inode, or another -errno upon other errors.”h]”hŒ|Returns 0 on success, -EACCES if the security module denies the creation of this inode, or another -errno upon other errors.”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mlhj ¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_path_post_mknod (C function)”Œc.security_path_post_mknod”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNvoid security_path_post_mknod (struct mnt_idmap *idmap, struct dentry *dentry)”h]”j)�”}”(hŒMvoid security_path_post_mknod(struct mnt_idmap *idmap, struct dentry *dentry)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjI¢h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjE¢h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjE¢h²hh³jW¢h´MŽubj{)�”}”(hŒsecurity_path_post_mknod”h]”j�)�”}”(hŒsecurity_path_post_mknod”h]”hŒsecurity_path_post_mknod”…”�”}”(hjj¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjf¢ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjE¢h²hh³jW¢h´MŽubjœ)�”}”(hŒ0(struct mnt_idmap *idmap, struct dentry *dentry)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj†¢h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‚¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚¢ubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hj¤¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¦¢Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jl¢sbŒc.security_path_post_mknod”†”asbuh1hhj‚¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄ¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚¢ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÒ¢h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‚¢ubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hjߢh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj~¢ubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjø¢h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjô¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô¢ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j£Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÀ¢Œc.security_path_post_mknod”†”asbuh1hhjô¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô¢ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjB£h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjô¢ubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjO£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj~¢ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjE¢h²hh³jW¢h´MŽubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjA¢h²hh³jW¢h´MŽubah}”(h]”j<¢ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jW¢h´MŽhj>¢h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Update inode security after reg file creation”h]”hŒ-Update inode security after reg file creation”…”�”}”(hjy£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŽhjv£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj>¢h²hh³jW¢h´MŽubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‘£jæj‘£jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ»**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` new file **Description** Update inode security field after a regular file has been created.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj›£h]”hŒ Parameters”…”�”}”(hj�£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M’hj•£ubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hjº£h]”hŒstruct mnt_idmap *idmap”…”�”}”(hj¼£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hj´£ubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hjÓ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏ£h´M�hjУubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏ£h´M�hj±£ubj)�”}”(hŒ#``struct dentry *dentry`` new file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjó£h]”hŒstruct dentry *dentry”…”�”}”(hjõ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjí£ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew file”h]”hŒnew file”…”�”}”(hj ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤h´M�hj ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjí£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤h´M�hj±£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj•£ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj.¤h]”hŒ Description”…”�”}”(hj0¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M’hj•£ubhÝ)�”}”(hŒBUpdate inode security field after a regular file has been created.”h]”hŒBUpdate inode security field after a regular file has been created.”…”�”}”(hjD¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‘hj•£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_path_rmdir (C function)”Œc.security_path_rmdir”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGint security_path_rmdir (const struct path *dir, struct dentry *dentry)”h]”j)�”}”(hŒFint security_path_rmdir(const struct path *dir, struct dentry *dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjs¤h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjo¤h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjo¤h²hh³j�¤h´M¯ubj{)�”}”(hŒsecurity_path_rmdir”h]”j�)�”}”(hŒsecurity_path_rmdir”h]”hŒsecurity_path_rmdir”…”�”}”(hj”¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�¤ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjo¤h²hh³j�¤h´M¯ubjœ)�”}”(hŒ/(const struct path *dir, struct dentry *dentry)”h]”(j¢)�”}”(hŒconst struct path *dir”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj°¤h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¬¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬¤ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjˤh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¬¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjؤh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬¤ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjé¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæ¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j뤌modname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j–¤sbŒc.security_path_rmdir”†”asbuh1hhj¬¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬¤ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¬¤ubj�)�”}”(hŒdir”h]”hŒdir”…”�”}”(hj$¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨¤ubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj=¥h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj9¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9¥ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj[¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjX¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j]¥Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¥Œc.security_path_rmdir”†”asbuh1hhj9¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjy¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9¥ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‡¥h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj9¥ubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj”¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨¤ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjo¤h²hh³j�¤h´M¯ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjk¤h²hh³j�¤h´M¯ubah}”(h]”jf¤ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�¤h´M¯hjh¤h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if removing a directory is allowed”h]”hŒ(Check if removing a directory is allowed”…”�”}”(hj¾¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¯hj»¥h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh¤h²hh³j�¤h´M¯ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÖ¥jæjÖ¥jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÝ**Parameters** ``const struct path *dir`` parent directory ``struct dentry *dentry`` directory to remove **Description** Check the permission to remove a directory. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjà¥h]”hŒ Parameters”…”�”}”(hjâ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³hjÚ¥ubj )�”}”(hhh]”(j)�”}”(hŒ,``const struct path *dir`` parent directory ”h]”(j)�”}”(hŒ``const struct path *dir``”h]”j)�”}”(hjÿ¥h]”hŒconst struct path *dir”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjý¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M°hjù¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒparent directory”h]”hŒparent directory”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¦h´M°hj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjù¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¦h´M°hjö¥ubj)�”}”(hŒ.``struct dentry *dentry`` directory to remove ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj8¦h]”hŒstruct dentry *dentry”…”�”}”(hj:¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M±hj2¦ubj2)�”}”(hhh]”hÝ)�”}”(hŒdirectory to remove”h]”hŒdirectory to remove”…”�”}”(hjQ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jM¦h´M±hjN¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jM¦h´M±hjö¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÚ¥ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjs¦h]”hŒ Description”…”�”}”(hju¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjq¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³hjÚ¥ubhÝ)�”}”(hŒ+Check the permission to remove a directory.”h]”hŒ+Check the permission to remove a directory.”…”�”}”(hj‰¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M²hjÚ¥ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjš¦h]”hŒReturn”…”�”}”(hjœ¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M´hjÚ¥ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj°¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MµhjÚ¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_path_symlink (C function)”Œc.security_path_symlink”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ_int security_path_symlink (const struct path *dir, struct dentry *dentry, const char *old_name)”h]”j)�”}”(hŒ^int security_path_symlink(const struct path *dir, struct dentry *dentry, const char *old_name)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjߦh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÛ¦h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ¦h²hh³jí¦h´MÐubj{)�”}”(hŒsecurity_path_symlink”h]”j�)�”}”(hŒsecurity_path_symlink”h]”hŒsecurity_path_symlink”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjü¦ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÛ¦h²hh³jí¦h´MÐubjœ)�”}”(hŒE(const struct path *dir, struct dentry *dentry, const char *old_name)”h]”(j¢)�”}”(hŒconst struct path *dir”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj7§h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjU§h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjR§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jW§Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j§sbŒc.security_path_symlink”†”asbuh1hhj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒ§h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj§ubj�)�”}”(hŒdir”h]”hŒdir”…”�”}”(hj�§h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj§ubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj©§h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¥§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥§ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjǧh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjħubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jɧŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jq§Œc.security_path_symlink”†”asbuh1hhj¥§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥§ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjó§h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¥§ubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj§ubj¢)�”}”(hŒconst char *old_name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¨ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj4¨h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¨ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjP¨h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¨ubj�)�”}”(hŒold_name”h]”hŒold_name”…”�”}”(hj]¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj§ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÛ¦h²hh³jí¦h´MÐubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjצh²hh³jí¦h´MÐubah}”(h]”jÒ¦ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jí¦h´MÐhjÔ¦h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Check if creating a symbolic link is allowed”h]”hŒ,Check if creating a symbolic link is allowed”…”�”}”(hj‡¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÐhj„¨h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÔ¦h²hh³jí¦h´MÐubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŸ¨jæjŸ¨jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``const struct path *dir`` parent directory ``struct dentry *dentry`` symbolic link ``const char *old_name`` file pathname **Description** Check the permission to create a symbolic link to a file. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj©¨h]”hŒ Parameters”…”�”}”(hj«¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔhj£¨ubj )�”}”(hhh]”(j)�”}”(hŒ,``const struct path *dir`` parent directory ”h]”(j)�”}”(hŒ``const struct path *dir``”h]”j)�”}”(hjȨh]”hŒconst struct path *dir”…”�”}”(hjʨh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƨubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÑhj¨ubj2)�”}”(hhh]”hÝ)�”}”(hŒparent directory”h]”hŒparent directory”…”�”}”(hjá¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jݨh´MÑhjÞ¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jݨh´MÑhj¿¨ubj)�”}”(hŒ(``struct dentry *dentry`` symbolic link ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj©h]”hŒstruct dentry *dentry”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿ¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÒhjû¨ubj2)�”}”(hhh]”hÝ)�”}”(hŒ symbolic link”h]”hŒ symbolic link”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©h´MÒhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjû¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©h´MÒhj¿¨ubj)�”}”(hŒ'``const char *old_name`` file pathname ”h]”(j)�”}”(hŒ``const char *old_name``”h]”j)�”}”(hj:©h]”hŒconst char *old_name”…”�”}”(hj<©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓhj4©ubj2)�”}”(hhh]”hÝ)�”}”(hŒ file pathname”h]”hŒ file pathname”…”�”}”(hjS©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jO©h´MÓhjP©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jO©h´MÓhj¿¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj£¨ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hju©h]”hŒ Description”…”�”}”(hjw©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjs©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÕhj£¨ubhÝ)�”}”(hŒ9Check the permission to create a symbolic link to a file.”h]”hŒ9Check the permission to create a symbolic link to a file.”…”�”}”(hj‹©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔhj£¨ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjœ©h]”hŒReturn”…”�”}”(hjž©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjš©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÖhj£¨ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj²©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”•h´M×hj£¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_path_link (C function)”Œc.security_path_link”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒiint security_path_link (struct dentry *old_dentry, const struct path *new_dir, struct dentry *new_dentry)”h]”j)�”}”(hŒhint security_path_link(struct dentry *old_dentry, const struct path *new_dir, struct dentry *new_dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjá©h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÝ©h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝ©h²hh³jï©h´Mâubj{)�”}”(hŒsecurity_path_link”h]”j�)�”}”(hŒsecurity_path_link”h]”hŒsecurity_path_link”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ©ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÝ©h²hh³jï©h´Mâubjœ)�”}”(hŒR(struct dentry *old_dentry, const struct path *new_dir, struct dentry *new_dentry)”h]”(j¢)�”}”(hŒstruct dentry *old_dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj<ªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9ªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j>ªŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jªsbŒc.security_path_link”†”asbuh1hhjªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjjªh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjªubj�)�”}”(hŒ old_dentry”h]”hŒ old_dentry”…”�”}”(hjwªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªubj¢)�”}”(hŒconst struct path *new_dir”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj�ªh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjŒªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŒªubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj«ªh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjŒªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŒªubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjɪh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƪubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j˪Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jXªŒc.security_path_link”†”asbuh1hhjŒªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŒªubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjõªh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjŒªubj�)�”}”(hŒnew_dir”h]”hŒnew_dir”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªubj¢)�”}”(hŒstruct dentry *new_dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj9«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j;«Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jXªŒc.security_path_link”†”asbuh1hhj«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hje«h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj«ubj�)�”}”(hŒ new_dentry”h]”hŒ new_dentry”…”�”}”(hjr«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÝ©h²hh³jï©h´Mâubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÙ©h²hh³jï©h´Mâubah}”(h]”jÔ©ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jï©h´MâhjÖ©h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if creating a hard link is allowed”h]”hŒ(Check if creating a hard link is allowed”…”�”}”(hjœ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mâhj™«h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÖ©h²hh³jï©h´Mâubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj´«jæj´«jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct dentry *old_dentry`` existing file ``const struct path *new_dir`` new parent directory ``struct dentry *new_dentry`` new link **Description** Check permission before creating a new hard link to a file. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾«h]”hŒ Parameters”…”�”}”(hjÀ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mæhj¸«ubj )�”}”(hhh]”(j)�”}”(hŒ,``struct dentry *old_dentry`` existing file ”h]”(j)�”}”(hŒ``struct dentry *old_dentry``”h]”j)�”}”(hjÝ«h]”hŒstruct dentry *old_dentry”…”�”}”(hjß«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mãhj׫ubj2)�”}”(hhh]”hÝ)�”}”(hŒ existing file”h]”hŒ existing file”…”�”}”(hjö«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jò«h´Mãhjó«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj׫ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jò«h´MãhjÔ«ubj)�”}”(hŒ4``const struct path *new_dir`` new parent directory ”h]”(j)�”}”(hŒ``const struct path *new_dir``”h]”j)�”}”(hj¬h]”hŒconst struct path *new_dir”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mähj¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew parent directory”h]”hŒnew parent directory”…”�”}”(hj/¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+¬h´Mähj,¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+¬h´MähjÔ«ubj)�”}”(hŒ'``struct dentry *new_dentry`` new link ”h]”(j)�”}”(hŒ``struct dentry *new_dentry``”h]”j)�”}”(hjO¬h]”hŒstruct dentry *new_dentry”…”�”}”(hjQ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjM¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MåhjI¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew link”h]”hŒnew link”…”�”}”(hjh¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jd¬h´Måhje¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjI¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jd¬h´MåhjÔ«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¸«ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjЬh]”hŒ Description”…”�”}”(hjŒ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mçhj¸«ubhÝ)�”}”(hŒ;Check permission before creating a new hard link to a file.”h]”hŒ;Check permission before creating a new hard link to a file.”…”�”}”(hj ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mæhj¸«ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj±¬h]”hŒReturn”…”�”}”(hj³¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mèhj¸«ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjǬh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Méhj¸«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_path_truncate (C function)”Œc.security_path_truncate”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4int security_path_truncate (const struct path *path)”h]”j)�”}”(hŒ3int security_path_truncate(const struct path *path)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjö¬h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjò¬h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò¬h²hh³j­h´Mubj{)�”}”(hŒsecurity_path_truncate”h]”j�)�”}”(hŒsecurity_path_truncate”h]”hŒsecurity_path_truncate”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjò¬h²hh³j­h´Mubjœ)�”}”(hŒ(const struct path *path)”h]”j¢)�”}”(hŒconst struct path *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj3­h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/­ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjN­h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/­ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjl­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hji­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jn­Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j­sbŒc.security_path_truncate”†”asbuh1hhj/­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/­ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjš­h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj/­ubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj§­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+­ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjò¬h²hh³j­h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjî¬h²hh³j­h´Mubah}”(h]”jé¬ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­h´Mhjë¬h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Check if truncating a file is allowed”h]”hŒ%Check if truncating a file is allowed”…”�”}”(hjÑ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjέh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjë¬h²hh³j­h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjé­jæjé­jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX2**Parameters** ``const struct path *path`` file **Description** Check permission before truncating the file indicated by path. Note that truncation permissions may also be checked based on already opened files, using the security_file_truncate() hook. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjó­h]”hŒ Parameters”…”�”}”(hjõ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjñ­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjí­ubj )�”}”(hhh]”j)�”}”(hŒ!``const struct path *path`` file ”h]”(j)�”}”(hŒ``const struct path *path``”h]”j)�”}”(hj®h]”hŒconst struct path *path”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj ®ubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj+®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j'®h´Mhj(®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'®h´Mhj ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjí­ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjM®h]”hŒ Description”…”�”}”(hjO®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjK®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjí­ubhÝ)�”}”(hŒ¼Check permission before truncating the file indicated by path. Note that truncation permissions may also be checked based on already opened files, using the security_file_truncate() hook.”h]”hŒ¼Check permission before truncating the file indicated by path. Note that truncation permissions may also be checked based on already opened files, using the security_file_truncate() hook.”…”�”}”(hjc®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjí­ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjt®h]”hŒReturn”…”�”}”(hjv®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjr®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjí­ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjŠ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjí­ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_path_chmod (C function)”Œc.security_path_chmod”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ?int security_path_chmod (const struct path *path, umode_t mode)”h]”j)�”}”(hŒ>int security_path_chmod(const struct path *path, umode_t mode)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¹®h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjµ®h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµ®h²hh³jÇ®h´Mubj{)�”}”(hŒsecurity_path_chmod”h]”j�)�”}”(hŒsecurity_path_chmod”h]”hŒsecurity_path_chmod”…”�”}”(hjÚ®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖ®ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjµ®h²hh³jÇ®h´Mubjœ)�”}”(hŒ'(const struct path *path, umode_t mode)”h]”(j¢)�”}”(hŒconst struct path *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjö®h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjò®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò®ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjò®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò®ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj/¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j1¯Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÜ®sbŒc.security_path_chmod”†”asbuh1hhjò®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò®ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj]¯h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjò®ubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjj¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjò®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî®ubj¢)�”}”(hŒ umode_t mode”h]”(h)�”}”(hhh]”j�)�”}”(hŒumode_t”h]”hŒumode_t”…”�”}”(hj†¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jˆ¯Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jK¯Œc.security_path_chmod”†”asbuh1hhj¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯ubj�)�”}”(hŒmode”h]”hŒmode”…”�”}”(hj²¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî®ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjµ®h²hh³jÇ®h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj±®h²hh³jÇ®h´Mubah}”(h]”j¬®ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÇ®h´Mhj®®h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Check if changing the file's mode is allowed”h]”hŒ.Check if changing the file’s mode is allowed”…”�”}”(hjܯh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÙ¯h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj®®h²hh³jÇ®h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjô¯jæjô¯jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX6**Parameters** ``const struct path *path`` file ``umode_t mode`` new mode **Description** Check for permission to change a mode of the file **path**. The new mode is specified in **mode** which is a bitmask of constants from . **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjþ¯h]”hŒ Parameters”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjü¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M#hjø¯ubj )�”}”(hhh]”(j)�”}”(hŒ!``const struct path *path`` file ”h]”(j)�”}”(hŒ``const struct path *path``”h]”j)�”}”(hj°h]”hŒconst struct path *path”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj°ubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj6°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j2°h´M hj3°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2°h´M hj°ubj)�”}”(hŒ``umode_t mode`` new mode ”h]”(j)�”}”(hŒ``umode_t mode``”h]”j)�”}”(hjV°h]”hŒ umode_t mode”…”�”}”(hjX°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjT°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M!hjP°ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew mode”h]”hŒnew mode”…”�”}”(hjo°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jk°h´M!hjl°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjP°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jk°h´M!hj°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjø¯ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‘°h]”hŒ Description”…”�”}”(hj“°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M#hjø¯ubhÝ)�”}”(hŒ£Check for permission to change a mode of the file **path**. The new mode is specified in **mode** which is a bitmask of constants from .”h]”(hŒ2Check for permission to change a mode of the file ”…”�”}”(hj§°h²hh³Nh´Nubjõ)�”}”(hŒ**path**”h]”hŒpath”…”�”}”(hj¯°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§°ubhŒ. The new mode is specified in ”…”�”}”(hj§°h²hh³Nh´Nubjõ)�”}”(hŒ**mode**”h]”hŒmode”…”�”}”(hjÁ°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§°ubhŒB which is a bitmask of constants from .”…”�”}”(hj§°h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M"hjø¯ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjܰh]”hŒReturn”…”�”}”(hjÞ°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚ°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M&hjø¯ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjò°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M'hjø¯ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_path_chown (C function)”Œc.security_path_chown”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIint security_path_chown (const struct path *path, kuid_t uid, kgid_t gid)”h]”j)�”}”(hŒHint security_path_chown(const struct path *path, kuid_t uid, kgid_t gid)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj!±h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj±h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±h²hh³j/±h´M1ubj{)�”}”(hŒsecurity_path_chown”h]”j�)�”}”(hŒsecurity_path_chown”h]”hŒsecurity_path_chown”…”�”}”(hjB±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>±ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj±h²hh³j/±h´M1ubjœ)�”}”(hŒ1(const struct path *path, kuid_t uid, kgid_t gid)”h]”(j¢)�”}”(hŒconst struct path *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj^±h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZ±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ±ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjy±h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZ±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ±ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj—±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j™±Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jD±sbŒc.security_path_chown”†”asbuh1hhjZ±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ±ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjűh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZ±ubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjÒ±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjV±ubj¢)�”}”(hŒ kuid_t uid”h]”(h)�”}”(hhh]”j�)�”}”(hŒkuid_t”h]”hŒkuid_t”…”�”}”(hjî±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjë±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jð±Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j³±Œc.security_path_chown”†”asbuh1hhjç±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjç±ubj�)�”}”(hŒuid”h]”hŒuid”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjç±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjV±ubj¢)�”}”(hŒ kgid_t gid”h]”(h)�”}”(hhh]”j�)�”}”(hŒkgid_t”h]”hŒkgid_t”…”�”}”(hj6²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j8²Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j³±Œc.security_path_chown”†”asbuh1hhj/²ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT²h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/²ubj�)�”}”(hŒgid”h]”hŒgid”…”�”}”(hjb²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjV±ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj±h²hh³j/±h´M1ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj±h²hh³j/±h´M1ubah}”(h]”j±ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j/±h´M1hj±h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3Check if changing the file's owner/group is allowed”h]”hŒ5Check if changing the file’s owner/group is allowed”…”�”}”(hjŒ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M1hj‰²h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj±h²hh³j/±h´M1ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¤²jæj¤²jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒò**Parameters** ``const struct path *path`` file ``kuid_t uid`` file owner ``kgid_t gid`` file group **Description** Check for permission to change owner/group of a file or directory. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj®²h]”hŒ Parameters”…”�”}”(hj°²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¬²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M5hj¨²ubj )�”}”(hhh]”(j)�”}”(hŒ!``const struct path *path`` file ”h]”(j)�”}”(hŒ``const struct path *path``”h]”j)�”}”(hjͲh]”hŒconst struct path *path”…”�”}”(hjϲh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˲ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M2hjDzubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjæ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jâ²h´M2hjã²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjDzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâ²h´M2hjIJubj)�”}”(hŒ``kuid_t uid`` file owner ”h]”(j)�”}”(hŒ``kuid_t uid``”h]”j)�”}”(hj³h]”hŒ kuid_t uid”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M3hj³ubj2)�”}”(hhh]”hÝ)�”}”(hŒ file owner”h]”hŒ file owner”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j³h´M3hj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j³h´M3hjIJubj)�”}”(hŒ``kgid_t gid`` file group ”h]”(j)�”}”(hŒ``kgid_t gid``”h]”j)�”}”(hj?³h]”hŒ kgid_t gid”…”�”}”(hjA³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=³ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4hj9³ubj2)�”}”(hhh]”hÝ)�”}”(hŒ file group”h]”hŒ file group”…”�”}”(hjX³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jT³h´M4hjU³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj9³ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jT³h´M4hjIJubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¨²ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjz³h]”hŒ Description”…”�”}”(hj|³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M6hj¨²ubhÝ)�”}”(hŒBCheck for permission to change owner/group of a file or directory.”h]”hŒBCheck for permission to change owner/group of a file or directory.”…”�”}”(hj�³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M5hj¨²ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¡³h]”hŒReturn”…”�”}”(hj£³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸ³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M7hj¨²ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj·³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8hj¨²ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_path_chroot (C function)”Œc.security_path_chroot”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2int security_path_chroot (const struct path *path)”h]”j)�”}”(hŒ1int security_path_chroot(const struct path *path)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjæ³h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjâ³h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõ³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâ³h²hh³jô³h´MBubj{)�”}”(hŒsecurity_path_chroot”h]”j�)�”}”(hŒsecurity_path_chroot”h]”hŒsecurity_path_chroot”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjâ³h²hh³jô³h´MBubjœ)�”}”(hŒ(const struct path *path)”h]”j¢)�”}”(hŒconst struct path *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj#´h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj´ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj>´h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj´ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjK´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´ubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj\´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjY´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j^´Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j ´sbŒc.security_path_chroot”†”asbuh1hhj´ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŠ´h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj´ubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj—´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj´ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjâ³h²hh³jô³h´MBubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÞ³h²hh³jô³h´MBubah}”(h]”jÙ³ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jô³h´MBhjÛ³h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/Check if changing the root directory is allowed”h]”hŒ/Check if changing the root directory is allowed”…”�”}”(hjÁ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MBhj¾´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÛ³h²hh³jô³h´MBubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÙ´jæjÙ´jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ©**Parameters** ``const struct path *path`` directory **Description** Check for permission to change root directory. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjã´h]”hŒ Parameters”…”�”}”(hjå´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjá´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MFhjÝ´ubj )�”}”(hhh]”j)�”}”(hŒ&``const struct path *path`` directory ”h]”(j)�”}”(hŒ``const struct path *path``”h]”j)�”}”(hjµh]”hŒconst struct path *path”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MChjü´ubj2)�”}”(hhh]”hÝ)�”}”(hŒ directory”h]”hŒ directory”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµh´MChjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjü´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµh´MChjù´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÝ´ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj=µh]”hŒ Description”…”�”}”(hj?µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;µubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MEhjÝ´ubhÝ)�”}”(hŒ.Check for permission to change root directory.”h]”hŒ.Check for permission to change root directory.”…”�”}”(hjSµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MDhjÝ´ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjdµh]”hŒReturn”…”�”}”(hjfµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbµubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MFhjÝ´ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjzµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MGhjÝ´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ/security_inode_post_create_tmpfile (C function)”Œ$c.security_inode_post_create_tmpfile”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒVvoid security_inode_post_create_tmpfile (struct mnt_idmap *idmap, struct inode *inode)”h]”j)�”}”(hŒUvoid security_inode_post_create_tmpfile(struct mnt_idmap *idmap, struct inode *inode)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj©µh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¥µh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸µh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥µh²hh³j·µh´Mcubj{)�”}”(hŒ"security_inode_post_create_tmpfile”h]”j�)�”}”(hŒ"security_inode_post_create_tmpfile”h]”hŒ"security_inode_post_create_tmpfile”…”�”}”(hjʵh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƵubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¥µh²hh³j·µh´Mcubjœ)�”}”(hŒ.(struct mnt_idmap *idmap, struct inode *inode)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjæµh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjâµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóµh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâµubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¶Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j̵sbŒ$c.security_inode_post_create_tmpfile”†”asbuh1hhjâµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâµubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj2¶h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâµubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hj?¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞµubj¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjX¶h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjT¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjT¶ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjv¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjs¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jx¶Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j ¶Œ$c.security_inode_post_create_tmpfile”†”asbuh1hhjT¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjT¶ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¢¶h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjT¶ubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj¯¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjT¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞµubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¥µh²hh³j·µh´Mcubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¡µh²hh³j·µh´Mcubah}”(h]”jœµah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j·µh´Mchjžµh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Update inode security of new tmpfile”h]”hŒ$Update inode security of new tmpfile”…”�”}”(hjÙ¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MchjÖ¶h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjžµh²hh³j·µh´Mcubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjñ¶jæjñ¶jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÃ**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct inode *inode`` inode of the new tmpfile **Description** Update inode security data after a tmpfile has been created.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjû¶h]”hŒ Parameters”…”�”}”(hjý¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjù¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mghjõ¶ubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hj·h]”hŒstruct mnt_idmap *idmap”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mdhj·ubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hj3·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j/·h´Mdhj0·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j/·h´Mdhj·ubj)�”}”(hŒ1``struct inode *inode`` inode of the new tmpfile ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hjS·h]”hŒstruct inode *inode”…”�”}”(hjU·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MehjM·ubj2)�”}”(hhh]”hÝ)�”}”(hŒinode of the new tmpfile”h]”hŒinode of the new tmpfile”…”�”}”(hjl·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh·h´Mehji·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjM·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh·h´Mehj·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjõ¶ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŽ·h]”hŒ Description”…”�”}”(hj�·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mghjõ¶ubhÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjÏ·h²hh³já·h´Mrubj{)�”}”(hŒsecurity_inode_link”h]”j�)�”}”(hŒsecurity_inode_link”h]”hŒsecurity_inode_link”…”�”}”(hjô·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjð·ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÏ·h²hh³já·h´Mrubjœ)�”}”(hŒI(struct dentry *old_dentry, struct inode *dir, struct dentry *new_dentry)”h]”(j¢)�”}”(hŒstruct dentry *old_dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ¸ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj.¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j0¸Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jö·sbŒc.security_inode_link”†”asbuh1hhj ¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj\¸h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ¸ubj�)�”}”(hŒ old_dentry”h]”hŒ old_dentry”…”�”}”(hji¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¸ubj¢)�”}”(hŒstruct inode *dir”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‚¸h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj~¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~¸ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj ¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¢¸Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jJ¸Œc.security_inode_link”†”asbuh1hhj~¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj̸h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj~¸ubj�)�”}”(hŒdir”h]”hŒdir”…”�”}”(hjÙ¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¸ubj¢)�”}”(hŒstruct dentry *new_dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjò¸h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjî¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjî¸ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ¹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¹Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jJ¸Œc.security_inode_link”†”asbuh1hhjî¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.¹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjî¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj<¹h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjî¸ubj�)�”}”(hŒ new_dentry”h]”hŒ new_dentry”…”�”}”(hjI¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjî¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¸ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÏ·h²hh³já·h´Mrubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjË·h²hh³já·h´Mrubah}”(h]”jÆ·ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³já·h´MrhjÈ·h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if creating a hard link is allowed”h]”hŒ(Check if creating a hard link is allowed”…”�”}”(hjs¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mrhjp¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÈ·h²hh³já·h´Mrubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‹¹jæj‹¹jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct dentry *old_dentry`` existing file ``struct inode *dir`` new parent directory ``struct dentry *new_dentry`` new link **Description** Check permission before creating a new hard link to a file. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj•¹h]”hŒ Parameters”…”�”}”(hj—¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mvhj�¹ubj )�”}”(hhh]”(j)�”}”(hŒ,``struct dentry *old_dentry`` existing file ”h]”(j)�”}”(hŒ``struct dentry *old_dentry``”h]”j)�”}”(hj´¹h]”hŒstruct dentry *old_dentry”…”�”}”(hj¶¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mshj®¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒ existing file”h]”hŒ existing file”…”�”}”(hj͹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jɹh´Mshjʹubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj®¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jɹh´Mshj«¹ubj)�”}”(hŒ+``struct inode *dir`` new parent directory ”h]”(j)�”}”(hŒ``struct inode *dir``”h]”j)�”}”(hjí¹h]”hŒstruct inode *dir”…”�”}”(hjï¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjë¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mthjç¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew parent directory”h]”hŒnew parent directory”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jºh´Mthjºubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjç¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jºh´Mthj«¹ubj)�”}”(hŒ'``struct dentry *new_dentry`` new link ”h]”(j)�”}”(hŒ``struct dentry *new_dentry``”h]”j)�”}”(hj&ºh]”hŒstruct dentry *new_dentry”…”�”}”(hj(ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ºubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Muhj ºubj2)�”}”(hhh]”hÝ)�”}”(hŒnew link”h]”hŒnew link”…”�”}”(hj?ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;ºh´Muhj<ºubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;ºh´Muhj«¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj�¹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjaºh]”hŒ Description”…”�”}”(hjcºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_ºubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mwhj�¹ubhÝ)�”}”(hŒ;Check permission before creating a new hard link to a file.”h]”hŒ;Check permission before creating a new hard link to a file.”…”�”}”(hjwºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mvhj�¹ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjˆºh]”hŒReturn”…”�”}”(hjŠºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†ºubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mxhj�¹ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjžºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Myhj�¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_inode_unlink (C function)”Œc.security_inode_unlink”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDint security_inode_unlink (struct inode *dir, struct dentry *dentry)”h]”j)�”}”(hŒCint security_inode_unlink(struct inode *dir, struct dentry *dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjͺh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjɺh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjܺh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjɺh²hh³jÛºh´M„ubj{)�”}”(hŒsecurity_inode_unlink”h]”j�)�”}”(hŒsecurity_inode_unlink”h]”hŒsecurity_inode_unlink”…”�”}”(hjîºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêºubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjɺh²hh³jÛºh´M„ubjœ)�”}”(hŒ*(struct inode *dir, struct dentry *dentry)”h]”(j¢)�”}”(hŒstruct inode *dir”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj »h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj(»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j*»Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jðºsbŒc.security_inode_unlink”†”asbuh1hhj»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjV»h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj»ubj�)�”}”(hŒdir”h]”hŒdir”…”�”}”(hjc»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»ubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj|»h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjx»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjx»ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjš»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jœ»Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jD»Œc.security_inode_unlink”†”asbuh1hhjx»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjx»ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÆ»h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjx»ubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÓ»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjx»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjɺh²hh³jÛºh´M„ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjźh²hh³jÛºh´M„ubah}”(h]”jÀºah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÛºh´M„hjºh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if removing a hard link is allowed”h]”hŒ(Check if removing a hard link is allowed”…”�”}”(hjý»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„hjú»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjºh²hh³jÛºh´M„ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¼jæj¼jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÓ**Parameters** ``struct inode *dir`` parent directory ``struct dentry *dentry`` file **Description** Check the permission to remove a hard link to a file. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¼h]”hŒ Parameters”…”�”}”(hj!¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mˆhj¼ubj )�”}”(hhh]”(j)�”}”(hŒ'``struct inode *dir`` parent directory ”h]”(j)�”}”(hŒ``struct inode *dir``”h]”j)�”}”(hj>¼h]”hŒstruct inode *dir”…”�”}”(hj@¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M…hj8¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒparent directory”h]”hŒparent directory”…”�”}”(hjW¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jS¼h´M…hjT¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj8¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jS¼h´M…hj5¼ubj)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjw¼h]”hŒstruct dentry *dentry”…”�”}”(hjy¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhju¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M†hjq¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj�¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŒ¼h´M†hj�¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjq¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒ¼h´M†hj5¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¼ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj²¼h]”hŒ Description”…”�”}”(hj´¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mˆhj¼ubhÝ)�”}”(hŒ5Check the permission to remove a hard link to a file.”h]”hŒ5Check the permission to remove a hard link to a file.”…”�”}”(hjȼh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡hj¼ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÙ¼h]”hŒReturn”…”�”}”(hjÛ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj×¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‰hj¼ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjï¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŠhj¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_inode_symlink (C function)”Œc.security_inode_symlink”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ[int security_inode_symlink (struct inode *dir, struct dentry *dentry, const char *old_name)”h]”j)�”}”(hŒZint security_inode_symlink(struct inode *dir, struct dentry *dentry, const char *old_name)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½h²hh³j,½h´M”ubj{)�”}”(hŒsecurity_inode_symlink”h]”j�)�”}”(hŒsecurity_inode_symlink”h]”hŒsecurity_inode_symlink”…”�”}”(hj?½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;½ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj½h²hh³j,½h´M”ubjœ)�”}”(hŒ@(struct inode *dir, struct dentry *dentry, const char *old_name)”h]”(j¢)�”}”(hŒstruct inode *dir”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj[½h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjW½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjW½ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjy½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjv½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j{½Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jA½sbŒc.security_inode_symlink”†”asbuh1hhjW½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjW½ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj§½h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjW½ubj�)�”}”(hŒdir”h]”hŒdir”…”�”}”(hj´½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjW½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjS½ubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjͽh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjɽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjɽubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjë½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjè½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jí½Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j•½Œc.security_inode_symlink”†”asbuh1hhjɽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjɽubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjɽubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj$¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjɽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjS½ubj¢)�”}”(hŒconst char *old_name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj=¾h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj9¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9¾ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjX¾h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj9¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9¾ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjt¾h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj9¾ubj�)�”}”(hŒold_name”h]”hŒold_name”…”�”}”(hj�¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjS½ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj½h²hh³j,½h´M”ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj½h²hh³j,½h´M”ubah}”(h]”j½ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j,½h´M”hj½h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Check if creating a symbolic link is allowed”h]”hŒ,Check if creating a symbolic link is allowed”…”�”}”(hj«¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”hj¨¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj½h²hh³j,½h´M”ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjþjæjþjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct inode *dir`` parent directory ``struct dentry *dentry`` symbolic link ``const char *old_name`` existing filename **Description** Check the permission to create a symbolic link to a file. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj;h]”hŒ Parameters”…”�”}”(hjϾh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜hjǾubj )�”}”(hhh]”(j)�”}”(hŒ'``struct inode *dir`` parent directory ”h]”(j)�”}”(hŒ``struct inode *dir``”h]”j)�”}”(hjì¾h]”hŒstruct inode *dir”…”�”}”(hjî¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjê¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M•hjæ¾ubj2)�”}”(hhh]”hÝ)�”}”(hŒparent directory”h]”hŒparent directory”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¿h´M•hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæ¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿h´M•hjã¾ubj)�”}”(hŒ(``struct dentry *dentry`` symbolic link ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj%¿h]”hŒstruct dentry *dentry”…”�”}”(hj'¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M–hj¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒ symbolic link”h]”hŒ symbolic link”…”�”}”(hj>¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:¿h´M–hj;¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:¿h´M–hjã¾ubj)�”}”(hŒ+``const char *old_name`` existing filename ”h]”(j)�”}”(hŒ``const char *old_name``”h]”j)�”}”(hj^¿h]”hŒconst char *old_name”…”�”}”(hj`¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M—hjX¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒexisting filename”h]”hŒexisting filename”…”�”}”(hjw¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³js¿h´M—hjt¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjX¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³js¿h´M—hjã¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjǾubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj™¿h]”hŒ Description”…”�”}”(hj›¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™hjǾubhÝ)�”}”(hŒ9Check the permission to create a symbolic link to a file.”h]”hŒ9Check the permission to create a symbolic link to a file.”…”�”}”(hj¯¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜hjǾubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÀ¿h]”hŒReturn”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MšhjǾubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjÖ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M›hjǾubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_inode_rmdir (C function)”Œc.security_inode_rmdir”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCint security_inode_rmdir (struct inode *dir, struct dentry *dentry)”h]”j)�”}”(hŒBint security_inode_rmdir(struct inode *dir, struct dentry *dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÀh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀh²hh³jÀh´M¹ubj{)�”}”(hŒsecurity_inode_rmdir”h]”j�)�”}”(hŒsecurity_inode_rmdir”h]”hŒsecurity_inode_rmdir”…”�”}”(hj&Àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"Àubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÀh²hh³jÀh´M¹ubjœ)�”}”(hŒ*(struct inode *dir, struct dentry *dentry)”h]”(j¢)�”}”(hŒstruct inode *dir”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjBÀh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj>Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>Àubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj`Àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]Àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jbÀŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j(ÀsbŒc.security_inode_rmdir”†”asbuh1hhj>Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Àh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>Àubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŽÀh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj>Àubj�)�”}”(hŒdir”h]”hŒdir”…”�”}”(hj›Àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj:Àubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj´Àh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj°Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°Àubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÒÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏÀubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÔÀŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j|ÀŒc.security_inode_rmdir”†”asbuh1hhj°Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°Àubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjþÀh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj°Àubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj Áh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°Àubeh•}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj:Àubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÀh²hh³jÀh´M¹ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjý¿h²hh³jÀh´M¹ubah}”(h]”jø¿ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÀh´M¹hjú¿h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if removing a directory is allowed”h]”hŒ(Check if removing a directory is allowed”…”�”}”(hj5Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¹hj2Áh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjú¿h²hh³jÀh´M¹ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjMÁjæjMÁjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÜ**Parameters** ``struct inode *dir`` parent directory ``struct dentry *dentry`` directory to be removed **Description** Check the permission to remove a directory. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjWÁh]”hŒ Parameters”…”�”}”(hjYÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjUÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½hjQÁubj )�”}”(hhh]”(j)�”}”(hŒ'``struct inode *dir`` parent directory ”h]”(j)�”}”(hŒ``struct inode *dir``”h]”j)�”}”(hjvÁh]”hŒstruct inode *dir”…”�”}”(hjxÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MºhjpÁubj2)�”}”(hhh]”hÝ)�”}”(hŒparent directory”h]”hŒparent directory”…”�”}”(hj�Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‹Áh´MºhjŒÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjpÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹Áh´MºhjmÁubj)�”}”(hŒ2``struct dentry *dentry`` directory to be removed ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj¯Áh]”hŒstruct dentry *dentry”…”�”}”(hj±Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M»hj©Áubj2)�”}”(hhh]”hÝ)�”}”(hŒdirectory to be removed”h]”hŒdirectory to be removed”…”�”}”(hjÈÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄÁh´M»hjÅÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj©Áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄÁh´M»hjmÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjQÁubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjêÁh]”hŒ Description”…”�”}”(hjìÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjèÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½hjQÁubhÝ)�”}”(hŒ+Check the permission to remove a directory.”h]”hŒ+Check the permission to remove a directory.”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¼hjQÁubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÂh]”hŒReturn”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¾hjQÁubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj'Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¿hjQÁubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_inode_mknod (C function)”Œc.security_inode_mknod”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ\int security_inode_mknod (struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)”h]”j)�”}”(hŒ[int security_inode_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjVÂh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjRÂh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÉubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeÂh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRÂh²hh³jdÂh´MÉubj{)�”}”(hŒsecurity_inode_mknod”h]”j�)�”}”(hŒsecurity_inode_mknod”h]”hŒsecurity_inode_mknod”…”�”}”(hjwÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjsÂubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjRÂh²hh³jdÂh´MÉubjœ)�”}”(hŒC(struct inode *dir, struct dentry *dentry, umode_t mode, dev_t dev)”h]”(j¢)�”}”(hŒstruct inode *dir”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj“Âh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�Âubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Âubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj±Âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®Âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j³ÂŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jyÂsbŒc.security_inode_mknod”†”asbuh1hhj�Âubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑÂh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Âubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjßÂh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�Âubj�)�”}”(hŒdir”h]”hŒdir”…”�”}”(hjìÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Âubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‹Âubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÃubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj#Ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j%ÃŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÍÂŒc.security_inode_mknod”†”asbuh1hhjÃubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjOÃh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÃubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj\Ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‹Âubj¢)�”}”(hŒ umode_t mode”h]”(h)�”}”(hhh]”j�)�”}”(hŒumode_t”h]”hŒumode_t”…”�”}”(hjxÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuÃubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jzÃŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÍÂŒc.security_inode_mknod”†”asbuh1hhjqÃubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–Ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqÃubj�)�”}”(hŒmode”h]”hŒmode”…”�”}”(hj¤Ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‹Âubj¢)�”}”(hŒ dev_t dev”h]”(h)�”}”(hhh]”j�)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hjÀÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½Ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÂÃŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÍÂŒc.security_inode_mknod”†”asbuh1hhj¹Ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹Ãubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjìÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹Ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‹Âubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjRÂh²hh³jdÂh´MÉubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjNÂh²hh³jdÂh´MÉubah}”(h]”jIÂah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jdÂh´MÉhjKÂh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if creating a special file is allowed”h]”hŒ+Check if creating a special file is allowed”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÉhjÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjKÂh²hh³jdÂh´MÉubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj.Äjæj.Äjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXÈ**Parameters** ``struct inode *dir`` parent directory ``struct dentry *dentry`` new file ``umode_t mode`` new file mode ``dev_t dev`` device number **Description** Check permissions when creating a special file (or a socket or a fifo file created via the mknod system call). Note that if mknod operation is being done for a regular file, then the create hook will be called and not this hook. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj8Äh]”hŒ Parameters”…”�”}”(hj:Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6Äubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÍhj2Äubj )�”}”(hhh]”(j)�”}”(hŒ'``struct inode *dir`` parent directory ”h]”(j)�”}”(hŒ``struct inode *dir``”h]”j)�”}”(hjWÄh]”hŒstruct inode *dir”…”�”}”(hjYÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÊhjQÄubj2)�”}”(hhh]”hÝ)�”}”(hŒparent directory”h]”hŒparent directory”…”�”}”(hjpÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlÄh´MÊhjmÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlÄh´MÊhjNÄubj)�”}”(hŒ#``struct dentry *dentry`` new file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj�Äh]”hŒstruct dentry *dentry”…”�”}”(hj’Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MËhjŠÄubj2)�”}”(hhh]”hÝ)�”}”(hŒnew file”h]”hŒnew file”…”�”}”(hj©Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥Äh´MËhj¦Äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥Äh´MËhjNÄubj)�”}”(hŒ``umode_t mode`` new file mode ”h]”(j)�”}”(hŒ``umode_t mode``”h]”j)�”}”(hjÉÄh]”hŒ umode_t mode”…”�”}”(hjËÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÌhjÃÄubj2)�”}”(hhh]”hÝ)�”}”(hŒ new file mode”h]”hŒ new file mode”…”�”}”(hjâÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÞÄh´MÌhjßÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÃÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞÄh´MÌhjNÄubj)�”}”(hŒ``dev_t dev`` device number ”h]”(j)�”}”(hŒ ``dev_t dev``”h]”j)�”}”(hjÅh]”hŒ dev_t dev”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÍhjüÄubj2)�”}”(hhh]”hÝ)�”}”(hŒ device number”h]”hŒ device number”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÅh´MÍhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjüÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÅh´MÍhjNÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj2ÄubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj=Åh]”hŒ Description”…”�”}”(hj?Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;Åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÏhj2ÄubhÝ)�”}”(hŒåCheck permissions when creating a special file (or a socket or a fifo file created via the mknod system call). Note that if mknod operation is being done for a regular file, then the create hook will be called and not this hook.”h]”hŒåCheck permissions when creating a special file (or a socket or a fifo file created via the mknod system call). Note that if mknod operation is being done for a regular file, then the create hook will be called and not this hook.”…”�”}”(hjSÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÎhj2ÄubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjdÅh]”hŒReturn”…”�”}”(hjfÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓhj2ÄubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjzÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔhj2Äubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_inode_rename (C function)”Œc.security_inode_rename”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ’int security_inode_rename (struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry, unsigned int flags)”h]”j)�”}”(hŒ‘int security_inode_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry, unsigned int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj©Åh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¥Åh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mßubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸Åh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥Åh²hh³j·Åh´Mßubj{)�”}”(hŒsecurity_inode_rename”h]”j�)�”}”(hŒsecurity_inode_rename”h]”hŒsecurity_inode_rename”…”�”}”(hjÊÅh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆÅubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¥Åh²hh³j·Åh´Mßubjœ)�”}”(hŒx(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry, unsigned int flags)”h]”(j¢)�”}”(hŒstruct inode *old_dir”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjæÅh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjâÅubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóÅh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâÅubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÌÅsbŒc.security_inode_rename”†”asbuh1hhjâÅubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâÅubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj2Æh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâÅubj�)�”}”(hŒold_dir”h]”hŒold_dir”…”�”}”(hj?Æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâÅubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞÅubj¢)�”}”(hŒstruct dentry *old_dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjXÆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjTÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTÆubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjvÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjsÆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jxÆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j ÆŒc.security_inode_rename”†”asbuh1hhjTÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”Æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTÆubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¢Æh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjTÆubj�)�”}”(hŒ old_dentry”h]”hŒ old_dentry”…”�”}”(hj¯Æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞÅubj¢)�”}”(hŒstruct inode *new_dir”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÈÆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÄÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄÆubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjæÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjãÆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jèÆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j ÆŒc.security_inode_rename”†”asbuh1hhjÄÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄÆubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÄÆubj�)�”}”(hŒnew_dir”h]”hŒnew_dir”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞÅubj¢)�”}”(hŒstruct dentry *new_dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj8Çh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj4Çubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4Çubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjVÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSÇubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jXÇŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j ÆŒc.security_inode_rename”†”asbuh1hhj4Çubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4Çubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‚Çh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj4Çubj�)�”}”(hŒ new_dentry”h]”hŒ new_dentry”…”�”}”(hj�Çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4Çubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞÅubj¢)�”}”(hŒunsigned int flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¨Çh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤Çubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶Çh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤Çubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÄÇh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤Çubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤Çubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjàÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤Çubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÞÅubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¥Åh²hh³j·Åh´Mßubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¡Åh²hh³j·Åh´Mßubah}”(h]”jœÅah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j·Åh´MßhjžÅh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Check if renaming a file is allowed”h]”hŒ#Check if renaming a file is allowed”…”�”}”(hj Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MßhjÈh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjžÅh²hh³j·Åh´Mßubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj"Èjæj"Èjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX}**Parameters** ``struct inode *old_dir`` parent directory of the old file ``struct dentry *old_dentry`` the old file ``struct inode *new_dir`` parent directory of the new file ``struct dentry *new_dentry`` the new file ``unsigned int flags`` flags **Description** Check for permission to rename a file or directory. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj,Èh]”hŒ Parameters”…”�”}”(hj.Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*Èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mãhj&Èubj )�”}”(hhh]”(j)�”}”(hŒ;``struct inode *old_dir`` parent directory of the old file ”h]”(j)�”}”(hŒ``struct inode *old_dir``”h]”j)�”}”(hjKÈh]”hŒstruct inode *old_dir”…”�”}”(hjMÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MàhjEÈubj2)�”}”(hhh]”hÝ)�”}”(hŒ parent directory of the old file”h]”hŒ parent directory of the old file”…”�”}”(hjdÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j`Èh´MàhjaÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjEÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`Èh´MàhjBÈubj)�”}”(hŒ+``struct dentry *old_dentry`` the old file ”h]”(j)�”}”(hŒ``struct dentry *old_dentry``”h]”j)�”}”(hj„Èh]”hŒstruct dentry *old_dentry”…”�”}”(hj†Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Máhj~Èubj2)�”}”(hhh]”hÝ)�”}”(hŒ the old file”h]”hŒ the old file”…”�”}”(hj�Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™Èh´MáhjšÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~Èubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™Èh´MáhjBÈubj)�”}”(hŒ;``struct inode *new_dir`` parent directory of the new file ”h]”(j)�”}”(hŒ``struct inode *new_dir``”h]”j)�”}”(hj½Èh]”hŒstruct inode *new_dir”…”�”}”(hj¿Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mâhj·Èubj2)�”}”(hhh]”hÝ)�”}”(hŒ parent directory of the new file”h]”hŒ parent directory of the new file”…”�”}”(hjÖÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒÈh´MâhjÓÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·Èubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒÈh´MâhjBÈubj)�”}”(hŒ+``struct dentry *new_dentry`` the new file ”h]”(j)�”}”(hŒ``struct dentry *new_dentry``”h]”j)�”}”(hjöÈh]”hŒstruct dentry *new_dentry”…”�”}”(hjøÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôÈubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MãhjðÈubj2)�”}”(hhh]”hÝ)�”}”(hŒ the new file”h]”hŒ the new file”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Éh´Mãhj Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Éh´MãhjBÈubj)�”}”(hŒ``unsigned int flags`` flags ”h]”(j)�”}”(hŒ``unsigned int flags``”h]”j)�”}”(hj/Éh]”hŒunsigned int flags”…”�”}”(hj1Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-Éubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mähj)Éubj2)�”}”(hhh]”hÝ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjHÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jDÉh´MähjEÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj)Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jDÉh´MähjBÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj&ÈubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjjÉh]”hŒ Description”…”�”}”(hjlÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mæhj&ÈubhÝ)�”}”(hŒ3Check for permission to rename a file or directory.”h]”hŒ3Check for permission to rename a file or directory.”…”�”}”(hj€Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Måhj&ÈubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj‘Éh]”hŒReturn”…”�”}”(hj“Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Éubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mçhj&ÈubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj§Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mèhj&Èubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_inode_readlink (C function)”Œc.security_inode_readlink”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3int security_inode_readlink (struct dentry *dentry)”h]”j)�”}”(hŒ2int security_inode_readlink(struct dentry *dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÖÉh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÒÉh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåÉh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒÉh²hh³jäÉh´Mÿubj{)�”}”(hŒsecurity_inode_readlink”h]”j�)�”}”(hŒsecurity_inode_readlink”h]”hŒsecurity_inode_readlink”…”�”}”(hj÷Éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóÉubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÒÉh²hh³jäÉh´Mÿubjœ)�”}”(hŒ(struct dentry *dentry)”h]”j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj1Êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.Êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j3ÊŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jùÉsbŒc.security_inode_readlink”†”asbuh1hhjÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj_Êh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÊubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjlÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Êubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÒÉh²hh³jäÉh´Mÿubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÎÉh²hh³jäÉh´Mÿubah}”(h]”jÉÉah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jäÉh´MÿhjËÉh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if reading a symbolic link is allowed”h]”hŒ+Check if reading a symbolic link is allowed”…”�”}”(hj–Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mÿhj“Êh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjËÉh²hh³jäÉh´Mÿubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj®Êjæj®Êjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ£**Parameters** ``struct dentry *dentry`` link **Description** Check the permission to read the symbolic link. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¸Êh]”hŒ Parameters”…”�”}”(hjºÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶Êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj²Êubj )�”}”(hhh]”j)�”}”(hŒ``struct dentry *dentry`` link ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj×Êh]”hŒstruct dentry *dentry”…”�”}”(hjÙÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕÊubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÑÊubj2)�”}”(hhh]”hÝ)�”}”(hŒlink”h]”hŒlink”…”�”}”(hjðÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jìÊh´MhjíÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jìÊh´MhjÎÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj²ÊubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjËh]”hŒ Description”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj²ÊubhÝ)�”}”(hŒ/Check the permission to read the symbolic link.”h]”hŒ/Check the permission to read the symbolic link.”…”�”}”(hj(Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj²ÊubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj9Ëh]”hŒReturn”…”�”}”(hj;Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj7Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj²ÊubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjOËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj²Êubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_inode_follow_link (C function)”Œc.security_inode_follow_link”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒUint security_inode_follow_link (struct dentry *dentry, struct inode *inode, bool rcu)”h]”j)�”}”(hŒTint security_inode_follow_link(struct dentry *dentry, struct inode *inode, bool rcu)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj~Ëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjzËh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjzËh²hh³jŒËh´Mubj{)�”}”(hŒsecurity_inode_follow_link”h]”j�)�”}”(hŒsecurity_inode_follow_link”h]”hŒsecurity_inode_follow_link”…”�”}”(hjŸËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›Ëubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjzËh²hh³jŒËh´Mubjœ)�”}”(hŒ6(struct dentry *dentry, struct inode *inode, bool rcu)”h]”(j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj»Ëh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj·Ëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·Ëubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÙËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÛËŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¡ËsbŒc.security_inode_follow_link”†”asbuh1hhj·Ëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·Ëubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj·Ëubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·Ëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³Ëubj¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj-Ìh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)Ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)Ìubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjKÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHÌubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jMÌŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jõËŒc.security_inode_follow_link”†”asbuh1hhj)Ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)Ìubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjwÌh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj)Ìubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj„Ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)Ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³Ëubj¢)�”}”(hŒbool rcu”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj�Ìh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj™Ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™Ìubj�)�”}”(hŒrcu”h]”hŒrcu”…”�”}”(hj¸Ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™Ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³Ëubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjzËh²hh³jŒËh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjvËh²hh³jŒËh´Mubah}”(h]”jqËah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŒËh´MhjsËh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Check if following a symbolic link is allowed”h]”hŒ-Check if following a symbolic link is allowed”…”�”}”(hjâÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjßÌh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjsËh²hh³jŒËh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjúÌjæjúÌjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX>**Parameters** ``struct dentry *dentry`` link dentry ``struct inode *inode`` link inode ``bool rcu`` true if in RCU-walk mode **Description** Check permission to follow a symbolic link when looking up a pathname. If **rcu** is true, **inode** is not stable. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÍh]”hŒ Parameters”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjþÌubj )�”}”(hhh]”(j)�”}”(hŒ&``struct dentry *dentry`` link dentry ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj#Íh]”hŒstruct dentry *dentry”…”�”}”(hj%Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!Íubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÍubj2)�”}”(hhh]”hÝ)�”}”(hŒ link dentry”h]”hŒ link dentry”…”�”}”(hj<Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j8Íh´Mhj9Íubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8Íh´MhjÍubj)�”}”(hŒ#``struct inode *inode`` link inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hj\Íh]”hŒstruct inode *inode”…”�”}”(hj^Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjVÍubj2)�”}”(hhh]”hÝ)�”}”(hŒ link inode”h]”hŒ link inode”…”�”}”(hjuÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jqÍh´MhjrÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjVÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqÍh´MhjÍubj)�”}”(hŒ&``bool rcu`` true if in RCU-walk mode ”h]”(j)�”}”(hŒ ``bool rcu``”h]”j)�”}”(hj•Íh]”hŒbool rcu”…”�”}”(hj—Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“Íubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj�Íubj2)�”}”(hhh]”hÝ)�”}”(hŒtrue if in RCU-walk mode”h]”hŒtrue if in RCU-walk mode”…”�”}”(hj®Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jªÍh´Mhj«Íubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Íubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªÍh´MhjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjþÌubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÐÍh]”hŒ Description”…”�”}”(hjÒÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjþÌubhÝ)�”}”(hŒtCheck permission to follow a symbolic link when looking up a pathname. If **rcu** is true, **inode** is not stable.”h]”(hŒKCheck permission to follow a symbolic link when looking up a pathname. If ”…”�”}”(hjæÍh²hh³Nh´Nubjõ)�”}”(hŒ**rcu**”h]”hŒrcu”…”�”}”(hjîÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæÍubhŒ is true, ”…”�”}”(hjæÍh²hh³Nh´Nubjõ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæÍubhŒ is not stable.”…”�”}”(hjæÍh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjþÌubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÎh]”hŒReturn”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjþÌubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj1Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjþÌubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_inode_permission (C function)”Œc.security_inode_permission”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=int security_inode_permission (struct inode *inode, int mask)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hj\Îh²hh³jnÎh´M!ubj{)�”}”(hŒsecurity_inode_permission”h]”j�)�”}”(hŒsecurity_inode_permission”h]”hŒsecurity_inode_permission”…”�”}”(hj�Îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}Îubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj\Îh²hh³jnÎh´M!ubjœ)�”}”(hŒ(struct inode *inode, int mask)”h]”(j¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�Îh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj™Îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™Îubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj»Îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸Îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j½ÎŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jƒÎsbŒc.security_inode_permission”†”asbuh1hhj™Îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™Îubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjéÎh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj™Îubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjöÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™Îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•Îubj¢)�”}”(hŒint mask”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Ïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Ïubj�)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj+Ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•Îubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj\Îh²hh³jnÎh´M!ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjXÎh²hh³jnÎh´M!ubah}”(h]”jSÎah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jnÎh´M!hjUÎh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Check if accessing an inode is allowed”h]”hŒ&Check if accessing an inode is allowed”…”�”}”(hjUÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M!hjRÏh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjUÎh²hh³jnÎh´M!ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjmÏjæjmÏjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX'**Parameters** ``struct inode *inode`` inode ``int mask`` access mask **Description** Check permission before accessing an inode. This hook is called by the existing Linux permission function, so a security module can use it to provide additional checking for existing Linux permission checks. Notice that this hook is called when a file is opened (as well as many other operations), whereas the file_security_ops permission hook is called when the actual read/write operations are performed. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjwÏh]”hŒ Parameters”…”�”}”(hjyÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjuÏubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M%hjqÏubj )�”}”(hhh]”(j)�”}”(hŒ``struct inode *inode`` inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hj–Ïh]”hŒstruct inode *inode”…”�”}”(hj˜Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M"hj�Ïubj2)�”}”(hhh]”hÝ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj¯Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j«Ïh´M"hj¬Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j«Ïh´M"hj�Ïubj)�”}”(hŒ``int mask`` access mask ”h]”(j)�”}”(hŒ ``int mask``”h]”j)�”}”(hjÏÏh]”hŒint mask”…”�”}”(hjÑÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M#hjÉÏubj2)�”}”(hhh]”hÝ)�”}”(hŒ access mask”h]”hŒ access mask”…”�”}”(hjèÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jäÏh´M#hjåÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÉÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jäÏh´M#hj�Ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjqÏubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj Ðh]”hŒ Description”…”�”}”(hj Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M%hjqÏubhÝ)�”}”(hX˜Check permission before accessing an inode. This hook is called by the existing Linux permission function, so a security module can use it to provide additional checking for existing Linux permission checks. Notice that this hook is called when a file is opened (as well as many other operations), whereas the file_security_ops permission hook is called when the actual read/write operations are performed.”h]”hX˜Check permission before accessing an inode. This hook is called by the existing Linux permission function, so a security module can use it to provide additional checking for existing Linux permission checks. Notice that this hook is called when a file is opened (as well as many other operations), whereas the file_security_ops permission hook is called when the actual read/write operations are performed.”…”�”}”(hj Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M$hjqÏubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj1Ðh]”hŒReturn”…”�”}”(hj3Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hjqÏubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjGÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M,hjqÏubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_inode_post_setattr (C function)”Œc.security_inode_post_setattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ_void security_inode_post_setattr (struct mnt_idmap *idmap, struct dentry *dentry, int ia_valid)”h]”j)�”}”(hŒ^void security_inode_post_setattr(struct mnt_idmap *idmap, struct dentry *dentry, int ia_valid)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjvÐh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjrÐh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjrÐh²hh³j„Ðh´MLubj{)�”}”(hŒsecurity_inode_post_setattr”h]”j�)�”}”(hŒsecurity_inode_post_setattr”h]”hŒsecurity_inode_post_setattr”…”�”}”(hj—Ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“Ðubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjrÐh²hh³j„Ðh´MLubjœ)�”}”(hŒ>(struct mnt_idmap *idmap, struct dentry *dentry, int ia_valid)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj³Ðh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¯Ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯Ðubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hjÑÐh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÓÐŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j™ÐsbŒc.security_inode_post_setattr”†”asbuh1hhj¯Ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯Ðubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÿÐh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¯Ðubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hj Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯Ðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj«Ðubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj%Ñh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!Ñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Ñubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjCÑh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@Ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jEÑŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jíÐŒc.security_inode_post_setattr”†”asbuh1hhj!Ñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaÑh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Ñubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjoÑh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!Ñubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj|Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!Ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj«Ðubj¢)�”}”(hŒ int ia_valid”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj•Ñh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘Ñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£Ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘Ñubj�)�”}”(hŒia_valid”h]”hŒia_valid”…”�”}”(hj±Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘Ñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj«Ðubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjrÐh²hh³j„Ðh´MLubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjnÐh²hh³j„Ðh´MLubah}”(h]”jiÐah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j„Ðh´MLhjkÐh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Update the inode after a setattr operation”h]”hŒ*Update the inode after a setattr operation”…”�”}”(hjÛÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MLhjØÑh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjkÐh²hh³j„Ðh´MLubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjóÑjæjóÑjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒâ**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` file ``int ia_valid`` file attributes set **Description** Update inode security field after successful setting file attributes.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjýÑh]”hŒ Parameters”…”�”}”(hjÿÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjûÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MPhj÷Ñubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hjÒh]”hŒstruct mnt_idmap *idmap”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MMhjÒubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hj5Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j1Òh´MMhj2Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1Òh´MMhjÒubj)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjUÒh]”hŒstruct dentry *dentry”…”�”}”(hjWÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MNhjOÒubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjnÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jjÒh´MNhjkÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjOÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jjÒh´MNhjÒubj)�”}”(hŒ%``int ia_valid`` file attributes set ”h]”(j)�”}”(hŒ``int ia_valid``”h]”j)�”}”(hjŽÒh]”hŒ int ia_valid”…”�”}”(hj�Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MOhjˆÒubj2)�”}”(hhh]”hÝ)�”}”(hŒfile attributes set”h]”hŒfile attributes set”…”�”}”(hj§Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j£Òh´MOhj¤Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjˆÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j£Òh´MOhjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj÷ÑubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÉÒh]”hŒ Description”…”�”}”(hjËÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÇÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MQhj÷ÑubhÝ)�”}”(hŒEUpdate inode security field after successful setting file attributes.”h]”hŒEUpdate inode security field after successful setting file attributes.”…”�”}”(hjßÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MPhj÷Ñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_inode_getattr (C function)”Œc.security_inode_getattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4int security_inode_getattr (const struct path *path)”h]”j)�”}”(hŒ3int security_inode_getattr(const struct path *path)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Óh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Óh²hh³jÓh´M\ubj{)�”}”(hŒsecurity_inode_getattr”h]”j�)�”}”(hŒsecurity_inode_getattr”h]”hŒsecurity_inode_getattr”…”�”}”(hj/Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+Óubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Óh²hh³jÓh´M\ubjœ)�”}”(hŒ(const struct path *path)”h]”j¢)�”}”(hŒconst struct path *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjKÓh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjGÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGÓubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjfÓh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjGÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGÓubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj„Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j†ÓŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j1ÓsbŒc.security_inode_getattr”†”asbuh1hhjGÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤Óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGÓubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj²Óh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjGÓubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj¿Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjGÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjCÓubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Óh²hh³jÓh´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÓh²hh³jÓh´M\ubah}”(h]”jÓah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÓh´M\hjÓh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if getting file attributes is allowed”h]”hŒ+Check if getting file attributes is allowed”…”�”}”(hjéÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M\hjæÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÓh²hh³jÓh´M\ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÔjæjÔjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¨**Parameters** ``const struct path *path`` file **Description** Check permission before obtaining file attributes. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj Ôh]”hŒ Parameters”…”�”}”(hj Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M`hjÔubj )�”}”(hhh]”j)�”}”(hŒ!``const struct path *path`` file ”h]”(j)�”}”(hŒ``const struct path *path``”h]”j)�”}”(hj*Ôh]”hŒconst struct path *path”…”�”}”(hj,Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj(Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M]hj$Ôubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjCÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j?Ôh´M]hj@Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj$Ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j?Ôh´M]hj!Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÔubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjeÔh]”hŒ Description”…”�”}”(hjgÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_hjÔubhÝ)�”}”(hŒ2Check permission before obtaining file attributes.”h]”hŒ2Check permission before obtaining file attributes.”…”�”}”(hj{Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M^hjÔubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjŒÔh]”hŒReturn”…”�”}”(hjŽÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŠÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M`hjÔubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj¢Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MahjÔubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_inode_setxattr (C function)”Œc.security_inode_setxattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ‰int security_inode_setxattr (struct mnt_idmap *idmap, struct dentry *dentry, const char *name, const void *value, size_t size, int flags)”h]”j)�”}”(hŒˆint security_inode_setxattr(struct mnt_idmap *idmap, struct dentry *dentry, const char *name, const void *value, size_t size, int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÑÔh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÍÔh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mkubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍÔh²hh³jßÔh´Mkubj{)�”}”(hŒsecurity_inode_setxattr”h]”j�)�”}”(hŒsecurity_inode_setxattr”h]”hŒsecurity_inode_setxattr”…”�”}”(hjòÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîÔubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÍÔh²hh³jßÔh´Mkubjœ)�”}”(hŒm(struct mnt_idmap *idmap, struct dentry *dentry, const char *name, const void *value, size_t size, int flags)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj Õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Õubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hj,Õh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)Õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j.ÕŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jôÔsbŒc.security_inode_setxattr”†”asbuh1hhj Õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Õubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjZÕh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj Õubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hjgÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj€Õh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj|Õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Õh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|Õubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjžÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›Õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ÕŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jHÕŒc.security_inode_setxattr”†”asbuh1hhj|Õubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Õh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|Õubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÊÕh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj|Õubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj×Õh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|Õubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjðÕh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjìÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìÕubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj Öh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjìÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìÕubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj'Öh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjìÕubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj4Öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕubj¢)�”}”(hŒconst void *value”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjMÖh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjIÖubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjIÖubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjhÖh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjIÖubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjIÖubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj„Öh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjIÖubj�)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hj‘Öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjIÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj­Öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¯ÖŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jHÕŒc.security_inode_setxattr”†”asbuh1hhj¦Öubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦Öubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjÙÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦Öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjòÖh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîÖubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîÖubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÍÔh²hh³jßÔh´Mkubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÉÔh²hh³jßÔh´Mkubah}”(h]”jÄÔah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jßÔh´MkhjÆÔh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Check if setting file xattrs is allowed”h]”hŒ'Check if setting file xattrs is allowed”…”�”}”(hj8×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mkhj5×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÆÔh²hh³jßÔh´Mkubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjP×jæjP×jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX¸**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` file ``const char *name`` xattr name ``const void *value`` xattr value ``size_t size`` size of xattr value ``int flags`` flags **Description** This hook performs the desired permission checks before setting the extended attributes (xattrs) on **dentry**. It is important to note that we have some additional logic before the main LSM implementation calls to detect if we need to perform an additional capability check at the LSM layer. Normally we enforce a capability check prior to executing the various LSM hook implementations, but if a LSM wants to avoid this capability check, it can register a 'inode_xattr_skipcap' hook and return a value of 1 for xattrs that it wants to avoid the capability check, leaving the LSM fully responsible for enforcing the access control for the specific xattr. If all of the enabled LSMs refrain from registering a 'inode_xattr_skipcap' hook, or return a 0 (the default return value), the capability check is still performed. If no 'inode_xattr_skipcap' hooks are registered the capability check is performed. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjZ×h]”hŒ Parameters”…”�”}”(hj\×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjX×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MohjT×ubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hjy×h]”hŒstruct mnt_idmap *idmap”…”�”}”(hj{×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjw×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mlhjs×ubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hj’×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŽ×h´Mlhj�×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjs×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽ×h´Mlhjp×ubj)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj²×h]”hŒstruct dentry *dentry”…”�”•1}”(hj´×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mmhj¬×ubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjË×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇ×h´MmhjÈ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇ×h´Mmhjp×ubj)�”}”(hŒ ``const char *name`` xattr name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjë×h]”hŒconst char *name”…”�”}”(hjí×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mnhjå×ubj2)�”}”(hhh]”hÝ)�”}”(hŒ xattr name”h]”hŒ xattr name”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØh´MnhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjå×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØh´Mnhjp×ubj)�”}”(hŒ"``const void *value`` xattr value ”h]”(j)�”}”(hŒ``const void *value``”h]”j)�”}”(hj$Øh]”hŒconst void *value”…”�”}”(hj&Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MohjØubj2)�”}”(hhh]”hÝ)�”}”(hŒ xattr value”h]”hŒ xattr value”…”�”}”(hj=Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j9Øh´Mohj:Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9Øh´Mohjp×ubj)�”}”(hŒ$``size_t size`` size of xattr value ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hj]Øh]”hŒ size_t size”…”�”}”(hj_Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MphjWØubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of xattr value”h]”hŒsize of xattr value”…”�”}”(hjvØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jrØh´MphjsØubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjWØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jrØh´Mphjp×ubj)�”}”(hŒ``int flags`` flags ”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hj–Øh]”hŒ int flags”…”�”}”(hj˜Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mqhj�Øubj2)�”}”(hhh]”hÝ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj¯Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j«Øh´Mqhj¬Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j«Øh´Mqhjp×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjT×ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÑØh]”hŒ Description”…”�”}”(hjÓØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MshjT×ubhÝ)�”}”(hX%This hook performs the desired permission checks before setting the extended attributes (xattrs) on **dentry**. It is important to note that we have some additional logic before the main LSM implementation calls to detect if we need to perform an additional capability check at the LSM layer.”h]”(hŒdThis hook performs the desired permission checks before setting the extended attributes (xattrs) on ”…”�”}”(hjçØh²hh³Nh´Nubjõ)�”}”(hŒ **dentry**”h]”hŒdentry”…”�”}”(hjïØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjçØubhŒ·. It is important to note that we have some additional logic before the main LSM implementation calls to detect if we need to perform an additional capability check at the LSM layer.”…”�”}”(hjçØh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MrhjT×ubhÝ)�”}”(hXeNormally we enforce a capability check prior to executing the various LSM hook implementations, but if a LSM wants to avoid this capability check, it can register a 'inode_xattr_skipcap' hook and return a value of 1 for xattrs that it wants to avoid the capability check, leaving the LSM fully responsible for enforcing the access control for the specific xattr. If all of the enabled LSMs refrain from registering a 'inode_xattr_skipcap' hook, or return a 0 (the default return value), the capability check is still performed. If no 'inode_xattr_skipcap' hooks are registered the capability check is performed.”h]”hXqNormally we enforce a capability check prior to executing the various LSM hook implementations, but if a LSM wants to avoid this capability check, it can register a ‘inode_xattr_skipcap’ hook and return a value of 1 for xattrs that it wants to avoid the capability check, leaving the LSM fully responsible for enforcing the access control for the specific xattr. If all of the enabled LSMs refrain from registering a ‘inode_xattr_skipcap’ hook, or return a 0 (the default return value), the capability check is still performed. If no ‘inode_xattr_skipcap’ hooks are registered the capability check is performed.”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MwhjT×ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÙh]”hŒReturn”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjT×ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj/Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‚hjT×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_inode_set_acl (C function)”Œc.security_inode_set_acl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒyint security_inode_set_acl (struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name, struct posix_acl *kacl)”h]”j)�”}”(hŒxint security_inode_set_acl(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name, struct posix_acl *kacl)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj^Ùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZÙh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZÙh²hh³jlÙh´M™ubj{)�”}”(hŒsecurity_inode_set_acl”h]”j�)�”}”(hŒsecurity_inode_set_acl”h]”hŒsecurity_inode_set_acl”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{Ùubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjZÙh²hh³jlÙh´M™ubjœ)�”}”(hŒ^(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name, struct posix_acl *kacl)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj›Ùh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj—Ùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨Ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—Ùubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hj¹Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶Ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j»ÙŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�ÙsbŒc.security_inode_set_acl”†”asbuh1hhj—Ùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—Ùubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjçÙh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj—Ùubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hjôÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—Ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“Ùubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj Úh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj Úubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Úubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj+Úh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(Úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j-ÚŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÕÙŒc.security_inode_set_acl”†”asbuh1hhj Úubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIÚh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Úubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjWÚh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj Úubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjdÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“Ùubj¢)�”}”(hŒconst char *acl_name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj}Úh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjyÚubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠÚh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyÚubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj˜Úh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjyÚubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Úh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyÚubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj´Úh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjyÚubj�)�”}”(hŒacl_name”h]”hŒacl_name”…”�”}”(hjÁÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyÚubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“Ùubj¢)�”}”(hŒstruct posix_acl *kacl”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÚÚh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÖÚubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçÚh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖÚubh)�”}”(hhh]”j�)�”}”(hŒ posix_acl”h]”hŒ posix_acl”…”�”}”(hjøÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”júÚŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÕÙŒc.security_inode_set_acl”†”asbuh1hhjÖÚubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖÚubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$Ûh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÖÚubj�)�”}”(hŒkacl”h]”hŒkacl”…”�”}”(hj1Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖÚubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“Ùubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjZÙh²hh³jlÙh´M™ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjVÙh²hh³jlÙh´M™ubah}”(h]”jQÙah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jlÙh´M™hjSÙh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Check if setting posix acls is allowed”h]”hŒ&Check if setting posix acls is allowed”…”�”}”(hj[Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™hjXÛh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjSÙh²hh³jlÙh´M™ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjsÛjæjsÛjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXZ**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` file ``const char *acl_name`` acl name ``struct posix_acl *kacl`` acl struct **Description** Check permission before setting posix acls, the posix acls in **kacl** are identified by **acl_name**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj}Ûh]”hŒ Parameters”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjwÛubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hjœÛh]”hŒstruct mnt_idmap *idmap”…”�”}”(hjžÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mšhj–Ûubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hjµÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±Ûh´Mšhj²Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±Ûh´Mšhj“Ûubj)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjÕÛh]”hŒstruct dentry *dentry”…”�”}”(hj×Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M›hjÏÛubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjîÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jêÛh´M›hjëÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêÛh´M›hj“Ûubj)�”}”(hŒ"``const char *acl_name`` acl name ”h]”(j)�”}”(hŒ``const char *acl_name``”h]”j)�”}”(hjÜh]”hŒconst char *acl_name”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MœhjÜubj2)�”}”(hhh]”hÝ)�”}”(hŒacl name”h]”hŒacl name”…”�”}”(hj'Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j#Üh´Mœhj$Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#Üh´Mœhj“Ûubj)�”}”(hŒ&``struct posix_acl *kacl`` acl struct ”h]”(j)�”}”(hŒ``struct posix_acl *kacl``”h]”j)�”}”(hjGÜh]”hŒstruct posix_acl *kacl”…”�”}”(hjIÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjAÜubj2)�”}”(hhh]”hÝ)�”}”(hŒ acl struct”h]”hŒ acl struct”…”�”}”(hj`Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j\Üh´M�hj]Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjAÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j\Üh´M�hj“Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjwÛubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‚Üh]”hŒ Description”…”�”}”(hj„Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€Üubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŸhjwÛubhÝ)�”}”(hŒfCheck permission before setting posix acls, the posix acls in **kacl** are identified by **acl_name**.”h]”(hŒ>Check permission before setting posix acls, the posix acls in ”…”�”}”(hj˜Üh²hh³Nh´Nubjõ)�”}”(hŒ**kacl**”h]”hŒkacl”…”�”}”(hj Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜ÜubhŒ are identified by ”…”�”}”(hj˜Üh²hh³Nh´Nubjõ)�”}”(hŒ **acl_name**”h]”hŒacl_name”…”�”}”(hj²Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜ÜubhŒ.”…”�”}”(hj˜Üh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MžhjwÛubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÍÜh]”hŒReturn”…”�”}”(hjÏÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjËÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¡hjwÛubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjãÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¢hjwÛubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_inode_post_set_acl (C function)”Œc.security_inode_post_set_acl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒfvoid security_inode_post_set_acl (struct dentry *dentry, const char *acl_name, struct posix_acl *kacl)”h]”j)�”}”(hŒevoid security_inode_post_set_acl(struct dentry *dentry, const char *acl_name, struct posix_acl *kacl)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÝh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!Ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝh²hh³j Ýh´M®ubj{)�”}”(hŒsecurity_inode_post_set_acl”h]”j�)�”}”(hŒsecurity_inode_post_set_acl”h]”hŒsecurity_inode_post_set_acl”…”�”}”(hj3Ýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/Ýubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÝh²hh³j Ýh´M®ubjœ)�”}”(hŒE(struct dentry *dentry, const char *acl_name, struct posix_acl *kacl)”h]”(j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjOÝh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjKÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKÝubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjmÝh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”joÝŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j5ÝsbŒc.security_inode_post_set_acl”†”asbuh1hhjKÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKÝubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj›Ýh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjKÝubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj¨Ýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjGÝubj¢)�”}”(hŒconst char *acl_name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÁÝh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj½Ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½Ýubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÜÝh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½Ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½Ýubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjøÝh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj½Ýubj�)�”}”(hŒacl_name”h]”hŒacl_name”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½Ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjGÝubj¢)�”}”(hŒstruct posix_acl *kacl”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+Þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞubh)�”}”(hhh]”j�)�”}”(hŒ posix_acl”h]”hŒ posix_acl”…”�”}”(hj<Þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9Þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j>ÞŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j‰ÝŒc.security_inode_post_set_acl”†”asbuh1hhjÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZÞh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjhÞh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞubj�)�”}”(hŒkacl”h]”hŒkacl”…”�”}”(hjuÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjGÝubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÝh²hh³j Ýh´M®ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj Ýh²hh³j Ýh´M®ubah}”(h]”jÝah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j Ýh´M®hjÝh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Update inode security from posix acls set”h]”hŒ)Update inode security from posix acls set”…”�”}”(hjŸÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M®hjœÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÝh²hh³j Ýh´M®ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj·Þjæj·Þjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct dentry *dentry`` file ``const char *acl_name`` acl name ``struct posix_acl *kacl`` acl struct **Description** Update inode security data after successfully setting posix acls on **dentry**. The posix acls in **kacl** are identified by **acl_name**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÁÞh]”hŒ Parameters”…”�”}”(hjÃÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¿Þubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M²hj»Þubj )�”}”(hhh]”(j)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjàÞh]”hŒstruct dentry *dentry”…”�”}”(hjâÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¯hjÚÞubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjùÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõÞh´M¯hjöÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõÞh´M¯hj×Þubj)�”}”(hŒ"``const char *acl_name`` acl name ”h]”(j)�”}”(hŒ``const char *acl_name``”h]”j)�”}”(hjßh]”hŒconst char *acl_name”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M°hjßubj2)�”}”(hhh]”hÝ)�”}”(hŒacl name”h]”hŒacl name”…”�”}”(hj2ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.ßh´M°hj/ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.ßh´M°hj×Þubj)�”}”(hŒ&``struct posix_acl *kacl`` acl struct ”h]”(j)�”}”(hŒ``struct posix_acl *kacl``”h]”j)�”}”(hjRßh]”hŒstruct posix_acl *kacl”…”�”}”(hjTßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M±hjLßubj2)�”}”(hhh]”hÝ)�”}”(hŒ acl struct”h]”hŒ acl struct”…”�”}”(hjkßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jgßh´M±hjhßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjLßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jgßh´M±hj×Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj»ÞubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�ßh]”hŒ Description”…”�”}”(hj�ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹ßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³hj»ÞubhÝ)�”}”(hŒŠUpdate inode security data after successfully setting posix acls on **dentry**. The posix acls in **kacl** are identified by **acl_name**.”h]”(hŒDUpdate inode security data after successfully setting posix acls on ”…”�”}”(hj£ßh²hh³Nh´Nubjõ)�”}”(hŒ **dentry**”h]”hŒdentry”…”�”}”(hj«ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ßubhŒ. The posix acls in ”…”�”}”(hj£ßh²hh³Nh´Nubjõ)�”}”(hŒ**kacl**”h]”hŒkacl”…”�”}”(hj½ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ßubhŒ are identified by ”…”�”}”(hj£ßh²hh³Nh´Nubjõ)�”}”(hŒ **acl_name**”h]”hŒacl_name”…”�”}”(hjÏßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ßubhŒ.”…”�”}”(hj£ßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M²hj»Þubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_inode_get_acl (C function)”Œc.security_inode_get_acl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒaint security_inode_get_acl (struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)”h]”j)�”}”(hŒ`int security_inode_get_acl(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjàh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàh²hh³jàh´M¿ubj{)�”}”(hŒsecurity_inode_get_acl”h]”j�)�”}”(hŒsecurity_inode_get_acl”h]”hŒsecurity_inode_get_acl”…”�”}”(hj)àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%àubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjàh²hh³jàh´M¿ubjœ)�”}”(hŒF(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjEàh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjAàubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjAàubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hjcàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jeàŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j+àsbŒc.security_inode_get_acl”†”asbuh1hhjAàubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjAàubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‘àh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjAàubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hjžàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjAàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=àubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj·àh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj³àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³àubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÕàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j×àŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jàŒc.security_inode_get_acl”†”asbuh1hhj³àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³àubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj³àubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=àubj¢)�”}”(hŒconst char *acl_name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj'áh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj#áubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4áh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#áubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjBáh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj#áubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPáh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#áubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj^áh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj#áubj�)�”}”(hŒacl_name”h]”hŒacl_name”…”�”}”(hjkáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#áubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=àubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjàh²hh³jàh´M¿ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjàh²hh³jàh´M¿ubah}”(h]”jûßah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jàh´M¿hjýßh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Check if reading posix acls is allowed”h]”hŒ&Check if reading posix acls is allowed”…”�”}”(hj•áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¿hj’áh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjýßh²hh³jàh´M¿ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj­ájæj­ájç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX$**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` file ``const char *acl_name`` acl name **Description** Check permission before getting osix acls, the posix acls are identified by **acl_name**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj·áh]”hŒ Parameters”…”�”}”(hj¹áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµáubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÃhj±áubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hjÖáh]”hŒstruct mnt_idmap *idmap”…”�”}”(hjØáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔáubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÀhjÐáubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hjïáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jëáh´MÀhjìáubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÐáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jëáh´MÀhjÍáubj)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjâh]”hŒstruct dentry *dentry”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj âubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÁhj âubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj(âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j$âh´MÁhj%âubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj âubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$âh´MÁhjÍáubj)�”}”(hŒ"``const char *acl_name`` acl name ”h]”(j)�”}”(hŒ``const char *acl_name``”h]”j)�”}”(hjHâh]”hŒconst char *acl_name”…”�”}”(hjJâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFâubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÂhjBâubj2)�”}”(hhh]”hÝ)�”}”(hŒacl name”h]”hŒacl name”…”�”}”(hjaâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j]âh´MÂhj^âubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjBâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]âh´MÂhjÍáubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj±áubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjƒâh]”hŒ Description”…”�”}”(hj…âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�âubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÄhj±áubhÝ)�”}”(hŒYCheck permission before getting osix acls, the posix acls are identified by **acl_name**.”h]”(hŒLCheck permission before getting osix acls, the posix acls are identified by ”…”�”}”(hj™âh²hh³Nh´Nubjõ)�”}”(hŒ **acl_name**”h]”hŒacl_name”…”�”}”(hj¡âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™âubhŒ.”…”�”}”(hj™âh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÃhj±áubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¼âh]”hŒReturn”…”�”}”(hj¾âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjºâubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÆhj±áubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjÒâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÇhj±áubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_inode_remove_acl (C function)”Œc.security_inode_remove_acl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒdint security_inode_remove_acl (struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)”h]”j)�”}”(hŒcint security_inode_remove_acl(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjýâh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjýâh²hh³jãh´MÒubj{)�”}”(hŒsecurity_inode_remove_acl”h]”j�)�”}”(hŒsecurity_inode_remove_acl”h]”hŒsecurity_inode_remove_acl”…”�”}”(hj"ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjãubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjýâh²hh³jãh´MÒubjœ)�”}”(hŒF(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj>ãh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj:ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:ãubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hj\ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j^ãŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j$ãsbŒc.security_inode_remove_acl”†”asbuh1hhj:ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:ãubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŠãh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj:ãubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hj—ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6ãubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj°ãh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¬ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬ãubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÎãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÐãŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jxãŒc.security_inode_remove_acl”†”asbuh1hhj¬ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬ãubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjúãh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¬ãubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6ãubj¢)�”}”(hŒconst char *acl_name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj äh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-äh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj;äh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIäh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjWäh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjäubj�)�”}”(hŒacl_name”h]”hŒacl_name”…”�”}”(hjdäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6ãubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjýâh²hh³jãh´MÒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjùâh²hh³jãh´MÒubah}”(h]”jôâah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jãh´MÒhjöâh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if removing a posix acl is allowed”h]”hŒ(Check if removing a posix acl is allowed”…”�”}”(hjŽäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÒhj‹äh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjöâh²hh³jãh´MÒubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¦äjæj¦äjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX&**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` file ``const char *acl_name`` acl name **Description** Check permission before removing posix acls, the posix acls are identified by **acl_name**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj°äh]”hŒ Parameters”…”�”}”(hj²äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®äubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÖhjªäubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hjÏäh]”hŒstruct mnt_idmap *idmap”…”�”}”(hjÑäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓhjÉäubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hjèäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jääh´MÓhjåäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÉäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jääh´MÓhjÆäubj)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjåh]”hŒstruct dentry *dentry”…”�”}”(hj åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔhjåubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj!åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jåh´MÔhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jåh´MÔhjÆäubj)�”}”(hŒ"``const char *acl_name`` acl name ”h]”(j)�”}”(hŒ``const char *acl_name``”h]”j)�”}”(hjAåh]”hŒconst char *acl_name”…”�”}”(hjCåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?åubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÕhj;åubj2)�”}”(hhh]”hÝ)�”}”(hŒacl name”h]”hŒacl name”…”�”}”(hjZåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jVåh´MÕhjWåubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj;åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jVåh´MÕhjÆäubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjªäubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj|åh]”hŒ Description”…”�”}”(hj~åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjzåubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M×hjªäubhÝ)�”}”(hŒ[Check permission before removing posix acls, the posix acls are identified by **acl_name**.”h]”(hŒNCheck permission before removing posix acls, the posix acls are identified by ”…”�”}”(hj’åh²hh³Nh´Nubjõ)�”}”(hŒ **acl_name**”h]”hŒacl_name”…”�”}”(hjšåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj’åubhŒ.”…”�”}”(hj’åh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÖhjªäubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjµåh]”hŒReturn”…”�”}”(hj·åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj³åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÙhjªäubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjËåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÚhjªäubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ+security_inode_post_remove_acl (C function)”Œ c.security_inode_post_remove_acl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒjvoid security_inode_post_remove_acl (struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)”h]”j)�”}”(hŒivoid security_inode_post_remove_acl(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjúåh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjöåh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Måubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöåh²hh³jæh´Måubj{)�”}”(hŒsecurity_inode_post_remove_acl”h]”j�)�”}”(hŒsecurity_inode_post_remove_acl”h]”hŒsecurity_inode_post_remove_acl”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjöåh²hh³jæh´Måubjœ)�”}”(hŒF(struct mnt_idmap *idmap, struct dentry *dentry, const char *acl_name)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj7æh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj3æubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDæh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3æubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hjUæh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jWæŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jæsbŒ c.security_inode_post_remove_acl”†”asbuh1hhj3æubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuæh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3æubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒæh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj3æubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hj�æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3æubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/æubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj©æh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¥æubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥æubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÇæh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄæubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÉæŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jqæŒ c.security_inode_post_remove_acl”†”asbuh1hhj¥æubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåæh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥æubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjóæh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¥æubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥æubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/æubj¢)�”}”(hŒconst char *acl_name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjçubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&çh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj4çh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjçubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBçh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjPçh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjçubj�)�”}”(hŒacl_name”h]”hŒacl_name”…”�”}”(hj]çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/æubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjöåh²hh³jæh´Måubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjòåh²hh³jæh´Måubah}”(h]”jíåah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jæh´Måhjïåh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Update inode security after rm posix acls”h]”hŒ)Update inode security after rm posix acls”…”�”}”(hj‡çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Måhj„çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjïåh²hh³jæh´Måubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŸçjæjŸçjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX&**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` file ``const char *acl_name`` acl name **Description** Update inode security data after successfully removing posix acls on **dentry** in **idmap**. The posix acls are identified by **acl_name**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj©çh]”hŒ Parameters”…”�”}”(hj«çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Méhj£çubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hjÈçh]”hŒstruct mnt_idmap *idmap”…”�”}”(hjÊçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆçubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MæhjÂçubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hjáçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝçh´MæhjÞçubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝçh´Mæhj¿çubj)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjèh]”hŒstruct dentry *dentry”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿçubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mçhjûçubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèh´Mçhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèh´Mçhj¿çubj)�”}”(hŒ"``const char *acl_name`` acl name ”h]”(j)�”}”(hŒ``const char *acl_name``”h]”j)�”}”(hj:èh]”hŒconst char *acl_name”…”�”}”(hj<èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8èubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mèhj4èubj2)�”}”(hhh]”hÝ)�”}”(hŒacl name”h]”hŒacl name”…”�”}”(hjSèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jOèh´MèhjPèubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4èubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jOèh´Mèhj¿çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj£çubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjuèh]”hŒ Description”…”�”}”(hjwèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsèubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mêhj£çubhÝ)�”}”(hŒŒUpdate inode security data after successfully removing posix acls on **dentry** in **idmap**. The posix acls are identified by **acl_name**.”h]”(hŒEUpdate inode security data after successfully removing posix acls on ”…”�”}”(hj‹èh²hh³Nh´Nubjõ)�”}”(hŒ **dentry**”h]”hŒdentry”…”�”}”(hj“èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹èubhŒ in ”…”�”}”(hj‹èh²hh³Nh´Nubjõ)�”}”(hŒ **idmap**”h]”hŒidmap”…”�”}”(hj¥èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹èubhŒ#. The posix acls are identified by ”…”�”}”(hj‹èh²hh³Nh´Nubjõ)�”}”(hŒ **acl_name**”h]”hŒacl_name”…”�”}”(hj·èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹èubhŒ.”…”�”}”(hj‹èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Méhj£çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_inode_post_setxattr (C function)”Œc.security_inode_post_setxattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvvoid security_inode_post_setxattr (struct dentry *dentry, const char *name, const void *value, size_t size, int flags)”h]”j)�”}”(hŒuvoid security_inode_post_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjðèh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjìèh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Möubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìèh²hh³jþèh´Möubj{)�”}”(hŒsecurity_inode_post_setxattr”h]”j�)�”}”(hŒsecurity_inode_post_setxattr”h]”hŒsecurity_inode_post_setxattr”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj éubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjìèh²hh³jþèh´Möubjœ)�”}”(hŒT(struct dentry *dentry, const char *name, const void *value, size_t size, int flags)”h]”(j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj-éh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)éubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjKéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jMéŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jésbŒc.security_inode_post_setxattr”†”asbuh1hhj)éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)éubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjyéh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj)éubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj†éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%éubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjŸéh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj›éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›éubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjºéh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›éubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÖéh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj›éubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjãéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%éubj¢)�”}”(hŒconst void *value”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjüéh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjøéubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøéubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjøéubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøéubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj3êh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjøéubj�)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hj@êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjøéubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%éubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj\êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYêubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j^êŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jgéŒc.security_inode_post_setxattr”†”asbuh1hhjUêubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUêubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjˆêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjUêubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%éubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¡êh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�êubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�êubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj½êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%éubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjìèh²hh³jþèh´Möubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjèèh²hh³jþèh´Möubah}”(h]”jãèah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jþèh´Möhjåèh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Update the inode after a setxattr operation”h]”hŒ+Update the inode after a setxattr operation”…”�”}”(hjçêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Möhjäêh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjåèh²hh³jþèh´Möubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÿêjæjÿêjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct dentry *dentry`` file ``const char *name`` xattr name ``const void *value`` xattr value ``size_t size`` xattr value size ``int flags`` flags **Description** Update inode security field after successful setxattr operation.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj ëh]”hŒ Parameters”…”�”}”(hj ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Múhjëubj )�”}”(hhh]”(j)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj(ëh]”hŒstruct dentry *dentry”…”�”}”(hj*ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M÷hj"ëubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjAëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j=ëh´M÷hj>ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj"ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j=ëh´M÷hjëubj)�”}”(hŒ ``const char *name`` xattr name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjaëh]”hŒconst char *name”…”�”}”(hjcëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj_ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Møhj[ëubj2)�”}”(hhh]”hÝ)�”}”(hŒ xattr name”h]”hŒ xattr name”…”�”}”(hjzëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jvëh´Møhjwëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj[ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jvëh´Møhjëubj)�”}”(hŒ"``const void *value`` xattr value ”h]”(j)�”}”(hŒ``const void *value``”h]”j)�”}”(hjšëh]”hŒconst void *value”…”�”}”(hjœëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mùhj”ëubj2)�”}”(hhh]”hÝ)�”}”(hŒ xattr value”h]”hŒ xattr value”…”�”}”(hj³ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¯ëh´Mùhj°ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj”ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¯ëh´Mùhjëubj)�”}”(hŒ!``size_t size`` xattr value size ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjÓëh]”hŒ size_t size”…”�”}”(hjÕëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MúhjÍëubj2)�”}”(hhh]”hÝ)�”}”(hŒxattr value size”h]”hŒxattr value size”…”�”}”(hjìëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèëh´Múhjéëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèëh´Múhjëubj)�”}”(hŒ``int flags`` flags ”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hj ìh]”hŒ int flags”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mûhjìubj2)�”}”(hhh]”hÝ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj%ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!ìh´Mûhj"ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!ìh´Mûhjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjëubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjGìh]”hŒ Description”…”�”}”(hjIìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MýhjëubhÝ)�”}”(hŒ@Update inode security field after successful setxattr operation.”h]”hŒ@Update inode security field after successful setxattr operation.”…”�”}”(hj]ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mühjëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_inode_getxattr (C function)”Œc.security_inode_getxattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEint security_inode_getxattr (struct dentry *dentry, const char *name)”h]”j)�”}”(hŒDint security_inode_getxattr(struct dentry *dentry, const char *name)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŒìh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjˆìh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆìh²hh³jšìh´Mubj{)�”}”(hŒsecurity_inode_getxattr”h]”j�)�”}”(hŒsecurity_inode_getxattr”h]”hŒsecurity_inode_getxattr”…”�”}”(hj­ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©ìubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjˆìh²hh³jšìh´Mubjœ)�”}”(hŒ)(struct dentry *dentry, const char *name)”h]”(j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÉìh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÅìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅìubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjçìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jéìŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¯ìsbŒc.security_inode_getxattr”†”asbuh1hhjÅìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅìubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÅìubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj"íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁìubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj;íh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj7íubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7íubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjVíh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj7íubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7íubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjríh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj7íubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁìubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjˆìh²hh³jšìh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj„ìh²hh³jšìh´Mubah}”(h]”jìah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jšìh´Mhj�ìh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ Check if xattr access is allowed”h]”hŒ Check if xattr access is allowed”…”�”}”(hj©íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj¦íh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�ìh²hh³jšìh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÁíjæjÁíjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ÷**Parameters** ``struct dentry *dentry`` file ``const char *name`` xattr name **Description** Check permission before obtaining the extended attributes identified by **name** for **dentry**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjËíh]”hŒ Parameters”…”�”}”(hjÍíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÉíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÅíubj )�”}”(hhh]”(j)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjêíh]”hŒstruct dentry *dentry”…”�”}”(hjìíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèíubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjäíubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÿíh´M hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjäíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÿíh´M hjáíubj)�”}”(hŒ ``const char *name`` xattr name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hj#îh]”hŒconst char *name”…”�”}”(hj%îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!îubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjîubj2)�”}”(hhh]”hÝ)�”}”(hŒ xattr name”h]”hŒ xattr name”…”�”}”(hj<îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j8îh´M hj9îubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8îh´M hjáíubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÅíubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj^îh]”hŒ Description”…”�”}”(hj`îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÅíubhÝ)�”}”(hŒ`Check permission before obtaining the extended attributes identified by **name** for **dentry**.”h]”(hŒHCheck permission before obtaining the extended attributes identified by ”…”�”}”(hjtîh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hj|îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtîubhŒ for ”…”�”}”(hjtîh²hh³Nh´Nubjõ)�”}”(hŒ **dentry**”h]”hŒdentry”…”�”}”(hjŽîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtîubhŒ.”…”�”}”(hjtîh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÅíubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj©îh]”hŒReturn”…”�”}”(hj«îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÅíubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj¿îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÅíubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_inode_listxattr (C function)”Œc.security_inode_listxattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4int security_inode_listxattr (struct dentry *dentry)”h]”j)�”}”(hŒ3int security_inode_listxattr(struct dentry *dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjîîh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjêîh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”• h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýîh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêîh²hh³jüîh´Mubj{)�”}”(hŒsecurity_inode_listxattr”h]”j�)�”}”(hŒsecurity_inode_listxattr”h]”hŒsecurity_inode_listxattr”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ïubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjêîh²hh³jüîh´Mubjœ)�”}”(hŒ(struct dentry *dentry)”h]”j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj+ïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj'ïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'ïubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjIïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jKïŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jïsbŒc.security_inode_listxattr”†”asbuh1hhj'ïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'ïubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjwïh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj'ïubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj„ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj#ïubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjêîh²hh³jüîh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjæîh²hh³jüîh´Mubah}”(h]”jáîah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jüîh´Mhjãîh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Check if listing xattrs is allowed”h]”hŒ"Check if listing xattrs is allowed”…”�”}”(hj®ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj«ïh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjãîh²hh³jüîh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÆïjæjÆïjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÊ**Parameters** ``struct dentry *dentry`` file **Description** Check permission before obtaining the list of extended attribute names for **dentry**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÐïh]”hŒ Parameters”…”�”}”(hjÒïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÊïubj )�”}”(hhh]”j)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjïïh]”hŒstruct dentry *dentry”…”�”}”(hjñïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjéïubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jðh´Mhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjéïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðh´Mhjæïubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÊïubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj*ðh]”hŒ Description”…”�”}”(hj,ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÊïubhÝ)�”}”(hŒVCheck permission before obtaining the list of extended attribute names for **dentry**.”h]”(hŒKCheck permission before obtaining the list of extended attribute names for ”…”�”}”(hj@ðh²hh³Nh´Nubjõ)�”}”(hŒ **dentry**”h]”hŒdentry”…”�”}”(hjHðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj@ðubhŒ.”…”�”}”(hj@ðh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÊïubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjcðh]”hŒReturn”…”�”}”(hjeðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÊïubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjyðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÊïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_inode_removexattr (C function)”Œc.security_inode_removexattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒaint security_inode_removexattr (struct mnt_idmap *idmap, struct dentry *dentry, const char *name)”h]”j)�”}”(hŒ`int security_inode_removexattr(struct mnt_idmap *idmap, struct dentry *dentry, const char *name)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¨ðh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤ðh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤ðh²hh³j¶ðh´M)ubj{)�”}”(hŒsecurity_inode_removexattr”h]”j�)�”}”(hŒsecurity_inode_removexattr”h]”hŒsecurity_inode_removexattr”…”�”}”(hjÉðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅðubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¤ðh²hh³j¶ðh´M)ubjœ)�”}”(hŒB(struct mnt_idmap *idmap, struct dentry *dentry, const char *name)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjåðh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjáðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáðubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jñŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jËðsbŒc.security_inode_removexattr”†”asbuh1hhjáðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáðubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj1ñh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjáðubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hj>ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝðubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjWñh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjSñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSñubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjuñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjrñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jwñŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jñŒc.security_inode_removexattr”†”asbuh1hhjSñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSñubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¡ñh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjSñubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj®ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝðubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÇñh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÃñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃñubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjâñh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÃñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃñubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjþñh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÃñubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÃñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝðubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¤ðh²hh³j¶ðh´M)ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj ðh²hh³j¶ðh´M)ubah}”(h]”j›ðah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¶ðh´M)hj�ðh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Check if removing an xattr is allowed”h]”hŒ%Check if removing an xattr is allowed”…”�”}”(hj5òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M)hj2òh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�ðh²hh³j¶ðh´M)ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjMòjæjMòjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXU**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` file ``const char *name`` xattr name **Description** This hook performs the desired permission checks before setting the extended attributes (xattrs) on **dentry**. It is important to note that we have some additional logic before the main LSM implementation calls to detect if we need to perform an additional capability check at the LSM layer. Normally we enforce a capability check prior to executing the various LSM hook implementations, but if a LSM wants to avoid this capability check, it can register a 'inode_xattr_skipcap' hook and return a value of 1 for xattrs that it wants to avoid the capability check, leaving the LSM fully responsible for enforcing the access control for the specific xattr. If all of the enabled LSMs refrain from registering a 'inode_xattr_skipcap' hook, or return a 0 (the default return value), the capability check is still performed. If no 'inode_xattr_skipcap' hooks are registered the capability check is performed. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjWòh]”hŒ Parameters”…”�”}”(hjYòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjUòubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M-hjQòubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hjvòh]”hŒstruct mnt_idmap *idmap”…”�”}”(hjxòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtòubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M*hjpòubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hj�òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‹òh´M*hjŒòubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjpòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹òh´M*hjmòubj)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj¯òh]”hŒstruct dentry *dentry”…”�”}”(hj±òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­òubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hj©òubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÈòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄòh´M+hjÅòubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj©òubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄòh´M+hjmòubj)�”}”(hŒ ``const char *name`` xattr name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjèòh]”hŒconst char *name”…”�”}”(hjêòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjæòubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M,hjâòubj2)�”}”(hhh]”hÝ)�”}”(hŒ xattr name”h]”hŒ xattr name”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jýòh´M,hjþòubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjâòubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jýòh´M,hjmòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjQòubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj#óh]”hŒ Description”…”�”}”(hj%óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!óubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M.hjQòubhÝ)�”}”(hX%This hook performs the desired permission checks before setting the extended attributes (xattrs) on **dentry**. It is important to note that we have some additional logic before the main LSM implementation calls to detect if we need to perform an additional capability check at the LSM layer.”h]”(hŒdThis hook performs the desired permission checks before setting the extended attributes (xattrs) on ”…”�”}”(hj9óh²hh³Nh´Nubjõ)�”}”(hŒ **dentry**”h]”hŒdentry”…”�”}”(hjAóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj9óubhŒ·. It is important to note that we have some additional logic before the main LSM implementation calls to detect if we need to perform an additional capability check at the LSM layer.”…”�”}”(hj9óh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M-hjQòubhÝ)�”}”(hXeNormally we enforce a capability check prior to executing the various LSM hook implementations, but if a LSM wants to avoid this capability check, it can register a 'inode_xattr_skipcap' hook and return a value of 1 for xattrs that it wants to avoid the capability check, leaving the LSM fully responsible for enforcing the access control for the specific xattr. If all of the enabled LSMs refrain from registering a 'inode_xattr_skipcap' hook, or return a 0 (the default return value), the capability check is still performed. If no 'inode_xattr_skipcap' hooks are registered the capability check is performed.”h]”hXqNormally we enforce a capability check prior to executing the various LSM hook implementations, but if a LSM wants to avoid this capability check, it can register a ‘inode_xattr_skipcap’ hook and return a value of 1 for xattrs that it wants to avoid the capability check, leaving the LSM fully responsible for enforcing the access control for the specific xattr. If all of the enabled LSMs refrain from registering a ‘inode_xattr_skipcap’ hook, or return a 0 (the default return value), the capability check is still performed. If no ‘inode_xattr_skipcap’ hooks are registered the capability check is performed.”…”�”}”(hjZóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M2hjQòubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjkóh]”hŒReturn”…”�”}”(hjmóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjióubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M<hjQòubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj�óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M=hjQòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,security_inode_post_removexattr (C function)”Œ!c.security_inode_post_removexattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNvoid security_inode_post_removexattr (struct dentry *dentry, const char *name)”h]”j)�”}”(hŒMvoid security_inode_post_removexattr(struct dentry *dentry, const char *name)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj°óh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¬óh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬óh²hh³j¾óh´MRubj{)�”}”(hŒsecurity_inode_post_removexattr”h]”j�)�”}”(hŒsecurity_inode_post_removexattr”h]”hŒsecurity_inode_post_removexattr”…”�”}”(hjÑóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍóubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¬óh²hh³j¾óh´MRubjœ)�”}”(hŒ)(struct dentry *dentry, const char *name)”h]”(j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjíóh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjéóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéóubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ôŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÓósbŒ!c.security_inode_post_removexattr”†”asbuh1hhjéóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéóubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj9ôh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjéóubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjFôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjåóubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj_ôh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj[ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[ôubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjzôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj[ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[ôubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj–ôh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj[ôubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj£ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjåóubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¬óh²hh³j¾óh´MRubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¨óh²hh³j¾óh´MRubah}”(h]”j£óah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¾óh´MRhj¥óh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Update the inode after a removexattr op”h]”hŒ'Update the inode after a removexattr op”…”�”}”(hjÍôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MRhjÊôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¥óh²hh³j¾óh´MRubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjåôjæjåôjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ **Parameters** ``struct dentry *dentry`` file ``const char *name`` xattr name **Description** Update the inode after a successful removexattr operation.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjïôh]”hŒ Parameters”…”�”}”(hjñôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjíôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MVhjéôubj )�”}”(hhh]”(j)�”}”(hŒ``struct dentry *dentry`` file ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjõh]”hŒstruct dentry *dentry”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MShjõubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj'õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j#õh´MShj$õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#õh´MShjõubj)�”}”(hŒ ``const char *name`` xattr name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjGõh]”hŒconst char *name”…”�”}”(hjIõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjEõubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MThjAõubj2)�”}”(hhh]”hÝ)�”}”(hŒ xattr name”h]”hŒ xattr name”…”�”}”(hj`õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j\õh´MThj]õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjAõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j\õh´MThjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjéôubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‚õh]”hŒ Description”…”�”}”(hj„õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€õubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MVhjéôubhÝ)�”}”(hŒ:Update the inode after a successful removexattr operation.”h]”hŒ:Update the inode after a successful removexattr operation.”…”�”}”(hj˜õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MUhjéôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_inode_file_setattr (C function)”Œc.security_inode_file_setattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNint security_inode_file_setattr (struct dentry *dentry, struct file_kattr *fa)”h]”j)�”}”(hŒMint security_inode_file_setattr(struct dentry *dentry, struct file_kattr *fa)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÇõh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÃõh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃõh²hh³jÕõh´M`ubj{)�”}”(hŒsecurity_inode_file_setattr”h]”j�)�”}”(hŒsecurity_inode_file_setattr”h]”hŒsecurity_inode_file_setattr”…”�”}”(hjèõh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäõubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÃõh²hh³jÕõh´M`ubjœ)�”}”(hŒ.(struct dentry *dentry, struct file_kattr *fa)”h]”(j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjöubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj"öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j$öŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jêõsbŒc.security_inode_file_setattr”†”asbuh1hhjöubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBöh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjöubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjPöh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjöubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj]öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjüõubj¢)�”}”(hŒstruct file_kattr *fa”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjvöh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjröubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒöh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjröubh)�”}”(hhh]”j�)�”}”(hŒ file_kattr”h]”hŒ file_kattr”…”�”}”(hj”öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘öubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j–öŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j>öŒc.security_inode_file_setattr”†”asbuh1hhjröubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²öh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjröubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÀöh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjröubj�)�”}”(hŒfa”h]”hŒfa”…”�”}”(hjÍöh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjröubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjüõubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÃõh²hh³jÕõh´M`ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¿õh²hh³jÕõh´M`ubah}”(h]”jºõah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÕõh´M`hj¼õh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#check if setting fsxattr is allowed”h]”hŒ#check if setting fsxattr is allowed”…”�”}”(hj÷öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M`hjôöh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¼õh²hh³jÕõh´M`ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj÷jæj÷jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX4**Parameters** ``struct dentry *dentry`` file to set filesystem extended attributes on ``struct file_kattr *fa`` extended attributes to set on the inode **Description** Called when file_setattr() syscall or FS_IOC_FSSETXATTR ioctl() is called on inode **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj÷h]”hŒ Parameters”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mdhj÷ubj )�”}”(hhh]”(j)�”}”(hŒH``struct dentry *dentry`` file to set filesystem extended attributes on ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj8÷h]”hŒstruct dentry *dentry”…”�”}”(hj:÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mahj2÷ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-file to set filesystem extended attributes on”h]”hŒ-file to set filesystem extended attributes on”…”�”}”(hjQ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jM÷h´MahjN÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jM÷h´Mahj/÷ubj)�”}”(hŒB``struct file_kattr *fa`` extended attributes to set on the inode ”h]”(j)�”}”(hŒ``struct file_kattr *fa``”h]”j)�”}”(hjq÷h]”hŒstruct file_kattr *fa”…”�”}”(hjs÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mbhjk÷ubj2)�”}”(hhh]”hÝ)�”}”(hŒ'extended attributes to set on the inode”h]”hŒ'extended attributes to set on the inode”…”�”}”(hjŠ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†÷h´Mbhj‡÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjk÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†÷h´Mbhj/÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj÷ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¬÷h]”hŒ Description”…”�”}”(hj®÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjª÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mdhj÷ubhÝ)�”}”(hŒRCalled when file_setattr() syscall or FS_IOC_FSSETXATTR ioctl() is called on inode”h]”hŒRCalled when file_setattr() syscall or FS_IOC_FSSETXATTR ioctl() is called on inode”…”�”}”(hjÂ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mchj÷ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÓ÷h]”hŒReturn”…”�”}”(hjÕ÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑ÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mfhj÷ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjé÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mghj÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_inode_file_getattr (C function)”Œc.security_inode_file_getattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNint security_inode_file_getattr (struct dentry *dentry, struct file_kattr *fa)”h]”j)�”}”(hŒMint security_inode_file_getattr(struct dentry *dentry, struct file_kattr *fa)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjøh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Moubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøh²hh³j&øh´Moubj{)�”}”(hŒsecurity_inode_file_getattr”h]”j�)�”}”(hŒsecurity_inode_file_getattr”h]”hŒsecurity_inode_file_getattr”…”�”}”(hj9øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5øubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjøh²hh³j&øh´Moubjœ)�”}”(hŒ.(struct dentry *dentry, struct file_kattr *fa)”h]”(j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjUøh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjQøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbøh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQøubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjsøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjpøubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”juøŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j;øsbŒc.security_inode_file_getattr”†”asbuh1hhjQøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQøubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¡øh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjQøubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj®øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjMøubj¢)�”}”(hŒstruct file_kattr *fa”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÇøh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÃøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔøh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃøubh)�”}”(hhh]”j�)�”}”(hŒ file_kattr”h]”hŒ file_kattr”…”�”}”(hjåøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâøubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jçøŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j�øŒc.security_inode_file_getattr”†”asbuh1hhjÃøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃøubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÃøubj�)�”}”(hŒfa”h]”hŒfa”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÃøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjMøubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjøh²hh³j&øh´Moubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjøh²hh³j&øh´Moubah}”(h]”j øah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j&øh´Mohj øh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&check if retrieving fsxattr is allowed”h]”hŒ&check if retrieving fsxattr is allowed”…”�”}”(hjHùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MohjEùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj øh²hh³j&øh´Moubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj`ùjæj`ùjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX.**Parameters** ``struct dentry *dentry`` file to retrieve filesystem extended attributes from ``struct file_kattr *fa`` extended attributes to get **Description** Called when file_getattr() syscall or FS_IOC_FSGETXATTR ioctl() is called on inode **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjjùh]”hŒ Parameters”…”�”}”(hjlùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mshjdùubj )�”}”(hhh]”(j)�”}”(hŒO``struct dentry *dentry`` file to retrieve filesystem extended attributes from ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj‰ùh]”hŒstruct dentry *dentry”…”�”}”(hj‹ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mphjƒùubj2)�”}”(hhh]”hÝ)�”}”(hŒ4file to retrieve filesystem extended attributes from”h]”hŒ4file to retrieve filesystem extended attributes from”…”�”}”(hj¢ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jžùh´MphjŸùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjƒùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jžùh´Mphj€ùubj)�”}”(hŒ5``struct file_kattr *fa`` extended attributes to get ”h]”(j)�”}”(hŒ``struct file_kattr *fa``”h]”j)�”}”(hjÂùh]”hŒstruct file_kattr *fa”…”�”}”(hjÄùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mqhj¼ùubj2)�”}”(hhh]”hÝ)�”}”(hŒextended attributes to get”h]”hŒextended attributes to get”…”�”}”(hjÛùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j×ùh´MqhjØùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¼ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j×ùh´Mqhj€ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjdùubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjýùh]”hŒ Description”…”�”}”(hjÿùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjûùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MshjdùubhÝ)�”}”(hŒRCalled when file_getattr() syscall or FS_IOC_FSGETXATTR ioctl() is called on inode”h]”hŒRCalled when file_getattr() syscall or FS_IOC_FSGETXATTR ioctl() is called on inode”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MrhjdùubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj$úh]”hŒReturn”…”�”}”(hj&úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MuhjdùubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj:úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mvhjdùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_inode_need_killpriv (C function)”Œc.security_inode_need_killpriv”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int security_inode_need_killpriv (struct dentry *dentry)”h]”j)�”}”(hŒ7int security_inode_need_killpriv(struct dentry *dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjiúh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjeúh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M~ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeúh²hh³jwúh´M~ubj{)�”}”(hŒsecurity_inode_need_killpriv”h]”j�)�”}”(hŒsecurity_inode_need_killpriv”h]”hŒsecurity_inode_need_killpriv”…”�”}”(hjŠúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†úubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjeúh²hh³jwúh´M~ubjœ)�”}”(hŒ(struct dentry *dentry)”h]”j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¦úh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¢úubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³úh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢úubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÄúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁúubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÆúŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŒúsbŒc.security_inode_need_killpriv”†”asbuh1hhj¢úubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢úubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjòúh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¢úubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÿúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjžúubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjeúh²hh³jwúh´M~ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjaúh²hh³jwúh´M~ubah}”(h]”j\úah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jwúh´M~hj^úh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if security_inode_killpriv() required”h]”hŒ+Check if security_inode_killpriv() required”…”�”}”(hj)ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M~hj&ûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj^úh²hh³jwúh´M~ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjAûjæjAûjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXw**Parameters** ``struct dentry *dentry`` associated dentry **Description** Called when an inode has been changed to determine if security_inode_killpriv() should be called. **Return** Return <0 on error to abort the inode change operation, return 0 if security_inode_killpriv() does not need to be called, return >0 if security_inode_killpriv() does need to be called.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjKûh]”hŒ Parameters”…”�”}”(hjMûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjIûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‚hjEûubj )�”}”(hhh]”j)�”}”(hŒ,``struct dentry *dentry`` associated dentry ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hjjûh]”hŒstruct dentry *dentry”…”�”}”(hjlûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhûubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjdûubj2)�”}”(hhh]”hÝ)�”}”(hŒassociated dentry”h]”hŒassociated dentry”…”�”}”(hjƒûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jûh´Mhj€ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjdûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jûh´Mhjaûubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjEûubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¥ûh]”hŒ Description”…”�”}”(hj§ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjEûubhÝ)�”}”(hŒaCalled when an inode has been changed to determine if security_inode_killpriv() should be called.”h]”hŒaCalled when an inode has been changed to determine if security_inode_killpriv() should be called.”…”�”}”(hj»ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M€hjEûubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÌûh]”hŒReturn”…”�”}”(hjÎûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MƒhjEûubhÝ)�”}”(hŒ¸Return <0 on error to abort the inode change operation, return 0 if security_inode_killpriv() does not need to be called, return >0 if security_inode_killpriv() does need to be called.”h]”hŒ¸Return <0 on error to abort the inode change operation, return 0 if security_inode_killpriv() does not need to be called, return >0 if security_inode_killpriv() does need to be called.”…”�”}”(hjâûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„hjEûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_inode_killpriv (C function)”Œc.security_inode_killpriv”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLint security_inode_killpriv (struct mnt_idmap *idmap, struct dentry *dentry)”h]”j)�”}”(hŒKint security_inode_killpriv(struct mnt_idmap *idmap, struct dentry *dentry)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj üh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj üh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj üh²hh³jüh´MŽubj{)�”}”(hŒsecurity_inode_killpriv”h]”j�)�”}”(hŒsecurity_inode_killpriv”h]”hŒsecurity_inode_killpriv”…”�”}”(hj2üh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.üubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj üh²hh³jüh´MŽubjœ)�”}”(hŒ0(struct mnt_idmap *idmap, struct dentry *dentry)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjNüh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJüubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[üh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJüubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hjlüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jnüŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j4üsbŒc.security_inode_killpriv”†”asbuh1hhjJüubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJüubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjšüh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjJüubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hj§üh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJüubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjFüubj¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÀüh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¼üubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼üubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÞüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛüubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jàüŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jˆüŒc.security_inode_killpriv”†”asbuh1hhj¼üubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼üubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ýh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¼üubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼üubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjFüubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj üh²hh³jüh´MŽubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj üh²hh³jüh´MŽubah}”(h]”jüah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jüh´MŽhjüh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+The setuid bit is removed, update LSM state”h]”hŒ+The setuid bit is removed, update LSM state”…”�”}”(hjAýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŽhj>ýh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjüh²hh³jüh´MŽubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjYýjæjYýjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXq**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct dentry *dentry`` associated dentry **Description** The **dentry**'s setuid bit is being removed. Remove similar security labels. Called with the dentry->d_inode->i_mutex held. **Return** Return 0 on success. If error is returned, then the operation causing setuid bit removal is failed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjcýh]”hŒ Parameters”…”�”}”(hjeýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M’hj]ýubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hj‚ýh]”hŒstruct mnt_idmap *idmap”…”�”}”(hj„ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hj|ýubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hj›ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j—ýh´M�hj˜ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—ýh´M�hjyýubj)�”}”(hŒ,``struct dentry *dentry`` associated dentry ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj»ýh]”hŒstruct dentry *dentry”…”�”}”(hj½ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjµýubj2)�”}”(hhh]”hÝ)�”}”(hŒassociated dentry”h]”hŒassociated dentry”…”�”}”(hjÔýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÐýh´M�hjÑýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÐýh´M�hjyýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj]ýubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjöýh]”hŒ Description”…”�”}”(hjøýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjôýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M’hj]ýubhÝ)�”}”(hŒ}The **dentry**'s setuid bit is being removed. Remove similar security labels. Called with the dentry->d_inode->i_mutex held.”h]”(hŒThe ”…”�”}”(hj þh²hh³Nh´Nubjõ)�”}”(hŒ **dentry**”h]”hŒdentry”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj þubhŒq’s setuid bit is being removed. Remove similar security labels. Called with the dentry->d_inode->i_mutex held.”…”�”}”(hj þh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‘hj]ýubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj/þh]”hŒReturn”…”�”}”(hj1þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-þubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”hj]ýubhÝ)�”}”(hŒdReturn 0 on success. If error is returned, then the operation causing setuid bit removal is failed.”h]”hŒdReturn 0 on success. If error is returned, then the operation causing setuid bit removal is failed.”…”�”}”(hjEþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M•hj]ýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_inode_getsecurity (C function)”Œc.security_inode_getsecurity”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒzint security_inode_getsecurity (struct mnt_idmap *idmap, struct inode *inode, const char *name, void **buffer, bool alloc)”h]”j)�”}”(hŒyint security_inode_getsecurity(struct mnt_idmap *idmap, struct inode *inode, const char *name, void **buffer, bool alloc)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjtþh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjpþh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpþh²hh³j‚þh´MŸubj{)�”}”(hŒsecurity_inode_getsecurity”h]”j�)�”}”(hŒsecurity_inode_getsecurity”h]”hŒsecurity_inode_getsecurity”…”�”}”(hj•þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘þubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjpþh²hh³j‚þh´MŸubjœ)�”}”(hŒ[(struct mnt_idmap *idmap, struct inode *inode, const char *name, void **buffer, bool alloc)”h]”(j¢)�”}”(hŒstruct mnt_idmap *idmap”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj±þh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj­þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­þubh)�”}”(hhh]”j�)�”}”(hŒ mnt_idmap”h]”hŒ mnt_idmap”…”�”}”(hjÏþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÑþŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j—þsbŒc.security_inode_getsecurity”†”asbuh1hhj­þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­þubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjýþh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj­þubj�)�”}”(hŒidmap”h]”hŒidmap”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©þubj¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj#ÿh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjAÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>ÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jCÿŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jëþŒc.security_inode_getsecurity”†”asbuh1hhjÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjmÿh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÿubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjzÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©þubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj“ÿh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ÿubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj®ÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ÿubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÊÿh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ÿubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj×ÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©þubj¢)�”}”(hŒ void **buffer”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjðÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjìÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìÿubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjìÿubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjìÿubj�)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©þubj¢)�”}”(hŒ bool alloc”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;ubj�)�”}”(hŒalloc”h]”hŒalloc”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©þubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjpþh²hh³j‚þh´MŸubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjlþh²hh³j‚þh´MŸubah}”(h]”jgþah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‚þh´MŸhjiþh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Get the xattr security label of an inode”h]”hŒ(Get the xattr security label of an inode”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŸhj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjiþh²hh³j‚þh´MŸubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjœjæjœjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXh**Parameters** ``struct mnt_idmap *idmap`` idmap of the mount ``struct inode *inode`` inode ``const char *name`` xattr name ``void **buffer`` security label buffer ``bool alloc`` allocation flag **Description** Retrieve a copy of the extended attribute representation of the security label associated with **name** for **inode** via **buffer**. Note that **name** is the remainder of the attribute name after the security prefix has been removed. **alloc** is used to specify if the call should return a value via the buffer or just the value length. **Return** Returns size of buffer on success.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¦h]”hŒ Parameters”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M£hj ubj )�”}”(hhh]”(j)�”}”(hŒ/``struct mnt_idmap *idmap`` idmap of the mount ”h]”(j)�”}”(hŒ``struct mnt_idmap *idmap``”h]”j)�”}”(hjÅh]”hŒstruct mnt_idmap *idmap”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒidmap of the mount”h]”hŒidmap of the mount”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÚh´M hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚh´M hj¼ubj)�”}”(hŒ``struct inode *inode`` inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hjþh]”hŒstruct inode *inode”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¡hjøubj2)�”}”(hhh]”hÝ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M¡hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M¡hj¼ubj)�”}”(hŒ ``const char *name`` xattr name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hj7h]”hŒconst char *name”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¢hj1ubj2)�”}”(hhh]”hÝ)�”}”(hŒ xattr name”h]”hŒ xattr name”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jLh´M¢hjMubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jLh´M¢hj¼ubj)�”}”(hŒ(``void **buffer`` security label buffer ”h]”(j)�”}”(hŒ``void **buffer``”h]”j)�”}”(hjph]”hŒ void **buffer”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M£hjjubj2)�”}”(hhh]”hÝ)�”}”(hŒsecurity label buffer”h]”hŒsecurity label buffer”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j…h´M£hj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…h´M£hj¼ubj)�”}”(hŒ``bool alloc`` allocation flag ”h]”(j)�”}”(hŒ``bool alloc``”h]”j)�”}”(hj©h]”hŒ bool alloc”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¤hj£ubj2)�”}”(hhh]”hÝ)�”}”(hŒallocation flag”h]”hŒallocation flag”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¾h´M¤hj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾h´M¤hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjäh]”hŒ Description”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¦hj ubhÝ)�”}”(hXTRetrieve a copy of the extended attribute representation of the security label associated with **name** for **inode** via **buffer**. Note that **name** is the remainder of the attribute name after the security prefix has been removed. **alloc** is used to specify if the call should return a value via the buffer or just the value length.”h]”(hŒ_Retrieve a copy of the extended attribute representation of the security label associated with ”…”�”}”(hjúh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúubhŒ for ”…”�”}”(hjúh²hh³Nh´Nubjõ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúubhŒ via ”…”�”}”(hjúh²hh³Nh´Nubjõ)�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúubhŒ . Note that ”…”�”}”(hjúh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúubhŒT is the remainder of the attribute name after the security prefix has been removed. ”…”�”}”(hjúh²hh³Nh´Nubjõ)�”}”(hŒ **alloc**”h]”hŒalloc”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúubhŒ^ is used to specify if the call should return a value via the buffer or just the value length.”…”�”}”(hjúh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¥hj ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjeh]”hŒReturn”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M«hj ubhÝ)�”}”(hŒ"Returns size of buffer on success.”h]”hŒ"Returns size of buffer on success.”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¬hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_inode_setsecurity (C function)”Œc.security_inode_setsecurity”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒqint security_inode_setsecurity (struct inode *inode, const char *name, const void *value, size_t size, int flags)”h]”j)�”}”(hŒpint security_inode_setsecurity(struct inode *inode, const char *name, const void *value, size_t size, int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¦h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦h²hh³j¸h´Mºubj{)�”}”(hŒsecurity_inode_setsecurity”h]”j�)�”}”(hŒsecurity_inode_setsecurity”h]”hŒsecurity_inode_setsecurity”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¦h²hh³j¸h´Mºubjœ)�”}”(hŒR(struct inode *inode, const char *name, const void *value, size_t size, int flags)”h]”(j¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjãubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÍsbŒc.security_inode_setsecurity”†”asbuh1hhjãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjãubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjãubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjUubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßubj¢)�”}”(hŒconst void *value”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj²ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj²ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj²ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj²ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj²ubj�)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j!Œc.security_inode_setsecurity”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjWubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¦h²hh³j¸h´Mºubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¢h²hh³j¸h´Mºubah}”(h]”j�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¸h´MºhjŸh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Set the xattr security label of an inode”h]”hŒ(Set the xattr security label of an inode”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mºhjžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŸh²hh³j¸h´Mºubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¹jæj¹jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX0**Parameters** ``struct inode *inode`` inode ``const char *name`` xattr name ``const void *value`` security label ``size_t size`` length of security label ``int flags`` flags **Description** Set the security label associated with **name** for **inode** from the extended attribute value **value**. **size** indicates the size of the **value** in bytes. **flags** may be XATTR_CREATE, XATTR_REPLACE, or 0. Note that **name** is the remainder of the attribute name after the security. prefix has been removed. **Return** Returns 0 on success.”•h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÃh]”hŒ Parameters”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¾hj½ubj )�”}”(hhh]”(j)�”}”(hŒ``struct inode *inode`` inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hjâh]”hŒstruct inode *inode”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M»hjÜubj2)�”}”(hhh]”hÝ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷h´M»hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷h´M»hjÙubj)�”}”(hŒ ``const char *name`` xattr name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjh]”hŒconst char *name”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¼hjubj2)�”}”(hhh]”hÝ)�”}”(hŒ xattr name”h]”hŒ xattr name”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0h´M¼hj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0h´M¼hjÙubj)�”}”(hŒ%``const void *value`` security label ”h]”(j)�”}”(hŒ``const void *value``”h]”j)�”}”(hjTh]”hŒconst void *value”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½hjNubj2)�”}”(hhh]”hÝ)�”}”(hŒsecurity label”h]”hŒsecurity label”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jih´M½hjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jih´M½hjÙubj)�”}”(hŒ)``size_t size`` length of security label ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hj�h]”hŒ size_t size”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¾hj‡ubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of security label”h]”hŒlength of security label”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¢h´M¾hj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¢h´M¾hjÙubj)�”}”(hŒ``int flags`` flags ”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hjÆh]”hŒ int flags”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¿hjÀubj2)�”}”(hhh]”hÝ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÛh´M¿hjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛh´M¿hjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj½ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÁhj½ubhÝ)�”}”(hX=Set the security label associated with **name** for **inode** from the extended attribute value **value**. **size** indicates the size of the **value** in bytes. **flags** may be XATTR_CREATE, XATTR_REPLACE, or 0. Note that **name** is the remainder of the attribute name after the security. prefix has been removed.”h]”(hŒ'Set the security label associated with ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ for ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ# from the extended attribute value ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ. ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ indicates the size of the ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ in bytes. ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ5 may be XATTR_CREATE, XATTR_REPLACE, or 0. Note that ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒT is the remainder of the attribute name after the security. prefix has been removed.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÀhj½ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¦h]”hŒReturn”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÅhj½ubhÝ)�”}”(hŒReturns 0 on success.”h]”hŒReturns 0 on success.”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÆhj½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_inode_getlsmprop (C function)”Œc.security_inode_getlsmprop”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒKvoid security_inode_getlsmprop (struct inode *inode, struct lsm_prop *prop)”h]”j)�”}”(hŒJvoid security_inode_getlsmprop(struct inode *inode, struct lsm_prop *prop)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjçh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Méubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçh²hh³jùh´Méubj{)�”}”(hŒsecurity_inode_getlsmprop”h]”j�)�”}”(hŒsecurity_inode_getlsmprop”h]”hŒsecurity_inode_getlsmprop”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjçh²hh³jùh´Méubjœ)�”}”(hŒ,(struct inode *inode, struct lsm_prop *prop)”h]”(j¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jHŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jsbŒc.security_inode_getlsmprop”†”asbuh1hhj$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj$ubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubj¢)�”}”(hŒstruct lsm_prop *prop”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–ubh)�”}”(hhh]”j�)�”}”(hŒlsm_prop”h]”hŒlsm_prop”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jºŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jbŒc.security_inode_getlsmprop”†”asbuh1hhj–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj–ubj�)�”}”(hŒprop”h]”hŒprop”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjçh²hh³jùh´Méubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjãh²hh³jùh´Méubah}”(h]”jÞah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jùh´Méhjàh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒGet an inode's LSM data”h]”hŒGet an inode’s LSM data”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Méhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjàh²hh³jùh´Méubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj3jæj3jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¼**Parameters** ``struct inode *inode`` inode ``struct lsm_prop *prop`` lsm specific information to return **Description** Get the lsm specific information associated with the node.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj=h]”hŒ Parameters”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Míhj7ubj )�”}”(hhh]”(j)�”}”(hŒ``struct inode *inode`` inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hj\h]”hŒstruct inode *inode”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MêhjVubj2)�”}”(hhh]”hÝ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jqh´Mêhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqh´MêhjSubj)�”}”(hŒ=``struct lsm_prop *prop`` lsm specific information to return ”h]”(j)�”}”(hŒ``struct lsm_prop *prop``”h]”j)�”}”(hj•h]”hŒstruct lsm_prop *prop”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mëhj�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"lsm specific information to return”h]”hŒ"lsm specific information to return”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jªh´Mëhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªh´MëhjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj7ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÐh]”hŒ Description”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Míhj7ubhÝ)�”}”(hŒ:Get the lsm specific information associated with the node.”h]”hŒ:Get the lsm specific information associated with the node.”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mìhj7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*security_kernfs_init_security (C function)”Œc.security_kernfs_init_security”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒVint security_kernfs_init_security (struct kernfs_node *kn_dir, struct kernfs_node *kn)”h]”j)�”}”(hŒUint security_kernfs_init_security(struct kernfs_node *kn_dir, struct kernfs_node *kn)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4 ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj h²hh³j# h´M4 ubj{)�”}”(hŒsecurity_kernfs_init_security”h]”j�)�”}”(hŒsecurity_kernfs_init_security”h]”hŒsecurity_kernfs_init_security”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2 ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj h²hh³j# h´M4 ubjœ)�”}”(hŒ4(struct kernfs_node *kn_dir, struct kernfs_node *kn)”h]”(j¢)�”}”(hŒstruct kernfs_node *kn_dir”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjR h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjN ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjN ubh)�”}”(hhh]”j�)�”}”(hŒ kernfs_node”h]”hŒ kernfs_node”…”�”}”(hjp h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjm ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jr Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j8 sbŒc.security_kernfs_init_security”†”asbuh1hhjN ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjN ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjN ubj�)�”}”(hŒkn_dir”h]”hŒkn_dir”…”�”}”(hj« h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjJ ubj¢)�”}”(hŒstruct kernfs_node *kn”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÀ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀ ubh)�”}”(hhh]”j�)�”}”(hŒ kernfs_node”h]”hŒ kernfs_node”…”�”}”(hjâ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjß ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jä Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒ Œc.security_kernfs_init_security”†”asbuh1hhjÀ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÀ ubj�)�”}”(hŒkn”h]”hŒkn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjJ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj h²hh³j# h´M4 ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj h²hh³j# h´M4 ubah}”(h]”j ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j# h´M4 hj h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Init LSM context for a kernfs node”h]”hŒ"Init LSM context for a kernfs node”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4 hjB h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj h²hh³j# h´M4 ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj] jæj] jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX/**Parameters** ``struct kernfs_node *kn_dir`` parent kernfs node ``struct kernfs_node *kn`` the kernfs node to initialize **Description** Initialize the security context of a newly created kernfs node based on its own and its parent's attributes. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjg h]”hŒ Parameters”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhje ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8 hja ubj )�”}”(hhh]”(j)�”}”(hŒ2``struct kernfs_node *kn_dir`` parent kernfs node ”h]”(j)�”}”(hŒ``struct kernfs_node *kn_dir``”h]”j)�”}”(hj† h]”hŒstruct kernfs_node *kn_dir”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M5 hj€ ubj2)�”}”(hhh]”hÝ)�”}”(hŒparent kernfs node”h]”hŒparent kernfs node”…”�”}”(hjŸ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j› h´M5 hjœ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j› h´M5 hj} ubj)�”}”(hŒ9``struct kernfs_node *kn`` the kernfs node to initialize ”h]”(j)�”}”(hŒ``struct kernfs_node *kn``”h]”j)�”}”(hj¿ h]”hŒstruct kernfs_node *kn”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M6 hj¹ ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe kernfs node to initialize”h]”hŒthe kernfs node to initialize”…”�”}”(hjØ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔ h´M6 hjÕ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔ h´M6 hj} ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hja ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjú h]”hŒ Description”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjø ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8 hja ubhÝ)�”}”(hŒlInitialize the security context of a newly created kernfs node based on its own and its parent's attributes.”h]”hŒnInitialize the security context of a newly created kernfs node based on its own and its parent’s attributes.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M7 hja ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj! h]”hŒReturn”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M: hja ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj7 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M; hja ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_file_permission (C function)”Œc.security_file_permission”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:int security_file_permission (struct file *file, int mask)”h]”j)�”}”(hŒ9int security_file_permission(struct file *file, int mask)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjb h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MD ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjb h²hh³jt h´MD ubj{)�”}”(hŒsecurity_file_permission”h]”j�)�”}”(hŒsecurity_file_permission”h]”hŒsecurity_file_permission”…”�”}”(hj‡ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjb h²hh³jt h´MD ubjœ)�”}”(hŒ(struct file *file, int mask)”h]”(j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj£ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjŸ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŸ ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÁ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jà Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‰ sbŒc.security_file_permission”†”asbuh1hhjŸ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŸ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjŸ ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjü h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj› ubj¢)�”}”(hŒint mask”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj# h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj�)�”}”(hŒmask”h]”hŒmask”…”�”}”(hj1 h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj› ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjb h²hh³jt h´MD ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj^ h²hh³jt h´MD ubah}”(h]”jY ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jt h´MD hj[ h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCheck file permissions”h]”hŒCheck file permissions”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MD hjX h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj[ h²hh³jt h´MD ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjs jæjs jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX�**Parameters** ``struct file *file`` file ``int mask`` requested permissions **Description** Check file permissions before accessing an open file. This hook is called by various operations that read or write files. A security module can use this hook to perform additional checking on these operations, e.g. to revalidate permissions on use to support privilege bracketing or policy changes. Notice that this hook is used when the actual read/write operations are performed, whereas the inode_security_ops hook is called when a file is opened (as well as many other operations). Although this hook can be used to revalidate permissions for various system call operations that read or write files, it does not address the revalidation of permissions for memory-mapped files. Security modules must handle this separately if they need such revalidation. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj} h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MH hjw ubj )�”}”(hhh]”(j)�”}”(hŒ``struct file *file`` file ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hjœ h]”hŒstruct file *file”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjš ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´ME hj– ubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j± h´ME hj² ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj– ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j± h´ME hj“ ubj)�”}”(hŒ#``int mask`` requested permissions ”h]”(j)�”}”(hŒ ``int mask``”h]”j)�”}”(hjÕ h]”hŒint mask”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MF hjÏ ubj2)�”}”(hhh]”hÝ)�”}”(hŒrequested permissions”h]”hŒrequested permissions”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jê h´MF hjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jê h´MF hj“ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjw ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj h]”hŒ Description”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MH hjw ubhÝ)�”}”(hXúCheck file permissions before accessing an open file. This hook is called by various operations that read or write files. A security module can use this hook to perform additional checking on these operations, e.g. to revalidate permissions on use to support privilege bracketing or policy changes. Notice that this hook is used when the actual read/write operations are performed, whereas the inode_security_ops hook is called when a file is opened (as well as many other operations). Although this hook can be used to revalidate permissions for various system call operations that read or write files, it does not address the revalidation of permissions for memory-mapped files. Security modules must handle this separately if they need such revalidation.”h]”hXúCheck file permissions before accessing an open file. This hook is called by various operations that read or write files. A security module can use this hook to perform additional checking on these operations, e.g. to revalidate permissions on use to support privilege bracketing or policy changes. Notice that this hook is used when the actual read/write operations are performed, whereas the inode_security_ops hook is called when a file is opened (as well as many other operations). Although this hook can be used to revalidate permissions for various system call operations that read or write files, it does not address the revalidation of permissions for memory-mapped files. Security modules must handle this separately if they need such revalidation.”…”�”}”(hj& h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MG hjw ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj7 h]”hŒReturn”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5 ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MS hjw ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MT hjw ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_file_alloc (C function)”Œc.security_file_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+int security_file_alloc (struct file *file)”h]”j)�”}”(hŒ*int security_file_alloc(struct file *file)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj| h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjx h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M\ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjx h²hh³jŠ h´M\ ubj{)�”}”(hŒsecurity_file_alloc”h]”j�)�”}”(hŒsecurity_file_alloc”h]”hŒsecurity_file_alloc”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™ ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjx h²hh³jŠ h´M\ ubjœ)�”}”(hŒ(struct file *file)”h]”j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjµ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµ ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÙ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŸ sbŒc.security_file_alloc”†”asbuh1hhjµ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµ ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj± ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjx h²hh³jŠ h´M\ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjt h²hh³jŠ h´M\ ubah}”(h]”jo ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŠ h´M\ hjq h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Allocate and init a file's LSM blob”h]”hŒ%Allocate and init a file’s LSM blob”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M\ hj9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjq h²hh³jŠ h´M\ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjTjæjTjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX%**Parameters** ``struct file *file`` the file **Description** Allocate and attach a security structure to the file->f_security field. The security field is initialized to NULL when the structure is first created. **Return** Return 0 if the hook is successful and permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj^h]”hŒ Parameters”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M` hjXubj )�”}”(hhh]”j)�”}”(hŒ``struct file *file`` the file ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hj}h]”hŒstruct file *file”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M] hjwubj2)�”}”(hhh]”hÝ)�”}”(hŒthe file”h]”hŒthe file”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j’h´M] hj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j’h´M] hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjXubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¸h]”hŒ Description”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_ hjXubhÝ)�”}”(hŒ—Allocate and attach a security structure to the file->f_security field. The security field is initialized to NULL when the structure is first created.”h]”hŒ—Allocate and attach a security structure to the file->f_security field. The security field is initialized to NULL when the structure is first created.”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M^ hjXubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjßh]”hŒReturn”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ma hjXubhÝ)�”}”(hŒ=Return 0 if the hook is successful and permission is granted.”h]”hŒ=Return 0 if the hook is successful and permission is granted.”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mb hjXubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_file_release (C function)”Œc.security_file_release”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void security_file_release (struct file *file)”h]”j)�”}”(hŒ-void security_file_release(struct file *file)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mq ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj h²hh³j2h´Mq ubj{)�”}”(hŒsecurity_file_release”h]”j�)�”}”(hŒsecurity_file_release”h]”hŒsecurity_file_release”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjAubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj h²hh³j2h´Mq ubjœ)�”}”(hŒ(struct file *file)”h]”j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jGsbŒc.security_file_release”†”asbuh1hhj]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj]ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjYubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj h²hh³j2h´Mq ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³j2h´Mq ubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j2h´Mq hjh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Perform actions before releasing the file ref”h]”hŒ-Perform actions before releasing the file ref”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mq hjáh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³j2h´Mq ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjüjæjüjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ�**Parameters** ``struct file *file`` the file **Description** Perform actions before releasing the last reference to a file.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mu hjubj )�”}”(hhh]”j)�”}”(hŒ``struct file *file`` the file ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hj%h]”hŒstruct file *file”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mr hjubj2)�”}”(hhh]”hÝ)�”}”(hŒthe file”h]”hŒthe file”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:h´Mr hj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:h´Mr hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj`h]”hŒ Description”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mt hjubhÝ)�”}”(hŒ>Perform actions before releasing the last reference to a file.”h]”hŒ>Perform actions before releasing the last reference to a file.”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ms hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_file_free (C function)”Œc.security_file_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+void security_file_free (struct file *file)”h]”j)�”}”(hŒ*void security_file_free(struct file *file)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¡h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M| ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡h²hh³j³h´M| ubj{)�”}”(hŒsecurity_file_free”h]”j�)�”}”(hŒsecurity_file_free”h]”hŒsecurity_file_free”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¡h²hh³j³h´M| ubjœ)�”}”(hŒ(struct file *file)”h]”j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÈsbŒc.security_file_free”†”asbuh1hhjÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÚubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¡h²hh³j³h´M| ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�h²hh³j³h´M| ubah}”(h]”j˜ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j³h´M| hjšh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a file's LSM blob”h]”hŒFree a file’s LSM blob”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M| hjbh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjšh²hh³j³h´M| ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj}jæj}jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒŠ**Parameters** ``struct file *file`` the file **Description** Deallocate and free any security structures stored in file->f_security.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‡h]”hŒ Parameters”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M€ hj�ubj )�”}”(hhh]”j)�”}”(hŒ``struct file *file`` the file ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hj¦h]”hŒstruct file *file”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M} hj ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe file”h]”hŒthe file”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»h´M} hj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»h´M} hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjáh]”hŒ Description”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj�ubhÝ)�”}”(hŒGDeallocate and free any security structures stored in file->f_security.”h]”hŒGDeallocate and free any security structures stored in file->f_security.”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M~ hj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_backing_file_alloc (C function)”Œc.security_backing_file_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒYint security_backing_file_alloc (struct file *backing_file, const struct file *user_file)”h]”j)�”}”(hŒXint security_backing_file_alloc(struct file *backing_file, const struct file *user_file)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj"h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj"h²hh³j4h´M� ubj{)�”}”(hŒsecurity_backing_file_alloc”h]”j�)�”}”(hŒsecurity_backing_file_alloc”h]”hŒsecurity_backing_file_alloc”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj"h²hh³j4h´M� ubjœ)�”}”(hŒ9(struct file *backing_file, const struct file *user_file)”h]”(j¢)�”}”(hŒstruct file *backing_file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jƒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jIsbŒc.security_backing_file_alloc”†”asbuh1hhj_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj_ubj�)�”}”(hŒ backing_file”h]”hŒ backing_file”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj[ubj¢)�”}”(hŒconst struct file *user_file”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÑubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÑubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j�Œc.security_backing_file_alloc”†”asbuh1hhjÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÑubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÑubj�)�”}”(hŒ user_file”h]”hŒ user_file”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj[ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj"h²hh³j4h´M� ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³j4h´M� ubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j4h´M� hjh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Allocate and setup a backing file blob”h]”hŒ&Allocate and setup a backing file blob”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hjnh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³j4h´M� ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‰jæj‰jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXè**Parameters** ``struct file *backing_file`` the backing file ``const struct file *user_file`` the associated user visible file **Description** Allocate a backing file LSM blob and perform any necessary initialization of the LSM blob. There will be some operations where the LSM will not have access to **user_file** after this point, so any important state associated with **user_file** that is important to the LSM should be captured in the backing file's LSM blob. LSM's should avoid taking a reference to **user_file** in this hook as it will result in problems later when the system attempts to drop/put the file references due to a circular dependency. **Return** Return 0 if the hook is successful, negative values otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj“h]”hŒ Parameters”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M“ hj�ubj )�”}”(hhh]”(j)�”}”(hŒ/``struct file *backing_file`` the backing file ”h]”(j)�”}”(hŒ``struct file *backing_file``”h]”j)�”}”(hj²h]”hŒstruct file *backing_file”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hj¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe backing file”h]”hŒthe backing file”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇh´M� hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇh´M� hj©ubj)�”}”(hŒB``const struct file *user_file`` the associated user visible file ”h]”(j)�”}”(hŒ ``const struct file *user_file``”h]”j)�”}”(hjëh]”hŒconst struct file *user_file”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‘ hjåubj2)�”}”(hhh]”hÝ)�”}”(hŒ the associated user visible file”h]”hŒ the associated user visible file”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M‘ hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M‘ hj©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj&h]”hŒ Description”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M“ hj�ubhÝ)�”}”(hXDAllocate a backing file LSM blob and perform any necessary initialization of the LSM blob. There will be some operations where the LSM will not have access to **user_file** after this point, so any important state associated with **user_file** that is important to the LSM should be captured in the backing file's LSM blob.”h]”(hŒ Allocate a backing file LSM blob and perform any necessary initialization of the LSM blob. There will be some operations where the LSM will not have access to ”…”�”}”(hj<h²hh³Nh´Nubjõ)�”}”(hŒ **user_file**”h]”hŒ user_file”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj<ubhŒ: after this point, so any important state associated with ”…”�”}”(hj<h²hh³Nh´Nubjõ)�”}”(hŒ **user_file**”h]”hŒ user_file”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj<ubhŒR that is important to the LSM should be captured in the backing file’s LSM blob.”…”�”}”(hj<h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M’ hj�ubhÝ)�”}”(hŒ¾LSM's should avoid taking a reference to **user_file** in this hook as it will result in problems later when the system attempts to drop/put the file references due to a circular dependency.”h]”(hŒ+LSM’s should avoid taking a reference to ”…”�”}”(hjoh²hh³Nh´Nubjõ)�”}”(hŒ **user_file**”h]”hŒ user_file”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjoubhŒˆ in this hook as it will result in problems later when the system attempts to drop/put the file references due to a circular dependency.”…”�”}”(hjoh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜ hj�ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj’h]”hŒReturn”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mœ hj�ubhÝ)�”}”(hŒ>Return 0 if the hook is successful, negative values otherwise.”h]”hŒ>Return 0 if the hook is successful, negative values otherwise.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_backing_file_free (C function)”Œc.security_backing_file_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;void security_backing_file_free (struct file *backing_file)”h]”j)�”}”(hŒ:void security_backing_file_free(struct file *backing_file)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÓh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¯ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÓh²hh³jåh´M¯ ubj{)�”}”(hŒsecurity_backing_file_free”h]”j�)�”}”(hŒsecurity_backing_file_free”h]”hŒsecurity_backing_file_free”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÓh²hh³jåh´M¯ ubjœ)�”}”(hŒ(struct file *backing_file)”h]”j¢)�”}”(hŒstruct file *backing_file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY júsbŒc.security_backing_file_free”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒ backing_file”h]”hŒ backing_file”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÓh²hh³jåh´M¯ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÏh²hh³jåh´M¯ ubah}”(h]”jÊah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jåh´M¯ hjÌh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a backing file blob”h]”hŒFree a backing file blob”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¯ hj”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÌh²hh³jåh´M¯ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¯jæj¯jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒª**Parameters** ``struct file *backing_file`` the backing file **Description** Free any LSM state associate with a backing file's LSM blob, including the blob itself.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¹h]”hŒ Parameters”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³ hj³ubj )�”}”(hhh]”j)�”}”(hŒ/``struct file *backing_file`` the backing file ”h]”(j)�”}”(hŒ``struct file *backing_file``”h]”j)�”}”(hjØh]”hŒstruct file *backing_file”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M° hjÒubj2)�”}”(hhh]”hÝ)�”}”(hŒthe backing file”h]”hŒthe backing file”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jíh´M° hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jíh´M° hjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj³ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M² hj³ubhÝ)�”}”(hŒWFree any LSM state associate with a backing file's LSM blob, including the blob itself.”h]”hŒYFree any LSM state associate with a backing file’s LSM blob, including the blob itself.”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M± hj³ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_mmap_file (C function)”Œc.security_mmap_file”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒSint security_mmap_file (struct file *file, unsigned long prot, unsigned long flags)”h]”j)�”}”(hŒRint security_mmap_file(struct file *file, unsigned long prot, unsigned long flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjTh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTh²hh³jfh´M ubj{)�”}”(hŒsecurity_mmap_file”h]”j�)�”}”(hŒsecurity_mmap_file”h]”hŒsecurity_mmap_file”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjTh²hh³jfh´M ubjœ)�”}”(hŒ<(struct file *file, unsigned long prot, unsigned long flags)”h]”(j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jµŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j{sbŒc.security_mmap_file”†”asbuh1hhj‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‘ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubj¢)�”}”(hŒunsigned long prot”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒprot”h]”hŒprot”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubj¢)�”}”(hŒunsigned long flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjTh²hh³jfh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjPh²hh³jfh´M ubah}”(h]”jKah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jfh´M hjMh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Check if mmap'ing a file is allowed”h]”hŒ%Check if mmap’ing a file is allowed”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjMh²hh³jfh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÒjæjÒjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX0**Parameters** ``struct file *file`` file ``unsigned long prot`` protection applied by the kernel ``unsigned long flags`` flags **Description** Check permissions for a mmap operation. The **file** may be NULL, e.g. if mapping anonymous memory. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÜh]”hŒ Parameters”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÖubj )�”}”(hhh]”(j)�”}”(hŒ``struct file *file`` file ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hjûh]”hŒstruct file *file”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjõubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M hjòubj)�”}”(hŒ8``unsigned long prot`` protection applied by the kernel ”h]”(j)�”}”(hŒ``unsigned long prot``”h]”j)�”}”(hj4h]”hŒunsigned long prot”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj.ubj2)�”}”(hhh]”hÝ)�”}”(hŒ protection applied by the kernel”h]”hŒ protection applied by the kernel”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jIh´M hjJubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIh´M hjòubj)�”}”(hŒ``unsigned long flags`` flags ”h]”(j)�”}”(hŒ``unsigned long flags``”h]”j)�”}”(hjmh]”hŒunsigned long flags”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjgubj2)�”}”(hhh]”hÝ)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚h´M hjƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚h´M hjòubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¨h]”hŒ Description”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÖubhÝ)�”}”(hŒdCheck permissions for a mmap operation. The **file** may be NULL, e.g. if mapping anonymous memory.”h]”(hŒ-Check permissions for a mmap operation. The ”…”�”}”(hj¾h²hh³Nh´Nubjõ)�”}”(hŒ**file**”h]”hŒfile”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾ubhŒ/ may be NULL, e.g. if mapping anonymous memory.”…”�”}”(hj¾h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÖubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjáh]”hŒReturn”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÖubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÖubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_mmap_addr (C function)”Œc.security_mmap_addr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+int security_mmap_addr (unsigned long addr)”h]”j)�”}”(hŒ*int security_mmap_addr(unsigned long addr)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj"h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4 ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj"h²hh³j4h´M4 ubj{)�”}”(hŒsecurity_mmap_addr”h]”j�)�”}”(hŒsecurity_mmap_addr”h]”hŒsecurity_mmap_addr”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj"h²hh³j4h´M4 ubjœ)�”}”(hŒ(unsigned long addr)”h]”j¢)�”}”(hŒunsigned long addr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_ubj�)�”}”(hŒaddr”h]”hŒaddr”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj[ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj"h²hh³j4h´M4 ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³j4h´M4 ubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j4h´M4 hjh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Check if mmap'ing an address is allowed”h]”hŒ)Check if mmap’ing an address is allowed”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4 hjÂh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³j4h´M4 ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÝjæjÝjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ§**Parameters** ``unsigned long addr`` address **Description** Check permissions for a mmap operation at **addr**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjçh]”hŒ Parameters”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8 hjáubj )�”}”(hhh]”j)�”}”(hŒ``unsigned long addr`` address ”h]”(j)�”}”(hŒ``unsigned long addr``”h]”j)�”}”(hjh]”hŒunsigned long addr”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M5 hjubj2)�”}”(hhh]”hÝ)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M5 hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M5 hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjáubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjAh]”hŒ Description”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1•0jôhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M7 hjáubhÝ)�”}”(hŒ3Check permissions for a mmap operation at **addr**.”h]”(hŒ*Check permissions for a mmap operation at ”…”�”}”(hjWh²hh³Nh´Nubjõ)�”}”(hŒ**addr**”h]”hŒaddr”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjWubhŒ.”…”�”}”(hjWh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M6 hjáubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjzh]”hŒReturn”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8 hjáubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M9 hjáubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_file_mprotect (C function)”Œc.security_file_mprotect”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒbint security_file_mprotect (struct vm_area_struct *vma, unsigned long reqprot, unsigned long prot)”h]”j)�”}”(hŒaint security_file_mprotect(struct vm_area_struct *vma, unsigned long reqprot, unsigned long prot)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj»h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MA ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»h²hh³jÍh´MA ubj{)�”}”(hŒsecurity_file_mprotect”h]”j�)�”}”(hŒsecurity_file_mprotect”h]”hŒsecurity_file_mprotect”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj»h²hh³jÍh´MA ubjœ)�”}”(hŒG(struct vm_area_struct *vma, unsigned long reqprot, unsigned long prot)”h]”(j¢)�”}”(hŒstruct vm_area_struct *vma”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøubh)�”}”(hhh]”j�)�”}”(hŒvm_area_struct”h]”hŒvm_area_struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jâsbŒc.security_file_mprotect”†”asbuh1hhjøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjøubj�)�”}”(hŒvma”h]”hŒvma”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjôubj¢)�”}”(hŒunsigned long reqprot”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjubj�)�”}”(hŒreqprot”h]”hŒreqprot”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjôubj¢)�”}”(hŒunsigned long prot”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»ubj�)�”}”(hŒprot”h]”hŒprot”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjôubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj»h²hh³jÍh´MA ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj·h²hh³jÍh´MA ubah}”(h]”j²ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÍh´MA hj´h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/Check if changing memory protections is allowed”h]”hŒ/Check if changing memory protections is allowed”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MA hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj´h²hh³jÍh´MA ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj9jæj9jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX7**Parameters** ``struct vm_area_struct *vma`` memory region ``unsigned long reqprot`` application requested protection ``unsigned long prot`` protection applied by the kernel **Description** Check permissions before changing memory access permissions. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjCh]”hŒ Parameters”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´ME hj=ubj )�”}”(hhh]”(j)�”}”(hŒ-``struct vm_area_struct *vma`` memory region ”h]”(j)�”}”(hŒ``struct vm_area_struct *vma``”h]”j)�”}”(hjbh]”hŒstruct vm_area_struct *vma”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MB hj\ubj2)�”}”(hhh]”hÝ)�”}”(hŒ memory region”h]”hŒ memory region”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jwh´MB hjxubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jwh´MB hjYubj)�”}”(hŒ;``unsigned long reqprot`` application requested protection ”h]”(j)�”}”(hŒ``unsigned long reqprot``”h]”j)�”}”(hj›h]”hŒunsigned long reqprot”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MC hj•ubj2)�”}”(hhh]”hÝ)�”}”(hŒ application requested protection”h]”hŒ application requested protection”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j°h´MC hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j°h´MC hjYubj)�”}”(hŒ8``unsigned long prot`` protection applied by the kernel ”h]”(j)�”}”(hŒ``unsigned long prot``”h]”j)�”}”(hjÔh]”hŒunsigned long prot”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MD hjÎubj2)�”}”(hhh]”hÝ)�”}”(hŒ protection applied by the kernel”h]”hŒ protection applied by the kernel”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jéh´MD hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jéh´MD hjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj=ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MF hj=ubhÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjwh²hh³j‰h´MQ ubj{)�”}”(hŒsecurity_file_lock”h]”j�)�”}”(hŒsecurity_file_lock”h]”hŒsecurity_file_lock”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjwh²hh³j‰h´MQ ubjœ)�”}”(hŒ%(struct file *file, unsigned int cmd)”h]”(j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj´ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jØŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jžsbŒc.security_file_lock”†”asbuh1hhj´ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj´ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj°ubj¢)�”}”(hŒunsigned int cmd”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&ubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj°ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjwh²hh³j‰h´MQ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjsh²hh³j‰h´MQ ubah}”(h]”jnah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‰h´MQ hjph²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCheck if a file lock is allowed”h]”hŒCheck if a file lock is allowed”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MQ hj‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjph²hh³j‰h´MQ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¤jæj¤jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX$**Parameters** ``struct file *file`` file ``unsigned int cmd`` lock operation (e.g. F_RDLCK, F_WRLCK) **Description** Check permission before performing file locking operations. Note the hook mediates both flock and fcntl style locks. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj®h]”hŒ Parameters”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MU hj¨ubj )�”}”(hhh]”(j)�”}”(hŒ``struct file *file`` file ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hjÍh]”hŒstruct file *file”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MR hjÇubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jâh´MR hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâh´MR hjÄubj)�”}”(hŒ<``unsigned int cmd`` lock operation (e.g. F_RDLCK, F_WRLCK) ”h]”(j)�”}”(hŒ``unsigned int cmd``”h]”j)�”}”(hjh]”hŒunsigned int cmd”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MS hjubj2)�”}”(hhh]”hÝ)�”}”(hŒ&lock operation (e.g. F_RDLCK, F_WRLCK)”h]”hŒ&lock operation (e.g. F_RDLCK, F_WRLCK)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´MS hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´MS hjÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¨ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjAh]”hŒ Description”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MU hj¨ubhÝ)�”}”(hŒuCheck permission before performing file locking operations. Note the hook mediates both flock and fcntl style locks.”h]”hŒuCheck permission before performing file locking operations. Note the hook mediates both flock and fcntl style locks.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MT hj¨ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjhh]”hŒReturn”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MW hj¨ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MX hj¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_file_fcntl (C function)”Œc.security_file_fcntl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPint security_file_fcntl (struct file *file, unsigned int cmd, unsigned long arg)”h]”j)�”}”(hŒOint security_file_fcntl(struct file *file, unsigned int cmd, unsigned long arg)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj©h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M` ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©h²hh³j»h´M` ubj{)�”}”(hŒsecurity_file_fcntl”h]”j�)�”}”(hŒsecurity_file_fcntl”h]”hŒsecurity_file_fcntl”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj©h²hh³j»h´M` ubjœ)�”}”(hŒ8(struct file *file, unsigned int cmd, unsigned long arg)”h]”(j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÐsbŒc.security_file_fcntl”†”asbuh1hhjæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj6 h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjæubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjC h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjâubj¢)�”}”(hŒunsigned int cmd”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjX ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjX ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjX ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj† h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjX ubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hj” h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjX ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjâubj¢)�”}”(hŒunsigned long arg”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj© ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj» h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj© ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÉ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj© ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj× h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj© ubj�)�”}”(hŒarg”h]”hŒarg”…”�”}”(hjå h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj© ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjâubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj©h²hh³j»h´M` ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¥h²hh³j»h´M` ubah}”(h]”j ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j»h´M` hj¢h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCheck if fcntl() op is allowed”h]”hŒCheck if fcntl() op is allowed”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M` hj !h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¢h²hh³j»h´M` ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj'!jæj'!jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct file *file`` file ``unsigned int cmd`` fcntl command ``unsigned long arg`` command argument **Description** Check permission before allowing the file operation specified by **cmd** from being performed on the file **file**. Note that **arg** sometimes represents a user space pointer; in other cases, it may be a simple integer value. When **arg** represents a user space pointer, it should never be used by the security module. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj1!h]”hŒ Parameters”…”�”}”(hj3!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Md hj+!ubj )�”}”(hhh]”(j)�”}”(hŒ``struct file *file`` file ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hjP!h]”hŒstruct file *file”…”�”}”(hjR!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjN!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ma hjJ!ubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hji!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³je!h´Ma hjf!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³je!h´Ma hjG!ubj)�”}”(hŒ#``unsigned int cmd`` fcntl command ”h]”(j)�”}”(hŒ``unsigned int cmd``”h]”j)�”}”(hj‰!h]”hŒunsigned int cmd”…”�”}”(hj‹!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mb hjƒ!ubj2)�”}”(hhh]”hÝ)�”}”(hŒ fcntl command”h]”hŒ fcntl command”…”�”}”(hj¢!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jž!h´Mb hjŸ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjƒ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jž!h´Mb hjG!ubj)�”}”(hŒ'``unsigned long arg`` command argument ”h]”(j)�”}”(hŒ``unsigned long arg``”h]”j)�”}”(hjÂ!h]”hŒunsigned long arg”…”�”}”(hjÄ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mc hj¼!ubj2)�”}”(hhh]”hÝ)�”}”(hŒcommand argument”h]”hŒcommand argument”…”�”}”(hjÛ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j×!h´Mc hjØ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¼!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j×!h´Mc hjG!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj+!ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjý!h]”hŒ Description”…”�”}”(hjÿ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjû!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Me hj+!ubhÝ)�”}”(hXBCheck permission before allowing the file operation specified by **cmd** from being performed on the file **file**. Note that **arg** sometimes represents a user space pointer; in other cases, it may be a simple integer value. When **arg** represents a user space pointer, it should never be used by the security module.”h]”(hŒACheck permission before allowing the file operation specified by ”…”�”}”(hj"h²hh³Nh´Nubjõ)�”}”(hŒ**cmd**”h]”hŒcmd”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"ubhŒ" from being performed on the file ”…”�”}”(hj"h²hh³Nh´Nubjõ)�”}”(hŒ**file**”h]”hŒfile”…”�”}”(hj-"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"ubhŒ . Note that ”…”�”}”(hj"h²hh³Nh´Nubjõ)�”}”(hŒ**arg**”h]”hŒarg”…”�”}”(hj?"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"ubhŒd sometimes represents a user space pointer; in other cases, it may be a simple integer value. When ”…”�”}”(hj"h²hh³Nh´Nubjõ)�”}”(hŒ**arg**”h]”hŒarg”…”�”}”(hjQ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"ubhŒQ represents a user space pointer, it should never be used by the security module.”…”�”}”(hj"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Md hj+!ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjl"h]”hŒReturn”…”�”}”(hjn"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mj hj+!ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj‚"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mk hj+!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_file_set_fowner (C function)”Œc.security_file_set_fowner”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1void security_file_set_fowner (struct file *file)”h]”j)�”}”(hŒ0void security_file_set_fowner(struct file *file)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±"h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­"h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ms ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­"h²hh³j¿"h´Ms ubj{)�”}”(hŒsecurity_file_set_fowner”h]”j�)�”}”(hŒsecurity_file_set_fowner”h]”hŒsecurity_file_set_fowner”…”�”}”(hjÒ"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎ"ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj­"h²hh³j¿"h´Ms ubjœ)�”}”(hŒ(struct file *file)”h]”j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjî"h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjê"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjê"ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj #ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j#Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÔ"sbŒc.security_file_set_fowner”†”asbuh1hhjê"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjê"ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj:#h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjê"ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjG#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjê"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæ"ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj­"h²hh³j¿"h´Ms ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj©"h²hh³j¿"h´Ms ubah}”(h]”j¤"ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¿"h´Ms hj¦"h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Set the file owner info in the LSM blob”h]”hŒ'Set the file owner info in the LSM blob”…”�”}”(hjq#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ms hjn#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¦"h²hh³j¿"h´Ms ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‰#jæj‰#jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct file *file`` the file **Description** Save owner security information (typically from current->security) in file->f_security for later use by the send_sigiotask hook. This hook is called with file->f_owner.lock held. **Return** Returns 0 on success.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj“#h]”hŒ Parameters”…”�”}”(hj•#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‘#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mw hj�#ubj )�”}”(hhh]”j)�”}”(hŒ``struct file *file`` the file ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hj²#h]”hŒstruct file *file”…”�”}”(hj´#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mt hj¬#ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe file”h]”hŒthe file”…”�”}”(hjË#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇ#h´Mt hjÈ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇ#h´Mt hj©#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�#ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjí#h]”hŒ Description”…”�”}”(hjï#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjë#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mv hj�#ubhÝ)�”}”(hŒ€Save owner security information (typically from current->security) in file->f_security for later use by the send_sigiotask hook.”h]”hŒ€Save owner security information (typically from current->security) in file->f_security for later use by the send_sigiotask hook.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mu hj�#ubhÝ)�”}”(hŒ1This hook is called with file->f_owner.lock held.”h]”hŒ1This hook is called with file->f_owner.lock held.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mx hj�#ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj#$h]”hŒReturn”…”�”}”(hj%$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mz hj�#ubhÝ)�”}”(hŒReturns 0 on success.”h]”hŒReturns 0 on success.”…”�”}”(hj9$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M{ hj�#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_file_send_sigiotask (C function)”Œc.security_file_send_sigiotask”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ]int security_file_send_sigiotask (struct task_struct *tsk, struct fown_struct *fown, int sig)”h]”j)�”}”(hŒ\int security_file_send_sigiotask(struct task_struct *tsk, struct fown_struct *fown, int sig)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjh$h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjd$h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mƒ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjd$h²hh³jv$h´Mƒ ubj{)�”}”(hŒsecurity_file_send_sigiotask”h]”j�)�”}”(hŒsecurity_file_send_sigiotask”h]”hŒsecurity_file_send_sigiotask”…”�”}”(hj‰$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…$ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjd$h²hh³jv$h´Mƒ ubjœ)�”}”(hŒ<(struct task_struct *tsk, struct fown_struct *fown, int sig)”h]”(j¢)�”}”(hŒstruct task_struct *tsk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¥$h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¡$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡$ubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjÃ$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀ$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÅ$Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‹$sbŒc.security_file_send_sigiotask”†”asbuh1hhj¡$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡$ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjñ$h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¡$ubj�)�”}”(hŒtsk”h]”hŒtsk”…”�”}”(hjþ$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�$ubj¢)�”}”(hŒstruct fown_struct *fown”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%ubh)�”}”(hhh]”j�)�”}”(hŒ fown_struct”h]”hŒ fown_struct”…”�”}”(hj5%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j7%Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jß$Œc.security_file_send_sigiotask”†”asbuh1hhj%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hja%h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj%ubj�)�”}”(hŒfown”h]”hŒfown”…”�”}”(hjn%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�$ubj¢)�”}”(hŒint sig”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj‡%h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjƒ%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ%ubj�)�”}”(hŒsig”h]”hŒsig”…”�”}”(hj£%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�$ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjd$h²hh³jv$h´Mƒ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj`$h²hh³jv$h´Mƒ ubah}”(h]”j[$ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jv$h´Mƒ hj]$h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if sending SIGIO/SIGURG is allowed”h]”hŒ(Check if sending SIGIO/SIGURG is allowed”…”�”}”(hjÍ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mƒ hjÊ%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj]$h²hh³jv$h´Mƒ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjå%jæjå%jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXH**Parameters** ``struct task_struct *tsk`` target task ``struct fown_struct *fown`` signal sender ``int sig`` signal to be sent, SIGIO is sent if 0 **Description** Check permission for the file owner **fown** to send SIGIO or SIGURG to the process **tsk**. Note that this hook is sometimes called from interrupt. Note that the fown_struct, **fown**, is never outside the context of a struct file, so the file structure (and associated security information) can always be obtained: container_of(fown, struct file, f_owner). **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjï%h]”hŒ Parameters”…”�”}”(hjñ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjí%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡ hjé%ubj )�”}”(hhh]”(j)�”}”(hŒ(``struct task_struct *tsk`` target task ”h]”(j)�”}”(hŒ``struct task_struct *tsk``”h]”j)�”}”(hj&h]”hŒstruct task_struct *tsk”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj &ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„ hj&ubj2)�”}”(hhh]”hÝ)�”}”(hŒ target task”h]”hŒ target task”…”�”}”(hj'&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j#&h´M„ hj$&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#&h´M„ hj&ubj)�”}”(hŒ+``struct fown_struct *fown`` signal sender ”h]”(j)�”}”(hŒ``struct fown_struct *fown``”h]”j)�”}”(hjG&h]”hŒstruct fown_struct *fown”…”�”}”(hjI&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjE&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M… hjA&ubj2)�”}”(hhh]”hÝ)�”}”(hŒ signal sender”h]”hŒ signal sender”…”�”}”(hj`&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j\&h´M… hj]&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjA&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j\&h´M… hj&ubj)�”}”(hŒ2``int sig`` signal to be sent, SIGIO is sent if 0 ”h]”(j)�”}”(hŒ ``int sig``”h]”j)�”}”(hj€&h]”hŒint sig”…”�”}”(hj‚&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M† hjz&ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%signal to be sent, SIGIO is sent if 0”h]”hŒ%signal to be sent, SIGIO is sent if 0”…”�”}”(hj™&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j•&h´M† hj–&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjz&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j•&h´M† hj&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjé%ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj»&h]”hŒ Description”…”�”}”(hj½&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¹&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mˆ hjé%ubhÝ)�”}”(hXhCheck permission for the file owner **fown** to send SIGIO or SIGURG to the process **tsk**. Note that this hook is sometimes called from interrupt. Note that the fown_struct, **fown**, is never outside the context of a struct file, so the file structure (and associated security information) can always be obtained: container_of(fown, struct file, f_owner).”h]”(hŒ$Check permission for the file owner ”…”�”}”(hjÑ&h²hh³Nh´Nubjõ)�”}”(hŒ**fown**”h]”hŒfown”…”�”}”(hjÙ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑ&ubhŒ( to send SIGIO or SIGURG to the process ”…”�”}”(hjÑ&h²hh³Nh´Nubjõ)�”}”(hŒ**tsk**”h]”hŒtsk”…”�”}”(hjë&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑ&ubhŒW. Note that this hook is sometimes called from interrupt. Note that the fown_struct, ”…”�”}”(hjÑ&h²hh³Nh´Nubjõ)�”}”(hŒ**fown**”h]”hŒfown”…”�”}”(hjý&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑ&ubhŒ®, is never outside the context of a struct file, so the file structure (and associated security information) can always be obtained: container_of(fown, struct file, f_owner).”…”�”}”(hjÑ&h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡ hjé%ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj'h]”hŒReturn”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hjé%ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj.'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŽ hjé%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_file_receive (C function)”Œc.security_file_receive”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-int security_file_receive (struct file *file)”h]”j)�”}”(hŒ,int security_file_receive(struct file *file)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj]'h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjY'h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M— ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl'h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjY'h²hh³jk'h´M— ubj{)�”}”(hŒsecurity_file_receive”h]”j�)�”}”(hŒsecurity_file_receive”h]”hŒsecurity_file_receive”…”�”}”(hj~'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjz'ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjY'h²hh³jk'h´M— ubjœ)�”}”(hŒ(struct file *file)”h]”j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjš'h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj–'ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§'h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–'ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj¸'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµ'ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jº'Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j€'sbŒc.security_file_receive”†”asbuh1hhj–'ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ'h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–'ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjæ'h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj–'ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjó'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–'ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj’'ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjY'h²hh³jk'h´M— ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjU'h²hh³jk'h´M— ubah}”(h]”jP'ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jk'h´M— hjR'h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Check if receiving a file via IPC is allowed”h]”hŒ,Check if receiving a file via IPC is allowed”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M— hj(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjR'h²hh³jk'h´M— ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj5(jæj5(jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ÷**Parameters** ``struct file *file`` file being received **Description** This hook allows security modules to control the ability of a process to receive an open file descriptor via socket IPC. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj?(h]”hŒ Parameters”…”�”}”(hjA(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj=(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M› hj9(ubj )�”}”(hhh]”j)�”}”(hŒ*``struct file *file`` file being received ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hj^(h]”hŒstruct file *file”…”�”}”(hj`(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜ hjX(ubj2)�”}”(hhh]”hÝ)�”}”(hŒfile being received”h]”hŒfile being received”…”�”}”(hjw(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³js(h´M˜ hjt(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjX(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³js(h´M˜ hjU(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj9(ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj™(h]”hŒ Description”…”�”}”(hj›(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mš hj9(ubhÝ)�”}”(hŒxThis hook allows security modules to control the ability of a process to receive an open file descriptor via socket IPC.”h]”hŒxThis hook allows security modules to control the ability of a process to receive an open file descriptor via socket IPC.”…”�”}”(hj¯(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™ hj9(ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÀ(h]”hŒReturn”…”�”}”(hjÂ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mœ hj9(ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjÖ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hj9(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_file_open (C function)”Œc.security_file_open”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ*int security_file_open (struct file *file)”h]”j)�”}”(hŒ)int security_file_open(struct file *file)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj)h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¥ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)h²hh³j)h´M¥ ubj{)�”}”(hŒsecurity_file_open”h]”j�)�”}”(hŒsecurity_file_open”h]”hŒsecurity_file_open”…”�”}”(hj&)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj")ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj)h²hh³j)h´M¥ ubjœ)�”}”(hŒ(struct file *file)”h]”j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjB)h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj>)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>)ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj`)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj])ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jb)Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j()sbŒc.security_file_open”†”asbuh1hhj>)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>)ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŽ)h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj>)ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj›)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj:)ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj)h²hh³j)h´M¥ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjý(h²hh³j)h´M¥ ubah}”(h]”jø(ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j)h´M¥ hjú(h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Save open() time state for late use by the LSM”h]”hŒ.Save open() time state for late use by the LSM”…”�”}”(hjÅ)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¥ hjÂ)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjú(h²hh³j)h´M¥ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÝ)jæjÝ)jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXœ**Parameters** ``struct file *file`` **Description** Save open-time permission checking state for later use upon file_permission, and recheck access if anything has changed since inode_permission. We can check if a file is opened for execution (e.g. execve(2) call), either directly or indirectly (e.g. ELF's ld.so) by checking file->f_flags & __FMODE_EXEC . **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjç)h]”hŒ Parameters”…”�”}”(hjé)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjå)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M© hjá)ubhÝ)�”}”(hŒ``struct file *file``”h]”j)�”}”(hjÿ)h]”hŒstruct file *file”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjý)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M« hjá)ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj*h]”hŒ Description”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¨ hjá)ubhÝ)�”}”(hŒ�Save open-time permission checking state for later use upon file_permission, and recheck access if anything has changed since inode_permission.”h]”hŒ�Save open-time permission checking state for later use upon file_permission, and recheck access if anything has changed since inode_permission.”…”�”}”(hj-*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M§ hjá)ubhÝ)�”}”(hŒ¡We can check if a file is opened for execution (e.g. execve(2) call), either directly or indirectly (e.g. ELF's ld.so) by checking file->f_flags & __FMODE_EXEC .”h]”hŒ£We can check if a file is opened for execution (e.g. execve(2) call), either directly or indirectly (e.g. ELF’s ld.so) by checking file->f_flags & __FMODE_EXEC .”…”�”}”(hj<*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mª hjá)ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjM*h]”hŒReturn”…”�”}”(hjO*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjK*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M® hjá)ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjc*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¯ hjá)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_file_truncate (C function)”Œc.security_file_truncate”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.int security_file_truncate (struct file *file)”h]”j)�”}”(hŒ-int security_file_truncate(struct file *file)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj’*h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŽ*h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÈ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽ*h²hh³j *h´MÈ ubj{)�”}”(hŒsecurity_file_truncate”h]”j�)�”}”(hŒsecurity_file_truncate”h]”hŒsecurity_file_truncate”…”�”}”(hj³*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯*ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŽ*h²hh³j *h´MÈ ubjœ)�”}”(hŒ(struct file *file)”h]”j¢)�”}”(hŒstruct file *file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÏ*h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjË*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjË*ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hjí*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjê*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jï*Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jµ*sbŒc.security_file_truncate”†”asbuh1hhjË*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjË*ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjË*ubj�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj(+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjË*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÇ*ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjŽ*h²hh³j *h´MÈ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŠ*h²hh³j *h´MÈ ubah}”(h]”j…*ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j *h´MÈ hj‡*h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Check if truncating a file is allowed”h]”hŒ%Check if truncating a file is allowed”…”�”}”(hjR+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÈ hjO+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‡*h²hh³j *h´MÈ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjj+jæjj+jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct file *file`` file **Description** Check permission before truncating a file, i.e. using ftruncate. Note that truncation permission may also be checked based on the path, using the **path_truncate** hook. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjt+h]”hŒ Parameters”…”�”}”(hjv+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjr+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÌ hjn+ubj )�”}”(hhh]”j)�”}”(hŒ``struct file *file`` file ”h]”(j)�”}”(hŒ``struct file *file``”h]”j)�”}”(hj“+h]”hŒstruct file *file”…”�”}”(hj•+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÉ hj�+ubj2)�”}”(hhh]”hÝ)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj¬+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¨+h´MÉ hj©+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¨+h´MÉ hjŠ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjn+ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÎ+h]”hŒ Description”…”�”}”(hjÐ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÌ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MË hjn+ubhÝ)�”}”(hŒªCheck permission before truncating a file, i.e. using ftruncate. Note that truncation permission may also be checked based on the path, using the **path_truncate** hook.”h]”(hŒ“Check permission before truncating a file, i.e. using ftruncate. Note that truncation permission may also be checked based on the path, using the ”…”�”}”(hjä+h²hh³Nh´Nubjõ)�”}”(hŒ**path_truncate**”h]”hŒ path_truncate”…”�”}”(hjì+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä+ubhŒ hook.”…”�”}”(hjä+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÊ hjn+ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj,h]”hŒReturn”…”�”}”(hj ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÎ hjn+ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÏ hjn+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_task_alloc (C function)”Œc.security_task_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCint security_task_alloc (struct task_struct *task, u64 clone_flags)”h]”j)�”}”(hŒBint security_task_alloc(struct task_struct *task, u64 clone_flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjL,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjH,h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M× ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH,h²hh³jZ,h´M× ubj{)�”}”(hŒsecurity_task_alloc”h]”j�)�”}”(hŒsecurity_task_alloc”h]”hŒsecurity_task_alloc”…”�”}”(hjm,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hji,ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjH,h²hh³jZ,h´M× ubjœ)�”}”(hŒ+(struct task_struct *task, u64 clone_flags)”h]”(j¢)�”}”(hŒstruct task_struct *task”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‰,h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj…,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…,ubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj§,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j©,Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jo,sbŒc.security_task_alloc”†”asbuh1hhj…,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…,ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÕ,h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj…,ubj�)�”}”(hŒtask”h]”hŒtask”…”�”}”(hjâ,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�,ubj¢)�”}”(hŒu64 clone_flags”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjþ,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjû,ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j-Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÃ,Œc.security_task_alloc”†”asbuh1hhj÷,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷,ubj�)�”}”(hŒ clone_flags”h]”hŒ clone_flags”…”�”}”(hj*-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�,ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjH,h²hh³jZ,h´M× ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjD,h²hh³jZ,h´M× ubah}”(h]”j?,ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jZ,h´M× hjA,h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒAllocate a task's LSM blob”h]”hŒAllocate a task’s LSM blob”…”�”}”(hjT-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M× hjQ-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjA,h²hh³jZ,h´M× ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjl-jæjl-jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ÷**Parameters** ``struct task_struct *task`` the task ``u64 clone_flags`` flags indicating what is being shared **Description** Handle allocation of task-related resources. **Return** Returns a zero on success, negative values on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjv-h]”hŒ Parameters”…”�”}”(hjx-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjt-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÛ hjp-ubj )�”}”(hhh]”(j)�”}”(hŒ&``struct task_struct *task`` the task ”h]”(j)�”}”(hŒ``struct task_struct *task``”h]”j)�”}”(hj•-h]”hŒstruct task_struct *task”…”�”}”(hj—-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MØ hj�-ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe task”h]”hŒthe task”…”�”}”(hj®-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jª-h´MØ hj«-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jª-h´MØ hjŒ-ubj)�”}”(hŒ:``u64 clone_flags`` flags indicating what is being shared ”h]”(j)�”}”(hŒ``u64 clone_flags``”h]”j)�”}”(hjÎ-h]”hŒu64 clone_flags”…”�”}”(hjÐ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÙ hjÈ-ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%flags indicating what is being shared”h]”hŒ%flags indicating what is being shared”…”�”}”(hjç-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jã-h´MÙ hjä-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jã-h´MÙ hjŒ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjp-ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj .h]”hŒ Description”…”�”}”(hj .h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÛ hjp-ubhÝ)�”}”(hŒ,Handle allocation of task-related resources.”h]”hŒ,Handle allocation of task-related resources.”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÚ hjp-ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj0.h]”hŒReturn”…”�”}”(hj2.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj..ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÜ hjp-ubhÝ)�”}”(hŒ6Returns a zero on success, negative values on failure.”h]”hŒ6Returns a zero on success, negative values on failure.”…”�”}”(hjF.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÝ hjp-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_task_free (C function)”Œc.security_task_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2void security_task_free (struct task_struct *task)”h]”j)�”}”(hŒ1void security_task_free(struct task_struct *task)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hju.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjq.h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mì ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjq.h²hh³jƒ.h´Mì ubj{)�”}”(hŒsecurity_task_free”h]”j�)�”}”(hŒsecurity_task_free”h]”hŒsecurity_task_free”…”�”}”(hj–.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’.ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjq.h²hh³jƒ.h´Mì ubjœ)�”}”(hŒ(struct task_struct *task)”h]”j¢)�”}”(hŒstruct task_struct *task”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj².h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®.ubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjÐ.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍ.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÒ.Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j˜.sbŒc.security_task_free”†”asbuh1hhj®.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®.ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjþ.h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj®.ubj�)�”}”(hŒtask”h]”hŒtask”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjª.ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjq.h²hh³jƒ.h´Mì ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjm.h²hh³jƒ.h´Mì ubah}”(h]”jh.ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jƒ.h´Mì hjj.h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Free a task's LSM blob and related resources”h]”hŒ.Free a task’s LSM blob and related resources”…”�”}”(hj5/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mì hj2/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjj.h²hh³jƒ.h´Mì ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjM/jæjM/jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¥**Parameters** ``struct task_struct *task`` task **Description** Handle release of task-related resources. Note that this can be called from interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjW/h]”hŒ Parameters”…”�”}”(hjY/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjU/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mð hjQ/ubj )�”}”(hhh]”j)�”}”(hŒ"``struct task_struct *task`` task ”h]”(j)�”}”(hŒ``struct task_struct *task``”h]”j)�”}”(hjv/h]”hŒstruct task_struct *task”…”�”}”(hjx/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjt/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mí hjp/ubj2)�”}”(hhh]”hÝ)�”}”(hŒtask”h]”hŒtask”…”�”}”(hj�/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‹/h´Mí hjŒ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjp/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹/h´Mí hjm/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjQ/ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj±/h]”hŒ Description”…”�”}”(hj³/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mï hjQ/ubhÝ)�”}”(hŒ_Handle release of task-related resources. Note that this can be called from interrupt context.”h]”hŒ_Handle release of task-related resources. Note that this can be called from interrupt context.”…”�”}”(hjÇ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mî hjQ/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_cred_alloc_blank (C function)”Œc.security_cred_alloc_blank”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjò/h²hh³j0h´Mû ubj{)�”}”(hŒsecurity_cred_alloc_blank”h]”j�)�”}”(hŒsecurity_cred_alloc_blank”h]”hŒsecurity_cred_alloc_blank”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjò/h²hh³j0h´Mû ubjœ)�”}”(hŒ(struct cred *cred, gfp_t gfp)”h]”(j¢)�”}”(hŒstruct cred *cred”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj30h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/0ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjQ0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jS0Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j0sbŒc.security_cred_alloc_blank”†”asbuh1hhj/0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/0ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj/0ubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjŒ0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+0ubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj¨0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jª0Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jm0Œc.security_cred_alloc_blank”†”asbuh1hhj¡0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡0ubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjÔ0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjò/h²hh³j0h´Mû ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjî/h²hh³j0h´Mû ubah}”(h]”jé/ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j0h´Mû hjë/h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Allocate the min memory to allow cred_transfer”h]”hŒ.Allocate the min memory to allow cred_transfer”…”�”}”(hjþ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mû hjû0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjë/h²hh³j0h´Mû ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj1jæj1jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct cred *cred`` credentials ``gfp_t gfp`` gfp flags **Description** Only allocate sufficient memory and attach to **cred** such that cred_transfer() will not get ENOMEM. **Return** Returns 0 on success, negative values on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj 1h]”hŒ Parameters”…”�”}”(hj"1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mÿ hj1ubj )�”}”(hhh]”(j)�”}”(hŒ"``struct cred *cred`` credentials ”h]”(j)�”}”(hŒ``struct cred *cred``”h]”j)�”}”(hj?1h]”hŒstruct cred *cred”…”�”}”(hjA1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mü hj91ubj2)�”}”(hhh]”hÝ)�”}”(hŒ credentials”h]”hŒ credentials”…”�”}”(hjX1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jT1h´Mü hjU1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj91ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jT1h´Mü hj61ubj)�”}”(hŒ``gfp_t gfp`` gfp flags ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hjx1h]”hŒ gfp_t gfp”…”�”}”(hjz1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjv1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mý hjr1ubj2)�”}”(hhh]”hÝ)�”}”(hŒ gfp flags”h]”hŒ gfp flags”…”�”}”(hj‘1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�1h´Mý hjŽ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjr1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�1h´Mý hj61ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj1ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj³1h]”hŒ Description”…”�”}”(hjµ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mÿ hj1ubhÝ)�”}”(hŒeOnly allocate sufficient memory and attach to **cred** such that cred_transfer() will not get ENOMEM.”h]”(hŒ.Only allocate sufficient memory and attach to ”…”�”}”(hjÉ1h²hh³Nh´Nubjõ)�”}”(hŒ**cred**”h]”hŒcred”…”�”}”(hjÑ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÉ1ubhŒ/ such that cred_transfer() will not get ENOMEM.”…”�”}”(hjÉ1h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mþ hj1ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjì1h]”hŒReturn”…”�”}”(hjî1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjê1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj1ubhÝ)�”}”(hŒ1Returns 0 on success, negative values on failure.”h]”hŒ1Returns 0 on success, negative values on failure.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_cred_free (C function)”Œc.security_cred_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+void security_cred_free (struct cred *cred)”h]”j)�”}”(hŒ*void security_cred_free(struct cred *cred)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj12h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj-2h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-2h²hh³j?2h´M ubj{)�”}”(hŒsecurity_cred_free”h]”j�)�”}”(hŒsecurity_cred_free”h]”hŒsecurity_cred_free”…”�”}”(hjR2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN2ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj-2h²hh³j?2h´M ubjœ)�”}”(hŒ(struct cred *cred)”h]”j¢)�”}”(hŒstruct cred *cred”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjn2h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjj2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj2ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjŒ2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŽ2Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jT2sbŒc.security_cred_free”†”asbuh1hhjj2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj2ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjº2h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjj2ubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjÇ2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjj2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjf2ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj-2h²hh³j?2h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj)2h²hh³j?2h´M ubah}”(h]”j$2ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j?2h´M hj&2h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1Free the cred's LSM blob and associated resources”h]”hŒ3Free the cred’s LSM blob and associated resources”…”�”}”(hjñ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjî2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj&2h²hh³j?2h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj 3jæj 3jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒŒ**Parameters** ``struct cred *cred`` credentials **Description** Deallocate and clear the cred->security field in a set of credentials.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj3h]”hŒ Parameters”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj 3ubj )�”}”(hhh]”j)�”}”(hŒ"``struct cred *cred`` credentials ”h]”(j)�”}”(hŒ``struct cred *cred``”h]”j)�”}”(hj23h]”hŒstruct cred *cred”…”�”}”(hj43h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj03ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj,3ubj2)�”}”(hhh]”hÝ)�”}”(hŒ credentials”h]”hŒ credentials”…”�”}”(hjK3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jG3h´M hjH3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj,3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jG3h´M hj)3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj 3ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjm3h]”hŒ Description”…”�”}”(hjo3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjk3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj 3ubhÝ)�”}”(hŒFDeallocate and clear the cred->security field in a set of credentials.”h]”hŒFDeallocate and clear the cred->security field in a set of credentials.”…”�”}”(hjƒ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj 3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_prepare_creds (C function)”Œc.security_prepare_creds”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPint security_prepare_creds (struct cred *new, const struct cred *old, gfp_t gfp)”h]”j)�”}”(hŒOint security_prepare_creds(struct cred *new, const struct cred *old, gfp_t gfp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj²3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj®3h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M' ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®3h²hh³jÀ3h´M' ubj{)�”}”(hŒsecurity_prepare_creds”h]”j�)�”}”(hŒsecurity_prepare_creds”h]”hŒsecurity_prepare_creds”…”�”}”(hjÓ3h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏ3ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj®3h²hh³jÀ3h´M' ubjœ)�”}”(hŒ5(struct cred *new, const struct cred *old, gfp_t gfp)”h]”(j¢)�”}”(hŒstruct cred *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjï3h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjë3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü3h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjë3ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj 4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj 4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÕ3sbŒc.security_prepare_creds”†”asbuh1hhjë3ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjë3ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj;4h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjë3ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjH4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjë3ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjç3ubj¢)�”}”(hŒconst struct cred *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hja4h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj]4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]4ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj|4h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj]4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]4ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjš4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jœ4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j)4Œc.security_prepare_creds”†”asbuh1hhj]4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]4ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÆ4h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj]4ubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hjÓ4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjç3ubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjï4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jñ4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j)4Œc.security_prepare_creds”†”asbuh1hhjè4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjè4ubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjè4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjç3ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj®3h²hh³jÀ3h´M' ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjª3h²hh³jÀ3h´M' ubah}”(h]”j¥3ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÀ3h´M' hj§3h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ Prepare a new set of credentials”h]”hŒ Prepare a new set of credentials”…”�”}”(hjE5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M' hjB5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj§3h²hh³jÀ3h´M' ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj]5jæj]5jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct cred *new`` new credentials ``const struct cred *old`` original credentials ``gfp_t gfp`` gfp flags **Description** Prepare a new set of credentials by copying the data from the old set. **Return** Returns 0 on success, negative values on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjg5h]”hŒ Parameters”…”�”}”(hji5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhje5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+ hja5ubj )�”}”(hhh]”(j)�”}”(hŒ%``struct cred *new`` new credentials ”h]”(j)�”}”(hŒ``struct cred *new``”h]”j)�”}”(hj†5h]”hŒstruct cred *new”…”�”}”(hjˆ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M( hj€5ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew credentials”h]”hŒnew credentials”…”�”}”(hjŸ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›5h´M( hjœ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›5h´M( hj}5ubj)�”}”(hŒ0``const struct cred *old`` original credentials ”h]”(j)�”}”(hŒ``const struct cred *old``”h]”j)�”}”(hj¿5h]”hŒconst struct cred *old”…”�”}”(hjÁ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M) hj¹5ubj2)�”}”(hhh]”hÝ)�”}”(hŒoriginal credentials”h]”hŒoriginal credentials”…”�”}”(hjØ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔ5h´M) hjÕ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔ5h´M) hj}5ubj)�”}”(hŒ``gfp_t gfp`` gfp flags ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hjø5h]”hŒ gfp_t gfp”…”�”}”(hjú5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjö5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M* hjò5ubj2)�”}”(hhh]”hÝ)�”}”(hŒ gfp flags”h]”hŒ gfp flags”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j 6h´M* hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjò5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j 6h´M* hj}5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hja5ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj36h]”hŒ Description”…”�”}”(hj56h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj16ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M, hja5ubhÝ)�”}”(hŒFPrepare a new set of credentials by copying the data from the old set.”h]”hŒFPrepare a new set of credentials by copying the data from the old set.”…”�”}”(hjI6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+ hja5ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjZ6h]”hŒReturn”…”�”}”(hj\6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjX6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M- hja5ubhÝ)�”}”(hŒ1Returns 0 on success, negative values on failure.”h]”hŒ1Returns 0 on success, negative values on failure.”…”�”}”(hjp6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M. hja5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_transfer_creds (C function)”Œc.security_transfer_creds”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGvoid security_transfer_creds (struct cred *new, const struct cred *old)”h]”j)�”}”(hŒFvoid security_transfer_creds(struct cred *new, const struct cred *old)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŸ6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›6h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M> ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›6h²hh³j­6h´M> ubj{)�”}”(hŒsecurity_transfer_creds”h]”j�)�”}”(hŒsecurity_transfer_creds”h]”hŒsecurity_transfer_creds”…”�”}”(hjÀ6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼6ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj›6h²hh³j­6h´M> ubjœ)�”}”(hŒ*(struct cred *new, const struct cred *old)”h]”(j¢)�”}”(hŒstruct cred *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÜ6h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjØ6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØ6ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjú6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jü6Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÂ6sbŒc.security_transfer_creds”†”asbuh1hhjØ6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØ6ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj(7h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjØ6ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj57h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØ6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ6ubj¢)�”}”(hŒconst struct cred *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjN7h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJ7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ7ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hji7h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJ7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ7ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj‡7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‰7Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j7Œc.security_transfer_creds”†”asbuh1hhjJ7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ7ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj³7h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjJ7ubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hjÀ7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJ7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔ6ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj›6h²hh³j­6h´M> ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—6h²hh³j­6h´M> ubah}”(h]”j’6ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­6h´M> hj”6h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒTransfer creds”h]”hŒTransfer creds”…”�”}”(hjê7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M> hjç7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”6h²hh³j­6h´M> ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj8jæj8jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ®**Parameters** ``struct cred *new`` target credentials ``const struct cred *old`` original credentials **Description** Transfer data from original creds to new creds.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj 8h]”hŒ Parameters”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj 8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MB hj8ubj )�”}”(hhh]”(j)�”}”(hŒ(``struct cred *new`` target credentials ”h]”(j)�”}”(hŒ``struct cred *new``”h]”j)�”}”(hj+8h]”hŒstruct cred *new”…”�”}”(hj-8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M? hj%8ubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget credentials”h]”hŒtarget credentials”…”�”}”(hjD8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@8h´M? hjA8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@8h´M? hj"8ubj)�”}”(hŒ0``const struct cred *old`` original credentials ”h]”(j)�”}”(hŒ``const struct cred *old``”h]”j)�”}”(hjd8h]”hŒconst struct cred *old”…”�”}”(hjf8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M@ hj^8ubj2)�”}”(hhh]”hÝ)�”}”(hŒoriginal credentials”h]”hŒoriginal credentials”…”�”}”(hj}8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jy8h´M@ hjz8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jy8h´M@ hj"8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj8ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŸ8h]”hŒ Description”…”�”}”(hj¡8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MB hj8ubhÝ)�”}”(hŒ/Transfer data from original creds to new creds.”h]”hŒ/Transfer data from original creds to new creds.”…”�”}”(hjµ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MA hj8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_kernel_act_as (C function)”Œc.security_kernel_act_as”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int security_kernel_act_as (struct cred *new, u32 secid)”h]”j)�”}”(hŒ7int security_kernel_act_as(struct cred *new, u32 secid)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjä8h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjà8h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mh ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjà8h²hh³jò8h´Mh ubj{)�”}”(hŒsecurity_kernel_act_as”h]”j�)�”}”(hŒsecurity_kernel_act_as”h]”hŒsecurity_kernel_act_as”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjà8h²hh³jò8h´Mh ubjœ)�”}”(hŒ(struct cred *new, u32 secid)”h]”(j¢)�”}”(hŒstruct cred *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj!9h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj?9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jA9Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j9sbŒc.security_kernel_act_as”†”asbuh1hhj9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjm9h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj9ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjz9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj9ubj¢)�”}”(hŒ u32 secid”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj–9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j˜9Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j[9Œc.security_kernel_act_as”†”asbuh1hhj�9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�9ubj�)�”}”(hŒsecid”h]”hŒsecid”…”�”}”(hjÂ9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj9ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjà8h²hh³jò8h´Mh ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÜ8h²hh³jò8h´Mh ubah}”(h]”j×8ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jò8h´Mh hjÙ8h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Set the kernel credentials to act as secid”h]”hŒ*Set the kernel credentials to act as secid”…”�”}”(hjì9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mh hjé9h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÙ8h²hh³jò8h´Mh ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj:jæj:jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct cred *new`` credentials ``u32 secid`` secid **Description** Set the credentials for a kernel service to act as (subjective context). The current task must be the one that nominated **secid**. **Return** Returns 0 if successful.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj:h]”hŒ Parameters”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj :ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ml hj:ubj )�”}”(hhh]”(j)�”}”(hŒ!``struct cred *new`` credentials ”h]”(j)�”}”(hŒ``struct cred *new``”h]”j)�”}”(hj-:h]”hŒstruct cred *new”…”�”}”(hj/:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mi hj':ubj2)�”}”(hhh]”hÝ)�”}”(hŒ credentials”h]”hŒ credentials”…”�”}”(hjF:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jB:h´Mi hjC:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj':ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jB:h´Mi hj$:ubj)�”}”(hŒ``u32 secid`` secid ”h]”(j)�”}”(hŒ ``u32 secid``”h]”j)�”}”(hjf:h]”hŒ u32 secid”…”�”}”(hjh:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mj hj`:ubj2)�”}”(hhh]”hÝ)�”}”(hŒsecid”h]”hŒsecid”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{:h´Mj hj|:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{:h´Mj hj$:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj:ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¡:h]”hŒ Description”…”�”}”(hj£:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ml hj:ubhÝ)�”}”(hŒƒSet the credentials for a kernel service to act as (subjective context). The current task must be the one that nominated **secid**.”h]”(hŒySet the credentials for a kernel service to act as (subjective context). The current task must be the one that nominated ”…”�”}”(hj·:h²hh³Nh´Nubjõ)�”}”(hŒ **secid**”h]”hŒsecid”…”�”}”(hj¿:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·:ubhŒ.”…”�”}”(hj·:h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mk hj:ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÚ:h]”hŒReturn”…”�”}”(hjÜ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mn hj:ubhÝ)�”}”(hŒReturns 0 if successful.”h]”hŒReturns 0 if successful.”…”�”}”(hjð:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mo hj:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,security_kernel_create_files_as (C function)”Œ!c.security_kernel_create_files_as”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒKint security_kernel_create_files_as (struct cred *new, struct inode *inode)”h]”j)�”}”(hŒJint security_kernel_create_files_as(struct cred *new, struct inode *inode)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj;h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mw ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;h²hh³j-;h´Mw ubj{)�”}”(hŒsecurity_kernel_create_files_as”h]”j�)�”}”(hŒsecurity_kernel_create_files_as”h]”hŒsecurity_kernel_create_files_as”…”�”}”(hj@;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<;ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj;h²hh³j-;h´Mw ubjœ)�”}”(hŒ'(struct cred *new, struct inode *inode)”h]”(j¢)�”}”(hŒstruct cred *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj\;h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjX;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjX;ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjz;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjw;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j|;Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jB;sbŒ!c.security_kernel_create_files_as”†”asbuh1hhjX;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjX;ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¨;h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjX;ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjµ;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjX;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjT;ubj¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÎ;h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÊ;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊ;ubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjì;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjé;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jî;Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j–;Œ!c.security_kernel_create_files_as”†”asbuh1hhjÊ;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊ;ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÊ;ubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj%<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊ;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjT;ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj;h²hh³j-;h´Mw ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj;h²hh³j-;h´Mw ubah}”(h]”j;ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j-;h´Mw hj;h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Set file creation context using an inode”h]”hŒ(Set file creation context using an inode”…”�”}”(hjO<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mw hjL<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj;h²hh³j-;h´Mw ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjg<jæjg<jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXN**Parameters** ``struct cred *new`` target credentials ``struct inode *inode`` reference inode **Description** Set the file creation context in a set of credentials to be the same as the objective context of the specified inode. The current task must be the one that nominated **inode**. **Return** Returns 0 if successful.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjq<h]”hŒ Parameters”…”�”}”(hjs<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjo<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M{ hjk<ubj )�”}”(hhh]”(j)�”}”(hŒ(``struct cred *new`` target credentials ”h]”(j)�”}”(hŒ``struct cred *new``”h]”j)�”}”(hj�<h]”hŒstruct cred *new”…”�”}”(hj’<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mx hjŠ<ubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget credentials”h]”hŒtarget credentials”…”�”}”(hj©<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥<h´Mx hj¦<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠ<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥<h´Mx hj‡<ubj)�”}”(hŒ(``struct inode *inode`` reference inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hjÉ<h]”hŒstruct inode *inode”…”�”}”(hjË<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´My hjÃ<ubj2)�”}”(hhh]”hÝ)�”}”(hŒreference inode”h]”hŒreference inode”…”�”}”(hjâ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÞ<h´My hjß<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÃ<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞ<h´My hj‡<ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjk<ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj=h]”hŒ Description”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M{ hjk<ubhÝ)�”}”(hŒ±Set the file creation context in a set of credentials to be the same as the objective context of the specified inode. The current task must be the one that nominated **inode**.”h]”(hŒ§Set the file creation context in a set of credentials to be the same as the objective context of the specified inode. The current task must be the one that nominated ”…”�”}”(hj=h²hh³Nh´Nubjõ)�”}”(hŒ **inode**”h]”hŒinode”…”�”}”(hj"=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj=ubhŒ.”…”�”}”(hj=h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mz hjk<ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj==h]”hŒReturn”…”�”}”(hj?=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M~ hjk<ubhÝ)�”}”(hŒReturns 0 if successful.”h]”hŒReturns 0 if successful.”…”�”}”(hjS=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjk<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ+security_kernel_module_request (C function)”Œ c.security_kernel_module_request”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4int security_kernel_module_request (char *kmod_name)”h]”j)�”}”(hŒ3int security_kernel_module_request(char *kmod_name)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj‚=h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~=h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~=h²hh³j�=h´M‡ ubj{)�”}”(hŒsecurity_kernel_module_request”h]”j�)�”}”(hŒsecurity_kernel_module_request”h]”hŒsecurity_kernel_module_request”…”�”}”(hj£=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸ=ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj~=h²hh³j�=h´M‡ ubjœ)�”}”(hŒ(char *kmod_name)”h]”j¢)�”}”(hŒchar *kmod_name”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¿=h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj»=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»=ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÛ=h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj»=ubj�)�”}”(hŒ kmod_name”h]”hŒ kmod_name”…”�”}”(hjè=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj·=ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj~=h²hh³j�=h´M‡ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjz=h²hh³j�=h´M‡ ubah}”(h]”ju=ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�=h´M‡ hjw=h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Check if loading a module is allowed”h]”hŒ$Check if loading a module is allowed”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡ hj>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjw=h²hh³j�=h´M‡ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj*>jæj*>jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒç**Parameters** ``char *kmod_name`` module name **Description** Ability to trigger the kernel to automatically upcall to userspace for userspace to load a kernel module with the given name. **Return** Returns 0 if successful.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj4>h]”hŒ Parameters”…”�”}”(hj6>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj2>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‹ hj.>ubj )�”}”(hhh]”j)�”}”(hŒ ``char *kmod_name`` module name ”h]”(j)�”}”(hŒ``char *kmod_name``”h]”j)�”}”(hjS>h]”hŒchar *kmod_name”…”�”}”(hjU>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mˆ hjM>ubj2)�”}”(hhh]”hÝ)�”}”(hŒ module name”h]”hŒ module name”…”�”}”(hjl>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh>h´Mˆ hji>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjM>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh>h´Mˆ hjJ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj.>ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŽ>h]”hŒ Description”…”�”}”(hj�>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŠ hj.>ubhÝ)�”}”(hŒ}Ability to trigger the kernel to automatically upcall to userspace for userspace to load a kernel module with the given name.”h]”hŒ}Ability to trigger the kernel to automatically upcall to userspace for userspace to load a kernel module with the given name.”…”�”}”(hj¤>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‰ hj.>ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjµ>h]”hŒReturn”…”�”}”(hj·>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj³>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŒ hj.>ubhÝ)�”}”(hŒReturns 0 if successful.”h]”hŒReturns 0 if successful.”…”�”}”(hjË>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hj.>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_task_fix_setuid (C function)”Œc.security_task_fix_setuid”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRint security_task_fix_setuid (struct cred *new, const struct cred *old, int flags)”h]”j)�”}”(hŒQint security_task_fix_setuid(struct cred *new, const struct cred *old, int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjú>h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjö>h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mß ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjö>h²hh³j?h´Mß ubj{)�”}”(hŒsecurity_task_fix_setuid”h]”j�)�”}”(hŒsecurity_task_fix_setuid”h]”hŒsecurity_task_fix_setuid”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjö>h²hh³j?h´Mß ubjœ)�”}”(hŒ5(struct cred *new, const struct cred *old, int flags)”h]”(j¢)�”}”(hŒstruct cred *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj7?h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj3?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3?ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjU?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjR?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jW?Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j?sbŒc.security_task_fix_setuid”†”asbuh1hhj3?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3?ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒ?h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj3?ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj�?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/?ubj¢)�”}”(hŒconst struct cred *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj©?h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¥?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥?ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÄ?h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¥?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑ?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥?ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjâ?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjß?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jä?Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jq?Œc.security_task_fix_setuid”†”asbuh1hhj¥?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥?ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¥?ubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/?ubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj4@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj0@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0@ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjP@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/?ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjö>h²hh³j?h´Mß ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjò>h²hh³j?h´Mß ubah}”(h]”jí>ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j?h´Mß hjï>h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Update LSM with new user id attributes”h]”hŒ&Update LSM with new user id attributes”…”�”}”(hjz@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mß hjw@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjï>h²hh³j?h´Mß ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj’@jæj’@jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct cred *new`` updated credentials ``const struct cred *old`` credentials being replaced ``int flags`` LSM_SETID_* flag values **Description** Update the module's state after setting one or more of the user identity attributes of the current process. The **flags** parameter indicates which of the set*uid system calls invoked this hook. If **new** is the set of credentials that will be installed. Modifications should be made to this rather than to **current->cred**. **Return** Returns 0 on success.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjœ@h]”hŒ Parameters”…”�”}”(hjž@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjš@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mã hj–@ubj )�”}”(hhh]”(j)�”}”(hŒ)``struct cred *new`` updated credentials ”h]”(j)�”}”(hŒ``struct cred *new``”h]”j)�”}”(hj»@h]”hŒstruct cred *new”…”�”}”(hj½@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mà hjµ@ubj2)�”}”(hhh]”hÝ)�”}”(hŒupdated credentials”h]”hŒupdated credentials”…”�”}”(hjÔ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÐ@h´Mà hjÑ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÐ@h´Mà hj²@ubj)�”}”(hŒ6``const struct cred *old`` credentials being replaced ”h]”(j)�”}”(hŒ``const struct cred *old``”h]”j)�”}”(hjô@h]”hŒconst struct cred *old”…”�”}”(hjö@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjò@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Má hjî@ubj2)�”}”(hhh]”hÝ)�”}”(hŒcredentials being replaced”h]”hŒcredentials being replaced”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Ah´Má hj Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjî@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Ah´Má hj²@ubj)�”}”(hŒ&``int flags`` LSM_SETID_* flag values ”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hj-Ah]”hŒ int flags”…”�”}”(hj/Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mâ hj'Aubj2)�”}”(hhh]”hÝ)�”}”(hŒLSM_SETID_* flag values”h]”hŒLSM_SETID_* flag values”…”�”}”(hjFAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jBAh´Mâ hjCAubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj'Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jBAh´Mâ hj²@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj–@ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjhAh]”hŒ Description”…”�”}”(hjjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mä hj–@ubhÝ)�”}”(hXIUpdate the module's state after setting one or more of the user identity attributes of the current process. The **flags** parameter indicates which of the set*uid system calls invoked this hook. If **new** is the set of credentials that will be installed. Modifications should be made to this rather than to **current->cred**.”h]”(hŒsUpdate the module’s state after setting one or more of the user identity attributes of the current process. The ”…”�”}”(hj~Ah²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj†Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~AubhŒN parameter indicates which of the set*uid system calls invoked this hook. If ”…”�”}”(hj~Ah²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj˜Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~AubhŒh is the set of credentials that will be installed. Modifications should be made to this rather than to ”…”�”}”(hj~Ah²hh³Nh´Nubjõ)�”}”(hŒ**current->cred**”h]”hŒ current->cred”…”�”}”(hjªAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~AubhŒ.”…”�”}”(hj~Ah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mã hj–@ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÅAh]”hŒReturn”…”�”}”(hjÇAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mé hj–@ubhÝ)�”}”(hŒReturns 0 on success.”h]”hŒReturns 0 on success.”…”�”}”(hjÛAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mê hj–@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_task_fix_setgid (C function)”Œc.security_task_fix_setgid”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRint security_task_fix_setgid (struct cred *new, const struct cred *old, int flags)”h]”j)�”}”(hŒQint security_task_fix_setgid(struct cred *new, const struct cred *old, int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjBh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mó ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBh²hh³jBh´Mó ubj{)�”}”(hŒsecurity_task_fix_setgid”h]”j�)�”}”(hŒsecurity_task_fix_setgid”h]”hŒsecurity_task_fix_setgid”…”�”}”(hj+Bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'Bubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjBh²hh³jBh´Mó ubjœ)�”}”(hŒ5(struct cred *new, const struct cred *old, int flags)”h]”(j¢)�”}”(hŒstruct cred *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjGBh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjCBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjCBubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjeBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jgBŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j-BsbŒc.security_task_fix_setgid”†”asbuh1hhjCBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjCBubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj“Bh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjCBubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj?Bubj¢)�”}”(hŒconst struct cred *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¹Bh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjµBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµBubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÔBh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjµBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµBubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjòBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïBubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jôBŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j�BŒc.security_task_fix_setgid”†”asbuh1hhjµBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµBubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµBubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hj+Ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj?Bubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjDCh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@Cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@Cubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj`Ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj?Bubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjBh²hh³jBh´Mó ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjBh²hh³jBh´Mó ubah}”(h]”jýAah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jBh´Mó hjÿAh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Update LSM with new group id attributes”h]”hŒ'Update LSM with new group id attributes”…”�”}”(hjŠCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mó hj‡Ch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÿAh²hh³jBh´Mó ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¢Cjæj¢Cjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct cred *new`` updated credentials ``const struct cred *old`` credentials being replaced ``int flags`` LSM_SETID_* flag value **Description** Update the module's state after setting one or more of the group identity attributes of the current process. The **flags** parameter indicates which of the set*gid system calls invoked this hook. **new** is the set of credentials that will be installed. Modifications should be made to this rather than to **current->cred**. **Return** Returns 0 on success.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¬Ch]”hŒ Parameters”…”�”}”(hj®Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjªCubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M÷ hj¦Cubj )�”}”(hhh]”(j)�”}”(hŒ)``struct cred *new`` updated credentials ”h]”(j)�”}”(hŒ``struct cred *new``”h]”j)�”}”(hjËCh]”hŒstruct cred *new”…”�”}”(hjÍCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉCubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mô hjÅCubj2)�”}”(hhh]”hÝ)�”}”(hŒupdated credentials”h]”hŒupdated credentials”…”�”}”(hjäCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jàCh´Mô hjáCubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jàCh´Mô hjÂCubj)�”}”(hŒ6``const struct cred *old`` credentials being replaced ”h]”(j)�”}”(hŒ``const struct cred *old``”h]”j)�”}”(hjDh]”hŒconst struct cred *old”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mõ hjþCubj2)�”}”(hhh]”hÝ)�”}”(hŒcredentials being replaced”h]”hŒcredentials being replaced”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jDh´Mõ hjDubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjþCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jDh´Mõ hjÂCubj)�”}”(hŒ%``int flags`` LSM_SETID_* flag value ”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hj=Dh]”hŒ int flags”…”�”}”(hj?Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;Dubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mö hj7Dubj2)�”}”(hhh]”hÝ)�”}”(hŒLSM_SETID_* flag value”h]”hŒLSM_SETID_* flag value”…”�”}”(hjVDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jRDh´Mö hjSDubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj7Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jRDh´Mö hjÂCubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¦CubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjxDh]”hŒ Description”…”�”}”(hjzDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjvDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mø hj¦CubhÝ)�”}”(hXGUpdate the module's state after setting one or more of the group identity attributes of the current process. The **flags** parameter indicates which of the set*gid system calls invoked this hook. **new** is the set of credentials that will be installed. Modifications should be made to this rather than to **current->cred**.”h]”(hŒtUpdate the module’s state after setting one or more of the group identity attributes of the current process. The ”…”�”}”(hjŽDh²hh³Nh´Nubjõ)�”}”(hŒ **flags**”h]”hŒflags”…”�”}”(hj–Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŽDubhŒK parameter indicates which of the set*gid system calls invoked this hook. ”…”�”}”(hjŽDh²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj¨Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŽDubhŒh is the set of credentials that will be installed. Modifications should be made to this rather than to ”…”�”}”(hjŽDh²hh³Nh´Nubjõ)�”}”(hŒ**current->cred**”h]”hŒ current->cred”…”�”}”(hjºDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŽDubhŒ.”…”�”}”(hjŽDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M÷ hj¦CubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÕDh]”hŒReturn”…”�”}”(hj×Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mý hj¦CubhÝ)�”}”(hŒReturns 0 on success.”h]”hŒReturns 0 on success.”…”�”}”(hjëDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mþ hj¦Cubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_task_fix_setgroups (C function)”Œc.security_task_fix_setgroups”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒJint security_task_fix_setgroups (struct cred *new, const struct cred *old)”h]”j)�”}”(hŒIint security_task_fix_setgroups(struct cred *new, const struct cred *old)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjEh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEh²hh³j(Eh´M ubj{)�”}”(hŒsecurity_task_fix_setgroups”h]”j�)�”}”(hŒsecurity_task_fix_setgroups”h]”hŒsecurity_task_fix_setgroups”…”�”}”(hj;Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7Eubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjEh²hh³j(Eh´M ubjœ)�”}”(hŒ*(struct cred *new, const struct cred *old)”h]”(j¢)�”}”(hŒstruct cred *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjWEh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjSEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSEubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjuEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjrEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jwEŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j=EsbŒc.security_task_fix_setgroups”†”asbuh1hhjSEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSEubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj£Eh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjSEubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj°Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjOEubj¢)�”}”(hŒconst struct cred *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÉEh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÅEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅEubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjäEh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÅEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅEubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jFŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j‘EŒc.security_task_fix_setgroups”†”asbuh1hhjÅEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅEubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj.Fh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÅEubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hj;Fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjOEubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjEh²hh³j(Eh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjEh²hh³j(Eh´M ubah}”(h]”j Eah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j(Eh´M hjEh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Update LSM with new supplementary groups”h]”hŒ(Update LSM with new supplementary groups”…”�”}”(hjeFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjbFh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjEh²hh³j(Eh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj}Fjæj}Fjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX—**Parameters** ``struct cred *new`` updated credentials ``const struct cred *old`` credentials being replaced **Description** Update the module's state after setting the supplementary group identity attributes of the current process. **new** is the set of credentials that will be installed. Modifications should be made to this rather than to **current->cred**. **Return** Returns 0 on success.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‡Fh]”hŒ Parameters”…”�”}”(hj‰Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…Fubah}”(h]”h ]”h"]”h$]”h&• ]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj�Fubj )�”}”(hhh]”(j)�”}”(hŒ)``struct cred *new`` updated credentials ”h]”(j)�”}”(hŒ``struct cred *new``”h]”j)�”}”(hj¦Fh]”hŒstruct cred *new”…”�”}”(hj¨Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj Fubj2)�”}”(hhh]”hÝ)�”}”(hŒupdated credentials”h]”hŒupdated credentials”…”�”}”(hj¿Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»Fh´M hj¼Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»Fh´M hj�Fubj)�”}”(hŒ6``const struct cred *old`` credentials being replaced ”h]”(j)�”}”(hŒ``const struct cred *old``”h]”j)�”}”(hjßFh]”hŒconst struct cred *old”…”�”}”(hjáFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÙFubj2)�”}”(hhh]”hÝ)�”}”(hŒcredentials being replaced”h]”hŒcredentials being replaced”…”�”}”(hjøFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jôFh´M hjõFubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÙFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jôFh´M hj�Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj�FubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjGh]”hŒ Description”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj�FubhÝ)�”}”(hŒîUpdate the module's state after setting the supplementary group identity attributes of the current process. **new** is the set of credentials that will be installed. Modifications should be made to this rather than to **current->cred**.”h]”(hŒoUpdate the module’s state after setting the supplementary group identity attributes of the current process. ”…”�”}”(hj0Gh²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hj8Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0GubhŒh is the set of credentials that will be installed. Modifications should be made to this rather than to ”…”�”}”(hj0Gh²hh³Nh´Nubjõ)�”}”(hŒ**current->cred**”h]”hŒ current->cred”…”�”}”(hjJGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0GubhŒ.”…”�”}”(hj0Gh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj�FubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjeGh]”hŒReturn”…”�”}”(hjgGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcGubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj�FubhÝ)�”}”(hŒReturns 0 on success.”h]”hŒReturns 0 on success.”…”�”}”(hj{Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj�Fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_task_setpgid (C function)”Œc.security_task_setpgid”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=int security_task_setpgid (struct task_struct *p, pid_t pgid)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hj¦Gh²hh³j¸Gh´M ubj{)�”}”(hŒsecurity_task_setpgid”h]”j�)�”}”(hŒsecurity_task_setpgid”h]”hŒsecurity_task_setpgid”…”�”}”(hjËGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇGubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¦Gh²hh³j¸Gh´M ubjœ)�”}”(hŒ#(struct task_struct *p, pid_t pgid)”h]”(j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjçGh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjãGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjãGubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jHŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÍGsbŒc.security_task_setpgid”†”asbuh1hhjãGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjãGubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj3Hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjãGubj�)�”}”(hjïh]”hŒp”…”�”}”(hj@Hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjãGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßGubj¢)�”}”(hŒ pid_t pgid”h]”(h)�”}”(hhh]”j�)�”}”(hŒpid_t”h]”hŒpid_t”…”�”}”(hj[Hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j]HŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j!HŒc.security_task_setpgid”†”asbuh1hhjTHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTHubj�)�”}”(hŒpgid”h]”hŒpgid”…”�”}”(hj‡Hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßGubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¦Gh²hh³j¸Gh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¢Gh²hh³j¸Gh´M ubah}”(h]”j�Gah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¸Gh´M hjŸGh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Check if setting the pgid is allowed”h]”hŒ$Check if setting the pgid is allowed”…”�”}”(hj±Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj®Hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŸGh²hh³j¸Gh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÉHjæjÉHjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒü**Parameters** ``struct task_struct *p`` task being modified ``pid_t pgid`` new pgid **Description** Check permission before setting the process group identifier of the process **p** to **pgid**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÓHh]”hŒ Parameters”…”�”}”(hjÕHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÍHubj )�”}”(hhh]”(j)�”}”(hŒ.``struct task_struct *p`` task being modified ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hjòHh]”hŒstruct task_struct *p”…”�”}”(hjôHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjðHubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjìHubj2)�”}”(hhh]”hÝ)�”}”(hŒtask being modified”h]”hŒtask being modified”…”�”}”(hj Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jIh´M hjIubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjìHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIh´M hjéHubj)�”}”(hŒ``pid_t pgid`` new pgid ”h]”(j)�”}”(hŒ``pid_t pgid``”h]”j)�”}”(hj+Ih]”hŒ pid_t pgid”…”�”}”(hj-Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj%Iubj2)�”}”(hhh]”hÝ)�”}”(hŒnew pgid”h]”hŒnew pgid”…”�”}”(hjDIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@Ih´M hjAIubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@Ih´M hjéHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÍHubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjfIh]”hŒ Description”…”�”}”(hjhIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjdIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÍHubhÝ)�”}”(hŒ^Check permission before setting the process group identifier of the process **p** to **pgid**.”h]”(hŒLCheck permission before setting the process group identifier of the process ”…”�”}”(hj|Ih²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj„Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|IubhŒ to ”…”�”}”(hj|Ih²hh³Nh´Nubjõ)�”}”(hŒ**pgid**”h]”hŒpgid”…”�”}”(hj–Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|IubhŒ.”…”�”}”(hj|Ih²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÍHubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj±Ih]”hŒReturn”…”�”}”(hj³Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯Iubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÍHubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjÇIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÍHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_task_getpgid (C function)”Œc.security_task_getpgid”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1int security_task_getpgid (struct task_struct *p)”h]”j)�”}”(hŒ0int security_task_getpgid(struct task_struct *p)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjöIh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjòIh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M' ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòIh²hh³jJh´M' ubj{)�”}”(hŒsecurity_task_getpgid”h]”j�)�”}”(hŒsecurity_task_getpgid”h]”hŒsecurity_task_getpgid”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjòIh²hh³jJh´M' ubjœ)�”}”(hŒ(struct task_struct *p)”h]”j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj3Jh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@Jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/Jubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjQJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jSJŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jJsbŒc.security_task_getpgid”†”asbuh1hhj/Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/Jubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj/Jubj�)�”}”(hjïh]”hŒp”…”�”}”(hjŒJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+Jubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjòIh²hh³jJh´M' ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjîIh²hh³jJh´M' ubah}”(h]”jéIah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jJh´M' hjëIh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Check if getting the pgid is allowed”h]”hŒ$Check if getting the pgid is allowed”…”�”}”(hjµJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M' hj²Jh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjëIh²hh³jJh´M' ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÍJjæjÍJjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÆ**Parameters** ``struct task_struct *p`` task **Description** Check permission before getting the process group identifier of the process **p**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj×Jh]”hŒ Parameters”…”�”}”(hjÙJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÕJubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+ hjÑJubj )�”}”(hhh]”j)�”}”(hŒ``struct task_struct *p`` task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hjöJh]”hŒstruct task_struct *p”…”�”}”(hjøJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôJubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M( hjðJubj2)�”}”(hhh]”hÝ)�”}”(hŒtask”h]”hŒtask”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Kh´M( hj Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Kh´M( hjíJubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÑJubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj1Kh]”hŒ Description”…”�”}”(hj3Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M* hjÑJubhÝ)�”}”(hŒRCheck permission before getting the process group identifier of the process **p**.”h]”(hŒLCheck permission before getting the process group identifier of the process ”…”�”}”(hjGKh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjOKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGKubhŒ.”…”�”}”(hjGKh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M) hjÑJubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjjKh]”hŒReturn”…”�”}”(hjlKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhKubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M, hjÑJubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj€Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M- hjÑJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_task_getsid (C function)”Œc.security_task_getsid”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ0int security_task_getsid (struct task_struct *p)”h]”j)�”}”(hŒ/int security_task_getsid(struct task_struct *p)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¯Kh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj«Kh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M5 ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«Kh²hh³j½Kh´M5 ubj{)�”}”(hŒsecurity_task_getsid”h]”j�)�”}”(hŒsecurity_task_getsid”h]”hŒsecurity_task_getsid”…”�”}”(hjÐKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌKubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj«Kh²hh³j½Kh´M5 ubjœ)�”}”(hŒ(struct task_struct *p)”h]”j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjìKh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjèKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùKh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèKubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj Lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j LŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÒKsbŒc.security_task_getsid”†”asbuh1hhjèKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèKubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj8Lh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjèKubj�)�”}”(hjïh]”hŒp”…”�”}”(hjELh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèKubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäKubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj«Kh²hh³j½Kh´M5 ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj§Kh²hh³j½Kh´M5 ubah}”(h]”j¢Kah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j½Kh´M5 hj¤Kh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Check if getting the session id is allowed”h]”hŒ*Check if getting the session id is allowed”…”�”}”(hjnLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M5 hjkLh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¤Kh²hh³j½Kh´M5 ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj†Ljæj†Ljç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÀ**Parameters** ``struct task_struct *p`` task **Description** Check permission before getting the session identifier of the process **p**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�Lh]”hŒ Parameters”…”�”}”(hj’Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŽLubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M9 hjŠLubj )�”}”(hhh]”j)�”}”(hŒ``struct task_struct *p`` task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hj¯Lh]”hŒstruct task_struct *p”…”�”}”(hj±Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­Lubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M6 hj©Lubj2)�”}”(hhh]”hÝ)�”}”(hŒtask”h]”hŒtask”…”�”}”(hjÈLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄLh´M6 hjÅLubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj©Lubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄLh´M6 hj¦Lubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŠLubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjêLh]”hŒ Description”…”�”}”(hjìLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjèLubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8 hjŠLubhÝ)�”}”(hŒLCheck permission before getting the session identifier of the process **p**.”h]”(hŒFCheck permission before getting the session identifier of the process ”…”�”}”(hjMh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMubhŒ.”…”�”}”(hjMh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M7 hjŠLubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj#Mh]”hŒReturn”…”�”}”(hj%Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M9 hjŠLubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj9Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M: hjŠLubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_task_setnice (C function)”Œc.security_task_setnice”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;int security_task_setnice (struct task_struct *p, int nice)”h]”j)�”}”(hŒ:int security_task_setnice(struct task_struct *p, int nice)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjhMh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdMh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwMh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdMh²hh³jvMh´M_ ubj{)�”}”(hŒsecurity_task_setnice”h]”j�)�”}”(hŒsecurity_task_setnice”h]”hŒsecurity_task_setnice”…”�”}”(hj‰Mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…Mubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjdMh²hh³jvMh´M_ ubjœ)�”}”(hŒ!(struct task_struct *p, int nice)”h]”(j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¥Mh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¡Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²Mh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡Mubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjÃMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀMubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÅMŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‹MsbŒc.security_task_setnice”†”asbuh1hhj¡Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãMh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡Mubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjñMh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¡Mubj�)�”}”(hjïh]”hŒp”…”�”}”(hjþMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡Mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�Mubj¢)�”}”(hŒint nice”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNubj�)�”}”(hŒnice”h]”hŒnice”…”�”}”(hj2Nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjdMh²hh³jvMh´M_ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj`Mh²hh³jvMh´M_ ubah}”(h]”j[Mah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jvMh´M_ hj]Mh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/Check if setting a task's nice value is allowed”h]”hŒ1Check if setting a task’s nice value is allowed”…”�”}”(hj\Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_ hjYNh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj]Mh²hh³jvMh´M_ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjtNjæjtNjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÚ**Parameters** ``struct task_struct *p`` target task ``int nice`` nice value **Description** Check permission before setting the nice value of **p** to **nice**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj~Nh]”hŒ Parameters”…”�”}”(hj€Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mc hjxNubj )�”}”(hhh]”(j)�”}”(hŒ&``struct task_struct *p`` target task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hj�Nh]”hŒstruct task_struct *p”…”�”}”(hjŸNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M` hj—Nubj2)�”}”(hhh]”hÝ)�”}”(hŒ target task”h]”hŒ target task”…”�”}”(hj¶Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j²Nh´M` hj³Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj—Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²Nh´M` hj”Nubj)�”}”(hŒ``int nice`` nice value ”h]”(j)�”}”(hŒ ``int nice``”h]”j)�”}”(hjÖNh]”hŒint nice”…”�”}”(hjØNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔNubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ma hjÐNubj2)�”}”(hhh]”hÝ)�”}”(hŒ nice value”h]”hŒ nice value”…”�”}”(hjïNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jëNh´Ma hjìNubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÐNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jëNh´Ma hj”Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjxNubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjOh]”hŒ Description”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mc hjxNubhÝ)�”}”(hŒDCheck permission before setting the nice value of **p** to **nice**.”h]”(hŒ2Check permission before setting the nice value of ”…”�”}”(hj'Oh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj/Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'OubhŒ to ”…”�”}”(hj'Oh²hh³Nh´Nubjõ)�”}”(hŒ**nice**”h]”hŒnice”…”�”}”(hjAOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'OubhŒ.”…”�”}”(hj'Oh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mb hjxNubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj\Oh]”hŒReturn”…”�”}”(hj^Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjZOubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Md hjxNubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjrOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Me hjxNubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_task_setioprio (C function)”Œc.security_task_setioprio”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ?int security_task_setioprio (struct task_struct *p, int ioprio)”h]”j)�”}”(hŒ>int security_task_setioprio(struct task_struct *p, int ioprio)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¡Oh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�Oh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mm ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Oh²hh³j¯Oh´Mm ubj{)�”}”(hŒsecurity_task_setioprio”h]”j�)�”}”(hŒsecurity_task_setioprio”h]”hŒsecurity_task_setioprio”…”�”}”(hjÂOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾Oubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�Oh²hh³j¯Oh´Mm ubjœ)�”}”(hŒ#(struct task_struct *p, int ioprio)”h]”(j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÞOh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÚOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚOubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjüOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjùOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jþOŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÄOsbŒc.security_task_setioprio”†”asbuh1hhjÚOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚOubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj*Ph²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÚOubj�)�”}”(hjïh]”hŒp”…”�”}”(hj7Ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÖOubj¢)�”}”(hŒ int ioprio”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjOPh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjKPubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Ph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKPubj�)�”}”(hŒioprio”h]”hŒioprio”…”�”}”(hjkPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKPubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÖOubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�Oh²hh³j¯Oh´Mm ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj™Oh²hh³j¯Oh´Mm ubah}”(h]”j”Oah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¯Oh´Mm hj–Oh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if setting a task's ioprio is allowed”h]”hŒ-Check if setting a task’s ioprio is allowed”…”�”}”(hj•Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mm hj’Ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj–Oh²hh³j¯Oh´Mm ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj­Pjæj­Pjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒâ**Parameters** ``struct task_struct *p`` target task ``int ioprio`` ioprio value **Description** Check permission before setting the ioprio value of **p** to **ioprio**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj·Ph]”hŒ Parameters”…”�”}”(hj¹Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµPubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mq hj±Pubj )�”}”(hhh]”(j)�”}”(hŒ&``struct task_struct *p`` target task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hjÖPh]”hŒstruct task_struct *p”…”�”}”(hjØPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mn hjÐPubj2)�”}”(hhh]”hÝ)�”}”(hŒ target task”h]”hŒ target task”…”�”}”(hjïPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jëPh´Mn hjìPubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÐPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jëPh´Mn hjÍPubj)�”}”(hŒ``int ioprio`` ioprio value ”h]”(j)�”}”(hŒ``int ioprio``”h]”j)�”}”(hjQh]”hŒ int ioprio”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mo hj Qubj2)�”}”(hhh]”hÝ)�”}”(hŒ ioprio value”h]”hŒ ioprio value”…”�”}”(hj(Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j$Qh´Mo hj%Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Qubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$Qh´Mo hjÍPubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj±PubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjJQh]”hŒ Description”…”�”}”(hjLQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjHQubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mq hj±PubhÝ)�”}”(hŒHCheck permission before setting the ioprio value of **p** to **ioprio**.”h]”(hŒ4Check permission before setting the ioprio value of ”…”�”}”(hj`Qh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjhQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`QubhŒ to ”…”�”}”(hj`Qh²hh³Nh´Nubjõ)�”}”(hŒ **ioprio**”h]”hŒioprio”…”�”}”(hjzQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`QubhŒ.”…”�”}”(hj`Qh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mp hj±PubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj•Qh]”hŒReturn”…”�”}”(hj—Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mr hj±PubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj«Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ms hj±Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_task_getioprio (C function)”Œc.security_task_getioprio”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3int security_task_getioprio (struct task_struct *p)”h]”j)�”}”(hŒ2int security_task_getioprio(struct task_struct *p)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÚQh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÖQh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M{ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖQh²hh³jèQh´M{ ubj{)�”}”(hŒsecurity_task_getioprio”h]”j�)�”}”(hŒsecurity_task_getioprio”h]”hŒsecurity_task_getioprio”…”�”}”(hjûQh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷Qubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÖQh²hh³jèQh´M{ ubjœ)�”}”(hŒ(struct task_struct *p)”h]”j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj5Rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2Rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j7RŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jýQsbŒc.security_task_getioprio”†”asbuh1hhjRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjURh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjcRh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjRubj�)�”}”(hjïh]”hŒp”…”�”}”(hjpRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjRubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÖQh²hh³jèQh´M{ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÒQh²hh³jèQh´M{ ubah}”(h]”jÍQah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jèQh´M{ hjÏQh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if getting a task's ioprio is allowed”h]”hŒ-Check if getting a task’s ioprio is allowed”…”�”}”(hj™Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M{ hj–Rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÏQh²hh³jèQh´M{ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj±Rjæj±Rjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ®**Parameters** ``struct task_struct *p`` task **Description** Check permission before getting the ioprio value of **p**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj»Rh]”hŒ Parameters”…”�”}”(hj½Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¹Rubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjµRubj )�”}”(hhh]”j)�”}”(hŒ``struct task_struct *p`` task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hjÚRh]”hŒstruct task_struct *p”…”�”}”(hjÜRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØRubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M| hjÔRubj2)�”}”(hhh]”hÝ)�”}”(hŒtask”h]”hŒtask”…”�”}”(hjóRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïRh´M| hjðRubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïRh´M| hjÑRubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjµRubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjSh]”hŒ Description”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M~ hjµRubhÝ)�”}”(hŒ:Check permission before getting the ioprio value of **p**.”h]”(hŒ4Check permission before getting the ioprio value of ”…”�”}”(hj+Sh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj3Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+SubhŒ.”…”�”}”(hj+Sh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M} hjµRubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjNSh]”hŒReturn”…”�”}”(hjPSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjLSubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjµRubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjdSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M€ hjµRubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_task_prlimit (C function)”Œc.security_task_prlimit”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒaint security_task_prlimit (const struct cred *cred, const struct cred *tcred, unsigned int flags)”h]”j)�”}”(hŒ`int security_task_prlimit(const struct cred *cred, const struct cred *tcred, unsigned int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj“Sh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�Sh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mˆ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢Sh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Sh²hh³j¡Sh´Mˆ ubj{)�”}”(hŒsecurity_task_prlimit”h]”j�)�”}”(hŒsecurity_task_prlimit”h]”hŒsecurity_task_prlimit”…”�”}”(hj´Sh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°Subah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�Sh²hh³j¡Sh´Mˆ ubjœ)�”}”(hŒG(const struct cred *cred, const struct cred *tcred, unsigned int flags)”h]”(j¢)�”}”(hŒconst struct cred *cred”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÐSh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÌSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌSubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjëSh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÌSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌSubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj Th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j TŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¶SsbŒc.security_task_prlimit”†”asbuh1hhjÌSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌSubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj7Th²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÌSubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjDTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÈSubj¢)�”}”(hŒconst struct cred *tcred”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj]Th²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjYTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjYTubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjxTh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjYTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…Th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjYTubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj–Th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“Tubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j˜TŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j%TŒc.security_task_prlimit”†”asbuh1hhjYTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´Th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjYTubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÂTh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjYTubj�)�”}”(hŒtcred”h]”hŒtcred”…”�”}”(hjÏTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÈSubj¢)�”}”(hŒunsigned int flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjèTh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjäTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäTubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjäTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäTubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj Uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÈSubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�Sh²hh³j¡Sh´Mˆ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‹Sh²hh³j¡Sh´Mˆ ubah}”(h]”j†Sah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¡Sh´Mˆ hjˆSh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0Check if get/setting resources limits is allowed”h]”hŒ0Check if get/setting resources limits is allowed”…”�”}”(hjJUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mˆ hjGUh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjˆSh²hh³j¡Sh´Mˆ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjbUjæjbUjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXa**Parameters** ``const struct cred *cred`` current task credentials ``const struct cred *tcred`` target task credentials ``unsigned int flags`` LSM_PRLIMIT_* flag bits indicating a get/set/both **Description** Check permission before getting and/or setting the resource limits of another task. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjlUh]”hŒ Parameters”…”�”}”(hjnUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjjUubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŒ hjfUubj )�”}”(hhh]”(j)�”}”(hŒ5``const struct cred *cred`` current task credentials ”h]”(j)�”}”(hŒ``const struct cred *cred``”h]”j)�”}”(hj‹Uh]”hŒconst struct cred *cred”…”�”}”(hj�Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‰Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‰ hj…Uubj2)�”}”(hhh]”hÝ)�”}”(hŒcurrent task credentials”h]”hŒcurrent task credentials”…”�”}”(hj¤Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Uh´M‰ hj¡Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj…Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Uh´M‰ hj‚Uubj)�”}”(hŒ5``const struct cred *tcred`` target task credentials ”h]”(j)�”}”(hŒ``const struct cred *tcred``”h]”j)�”}”(hjÄUh]”hŒconst struct cred *tcred”…”�”}”(hjÆUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂUubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŠ hj¾Uubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget task credentials”h]”hŒtarget task credentials”…”�”}”(hjÝUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÙUh´MŠ hjÚUubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¾Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÙUh´MŠ hj‚Uubj)�”}”(hŒI``unsigned int flags`` LSM_PRLIMIT_* flag bits indicating a get/set/both ”h]”(j)�”}”(hŒ``unsigned int flags``”h]”j)�”}”(hjýUh]”hŒunsigned int flags”…”�”}”(hjÿUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûUubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‹ hj÷Uubj2)�”}”(hhh]”hÝ)�”}”(hŒ1LSM_PRLIMIT_* flag bits indicating a get/set/both”h]”hŒ1LSM_PRLIMIT_* flag bits indicating a get/set/both”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jVh´M‹ hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj÷Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jVh´M‹ hj‚Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjfUubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj8Vh]”hŒ Description”…”�”}”(hj:Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hjfUubhÝ)�”}”(hŒSCheck permission before getting and/or setting the resource limits of another task.”h]”hŒSCheck permission before getting and/or setting the resource limits of another task.”…”�”}”(hjNVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŒ hjfUubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj_Vh]”hŒReturn”…”�”}”(hjaVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj]Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hjfUubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjuVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hjfUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_task_setrlimit (C function)”Œc.security_task_setrlimit”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒcint security_task_setrlimit (struct task_struct *p, unsigned int resource, struct rlimit *new_rlim)”h]”j)�”}”(hŒbint security_task_setrlimit(struct task_struct *p, unsigned int resource, struct rlimit *new_rlim)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¤Vh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Vh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Vh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Vh²hh³j²Vh´M™ ubj{)�”}”(hŒsecurity_task_setrlimit”h]”j�)�”}”(hŒsecurity_task_setrlimit”h]”hŒsecurity_task_setrlimit”…”�”}”(hjÅVh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁVubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Vh²hh³j²Vh´M™ ubjœ)�”}”(hŒG(struct task_struct *p, unsigned int resource, struct rlimit *new_rlim)”h]”(j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjáVh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÝVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîVh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝVubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjÿVh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjüVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jWŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÇVsbŒc.security_task_setrlimit”†”asbuh1hhjÝVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝVubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj-Wh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÝVubj�)�”}”(hjïh]”hŒp”…”�”}”(hj:Wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙVubj¢)�”}”(hŒunsigned int resource”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjRWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjNWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNWubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjnWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjNWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|Wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNWubj�)�”}”(hŒresource”h]”hŒresource”…”�”}”(hjŠWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙVubj¢)�”}”(hŒstruct rlimit *new_rlim”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj£Wh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjŸWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŸWubh)�”}”(hhh]”j�)�”}”(hŒrlimit”h]”hŒrlimit”…”�”}”(hjÁWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾Wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÃWŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jWŒc.security_task_setrlimit”†”asbuh1hhjŸWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŸWubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjíWh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjŸWubj�)�”}”(hŒnew_rlim”h]”hŒnew_rlim”…”�”}”(hjúWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙVubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Vh²hh³j²Vh´M™ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjœVh²hh³j²Vh´M™ ubah}”(h]”j—Vah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²Vh´M™ hj™Vh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Check if setting a new rlimit value is allowed”h]”hŒ.Check if setting a new rlimit value is allowed”…”�”}”(hj$Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™ hj!Xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj™Vh²hh³j²Vh´M™ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjsignal->rlim + resource). **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjFXh]”hŒ Parameters”…”�”}”(hjHXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjDXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hj@Xubj )�”}”(hhh]”(j)�”}”(hŒ5``struct task_struct *p`` target task's group leader ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hjeXh]”hŒstruct task_struct *p”…”�”}”(hjgXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjcXubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mš hj_Xubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget task's group leader”h]”hŒtarget task’s group leader”…”�”}”(hj~Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jzXh´Mš hj{Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj_Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jzXh´Mš hj\Xubj)�”}”(hŒ<``unsigned int resource`` resource whose limit is being set ”h]”(j)�”}”(hŒ``unsigned int resource``”h]”j)�”}”(hjžXh]”hŒunsigned int resource”…”�”}”(hj Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœXubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M› hj˜Xubj2)�”}”(hhh]”hÝ)�”}”(hŒ!resource whose limit is being set”h]”hŒ!resource whose limit is being set”…”�”}”(hj·Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j³Xh´M› hj´Xubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj˜Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j³Xh´M› hj\Xubj)�”}”(hŒ/``struct rlimit *new_rlim`` new resource limit ”h]”(j)�”}”(hŒ``struct rlimit *new_rlim``”h]”j)�”}”(hj×Xh]”hŒstruct rlimit *new_rlim”…”�”}”(hjÙXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕXubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mœ hjÑXubj2)�”}”(hhh]”hÝ)�”}”(hŒnew resource limit”h]”hŒnew resource limit”…”�”}”(hjðXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jìXh´Mœ hjíXubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jìXh´Mœ hj\Xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj@XubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjYh]”hŒ Description”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mž hj@XubhÝ)�”}”(hŒÄCheck permission before setting the resource limits of process **p** for **resource** to **new_rlim**. The old resource limit values can be examined by dereferencing (p->signal->rlim + resource).”h]”(hŒ?Check permission before setting the resource limits of process ”…”�”}”(hj(Yh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj0Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(YubhŒ for ”…”�”}”(hj(Yh²hh³Nh´Nubjõ)�”}”(hŒ **resource**”h]”hŒresource”…”�”}”(hjBYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(YubhŒ to ”…”�”}”(hj(Yh²hh³Nh´Nubjõ)�”}”(hŒ **new_rlim**”h]”hŒnew_rlim”…”�”}”(hjTYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(YubhŒ_. The old resource limit values can be examined by dereferencing (p->signal->rlim + resource).”…”�”}”(hj(Yh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hj@XubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjoYh]”hŒReturn”…”�”}”(hjqYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjmYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¡ hj@XubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj…Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¢ hj@Xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_task_setscheduler (C function)”Œc.security_task_setscheduler”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6int security_task_setscheduler (struct task_struct *p)”h]”j)�”}”(hŒ5int security_task_setscheduler(struct task_struct *p)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj´Yh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj°Yh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M« ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°Yh²hh³jÂYh´M« ubj{)�”}”(hŒsecurity_task_setscheduler”h]”j�)�”}”(hŒsecurity_task_setscheduler”h]”hŒsecurity_task_setscheduler”…”�”}”(hjÕYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÑYubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj°Yh²hh³jÂYh´M« ubjœ)�”}”(hŒ(struct task_struct *p)”h]”j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjñYh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjíYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjíYubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j×YsbŒc.security_task_setscheduler”†”asbuh1hhjíYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjíYubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj=Zh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjíYubj�)�”}”(hjïh]”hŒp”…”�”}”(hjJZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjíYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjéYubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj°Yh²hh³jÂYh´M« ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¬Yh²hh³jÂYh´M« ubah}”(h]”j§Yah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÂYh´M« hj©Yh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Check if setting sched policy/param is allowed”h]”hŒ.Check if setting sched policy/param is allowed”…”�”}”(hjsZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M« hjpZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj©Yh²hh³jÂYh´M« ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‹Zjæj‹Zjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÐ**Parameters** ``struct task_struct *p`` target task **Description** Check permission before setting scheduling policy and/or parameters of process **p**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj•Zh]”hŒ Parameters”…”�”}”(hj—Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“Zubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¯ hj�Zubj )�”}”(hhh]”j)�”}”(hŒ&``struct task_struct *p`` target task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hj´Zh]”hŒstruct task_struct *p”…”�”}”(hj¶Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²Zubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¬ hj®Zubj2)�”}”(hhh]”hÝ)�”}”(hŒ target task”h]”hŒ target task”…”�”}”(hjÍZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÉZh´M¬ hjÊZubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj®Zubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÉZh´M¬ hj«Zubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ZubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjïZh]”hŒ Description”…”�”}”(hjñZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjíZubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M® hj�ZubhÝ)�”}”(hŒUCheck permission before setting scheduling policy and/or parameters of process **p**.”h]”(hŒOCheck permission before setting scheduling policy and/or parameters of process ”…”�”}”(hj[h²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj [h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj[ubhŒ.”…”�”}”(hj[h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M­ hj�ZubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj([h]”hŒReturn”…”�”}”(hj*[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj&[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M° hj�ZubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj>[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M± hj�Zubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_task_getscheduler (C function)”Œc.security_task_getscheduler”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6int security_task_getscheduler (struct task_struct *p)”h]”j)�”}”(hŒ5int security_task_getscheduler(struct task_struct *p)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjm[h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhji[h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¹ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hji[h²hh³j{[h´M¹ ubj{)�”}”(hŒsecurity_task_getscheduler”h]”j�)�”}”(hŒsecurity_task_getscheduler”h]”hŒsecurity_task_getscheduler”…”�”}”(hjŽ[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŠ[ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhji[h²hh³j{[h´M¹ ubjœ)�”}”(hŒ(struct task_struct *p)”h]”j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjª[h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¦[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦[ubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjÈ[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅ[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÊ[Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�[sbŒc.security_task_getscheduler”†”asbuh1hhj¦[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦[ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjö[h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¦[ubj�)�”}”(hjïh]”hŒp”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¢[ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hji[h²hh³j{[h´M¹ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hje[h²hh³j{[h´M¹ ubah}”(h]”j`[ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j{[h´M¹ hjb[h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if getting scheduling info is allowed”h]”hŒ+Check if getting scheduling info is allowed”…”�”}”(hj,\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¹ hj)\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjb[h²hh³j{[h´M¹ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjD\jæjD\jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÆ**Parameters** ``struct task_struct *p`` target task **Description** Check permission before obtaining scheduling information for process **p**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjN\h]”hŒ Parameters”…”�”}”(hjP\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjL\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½ hjH\ubj )�”}”(hhh]”j)�”}”(hŒ&``struct task_struct *p`` target task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hjm\h]”hŒstruct task_struct *p”…”�”}”(hjo\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjk\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mº hjg\ubj2)�”}”(hhh]”hÝ)�”}”(hŒ target task”h]”hŒ target task”…”�”}”(hj†\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚\h´Mº hjƒ\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjg\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚\h´Mº hjd\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjH\ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¨\h]”hŒ Description”…”�”}”(hjª\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¼ hjH\ubhÝ)�”}”(hŒKCheck permission before obtaining scheduling information for process **p**.”h]”(hŒECheck permission before obtaining scheduling information for process ”…”�”}”(hj¾\h²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjÆ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾\ubhŒ.”…”�”}”(hj¾\h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M» hjH\ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjá\h]”hŒReturn”…”�”}”(hjã\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjß\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½ hjH\ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj÷\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¾ hjH\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_task_movememory (C function)”•Œc.security_task_movememory”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4int security_task_movememory (struct task_struct *p)”h]”j)�”}”(hŒ3int security_task_movememory(struct task_struct *p)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj&]h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj"]h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÆ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj"]h²hh³j4]h´MÆ ubj{)�”}”(hŒsecurity_task_movememory”h]”j�)�”}”(hŒsecurity_task_movememory”h]”hŒsecurity_task_movememory”…”�”}”(hjG]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjC]ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj"]h²hh³j4]h´MÆ ubjœ)�”}”(hŒ(struct task_struct *p)”h]”j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjc]h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj_]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_]ubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj�]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~]ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jƒ]Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jI]sbŒc.security_task_movememory”†”asbuh1hhj_]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_]ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¯]h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj_]ubj�)�”}”(hjïh]”hŒp”…”�”}”(hj¼]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj[]ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj"]h²hh³j4]h´MÆ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj]h²hh³j4]h´MÆ ubah}”(h]”j]ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j4]h´MÆ hj]h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!Check if moving memory is allowed”h]”hŒ!Check if moving memory is allowed”…”�”}”(hjå]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÆ hjâ]h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj]h²hh³j4]h´MÆ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjý]jæjý]jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ±**Parameters** ``struct task_struct *p`` task **Description** Check permission before moving memory owned by process **p**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj^h]”hŒ Parameters”…”�”}”(hj ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÊ hj^ubj )�”}”(hhh]”j)�”}”(hŒ``struct task_struct *p`` task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hj&^h]”hŒstruct task_struct *p”…”�”}”(hj(^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÇ hj ^ubj2)�”}”(hhh]”hÝ)�”}”(hŒtask”h]”hŒtask”…”�”}”(hj?^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;^h´MÇ hj<^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;^h´MÇ hj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj^ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hja^h]”hŒ Description”…”�”}”(hjc^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÉ hj^ubhÝ)�”}”(hŒ=Check permission before moving memory owned by process **p**.”h]”(hŒ7Check permission before moving memory owned by process ”…”�”}”(hjw^h²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjw^ubhŒ.”…”�”}”(hjw^h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÈ hj^ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjš^h]”hŒReturn”…”�”}”(hjœ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÊ hj^ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj°^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MË hj^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_task_kill (C function)”Œc.security_task_kill”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒmint security_task_kill (struct task_struct *p, struct kernel_siginfo *info, int sig, const struct cred *cred)”h]”j)�”}”(hŒlint security_task_kill(struct task_struct *p, struct kernel_siginfo *info, int sig, const struct cred *cred)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjß^h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÛ^h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ^h²hh³jí^h´MÓ ubj{)�”}”(hŒsecurity_task_kill”h]”j�)�”}”(hŒsecurity_task_kill”h]”hŒsecurity_task_kill”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjü^ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÛ^h²hh³jí^h´MÓ ubjœ)�”}”(hŒV(struct task_struct *p, struct kernel_siginfo *info, int sig, const struct cred *cred)”h]”(j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_ubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj:_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j<_Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j_sbŒc.security_task_kill”†”asbuh1hhj_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj_ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh_h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj_ubj�)�”}”(hjïh]”hŒp”…”�”}”(hju_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_ubj¢)�”}”(hŒstruct kernel_siginfo *info”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�_h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‰_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰_ubh)�”}”(hhh]”j�)�”}”(hŒkernel_siginfo”h]”hŒkernel_siginfo”…”�”}”(hj«_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨_ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j­_Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jV_Œc.security_task_kill”†”asbuh1hhj‰_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰_ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj×_h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‰_ubj�)�”}”(hŒinfo”h]”hŒinfo”…”�”}”(hjä_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_ubj¢)�”}”(hŒint sig”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjý_h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjù_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj `h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjù_ubj�)�”}”(hŒsig”h]”hŒsig”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjù_ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_ubj¢)�”}”(hŒconst struct cred *cred”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj2`h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.`ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjM`h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZ`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.`ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjk`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjh`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jm`Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jV_Œc.security_task_kill”†”asbuh1hhj.`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.`ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj—`h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj.`ubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj¤`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÛ^h²hh³jí^h´MÓ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj×^h²hh³jí^h´MÓ ubah}”(h]”jÒ^ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jí^h´MÓ hjÔ^h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Check if sending a signal is allowed”h]”hŒ$Check if sending a signal is allowed”…”�”}”(hjÎ`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓ hjË`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÔ^h²hh³jí^h´MÓ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjæ`jæjæ`jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX—**Parameters** ``struct task_struct *p`` target process ``struct kernel_siginfo *info`` signal information ``int sig`` signal value ``const struct cred *cred`` credentials of the signal sender, NULL if **current** **Description** Check permission before sending signal **sig** to **p**. **info** can be NULL, the constant 1, or a pointer to a kernel_siginfo structure. If **info** is 1 or SI_FROMKERNEL(info) is true, then the signal should be viewed as coming from the kernel and should typically be permitted. SIGIO signals are handled separately by the send_sigiotask hook in file_security_ops. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjð`h]”hŒ Parameters”…”�”}”(hjò`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjî`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M× hjê`ubj )�”}”(hhh]”(j)�”}”(hŒ)``struct task_struct *p`` target process ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hjah]”hŒstruct task_struct *p”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔ hj aubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget process”h]”hŒtarget process”…”�”}”(hj(ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j$ah´MÔ hj%aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$ah´MÔ hjaubj)�”}”(hŒ3``struct kernel_siginfo *info`` signal information ”h]”(j)�”}”(hŒ``struct kernel_siginfo *info``”h]”j)�”}”(hjHah]”hŒstruct kernel_siginfo *info”…”�”}”(hjJah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFaubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÕ hjBaubj2)�”}”(hhh]”hÝ)�”}”(hŒsignal information”h]”hŒsignal information”…”�”}”(hjaah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j]ah´MÕ hj^aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjBaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]ah´MÕ hjaubj)�”}”(hŒ``int sig`` signal value ”h]”(j)�”}”(hŒ ``int sig``”h]”j)�”}”(hj�ah]”hŒint sig”…”�”}”(hjƒah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjaubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÖ hj{aubj2)�”}”(hhh]”hÝ)�”}”(hŒ signal value”h]”hŒ signal value”…”�”}”(hjšah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–ah´MÖ hj—aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–ah´MÖ hjaubj)�”}”(hŒR``const struct cred *cred`` credentials of the signal sender, NULL if **current** ”h]”(j)�”}”(hŒ``const struct cred *cred``”h]”j)�”}”(hjºah]”hŒconst struct cred *cred”…”�”}”(hj¼ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M× hj´aubj2)�”}”(hhh]”hÝ)�”}”(hŒ5credentials of the signal sender, NULL if **current**”h]”(hŒ*credentials of the signal sender, NULL if ”…”�”}”(hjÓah²hh³Nh´Nubjõ)�”}”(hŒ **current**”h]”hŒcurrent”…”�”}”(hjÛah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓaubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏah´M× hjÐaubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏah´M× hjaubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjê`ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjbh]”hŒ Description”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÙ hjê`ubhÝ)�”}”(hXrCheck permission before sending signal **sig** to **p**. **info** can be NULL, the constant 1, or a pointer to a kernel_siginfo structure. If **info** is 1 or SI_FROMKERNEL(info) is true, then the signal should be viewed as coming from the kernel and should typically be permitted. SIGIO signals are handled separately by the send_sigiotask hook in file_security_ops.”h]”(hŒ'Check permission before sending signal ”…”�”}”(hjbh²hh³Nh´Nubjõ)�”}”(hŒ**sig**”h]”hŒsig”…”�”}”(hj!bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbubhŒ to ”…”�”}”(hjbh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj3bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbubhŒ. ”…”�”}”(hjbh²hh³Nh´Nubjõ)�”}”(hŒ**info**”h]”hŒinfo”…”�”}”(hjEbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbubhŒN can be NULL, the constant 1, or a pointer to a kernel_siginfo structure. If ”…”�”}”(hjbh²hh³Nh´Nubjõ)�”}”(hŒ**info**”h]”hŒinfo”…”�”}”(hjWbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbubhŒÚ is 1 or SI_FROMKERNEL(info) is true, then the signal should be viewed as coming from the kernel and should typically be permitted. SIGIO signals are handled separately by the send_sigiotask hook in file_security_ops.”…”�”}”(hjbh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MØ hjê`ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjrbh]”hŒReturn”…”�”}”(hjtbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjpbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÞ hjê`ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjˆbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mß hjê`ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_task_prctl (C function)”Œc.security_task_prctl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒtint security_task_prctl (int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5)”h]”j)�”}”(hŒsint security_task_prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj·bh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj³bh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mè ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³bh²hh³jÅbh´Mè ubj{)�”}”(hŒsecurity_task_prctl”h]”j�)�”}”(hŒsecurity_task_prctl”h]”hŒsecurity_task_prctl”…”�”}”(hjØbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔbubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj³bh²hh³jÅbh´Mè ubjœ)�”}”(hŒ\(int option, unsigned long arg2, unsigned long arg3, unsigned long arg4, unsigned long arg5)”h]”(j¢)�”}”(hŒ int option”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjôbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjðbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjðbubj�)�”}”(hŒoption”h]”hŒoption”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjðbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjìbubj¢)�”}”(hŒunsigned long arg2”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj)ch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj%cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%cubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjEch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj%cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%cubj�)�”}”(hŒarg2”h]”hŒarg2”…”�”}”(hjach²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjìbubj¢)�”}”(hŒunsigned long arg3”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjzch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjvcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvcubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj–ch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjvcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvcubj�)�”}”(hŒarg3”h]”hŒarg3”…”�”}”(hj²ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjìbubj¢)�”}”(hŒunsigned long arg4”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjËch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÇcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇcubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjçch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÇcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇcubj�)�”}”(hŒarg4”h]”hŒarg4”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjìbubj¢)�”}”(hŒunsigned long arg5”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*dh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj8dh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFdh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdubj�)�”}”(hŒarg5”h]”hŒarg5”…”�”}”(hjTdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjìbubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj³bh²hh³jÅbh´Mè ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¯bh²hh³jÅbh´Mè ubah}”(h]”jªbah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÅbh´Mè hj¬bh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Handle an LSM specific prctl() call”h]”hŒ#Handle an LSM specific prctl() call”…”�”}”(hj~dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mè hj{dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¬bh²hh³jÅbh´Mè ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj–djæj–djç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXx**Parameters** ``int option`` operation ``unsigned long arg2`` argument ``unsigned long arg3`` argument ``unsigned long arg4`` argument ``unsigned long arg5`` argument **Description** Handle lsm specific prctl() operations. **Return** Return -ENOSYS if no-one wanted to handle this op, any other value to cause prctl() to return immediately with that value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj dh]”hŒ Parameters”…”�”}”(hj¢dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjždubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mì hjšdubj )�”}”(hhh]”(j)�”}”(hŒ``int option`` operation ”h]”(j)�”}”(hŒ``int option``”h]”j)�”}”(hj¿dh]”hŒ int option”…”�”}”(hjÁdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½dubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mé hj¹dubj2)�”}”(hhh]”hÝ)�”}”(hŒ operation”h]”hŒ operation”…”�”}”(hjØdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔdh´Mé hjÕdubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔdh´Mé hj¶dubj)�”}”(hŒ ``unsigned long arg2`` argument ”h]”(j)�”}”(hŒ``unsigned long arg2``”h]”j)�”}”(hjødh]”hŒunsigned long arg2”…”�”}”(hjúdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjödubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mê hjòdubj2)�”}”(hhh]”hÝ)�”}”(hŒargument”h]”hŒargument”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j eh´Mê hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjòdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j eh´Mê hj¶dubj)�”}”(hŒ ``unsigned long arg3`` argument ”h]”(j)�”}”(hŒ``unsigned long arg3``”h]”j)�”}”(hj1eh]”hŒunsigned long arg3”…”�”}”(hj3eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/eubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Më hj+eubj2)�”}”(hhh]”hÝ)�”}”(hŒargument”h]”hŒargument”…”�”}”(hjJeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jFeh´Më hjGeubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj+eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jFeh´Më hj¶dubj)�”}”(hŒ ``unsigned long arg4`` argument ”h]”(j)�”}”(hŒ``unsigned long arg4``”h]”j)�”}”(hjjeh]”hŒunsigned long arg4”…”�”}”(hjleh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjheubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mì hjdeubj2)�”}”(hhh]”hÝ)�”}”(hŒargument”h]”hŒargument”…”�”}”(hjƒeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jeh´Mì hj€eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjdeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jeh´Mì hj¶dubj)�”}”(hŒ ``unsigned long arg5`` argument ”h]”(j)�”}”(hŒ``unsigned long arg5``”h]”j)�”}”(hj£eh]”hŒunsigned long arg5”…”�”}”(hj¥eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡eubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mí hj�eubj2)�”}”(hhh]”hÝ)�”}”(hŒargument”h]”hŒargument”…”�”}”(hj¼eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¸eh´Mí hj¹eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¸eh´Mí hj¶dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjšdubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÞeh]”hŒ Description”…”�”}”(hjàeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜeubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mï hjšdubhÝ)�”}”(hŒ'Handle lsm specific prctl() operations.”h]”hŒ'Handle lsm specific prctl() operations.”…”�”}”(hjôeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mî hjšdubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjfh]”hŒReturn”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mð hjšdubhÝ)�”}”(hŒzReturn -ENOSYS if no-one wanted to handle this op, any other value to cause prctl() to return immediately with that value.”h]”hŒzReturn -ENOSYS if no-one wanted to handle this op, any other value to cause prctl() to return immediately with that value.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mñ hjšdubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_task_to_inode (C function)”Œc.security_task_to_inode”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHvoid security_task_to_inode (struct task_struct *p, struct inode *inode)”h]”j)�”}”(hŒGvoid security_task_to_inode(struct task_struct *p, struct inode *inode)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjJfh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjFfh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFfh²hh³jXfh´M ubj{)�”}”(hŒsecurity_task_to_inode”h]”j�)�”}”(hŒsecurity_task_to_inode”h]”hŒsecurity_task_to_inode”…”�”}”(hjkfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjgfubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjFfh²hh³jXfh´M ubjœ)�”}”(hŒ,(struct task_struct *p, struct inode *inode)”h]”(j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‡fh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjƒfubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒfubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj¥fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j§fŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jmfsbŒc.security_task_to_inode”†”asbuh1hhjƒfubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒfubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÓfh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjƒfubj�)�”}”(hjïh]”hŒp”…”�”}”(hjàfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjfubj¢)�”}”(hŒstruct inode *inode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjøfh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjôfubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôfubh)�”}”(hhh]”j�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jgŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÁfŒc.security_task_to_inode”†”asbuh1hhjôfubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4gh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôfubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjBgh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjôfubj�)�”}”(hŒinode”h]”hŒinode”…”�”}”(hjOgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjfubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjFfh²hh³jXfh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjBfh²hh³jXfh´M ubah}”(h]”j=fah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jXfh´M hj?fh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Set the security attributes of a task's inode”h]”hŒ/Set the security attributes of a task’s inode”…”�”}”(hjygh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjvgh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj?fh²hh³jXfh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‘gjæj‘gjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÚ**Parameters** ``struct task_struct *p`` task ``struct inode *inode`` inode **Description** Set the security attributes for an inode based on an associated task's security attributes, e.g. for /proc/pid inodes.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj›gh]”hŒ Parameters”…”�”}”(hj�gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™gubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj•gubj )�”}”(hhh]”(j)�”}”(hŒ``struct task_struct *p`` task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hjºgh]”hŒstruct task_struct *p”…”�”}”(hj¼gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸gubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj´gubj2)�”}”(hhh]”hÝ)�”}”(hŒtask”h]”hŒtask”…”�”}”(hjÓgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏgh´M hjÐgubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏgh´M hj±gubj)�”}”(hŒ``struct inode *inode`` inode ”h]”(j)�”}”(hŒ``struct inode *inode``”h]”j)�”}”(hjógh]”hŒstruct inode *inode”…”�”}”(hjõgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñgubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjígubj2)�”}”(hhh]”hÝ)�”}”(hŒinode”h]”hŒinode”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jhh´M hj hubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjígubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jhh´M hj±gubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj•gubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj.hh]”hŒ Description”…”�”}”(hj0hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj•gubhÝ)�”}”(hŒvSet the security attributes for an inode based on an associated task's security attributes, e.g. for /proc/pid inodes.”h]”hŒxSet the security attributes for an inode based on an associated task’s security attributes, e.g. for /proc/pid inodes.”…”�”}”(hjDhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj•gubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_create_user_ns (C function)”Œc.security_create_user_ns”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ5int security_create_user_ns (const struct cred *cred)”h]”j)�”}”(hŒ4int security_create_user_ns(const struct cred *cred)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjshh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjohh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjohh²hh³j�hh´M ubj{)�”}”(hŒsecurity_create_user_ns”h]”j�)�”}”(hŒsecurity_create_user_ns”h]”hŒsecurity_create_user_ns”…”�”}”(hj”hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�hubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjohh²hh³j�hh´M ubjœ)�”}”(hŒ(const struct cred *cred)”h]”j¢)�”}”(hŒconst struct cred *cred”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj°hh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¬hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬hubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjËhh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¬hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØhh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬hubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjéhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæhubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jëhŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j–hsbŒc.security_create_user_ns”†”asbuh1hhj¬hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬hubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¬hubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj$ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨hubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjohh²hh³j�hh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjkhh²hh³j�hh´M ubah}”(h]”jfhah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�hh´M hjhhh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Check if creating a new userns is allowed”h]”hŒ)Check if creating a new userns is allowed”…”�”}”(hjNih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjKih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjhhh²hh³j�hh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjfijæjfijç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÇ**Parameters** ``const struct cred *cred`` prepared creds **Description** Check permission prior to creating a new user namespace. **Return** Returns 0 if successful, otherwise < 0 error code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjpih]”hŒ Parameters”…”�”}”(hjrih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjniubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjjiubj )�”}”(hhh]”j)�”}”(hŒ+``const struct cred *cred`` prepared creds ”h]”(j)�”}”(hŒ``const struct cred *cred``”h]”j)�”}”(hj�ih]”hŒconst struct cred *cred”…”�”}”(hj‘ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj‰iubj2)�”}”(hhh]”hÝ)�”}”(hŒprepared creds”h]”hŒprepared creds”…”�”}”(hj¨ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤ih´M hj¥iubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤ih´M hj†iubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjjiubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÊih]”hŒ Description”…”�”}”(hjÌih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjjiubhÝ)�”}”(hŒ8Check permission prior to creating a new user namespace.”h]”hŒ8Check permission prior to creating a new user namespace.”…”�”}”(hjàih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjjiubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjñih]”hŒReturn”…”�”}”(hjóih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjïiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjjiubhÝ)�”}”(hŒ2Returns 0 if successful, otherwise < 0 error code.”h]”hŒ2Returns 0 if successful, otherwise < 0 error code.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjjiubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_ipc_permission (C function)”Œc.security_ipc_permission”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDint security_ipc_permission (struct kern_ipc_perm *ipcp, short flag)”h]”j)�”}”(hŒCint security_ipc_permission(struct kern_ipc_perm *ipcp, short flag)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj6jh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj2jh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M! ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2jh²hh³jDjh´M! ubj{)�”}”(hŒsecurity_ipc_permission”h]”j�)�”}”(hŒsecurity_ipc_permission”h]”hŒsecurity_ipc_permission”…”�”}”(hjWjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj2jh²hh³jDjh´M! ubjœ)�”}”(hŒ((struct kern_ipc_perm *ipcp, short flag)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *ipcp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjsjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjojubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjojubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj‘jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j“jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jYjsbŒc.security_ipc_permission”†”asbuh1hhjojubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjojubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¿jh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjojubj�)�”}”(hŒipcp”h]”hŒipcp”…”�”}”(hjÌjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjojubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjkjubj¢)�”}”(hŒ short flag”h]”(j )�”}”(hŒshort”h]”hŒshort”…”�”}”(hjåjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjájubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjójh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjájubj�)�”}”(hŒflag”h]”hŒflag”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjájubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjkjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj2jh²hh³jDjh´M! ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj.jh²hh³jDjh´M! ubah}”(h]”j)jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jDjh´M! hj+jh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Check if sysv ipc access is allowed”h]”hŒ#Check if sysv ipc access is allowed”…”�”}”(hj+kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M! hj(kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj+jh²hh³jDjh´M! ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjCkjæjCkjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÙ**Parameters** ``struct kern_ipc_perm *ipcp`` ipc permission structure ``short flag`` requested permissions **Description** Check permissions for access to IPC. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjMkh]”hŒ Parameters”…”�”}”(hjOkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjKkubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M% hjGkubj )�”}”(hhh]”(j)�”}”(hŒ8``struct kern_ipc_perm *ipcp`` ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *ipcp``”h]”j)�”}”(hjlkh]”hŒstruct kern_ipc_perm *ipcp”…”�”}”(hjnkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M" hjfkubj2)�”}”(hhh]”hÝ)�”}”(hŒipc permission structure”h]”hŒipc permission structure”…”�”}”(hj…kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�kh´M" hj‚kubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjfkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�kh´M" hjckubj)�”}”(hŒ%``short flag`` requested permissions ”h]”(j)�”}”(hŒ``short flag``”h]”j)�”}”(hj¥kh]”hŒ short flag”…”�”}”(hj§kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£kubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M# hjŸkubj2)�”}”(hhh]”hÝ)�”}”(hŒrequested permissions”h]”hŒrequested permissions”…”�”}”(hj¾kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jºkh´M# hj»kubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŸkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jºkh´M# hjckubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjGkubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjàkh]”hŒ Description”…”�”}”(hjâkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞkubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M% hjGkubhÝ)�”}”(hŒ$Check permissions for access to IPC.”h]”hŒ$Check permissions for access to IPC.”…”�”}”(hjökh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M$ hjGkubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjlh]”hŒReturn”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjlubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M& hjGkubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M' hjGkubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_ipc_getlsmprop (C function)”Œc.security_ipc_getlsmprop”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPvoid security_ipc_getlsmprop (struct kern_ipc_perm *ipcp, struct lsm_prop *prop)”h]”j)�”}”(hŒOvoid security_ipc_getlsmprop(struct kern_ipc_perm *ipcp, struct lsm_prop *prop)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjLlh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjHlh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M/ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHlh²hh³jZlh´M/ ubj{)�”}”(hŒsecurity_ipc_getlsmprop”h]”j�)�”}”(hŒsecurity_ipc_getlsmprop”h]”hŒsecurity_ipc_getlsmprop”…”�”}”(hjmlh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjilubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjHlh²hh³jZlh´M/ ubjœ)�”}”(hŒ3(struct kern_ipc_perm *ipcp, struct lsm_prop *prop)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *ipcp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‰lh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj…lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…lubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj§lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j©lŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jolsbŒc.security_ipc_getlsmprop”†”asbuh1hhj…lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…lubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÕlh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj…lubj�)�”}”(hŒipcp”h]”hŒipcp”…”�”}”(hjâlh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�lubj¢)�”}”(hŒstruct lsm_prop *prop”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjûlh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj÷lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷lubh)�”}”(hhh]”j�)�”}”(hŒlsm_prop”h]”hŒlsm_prop”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jmŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÃlŒc.security_ipc_getlsmprop”†”asbuh1hhj÷lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7mh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷lubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjEmh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷lubj�)�”}”(hŒprop”h]”hŒprop”…”�”}”(hjRmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�lubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjHlh²hh³jZlh´M/ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjDlh²hh³jZlh´M/ ubah}”(h]”j?lah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jZlh´M/ hjAlh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ Get the sysv ipc object LSM data”h]”hŒ Get the sysv ipc object LSM data”…”�”}”(hj|mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M/ hjymh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjAlh²hh³jZlh´M/ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj”mjæj”mjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒË**Parameters** ``struct kern_ipc_perm *ipcp`` ipc permission structure ``struct lsm_prop *prop`` pointer to lsm information **Description** Get the lsm information associated with the ipc object.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjžmh]”hŒ Parameters”…”�”}”(hj mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœmubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M3 hj˜mubj )�”}”(hhh]”(j)�”}”(hŒ8``struct kern_ipc_perm *ipcp`` ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *ipcp``”h]”j)�”}”(hj½mh]”hŒstruct kern_ipc_perm *ipcp”…”�”}”(hj¿mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»mubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M0 hj·mubj2)�”}”(hhh]”hÝ)�”}”(hŒipc permission structure”h]”hŒipc permission structure”…”�”}”(hjÖmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒmh´M0 hjÓmubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒmh´M0 hj´mubj)�”}”(hŒ5``struct lsm_prop *prop`` pointer to lsm information ”h]”(j)�”}”(hŒ``struct lsm_prop *prop``”h]”j)�”}”(hjömh]”hŒstruct lsm_prop *prop”…”�”}”(hjømh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjômubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M1 hjðmubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to lsm information”h]”hŒpointer to lsm information”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j nh´M1 hj nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j nh´M1 hj´mubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj˜mubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj1nh]”hŒ Description”…”�”}”(hj3nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M3 hj˜mubhÝ)�”}”(hŒ7Get the lsm information associated with the ipc object.”h]”hŒ7Get the lsm information associated with the ipc object.”…”�”}”(hjGnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M2 hj˜mubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_msg_msg_alloc (C function)”Œc.security_msg_msg_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ0int security_msg_msg_alloc (struct msg_msg *msg)”h]”j)�”}”(hŒ/int security_msg_msg_alloc(struct msg_msg *msg)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjvnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjrnh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M= ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjrnh²hh³j„nh´M= ubj{)�”}”(hŒsecurity_msg_msg_alloc”h]”j�)�”}”(hŒsecurity_msg_msg_alloc”h]”hŒsecurity_msg_msg_alloc”…”�”}”(hj—nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“nubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjrnh²hh³j„nh´M= ubjœ)�”}”(hŒ(struct msg_msg *msg)”h]”j¢)�”}”(hŒstruct msg_msg *msg”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj³nh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¯nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯nubh)�”}”(hhh]”j�)�”}”(hŒmsg_msg”h]”hŒmsg_msg”…”�”}”(hjÑnh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÓnŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j™nsbŒc.security_msg_msg_alloc”†”asbuh1hhj¯nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯nubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÿnh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¯nubj�)�”}”(hŒmsg”h]”hŒmsg”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj«nubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjrnh²hh³j„nh´M= ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjnnh²hh³j„nh´M= ubah}”(h]”jinah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j„nh´M= hjknh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Allocate a sysv ipc message LSM blob”h]”hŒ$Allocate a sysv ipc message LSM blob”…”�”}”(hj6oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M= hj3oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjknh²hh³j„nh´M= ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjNojæjNojç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX/**Parameters** ``struct msg_msg *msg`` message structure **Description** Allocate and attach a security structure to the msg->security field. The security field is initialized to NULL when the structure is first created. **Return** Return 0 if operation was successful and permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjXoh]”hŒ Parameters”…”�”}”(hjZoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVoubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MA hjRoubj )�”}”(hhh]”j)�”}”(hŒ*``struct msg_msg *msg`` message structure ”h]”(j)�”}”(hŒ``struct msg_msg *msg``”h]”j)�”}”(hjwoh]”hŒstruct msg_msg *msg”…”�”}”(hjyoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjuoubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M> hjqoubj2)�”}”(hhh]”hÝ)�”}”(hŒmessage structure”h]”hŒmessage structure”…”�”}”(hj�oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŒoh´M> hj�oubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjqoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒoh´M> hjnoubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjRoubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj²oh]”hŒ Description”…”�”}”(hj´oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°oubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M@ hjRoubhÝ)�”}”(hŒ”Allocate and attach a security structure to the msg->security field. The security field is initialized to NULL when the structure is first created.”h]”hŒ”Allocate and attach a security structure to the msg->security field. The security field is initialized to NULL when the structure is first created.”…”�”}”(hjÈoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M? hjRoubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÙoh]”hŒReturn”…”�”}”(hjÛoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj×oubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MB hjRoubhÝ)�”}”(hŒ?Return 0 if operation was successful and permission is granted.”h]”hŒ?Return 0 if operation was successful and permission is granted.”…”�”}”(hjïoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MC hjRoubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_msg_msg_free (C function)”Œc.security_msg_msg_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ0void security_msg_msg_free (struct msg_msg *msg)”h]”j)�”}”(hŒ/void security_msg_msg_free(struct msg_msg *msg)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjph²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MR ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-ph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjph²hh³j,ph´MR ubj{)�”}”(hŒsecurity_msg_msg_free”h]”j�)�”}”(hŒsecurity_msg_msg_free”h]”hŒsecurity_msg_msg_free”…”�”}”(hj?ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;pubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjph²hh³j,ph´MR ubjœ)�”}”(hŒ(struct msg_msg *msg)”h]”j¢)�”}”(hŒstruct msg_msg *msg”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj[ph²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjWpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjWpubh)�”}”(hhh]”j�)�”}”(hŒmsg_msg”h]”hŒmsg_msg”…”�”}”(hjyph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvpubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j{pŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jApsbŒc.security_msg_msg_free”†”asbuh1hhjWpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™ph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjWpubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj§ph²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjWpubj�)�”}”(hŒmsg”h]”hŒmsg”…”�”}”(hj´ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjWpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjSpubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjph²hh³j,ph´MR ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjph²hh³j,ph´MR ubah}”(h]”jpah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j,ph´MR hjph²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ Free a sysv ipc message LSM blob”h]”hŒ Free a sysv ipc message LSM blob”…”�”}”(hjÞph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MR hjÛph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjph²hh³j,ph´MR ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjöpjæjöpjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ�**Parameters** ``struct msg_msg *msg`` message structure **Description** Deallocate the security structure for this message.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjqh]”hŒ Parameters”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþpubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MV hjúpubj )�”}”(hhh]”j)�”}”(hŒ*``struct msg_msg *msg`` message structure ”h]”(j)�”}”(hŒ``struct msg_msg *msg``”h]”j)�”}”(hjqh]”hŒstruct msg_msg *msg”…”�”}”(hj!qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MS hjqubj2)�”}”(hhh]”hÝ)�”}”(hŒmessage structure”h]”hŒmessage structure”…”�”}”(hj8qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j4qh´MS hj5qubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4qh´MS hjqubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjúpubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjZqh]”hŒ Description”…”�”}”(hj\qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXqubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MU hjúpubhÝ)�”}”(hŒ3Deallocate the security structure for this message.”h]”hŒ3Deallocate the security structure for this message.”…”�”}”(hjpqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MT hjúpubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_msg_queue_alloc (C function)”Œc.security_msg_queue_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int security_msg_queue_alloc (struct kern_ipc_perm *msq)”h]”j)�”}”(hŒ7int security_msg_queue_alloc(struct kern_ipc_perm *msq)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŸqh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›qh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®qh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›qh²hh³j­qh´M_ ubj{)�”}”(hŒsecurity_msg_queue_alloc”h]”j�)�”}”(hŒsecurity_msg_queue_alloc”h]”hŒsecurity_msg_queue_alloc”…”�”}”(hjÀqh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼qubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj›qh²hh³j­qh´M_ ubjœ)�”}”(hŒ(struct kern_ipc_perm *msq)”h]”j¢)�”}”(hŒstruct kern_ipc_perm *msq”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÜqh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjØqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéqh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØqubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjúqh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jüqŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÂqsbŒc.security_msg_queue_alloc”†”asbuh1hhjØqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØqubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj(rh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjØqubj�)�”}”(hŒmsq”h]”hŒmsq”…”�”}”(hj5rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔqubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj›qh²hh³j­qh´M_ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—qh²hh³j­qh´M_ ubah}”(h]”j’qah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­qh´M_ hj”qh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Allocate a sysv ipc msg queue LSM blob”h]”hŒ&Allocate a sysv ipc msg queue LSM blob”…”�”}”(hj_rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_ hj\rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”qh²hh³j­qh´M_ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjwrjæjwrjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX1**Parameters** ``struct kern_ipc_perm *msq`` sysv ipc permission structure **Description** Allocate and attach a security structure to **msg**. The security field is initialized to NULL when the structure is first created. **Return** Returns 0 if operation was successful and permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�rh]”hŒ Parameters”…”�”}”(hjƒrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mc hj{rubj )�”}”(hhh]”j)�”}”(hŒ<``struct kern_ipc_perm *msq`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *msq``”h]”j)�”}”(hj rh]”hŒstruct kern_ipc_perm *msq”…”�”}”(hj¢rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžrubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M` hjšrubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hj¹rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµrh´M` hj¶rubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjšrubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµrh´M` hj—rubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj{rubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÛrh]”hŒ Description”…”�”}”(hjÝrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙrubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mb hj{rubhÝ)�”}”(hŒƒAllocate and attach a security structure to **msg**. The security field is initialized to NULL when the structure is first created.”h]”(hŒ,Allocate and attach a security structure to ”…”�”}”(hjñrh²hh³Nh´Nubjõ)�”}”(hŒ**msg**”h]”hŒmsg”…”�”}”(hjùrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjñrubhŒP. The security field is initialized to NULL when the structure is first created.”…”�”}”(hjñrh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Ma hj{rubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjsh]”hŒReturn”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Md hj{rubhÝ)�”}”(hŒ@Returns 0 if operation was successful and permission is granted.”h]”hŒ@Returns 0 if operation was successful and permission is granted.”…”�”}”(hj*sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Me hj{rubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_msg_queue_free (C function)”Œc.security_msg_queue_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8void security_msg_queue_free (struct kern_ipc_perm *msq)”h]”j)�”}”(hŒ7void security_msg_queue_free(struct kern_ipc_perm *msq)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjYsh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjUsh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mt ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhsh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUsh²hh³jgsh´Mt ubj{)�”}”(hŒsecurity_msg_queue_free”h]”j�)�”}”(hŒsecurity_msg_queue_free”h]”hŒsecurity_msg_queue_free”…”�”}”(hjzsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvsubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjUsh²hh³jgsh´Mt ubjœ)�”}”(hŒ(struct kern_ipc_perm *msq)”h]”j¢)�”}”(hŒstruct kern_ipc_perm *msq”•h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj–sh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj’subj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£sh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’subh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj´sh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¶sŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j|ssbŒc.security_msg_queue_free”†”asbuh1hhj’subj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔsh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’subjã)�”}”(hjæh]”hŒ*”…”�”}”(hjâsh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj’subj�)�”}”(hŒmsq”h]”hŒmsq”…”�”}”(hjïsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽsubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjUsh²hh³jgsh´Mt ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjQsh²hh³jgsh´Mt ubah}”(h]”jLsah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jgsh´Mt hjNsh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Free a sysv ipc msg queue LSM blob”h]”hŒ"Free a sysv ipc msg queue LSM blob”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mt hjth²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjNsh²hh³jgsh´Mt ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj1tjæj1tjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ£**Parameters** ``struct kern_ipc_perm *msq`` sysv ipc permission structure **Description** Deallocate security field **perm->security** for the message queue.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj;th]”hŒ Parameters”…”�”}”(hj=th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj9tubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mx hj5tubj )�”}”(hhh]”j)�”}”(hŒ<``struct kern_ipc_perm *msq`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *msq``”h]”j)�”}”(hjZth]”hŒstruct kern_ipc_perm *msq”…”�”}”(hj\th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXtubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mu hjTtubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hjsth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³joth´Mu hjptubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjTtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³joth´Mu hjQtubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj5tubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj•th]”hŒ Description”…”�”}”(hj—th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“tubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mw hj5tubhÝ)�”}”(hŒCDeallocate security field **perm->security** for the message queue.”h]”(hŒDeallocate security field ”…”�”}”(hj«th²hh³Nh´Nubjõ)�”}”(hŒ**perm->security**”h]”hŒperm->security”…”�”}”(hj³th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj«tubhŒ for the message queue.”…”�”}”(hj«th²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mv hj5tubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_msg_queue_associate (C function)”Œc.security_msg_queue_associate”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHint security_msg_queue_associate (struct kern_ipc_perm *msq, int msqflg)”h]”j)�”}”(hŒGint security_msg_queue_associate(struct kern_ipc_perm *msq, int msqflg)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjìth²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjèth²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûth²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèth²hh³júth´M� ubj{)�”}”(hŒsecurity_msg_queue_associate”h]”j�)�”}”(hŒsecurity_msg_queue_associate”h]”hŒsecurity_msg_queue_associate”…”�”}”(hj uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj uubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjèth²hh³júth´M� ubjœ)�”}”(hŒ'(struct kern_ipc_perm *msq, int msqflg)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *msq”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj)uh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj%uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%uubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjGuh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jIuŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jusbŒc.security_msg_queue_associate”†”asbuh1hhj%uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjguh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%uubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjuuh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj%uubj�)�”}”(hŒmsq”h]”hŒmsq”…”�”}”(hj‚uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!uubj¢)�”}”(hŒ int msqflg”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj›uh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj—uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—uubj�)�”}”(hŒmsqflg”h]”hŒmsqflg”…”�”}”(hj·uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!uubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjèth²hh³júth´M� ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjäth²hh³júth´M� ubah}”(h]”jßtah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³júth´M� hjáth²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Check if a msg queue operation is allowed”h]”hŒ)Check if a msg queue operation is allowed”…”�”}”(hjáuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M� hjÞuh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjáth²hh³júth´M� ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjùujæjùujç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX‘**Parameters** ``struct kern_ipc_perm *msq`` sysv ipc permission structure ``int msqflg`` operation flags **Description** Check permission when a message queue is requested through the msgget system call. This hook is only called when returning the message queue identifier for an existing message queue, not when a new message queue is created. **Return** Return 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjvh]”hŒ Parameters”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M… hjýuubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *msq`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *msq``”h]”j)�”}”(hj"vh]”hŒstruct kern_ipc_perm *msq”…”�”}”(hj$vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj vubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‚ hjvubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hj;vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j7vh´M‚ hj8vubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7vh´M‚ hjvubj)�”}”(hŒ``int msqflg`` operation flags ”h]”(j)�”}”(hŒ``int msqflg``”h]”j)�”}”(hj[vh]”hŒ int msqflg”…”�”}”(hj]vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYvubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mƒ hjUvubj2)�”}”(hhh]”hÝ)�”}”(hŒoperation flags”h]”hŒoperation flags”…”�”}”(hjtvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jpvh´Mƒ hjqvubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjUvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jpvh´Mƒ hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjýuubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj–vh]”hŒ Description”…”�”}”(hj˜vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M… hjýuubhÝ)�”}”(hŒßCheck permission when a message queue is requested through the msgget system call. This hook is only called when returning the message queue identifier for an existing message queue, not when a new message queue is created.”h]”hŒßCheck permission when a message queue is requested through the msgget system call. This hook is only called when returning the message queue identifier for an existing message queue, not when a new message queue is created.”…”�”}”(hj¬vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„ hjýuubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj½vh]”hŒReturn”…”�”}”(hj¿vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mˆ hjýuubhÝ)�”}”(hŒ"Return 0 if permission is granted.”h]”hŒ"Return 0 if permission is granted.”…”�”}”(hjÓvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‰ hjýuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_msg_queue_msgctl (C function)”Œc.security_msg_queue_msgctl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBint security_msg_queue_msgctl (struct kern_ipc_perm *msq, int cmd)”h]”j)�”}”(hŒAint security_msg_queue_msgctl(struct kern_ipc_perm *msq, int cmd)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþvh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‘ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþvh²hh³jwh´M‘ ubj{)�”}”(hŒsecurity_msg_queue_msgctl”h]”j�)�”}”(hŒsecurity_msg_queue_msgctl”h]”hŒsecurity_msg_queue_msgctl”…”�”}”(hj#wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjþvh²hh³jwh´M‘ ubjœ)�”}”(hŒ$(struct kern_ipc_perm *msq, int cmd)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *msq”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj?wh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;wubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;wubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj]wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZwubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_wŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j%wsbŒc.security_msg_queue_msgctl”†”asbuh1hhj;wubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;wubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹wh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;wubj�)�”}”(hŒmsq”h]”hŒmsq”…”�”}”(hj˜wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7wubj¢)�”}”(hŒint cmd”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj±wh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­wubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­wubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjÍwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­wubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7wubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjþvh²hh³jwh´M‘ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjúvh²hh³jwh´M‘ ubah}”(h]”jõvah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jwh´M‘ hj÷vh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Check if a msg queue operation is allowed”h]”hŒ)Check if a msg queue operation is allowed”…”�”}”(hj÷wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‘ hjôwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj÷vh²hh³jwh´M‘ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjxjæjxjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX***Parameters** ``struct kern_ipc_perm *msq`` sysv ipc permission structure ``int cmd`` operation **Description** Check permission when a message control operation specified by **cmd** is to be performed on the message queue with permissions. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjxh]”hŒ Parameters”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M• hjxubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *msq`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *msq``”h]”j)�”}”(hj8xh]”hŒstruct kern_ipc_perm *msq”…”�”}”(hj:xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6xubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M’ hj2xubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hjQxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jMxh´M’ hjNxubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jMxh´M’ hj/xubj)�”}”(hŒ``int cmd`` operation ”h]”(j)�”}”(hŒ ``int cmd``”h]”j)�”}”(hjqxh]”hŒint cmd”…”�”}”(hjsxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoxubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M“ hjkxubj2)�”}”(hhh]”hÝ)�”}”(hŒ operation”h]”hŒ operation”…”�”}”(hjŠxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†xh´M“ hj‡xubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjkxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†xh´M“ hj/xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjxubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¬xh]”hŒ Description”…”�”}”(hj®xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjªxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M• hjxubhÝ)�”}”(hŒ€Check permission when a message control operation specified by **cmd** is to be performed on the message queue with permissions.”h]”(hŒ?Check permission when a message control operation specified by ”…”�”}”(hjÂxh²hh³Nh´Nubjõ)�”}”(hŒ**cmd**”h]”hŒcmd”…”�”}”(hjÊxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂxubhŒ: is to be performed on the message queue with permissions.”…”�”}”(hjÂxh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M” hjxubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjåxh]”hŒReturn”…”�”}”(hjçxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjãxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M— hjxubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjûxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜ hjxubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_msg_queue_msgsnd (C function)”Œc.security_msg_queue_msgsnd”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒZint security_msg_queue_msgsnd (struct kern_ipc_perm *msq, struct msg_msg *msg, int msqflg)”h]”j)�”}”(hŒYint security_msg_queue_msgsnd(struct kern_ipc_perm *msq, struct msg_msg *msg, int msqflg)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj*yh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj&yh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M  ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&yh²hh³j8yh´M  ubj{)�”}”(hŒsecurity_msg_queue_msgsnd”h]”j�)�”}”(hŒsecurity_msg_queue_msgsnd”h]”hŒsecurity_msg_queue_msgsnd”…”�”}”(hjKyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjGyubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj&yh²hh³j8yh´M  ubjœ)�”}”(hŒ<(struct kern_ipc_perm *msq, struct msg_msg *msg, int msqflg)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *msq”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjgyh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjcyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjcyubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj…yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚yubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‡yŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jMysbŒc.security_msg_queue_msgsnd”†”asbuh1hhjcyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjcyubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj³yh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjcyubj�)�”}”(hŒmsq”h]”hŒmsq”…”�”}”(hjÀyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjcyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_yubj¢)�”}”(hŒstruct msg_msg *msg”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÙyh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÕyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕyubh)�”}”(hhh]”j�)�”}”(hŒmsg_msg”h]”hŒmsg_msg”…”�”}”(hj÷yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôyubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jùyŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¡yŒc.security_msg_queue_msgsnd”†”asbuh1hhjÕyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕyubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj#zh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÕyubj�)�”}”(hŒmsg”h]”hŒmsg”…”�”}”(hj0zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_yubj¢)�”}”(hŒ int msqflg”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjIzh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjEzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEzubj�)�”}”(hŒmsqflg”h]”hŒmsqflg”…”�”}”(hjezh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjEzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_yubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj&yh²hh³j8yh´M  ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj"yh²hh³j8yh´M  ubah}”(h]”jyah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j8yh´M  hjyh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Check if sending a sysv ipc message is allowed”h]”hŒ.Check if sending a sysv ipc message is allowed”…”�”}”(hj�zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M  hjŒzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjyh²hh³j8yh´M  ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj§zjæj§zjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXI**Parameters** ``struct kern_ipc_perm *msq`` sysv ipc permission structure ``struct msg_msg *msg`` message ``int msqflg`` operation flags **Description** Check permission before a message, **msg**, is enqueued on the message queue with permissions specified in **msq**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj±zh]”hŒ Parameters”…”�”}”(hj³zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯zubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¤ hj«zubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *msq`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *msq``”h]”j)�”}”(hjÐzh]”hŒstruct kern_ipc_perm *msq”…”�”}”(hjÒzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎzubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¡ hjÊzubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hjézh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jåzh´M¡ hjæzubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÊzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jåzh´M¡ hjÇzubj)�”}”(hŒ ``struct msg_msg *msg`` message ”h]”(j)�”}”(hŒ``struct msg_msg *msg``”h]”j)�”}”(hj {h]”hŒstruct msg_msg *msg”…”�”}”(hj {h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¢ hj{ubj2)�”}”(hhh]”hÝ)�”}”(hŒmessage”h]”hŒmessage”…”�”}”(hj"{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{h´M¢ hj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{h´M¢ hjÇzubj)�”}”(hŒ``int msqflg`` operation flags ”h]”(j)�”}”(hŒ``int msqflg``”h]”j)�”}”(hjB{h]”hŒ int msqflg”…”�”}”(hjD{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M£ hj<{ubj2)�”}”(hhh]”hÝ)�”}”(hŒoperation flags”h]”hŒoperation flags”…”�”}”(hj[{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jW{h´M£ hjX{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj<{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jW{h´M£ hjÇzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj«zubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj}{h]”hŒ Description”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¥ hj«zubhÝ)�”}”(hŒsCheck permission before a message, **msg**, is enqueued on the message queue with permissions specified in **msq**.”h]”(hŒ#Check permission before a message, ”…”�”}”(hj“{h²hh³Nh´Nubjõ)�”}”(hŒ**msg**”h]”hŒmsg”…”�”}”(hj›{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“{ubhŒA, is enqueued on the message queue with permissions specified in ”…”�”}”(hj“{h²hh³Nh´Nubjõ)�”}”(hŒ**msq**”h]”hŒmsq”…”�”}”(hj­{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“{ubhŒ.”…”�”}”(hj“{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¤ hj«zubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÈ{h]”hŒReturn”…”�”}”(hjÊ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÆ{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M§ hj«zubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjÞ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¨ hj«zubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_msg_queue_msgrcv (C function)”Œc.security_msg_queue_msgrcv”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒint security_msg_queue_msgrcv (struct kern_ipc_perm *msq, struct msg_msg *msg, struct task_struct *target, long type, int mode)”h]”j)�”}”(hŒ~int security_msg_queue_msgrcv(struct kern_ipc_perm *msq, struct msg_msg *msg, struct task_struct *target, long type, int mode)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj |h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj |h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M± ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj |h²hh³j|h´M± ubj{)�”}”(hŒsecurity_msg_queue_msgrcv”h]”j�)�”}”(hŒsecurity_msg_queue_msgrcv”h]”hŒsecurity_msg_queue_msgrcv”…”�”}”(hj.|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj*|ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj |h²hh³j|h´M± ubjœ)�”}”(hŒa(struct kern_ipc_perm *msq, struct msg_msg *msg, struct task_struct *target, long type, int mode)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *msq”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjJ|h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjF|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjF|ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjh|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hje|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jj|Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j0|sbŒc.security_msg_queue_msgrcv”†”asbuh1hhjF|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjF|ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj–|h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjF|ubj�)�”}”(hŒmsq”h]”hŒmsq”…”�”}”(hj£|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjF|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjB|ubj¢)�”}”(hŒstruct msg_msg *msg”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¼|h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¸|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸|ubh)�”}”(hhh]”j�)�”}”(hŒmsg_msg”h]”hŒmsg_msg”…”�”}”(hjÚ|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÜ|Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j„|Œc.security_msg_queue_msgrcv”†”asbuh1hhj¸|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸|ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¸|ubj�)�”}”(hŒmsg”h]”hŒmsg”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjB|ubj¢)�”}”(hŒstruct task_struct *target”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj,}h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj(}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(}ubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjJ}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjG}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jL}Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j„|Œc.security_msg_queue_msgrcv”†”asbuh1hhj(}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(}ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjv}h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj(}ubj�)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hjƒ}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjB|ubj¢)�”}”(hŒ long type”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjœ}h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj˜}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˜}ubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj¸}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjB|ubj¢)�”}”(hŒint mode”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÑ}h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÍ}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÍ}ubj�)�”}”(hŒmode”h]”hŒmode”…”�”}”(hjí}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍ}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjB|ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj |h²hh³j|h´M± ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj|h²hh³j|h´M± ubah}”(h]”j|ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j|h´M± hj|h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Check if receiving a sysv ipc msg is allowed”h]”hŒ,Check if receiving a sysv ipc msg is allowed”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M± hj~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj|h²hh³j|h´M± ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj/~jæj/~jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX+**Parameters** ``struct kern_ipc_perm *msq`` sysv ipc permission structure ``struct msg_msg *msg`` message ``struct task_struct *target`` target task ``long type`` type of message requested ``int mode`` operation flags **Description** Check permission before a message, **msg**, is removed from the message queue. The **target** task structure contains a pointer to the process that will be receiving the message (not equal to the current process when inline receives are being performed). **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj9~h]”hŒ Parameters”…”�”}”(hj;~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj7~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mµ hj3~ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *msq`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *msq``”h]”j)�”}”(hjX~h]”hŒstruct kern_ipc_perm *msq”…”�”}”(hjZ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjV~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M² hjR~ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hjq~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jm~h´M² hjn~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjR~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jm~h´M² hjO~ubj)�”}”(hŒ ``struct msg_msg *msg`` message ”h]”(j)�”}”(hŒ``struct msg_msg *msg``”h]”j)�”}”(hj‘~h]”hŒstruct msg_msg *msg”…”�”}”(hj“~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³ hj‹~ubj2)�”}”(hhh]”hÝ)�”}”(hŒmessage”h]”hŒmessage”…”�”}”(hjª~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¦~h´M³ hj§~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‹~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¦~h´M³ hjO~ubj)�”}”(hŒ+``struct task_struct *target`` target task ”h]”(j)�”}”(hŒ``struct task_struct *target``”h]”j)�”}”(hjÊ~h]”hŒstruct task_struct *target”…”�”}”(hjÌ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M´ hjÄ~ubj2)�”}”(hhh]”hÝ)�”}”(hŒ target task”h]”hŒ target task”…”�”}”(hjã~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jß~h´M´ hjà~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÄ~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jß~h´M´ hjO~ubj)�”}”(hŒ(``long type`` type of message requested ”h]”(j)�”}”(hŒ ``long type``”h]”j)�”}”(hjh]”hŒ long type”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mµ hjý~ubj2)�”}”(hhh]”hÝ)�”}”(hŒtype of message requested”h]”hŒtype of message requested”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Mµ hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjý~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mµ hjO~ubj)�”}”(hŒ``int mode`` operation flags ”h]”(j)�”}”(hŒ ``int mode``”h]”j)�”}”(hj<h]”hŒint mode”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¶ hj6ubj2)�”}”(hhh]”hÝ)�”}”(hŒoperation flags”h]”hŒoperation flags”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQh´M¶ hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQh´M¶ hjO~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj3~ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjwh]”hŒ Description”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¸ hj3~ubhÝ)�”}”(hŒþCheck permission before a message, **msg**, is removed from the message queue. The **target** task structure contains a pointer to the process that will be receiving the message (not equal to the current process when inline receives are being performed).”h]”(hŒ#Check permission before a message, ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ**msg**”h]”hŒmsg”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ), is removed from the message queue. The ”…”�”}”(hj�h²hh³Nh´Nubjõ)�”}”(hŒ **target**”h]”hŒtarget”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubhŒ¡ task structure contains a pointer to the process that will be receiving the message (not equal to the current process when inline receives are being performed).”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M· hj3~ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÂh]”hŒReturn”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¼ hj3~ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½ hj3~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_shm_alloc (C function)”Œc.security_shm_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2int security_shm_alloc (struct kern_ipc_perm *shp)”h]”j)�”}”(hŒ1int security_shm_alloc(struct kern_ipc_perm *shp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj€h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÆ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€h²hh³j€h´MÆ ubj{)�”}”(hŒsecurity_shm_alloc”h]”j�)�”}”(hŒsecurity_shm_alloc”h]”hŒsecurity_shm_alloc”…”�”}”(hj(€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$€ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj€h²hh³j€h´MÆ ubjœ)�”}”(hŒ(struct kern_ipc_perm *shp)”h]”j¢)�”}”(hŒstruct kern_ipc_perm *shp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjD€h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj@€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@€ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjb€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jd€Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j*€sbŒc.security_shm_alloc”†”asbuh1hhj@€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@€ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�€h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj@€ubj�)�”}”(hŒshp”h]”hŒshp”…”�”}”(hj�€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj<€ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj€h²hh³j€h´MÆ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÿh²hh³j€h´MÆ ubah}”(h]”júah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j€h´MÆ hjüh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒAllocate a sysv shm LSM blob”h]”hŒAllocate a sysv shm LSM blob”…”�”}”(hjÇ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÆ hjÄ€h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjüh²hh³j€h´MÆ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj߀jæj߀jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXE**Parameters** ``struct kern_ipc_perm *shp`` sysv ipc permission structure **Description** Allocate and attach a security structure to the **shp** security field. The security field is initialized to NULL when the structure is first created. **Return** Returns 0 if operation was successful and permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjé€h]”hŒ Parameters”…”�”}”(hjë€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjç€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÊ hjã€ubj )�”}”(hhh]”j)�”}”(hŒ<``struct kern_ipc_perm *shp`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *shp``”h]”j)�”}”(hj�h]”hŒstruct kern_ipc_perm *shp”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÇ hj�ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hj!�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�h´MÇ hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´MÇ hjÿ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjã€ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjC�h]”hŒ Description”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjA�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÉ hjã€ubhÝ)�”}”(hŒ—Allocate and attach a security structure to the **shp** security field. The security field is initialized to NULL when the structure is first created.”h]”(hŒ0Allocate and attach a security structure to the ”…”�”}”(hjY�h²hh³Nh´Nubjõ)�”}”(hŒ**shp**”h]”hŒshp”…”�”}”(hja�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjY�ubhŒ` security field. The security field is initialized to NULL when the structure is first created.”…”�”}”(hjY�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÈ hjã€ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj|�h]”hŒReturn”…”�”}”(hj~�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjz�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MË hjã€ubhÝ)�”}”(hŒ@Returns 0 if operation was successful and permission is granted.”h]”hŒ@Returns 0 if operation was successful and permission is granted.”…”�”}”(hj’�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÌ hjã€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_shm_free (C function)”Œc.security_shm_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2void security_shm_free (struct kern_ipc_perm *shp)”h]”j)�”}”(hŒ1void security_shm_free(struct kern_ipc_perm *shp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÁ�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½�h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÛ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½�h²hh³jÏ�h´MÛ ubj{)�”}”(hŒsecurity_shm_free”h]”j�)�”}”(hŒsecurity_shm_free”h]”hŒsecurity_shm_free”…”�”}”(hjâ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞ�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj½�h²hh³jÏ�h´MÛ ubjœ)�”}”(hŒ(struct kern_ipc_perm *shp)”h]”j¢)�”}”(hŒstruct kern_ipc_perm *shp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjþ�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjú�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjú�ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‚Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jä�sbŒc.security_shm_free”†”asbuh1hhjú�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjú�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjJ‚h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjú�ubj�)�”}”(hŒshp”h]”hŒshp”…”�”}”(hjW‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjú�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjö�ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj½�h²hh³jÏ�h´MÛ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¹�h²hh³jÏ�h´MÛ ubah}”(h]”j´�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÏ�h´MÛ hj¶�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a sysv shm LSM blob”h]”hŒFree a sysv shm LSM blob”…”�”}”(hj�‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÛ hj~‚h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¶�h²hh³jÏ�h´MÛ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj™‚jæj™‚jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¬**Parameters** ``struct kern_ipc_perm *shp`` sysv ipc permission structure **Description** Deallocate the security structure **perm->security** for the memory segment.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj£‚h]”hŒ Parameters”…”�”}”(hj¥‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mß hj�‚ubj )�”}”(hhh]”j)�”}”(hŒ<``struct kern_ipc_perm *shp`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *shp``”h]”j)�”}”(hj‚h]”hŒstruct kern_ipc_perm *shp”…”�”}”(hjÄ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÀ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÜ hj¼‚ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hjÛ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jׂh´MÜ hjØ‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¼‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jׂh´MÜ hj¹‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�‚ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjý‚h]”hŒ Description”…”�”}”(hjÿ‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjû‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÞ hj�‚ubhÝ)�”}”(hŒLDeallocate the security structure **perm->security** for the memory segment.”h]”(hŒ"Deallocate the security structure ”…”�”}”(hjƒh²hh³Nh´Nubjõ)�”}”(hŒ**perm->security**”h]”hŒperm->security”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒubhŒ for the memory segment.”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÝ hj�‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_shm_associate (C function)”Œc.security_shm_associate”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBint security_shm_associate (struct kern_ipc_perm *shp, int shmflg)”h]”j)�”}”(hŒAint security_shm_associate(struct kern_ipc_perm *shp, int shmflg)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjTƒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjPƒh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mè ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPƒh²hh³jbƒh´Mè ubj{)�”}”(hŒsecurity_shm_associate”h]”j�)�”}”(hŒsecurity_shm_associate”h]”hŒsecurity_shm_associate”…”�”}”(hjuƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqƒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjPƒh²hh³jbƒh´Mè ubjœ)�”}”(hŒ'(struct kern_ipc_perm *shp, int shmflg)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *shp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‘ƒh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�ƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ƒubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj¯ƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬ƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j±ƒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jwƒsbŒc.security_shm_associate”†”asbuh1hhj�ƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjσh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ƒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj݃h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ƒubj�)�”}”(hŒshp”h]”hŒshp”…”�”}”(hjêƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‰ƒubj¢)�”}”(hŒ int shmflg”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÿƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿƒubj�)�”}”(hŒshmflg”h]”hŒshmflg”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‰ƒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjPƒh²hh³jbƒh´Mè ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjLƒh²hh³jbƒh´Mè ubah}”(h]”jGƒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jbƒh´Mè hjIƒh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if a sysv shm operation is allowed”h]”hŒ(Check if a sysv shm operation is allowed”…”�”}”(hjI„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mè hjF„h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjIƒh²hh³jbƒh´Mè ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåja„jæja„jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX **Parameters** ``struct kern_ipc_perm *shp`` sysv ipc permission structure ``int shmflg`` operation flags **Description** Check permission when a shared memory region is requested through the shmget system call. This hook is only called when returning the shared memory region identifier for an existing region, not when a new shared memory region is created. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjk„h]”hŒ Parameters”…”�”}”(hjm„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhji„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mì hje„ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *shp`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *shp``”h]”j)�”}”(hjŠ„h]”hŒstruct kern_ipc_perm *shp”…”�”}”(hjŒ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mé hj„„ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hj£„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸ„h´Mé hj „ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸ„h´Mé hj�„ubj)�”}”(hŒ``int shmflg`` operation flags ”h]”(j)�”}”(hŒ``int shmflg``”h]”j)�”}”(hjÄh]”hŒ int shmflg”…”�”}”(hjÅ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mê hj½„ubj2)�”}”(hhh]”hÝ)�”}”(hŒoperation flags”h]”hŒoperation flags”…”�”}”(hjÜ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØ„h´Mê hjÙ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj½„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØ„h´Mê hj�„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hje„ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjþ„h]”hŒ Description”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjü„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mì hje„ubhÝ)�”}”(hŒíCheck permission when a shared memory region is requested through the shmget system call. This hook is only called when returning the shared memory region identifier for an existing region, not when a new shared memory region is created.”h]”hŒíCheck permission when a shared memory region is requested through the shmget system call. This hook is only called when returning the shared memory region identifier for an existing region, not when a new shared memory region is created.”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Më hje„ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj%…h]”hŒReturn”…”�”}”(hj'…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mð hje„ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj;…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mñ hje„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_shm_shmctl (C function)”Œc.security_shm_shmctl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjf…h²hh³jx…h´Mù ubj{)�”}”(hŒsecurity_shm_shmctl”h]”j�)�”}”(hŒsecurity_shm_shmctl”h]”hŒsecurity_shm_shmctl”…”�”}”(hj‹…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡…ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjf…h²hh³jx…h´Mù ubjœ)�”}”(hŒ$(struct kern_ipc_perm *shp, int cmd)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *shp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj§…h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj£…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£…ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjÅ…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂ…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÇ…Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�…sbŒc.security_shm_shmctl”†”asbuh1hhj£…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£…ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjó…h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj£…ubj�)�”}”(hŒshp”h]”hŒshp”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŸ…ubj¢)�”}”(hŒint cmd”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†ubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hj5†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŸ…ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjf…h²hh³jx…h´Mù ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjb…h²hh³jx…h´Mù ubah}”(h]”j]…ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jx…h´Mù hj_…h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Check if a sysv shm operation is allowed”h]”hŒ(Check if a sysv shm operation is allowed”…”�”}”(hj_†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mù hj\†h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj_…h²hh³jx…h´Mù ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjw†jæjw†jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXA**Parameters** ``struct kern_ipc_perm *shp`` sysv ipc permission structure ``int cmd`` operation **Description** Check permission when a shared memory control operation specified by **cmd** is to be performed on the shared memory region with permissions in **shp**. **Return** Return 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�†h]”hŒ Parameters”…”�”}”(hjƒ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mý hj{†ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *shp`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *shp``”h]”j)�”}”(hj †h]”hŒstruct kern_ipc_perm *shp”…”�”}”(hj¢†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjž†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mú hjš†ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hj¹†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµ†h´Mú hj¶†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjš†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµ†h´Mú hj—†ubj)�”}”(hŒ``int cmd`` operation ”h]”(j)�”}”(hŒ ``int cmd``”h]”j)�”}”(hjÙ†h]”hŒint cmd”…”�”}”(hjÛ†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj׆ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mû hjÓ†ubj2)�”}”(hhh]”hÝ)�”}”(hŒ operation”h]”hŒ operation”…”�”}”(hjò†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jî†h´Mû hjï†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓ†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jî†h´Mû hj—†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj{†ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‡h]”hŒ Description”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mý hj{†ubhÝ)�”}”(hŒ˜Check permission when a shared memory control operation specified by **cmd** is to be performed on the shared memory region with permissions in **shp**.”h]”(hŒECheck permission when a shared memory control operation specified by ”…”�”}”(hj*‡h²hh³Nh´Nubjõ)�”}”(hŒ**cmd**”h]”hŒcmd”…”�”}”(hj2‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*‡ubhŒD is to be performed on the shared memory region with permissions in ”…”�”}”(hj*‡h²hh³Nh´Nubjõ)�”}”(hŒ**shp**”h]”hŒshp”…”�”}”(hjD‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*‡ubhŒ.”…”�”}”(hj*‡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mü hj{†ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj_‡h]”hŒReturn”…”�”}”(hja‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj]‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mÿ hj{†ubhÝ)�”}”(hŒ"Return 0 if permission is granted.”h]”hŒ"Return 0 if permission is granted.”…”�”}”(hju‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj{†ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_shm_shmat (C function)”Œc.security_shm_shmat”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒTint security_shm_shmat (struct kern_ipc_perm *shp, char __user *shmaddr, int shmflg)”h]”j)�”}”(hŒSint security_shm_shmat(struct kern_ipc_perm *shp, char __user *shmaddr, int shmflg)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¤‡h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ‡h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ‡h²hh³j²‡h´Mubj{)�”}”(hŒsecurity_shm_shmat”h]”j�)�”}”(hŒsecurity_shm_shmat”h]”hŒsecurity_shm_shmat”…”�”}”(hjŇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁ‡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj ‡h²hh³j²‡h´Mubjœ)�”}”(hŒ=(struct kern_ipc_perm *shp, char __user *shmaddr, int shmflg)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *shp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjá‡h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj݇ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj݇ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjÿ‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjü‡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jˆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jLJsbŒc.security_shm_shmat”†”asbuh1hhj݇ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj݇ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj-ˆh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj݇ubj�)�”}”(hŒshp”h]”hŒshp”…”�”}”(hj:ˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj݇ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙ‡ubj¢)�”}”(hŒchar __user *shmaddr”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjSˆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjOˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOˆubhŒ__user”…”�”}”(hjOˆh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOˆubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�ˆh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjOˆubj�)�”}”(hŒshmaddr”h]”hŒshmaddr”…”�”}”(hjŽˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙ‡ubj¢)�”}”(hŒ int shmflg”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj§ˆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj£ˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£ˆubj�)�”}”(hŒshmflg”h]”hŒshmflg”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙ‡ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj ‡h²hh³j²‡h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjœ‡h²hh³j²‡h´Mubah}”(h]”j—‡ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²‡h´Mhj™‡h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/Check if a sysv shm attach operation is allowed”h]”hŒ/Check if a sysv shm attach operation is allowed”…”�”}”(hjíˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjêˆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj™‡h²hh³j²‡h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‰jæj‰jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXÇ**Parameters** ``struct kern_ipc_perm *shp`` sysv ipc permission structure ``char __user *shmaddr`` address of memory region to attach ``int shmflg`` operation flags **Description** Check permissions prior to allowing the shmat system call to attach the shared memory segment with permissions **shp** to the data segment of the calling process. The attaching address is specified by **shmaddr**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‰h]”hŒ Parameters”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj ‰ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *shp`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *shp``”h]”j)�”}”(hj.‰h]”hŒstruct kern_ipc_perm *shp”…”�”}”(hj0‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj(‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hjG‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jC‰h´M hjD‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj(‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jC‰h´M hj%‰ubj)�”}”(hŒ<``char __user *shmaddr`` address of memory region to attach ”h]”(j)�”}”(hŒ``char __user *shmaddr``”h]”j)�”}”(hjg‰h]”hŒchar __user *shmaddr”…”�”}”(hji‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhje‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hja‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"address of memory region to attach”h]”hŒ"address of memory region to attach”…”�”}”(hj€‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|‰h´M hj}‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hja‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|‰h´M hj%‰ubj)�”}”(hŒ``int shmflg`` operation flags ”h]”(j)�”}”(hŒ``int shmflg``”h]”j)�”}”(•hj ‰h]”hŒ int shmflg”…”�”}”(hj¢‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjž‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjš‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒoperation flags”h]”hŒoperation flags”…”�”}”(hj¹‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµ‰h´M hj¶‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjš‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµ‰h´M hj%‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ‰ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÛ‰h]”hŒ Description”…”�”}”(hj݉h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj ‰ubhÝ)�”}”(hŒÕCheck permissions prior to allowing the shmat system call to attach the shared memory segment with permissions **shp** to the data segment of the calling process. The attaching address is specified by **shmaddr**.”h]”(hŒoCheck permissions prior to allowing the shmat system call to attach the shared memory segment with permissions ”…”�”}”(hjñ‰h²hh³Nh´Nubjõ)�”}”(hŒ**shp**”h]”hŒshp”…”�”}”(hjù‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjñ‰ubhŒS to the data segment of the calling process. The attaching address is specified by ”…”�”}”(hjñ‰h²hh³Nh´Nubjõ)�”}”(hŒ **shmaddr**”h]”hŒshmaddr”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjñ‰ubhŒ.”…”�”}”(hjñ‰h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj ‰ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj&Šh]”hŒReturn”…”�”}”(hj(Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$Šubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj ‰ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj<Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj ‰ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sem_alloc (C function)”Œc.security_sem_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2int security_sem_alloc (struct kern_ipc_perm *sma)”h]”j)�”}”(hŒ1int security_sem_alloc(struct kern_ipc_perm *sma)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjkŠh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjgŠh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgŠh²hh³jyŠh´Mubj{)�”}”(hŒsecurity_sem_alloc”h]”j�)�”}”(hŒsecurity_sem_alloc”h]”hŒsecurity_sem_alloc”…”�”}”(hjŒŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆŠubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjgŠh²hh³jyŠh´Mubjœ)�”}”(hŒ(struct kern_ipc_perm *sma)”h]”j¢)�”}”(hŒstruct kern_ipc_perm *sma”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¨Šh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¤Šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤Šubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjÆŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÈŠŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŽŠsbŒc.security_sem_alloc”†”asbuh1hhj¤Šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤Šubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjôŠh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¤Šubj�)�”}”(hŒsma”h]”hŒsma”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Šubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjgŠh²hh³jyŠh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjcŠh²hh³jyŠh´Mubah}”(h]”j^Šah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jyŠh´Mhj`Šh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Allocate a sysv semaphore LSM blob”h]”hŒ"Allocate a sysv semaphore LSM blob”…”�”}”(hj+‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj(‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj`Šh²hh³jyŠh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjC‹jæjC‹jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXD**Parameters** ``struct kern_ipc_perm *sma`` sysv ipc permission structure **Description** Allocate and attach a security structure to the **sma** security field. The security field is initialized to NULL when the structure is first created. **Return** Returns 0 if operation was successful and permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjM‹h]”hŒ Parameters”…”�”}”(hjO‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjK‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjG‹ubj )�”}”(hhh]”j)�”}”(hŒ<``struct kern_ipc_perm *sma`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *sma``”h]”j)�”}”(hjl‹h]”hŒstruct kern_ipc_perm *sma”…”�”}”(hjn‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjf‹ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hj…‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�‹h´Mhj‚‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjf‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�‹h´Mhjc‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjG‹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj§‹h]”hŒ Description”…”�”}”(hj©‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjG‹ubhÝ)�”}”(hŒ–Allocate and attach a security structure to the **sma** security field. The security field is initialized to NULL when the structure is first created.”h]”(hŒ0Allocate and attach a security structure to the ”…”�”}”(hj½‹h²hh³Nh´Nubjõ)�”}”(hŒ**sma**”h]”hŒsma”…”�”}”(hjÅ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½‹ubhŒ_ security field. The security field is initialized to NULL when the structure is first created.”…”�”}”(hj½‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjG‹ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjà‹h]”hŒReturn”…”�”}”(hjâ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjG‹ubhÝ)�”}”(hŒ@Returns 0 if operation was successful and permission is granted.”h]”hŒ@Returns 0 if operation was successful and permission is granted.”…”�”}”(hjö‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjG‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sem_free (C function)”Œc.security_sem_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2void security_sem_free (struct kern_ipc_perm *sma)”h]”j)�”}”(hŒ1void security_sem_free(struct kern_ipc_perm *sma)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj%Œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj!Œh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M/ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!Œh²hh³j3Œh´M/ubj{)�”}”(hŒsecurity_sem_free”h]”j�)�”}”(hŒsecurity_sem_free”h]”hŒsecurity_sem_free”…”�”}”(hjFŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjBŒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj!Œh²hh³j3Œh´M/ubjœ)�”}”(hŒ(struct kern_ipc_perm *sma)”h]”j¢)�”}”(hŒstruct kern_ipc_perm *sma”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjbŒh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj^Œubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj^Œubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj€Œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}Œubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‚ŒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jHŒsbŒc.security_sem_free”†”asbuh1hhj^Œubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj^Œubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj®Œh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj^Œubj�)�”}”(hŒsma”h]”hŒsma”…”�”}”(hj»Œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^Œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjZŒubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj!Œh²hh³j3Œh´M/ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŒh²hh³j3Œh´M/ubah}”(h]”jŒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j3Œh´M/hjŒh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a sysv semaphore LSM blob”h]”hŒFree a sysv semaphore LSM blob”…”�”}”(hjåŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M/hjâŒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŒh²hh³j3Œh´M/ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjýŒjæjýŒjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¢**Parameters** ``struct kern_ipc_perm *sma`` sysv ipc permission structure **Description** Deallocate security structure **sma->security** for the semaphore.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�h]”hŒ Parameters”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M3hj�ubj )�”}”(hhh]”j)�”}”(hŒ<``struct kern_ipc_perm *sma`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *sma``”h]”j)�”}”(hj&�h]”hŒstruct kern_ipc_perm *sma”…”�”}”(hj(�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M0hj �ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hj?�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;�h´M0hj<�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj �ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;�h´M0hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hja�h]”hŒ Description”…”�”}”(hjc�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M2hj�ubhÝ)�”}”(hŒBDeallocate security structure **sma->security** for the semaphore.”h]”(hŒDeallocate security structure ”…”�”}”(hjw�h²hh³Nh´Nubjõ)�”}”(hŒ**sma->security**”h]”hŒ sma->security”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjw�ubhŒ for the semaphore.”…”�”}”(hjw�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M1hj�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_sem_associate (C function)”Œc.security_sem_associate”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBint security_sem_associate (struct kern_ipc_perm *sma, int semflg)”h]”j)�”}”(hŒAint security_sem_associate(struct kern_ipc_perm *sma, int semflg)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¸�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj´�h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´�h²hh³jÆ�h´M<ubj{)�”}”(hŒsecurity_sem_associate”h]”j�)�”}”(hŒsecurity_sem_associate”h]”hŒsecurity_sem_associate”…”�”}”(hjÙ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕ�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj´�h²hh³jÆ�h´M<ubjœ)�”}”(hŒ'(struct kern_ipc_perm *sma, int semflg)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *sma”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjõ�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjñ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñ�ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŽŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÛ�sbŒc.security_sem_associate”†”asbuh1hhjñ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Žh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñ�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjAŽh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjñ�ubj�)�”}”(hŒsma”h]”hŒsma”…”�”}”(hjNŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjñ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjí�ubj¢)�”}”(hŒ int semflg”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjgŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjcŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjcŽubj�)�”}”(hŒsemflg”h]”hŒsemflg”…”�”}”(hjƒŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjcŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjí�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj´�h²hh³jÆ�h´M<ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj°�h²hh³jÆ�h´M<ubah}”(h]”j«�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÆ�h´M<hj­�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Check if a sysv semaphore operation is allowed”h]”hŒ.Check if a sysv semaphore operation is allowed”…”�”}”(hj­Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M<hjªŽh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj­�h²hh³jÆ�h´M<ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÅŽjæjÅŽjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX�**Parameters** ``struct kern_ipc_perm *sma`` sysv ipc permission structure ``int semflg`` operation flags **Description** Check permission when a semaphore is requested through the semget system call. This hook is only called when returning the semaphore identifier for an existing semaphore, not when a new one must be created. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÏŽh]”hŒ Parameters”…”�”}”(hjÑŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÍŽubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M@hjÉŽubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *sma`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *sma``”h]”j)�”}”(hjîŽh]”hŒstruct kern_ipc_perm *sma”…”�”}”(hjðŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjìŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M=hjèŽubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�h´M=hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjèŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´M=hjåŽubj)�”}”(hŒ``int semflg`` operation flags ”h]”(j)�”}”(hŒ``int semflg``”h]”j)�”}”(hj'�h]”hŒ int semflg”…”�”}”(hj)�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M>hj!�ubj2)�”}”(hhh]”hÝ)�”}”(hŒoperation flags”h]”hŒoperation flags”…”�”}”(hj@�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j<�h´M>hj=�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj!�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j<�h´M>hjåŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÉŽubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjb�h]”hŒ Description”…”�”}”(hjd�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M@hjÉŽubhÝ)�”}”(hŒÎCheck permission when a semaphore is requested through the semget system call. This hook is only called when returning the semaphore identifier for an existing semaphore, not when a new one must be created.”h]”hŒÎCheck permission when a semaphore is requested through the semget system call. This hook is only called when returning the semaphore identifier for an existing semaphore, not when a new one must be created.”…”�”}”(hjx�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M?hjÉŽubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj‰�h]”hŒReturn”…”�”}”(hj‹�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‡�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MChjÉŽubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjŸ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MDhjÉŽubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ security_sem_semctl (C function)”Œc.security_sem_semctl”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjÊ�h²hh³jÜ�h´MLubj{)�”}”(hŒsecurity_sem_semctl”h]”j�)�”}”(hŒsecurity_sem_semctl”h]”hŒsecurity_sem_semctl”…”�”}”(hjï�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjë�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÊ�h²hh³jÜ�h´MLubjœ)�”}”(hŒ$(struct kern_ipc_perm *sma, int cmd)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *sma”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj)�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j+�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jñ�sbŒc.security_sem_semctl”†”asbuh1hhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjW�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ubj�)�”}”(hŒsma”h]”hŒsma”…”�”}”(hjd�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubj¢)�”}”(hŒint cmd”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj}�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjy�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjy�ubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hj™�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjy�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÊ�h²hh³jÜ�h´MLubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÆ�h²hh³jÜ�h´MLubah}”(h]”jÁ�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÜ�h´MLhjÃ�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Check if a sysv semaphore operation is allowed”h]”hŒ.Check if a sysv semaphore operation is allowed”…”�”}”(hjÃ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MLhjÀ�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÃ�h²hh³jÜ�h´MLubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÛ�jæjÛ�jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct kern_ipc_perm *sma`` sysv ipc permission structure ``int cmd`` operation **Description** Check permission when a semaphore operation specified by **cmd** is to be performed on the semaphore. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjå�h]”hŒ Parameters”…”�”}”(hjç�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MPhjß�ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *sma`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *sma``”h]”j)�”}”(hj‘h]”hŒstruct kern_ipc_perm *sma”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MMhjþ�ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‘h´MMhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjþ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‘h´MMhjû�ubj)�”}”(hŒ``int cmd`` operation ”h]”(j)�”}”(hŒ ``int cmd``”h]”j)�”}”(hj=‘h]”hŒint cmd”…”�”}”(hj?‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MNhj7‘ubj2)�”}”(hhh]”hÝ)�”}”(hŒ operation”h]”hŒ operation”…”�”}”(hjV‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jR‘h´MNhjS‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj7‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jR‘h´MNhjû�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjß�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjx‘h]”hŒ Description”…”�”}”(hjz‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjv‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MPhjß�ubhÝ)�”}”(hŒeCheck permission when a semaphore operation specified by **cmd** is to be performed on the semaphore.”h]”(hŒ9Check permission when a semaphore operation specified by ”…”�”}”(hjŽ‘h²hh³Nh´Nubjõ)�”}”(hŒ**cmd**”h]”hŒcmd”…”�”}”(hj–‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŽ‘ubhŒ% is to be performed on the semaphore.”…”�”}”(hjŽ‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MOhjß�ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj±‘h]”hŒReturn”…”�”}”(hj³‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MRhjß�ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjÇ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MShjß�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sem_semop (C function)”Œc.security_sem_semop”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒbint security_sem_semop (struct kern_ipc_perm *sma, struct sembuf *sops, unsigned nsops, int alter)”h]”j)�”}”(hŒaint security_sem_semop(struct kern_ipc_perm *sma, struct sembuf *sops, unsigned nsops, int alter)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjö‘h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjò‘h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò‘h²hh³j’h´M[ubj{)�”}”(hŒsecurity_sem_semop”h]”j�)�”}”(hŒsecurity_sem_semop”h]”hŒsecurity_sem_semop”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjò‘h²hh³j’h´M[ubjœ)�”}”(hŒK(struct kern_ipc_perm *sma, struct sembuf *sops, unsigned nsops, int alter)”h]”(j¢)�”}”(hŒstruct kern_ipc_perm *sma”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj3’h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/’ubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hjQ’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jS’Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j’sbŒc.security_sem_semop”†”asbuh1hhj/’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj/’ubj�)�”}”(hŒsma”h]”hŒsma”…”�”}”(hjŒ’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+’ubj¢)�”}”(hŒstruct sembuf *sops”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¥’h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¡’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡’ubh)�”}”(hhh]”j�)�”}”(hŒsembuf”h]”hŒsembuf”…”�”}”(hjÃ’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀ’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÅ’Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jm’Œc.security_sem_semop”†”asbuh1hhj¡’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjï’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¡’ubj�)�”}”(hŒsops”h]”hŒsops”…”�”}”(hjü’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+’ubj¢)�”}”(hŒunsigned nsops”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“ubj�)�”}”(hŒnsops”h]”hŒnsops”…”�”}”(hj1“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+’ubj¢)�”}”(hŒ int alter”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjJ“h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjF“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjF“ubj�)�”}”(hŒalter”h]”hŒalter”…”�”}”(hjf“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjF“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+’ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjò‘h²hh³j’h´M[ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjî‘h²hh³j’h´M[ubah}”(h]”jé‘ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j’h´M[hjë‘h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Check if a sysv semaphore operation is allowed”h]”hŒ.Check if a sysv semaphore operation is allowed”…”�”}”(hj�“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M[hj�“h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjë‘h²hh³j’h´M[ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¨“jæj¨“jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX·**Parameters** ``struct kern_ipc_perm *sma`` sysv ipc permission structure ``struct sembuf *sops`` operations to perform ``unsigned nsops`` number of operations ``int alter`` flag indicating changes will be made **Description** Check permissions before performing operations on members of the semaphore set. If the **alter** flag is nonzero, the semaphore set may be modified. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj²“h]”hŒ Parameters”…”�”}”(hj´“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_hj¬“ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct kern_ipc_perm *sma`` sysv ipc permission structure ”h]”(j)�”}”(hŒ``struct kern_ipc_perm *sma``”h]”j)�”}”(hjÑ“h]”hŒstruct kern_ipc_perm *sma”…”�”}”(hjÓ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M\hjË“ubj2)�”}”(hhh]”hÝ)�”}”(hŒsysv ipc permission structure”h]”hŒsysv ipc permission structure”…”�”}”(hjê“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jæ“h´M\hjç“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjË“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jæ“h´M\hjÈ“ubj)�”}”(hŒ.``struct sembuf *sops`` operations to perform ”h]”(j)�”}”(hŒ``struct sembuf *sops``”h]”j)�”}”(hj ”h]”hŒstruct sembuf *sops”…”�”}”(hj ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M]hj”ubj2)�”}”(hhh]”hÝ)�”}”(hŒoperations to perform”h]”hŒoperations to perform”…”�”}”(hj#”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”h´M]hj ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”h´M]hjÈ“ubj)�”}”(hŒ(``unsigned nsops`` number of operations ”h]”(j)�”}”(hŒ``unsigned nsops``”h]”j)�”}”(hjC”h]”hŒunsigned nsops”…”�”}”(hjE”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjA”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M^hj=”ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of operations”h]”hŒnumber of operations”…”�”}”(hj\”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jX”h´M^hjY”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jX”h´M^hjÈ“ubj)�”}”(hŒ3``int alter`` flag indicating changes will be made ”h]”(j)�”}”(hŒ ``int alter``”h]”j)�”}”(hj|”h]”hŒ int alter”…”�”}”(hj~”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjz”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_hjv”ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$flag indicating changes will be made”h]”hŒ$flag indicating changes will be made”…”�”}”(hj•”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‘”h´M_hj’”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjv”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‘”h´M_hjÈ“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¬“ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj·”h]”hŒ Description”…”�”}”(hj¹”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµ”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mahj¬“ubhÝ)�”}”(hŒ”Check permissions before performing operations on members of the semaphore set. If the **alter** flag is nonzero, the semaphore set may be modified.”h]”(hŒWCheck permissions before performing operations on members of the semaphore set. If the ”…”�”}”(hjÍ”h²hh³Nh´Nubjõ)�”}”(hŒ **alter**”h]”hŒalter”…”�”}”(hjÕ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÍ”ubhŒ4 flag is nonzero, the semaphore set may be modified.”…”�”}”(hjÍ”h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M`hj¬“ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjð”h]”hŒReturn”…”�”}”(hjò”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjî”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mchj¬“ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mdhj¬“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_getselfattr (C function)”Œc.security_getselfattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒfint security_getselfattr (unsigned int attr, struct lsm_ctx __user *uctx, u32 __user *size, u32 flags)”h]”j)�”}”(hŒeint security_getselfattr(unsigned int attr, struct lsm_ctx __user *uctx, u32 __user *size, u32 flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj5•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1•h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1•h²hh³jC•h´M€ubj{)�”}”(hŒsecurity_getselfattr”h]”j�)�”}”(hŒsecurity_getselfattr”h]”hŒsecurity_getselfattr”…”�”}”(hjV•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjR•ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj1•h²hh³jC•h´M€ubjœ)�”}”(hŒM(unsigned int attr, struct lsm_ctx __user *uctx, u32 __user *size, u32 flags)”h]”(j¢)�”}”(hŒunsigned int attr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjr•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjn•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjn•ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjŽ•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjn•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjn•ubj�)�”}”(hŒattr”h]”hŒattr”…”�”}”(hjª•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjn•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjj•ubj¢)�”}”(hŒstruct lsm_ctx __user *uctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¿•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjЕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿•ubh)�”}”(hhh]”j�)�”}”(hŒlsm_ctx”h]”hŒlsm_ctx”…”�”}”(hjá•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞ•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j㕌modname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jX•sbŒc.security_getselfattr”†”asbuh1hhj¿•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿•ubhŒ__user”…”�”}”(hj¿•h²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿•ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj!–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¿•ubj�)�”}”(hŒuctx”h]”hŒuctx”…”�”}”(hj.–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjj•ubj¢)�”}”(hŒu32 __user *size”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjJ–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjG–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jL–Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jý•Œc.security_getselfattr”†”asbuh1hhjC–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjC–ubhŒ__user”…”�”}”(hjC–h²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjC–ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjˆ–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjC–ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj•–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjC–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjj•ubj¢)�”}”(hŒ u32 flags”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj±–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®–ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j³–Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jý•Œc.security_getselfattr”†”asbuh1hhjª–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjª–ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÝ–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjª–ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjj•ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj1•h²hh³jC•h´M€ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj-•h²hh³jC•h´M€ubah}”(h]”j(•ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jC•h´M€hj*•h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Read an LSM attribute of the current process.”h]”hŒ-Read an LSM attribute of the current process.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M€hj—h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj*•h²hh³jC•h´M€ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj—jæj—jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXÌ**Parameters** ``unsigned int attr`` which attribute to return ``struct lsm_ctx __user *uctx`` the user-space destination for the information, or NULL ``u32 __user *size`` pointer to the size of space available to receive the data ``u32 flags`` special handling options. LSM_FLAG_SINGLE indicates that only attributes associated with the LSM identified in the passed **ctx** be reported. **Description** A NULL value for **uctx** can be used to get both the number of attributes and the size of the data. Returns the number of attributes found on success, negative value on error. **size** is reset to the total size of the data. If **size** is insufficient to contain the data -E2BIG is returned.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj)—h]”hŒ Parameters”…”�”}”(hj+—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'—ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„hj#—ubj )�”}”(hhh]”(j)�”}”(hŒ0``unsigned int attr`` which attribute to return ”h]”(j)�”}”(hŒ``unsigned int attr``”h]”j)�”}”(hjH—h]”hŒunsigned int attr”…”�”}”(hjJ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjF—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjB—ubj2)�”}”(hhh]”hÝ)�”}”(hŒwhich attribute to return”h]”hŒwhich attribute to return”…”�”}”(hja—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j]—h´M�hj^—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjB—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]—h´M�hj?—ubj)�”}”(hŒX``struct lsm_ctx __user *uctx`` the user-space destination for the information, or NULL ”h]”(j)�”}”(hŒ``struct lsm_ctx __user *uctx``”h]”j)�”}”(hj�—h]”hŒstruct lsm_ctx __user *uctx”…”�”}”(hjƒ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‚hj{—ubj2)�”}”(hhh]”hÝ)�”}”(hŒ7the user-space destination for the information, or NULL”h]”hŒ7the user-space destination for the information, or NULL”…”�”}”(hjš—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–—h´M‚hj——ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–—h´M‚hj?—ubj)�”}”(hŒP``u32 __user *size`` pointer to the size of space available to receive the data ”h]”(j)�”}”(hŒ``u32 __user *size``”h]”j)�”}”(hjº—h]”hŒu32 __user *size”…”�”}”(hj¼—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mƒhj´—ubj2)�”}”(hhh]”hÝ)�”}”(hŒ:pointer to the size of space available to receive the data”h]”hŒ:pointer to the size of space available to receive the data”…”�”}”(hjÓ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏ—h´MƒhjЗubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏ—h´Mƒhj?—ubj)�”}”(hŒ�``u32 flags`` special handling options. LSM_FLAG_SINGLE indicates that only attributes associated with the LSM identified in the passed **ctx** be reported. ”h]”(j)�”}”(hŒ ``u32 flags``”h]”j)�”}”(hjó—h]”hŒ u32 flags”…”�”}”(hjõ—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M†hjí—ubj2)�”}”(hhh]”hÝ)�”}”(hŒŽspecial handling options. LSM_FLAG_SINGLE indicates that only attributes associated with the LSM identified in the passed **ctx** be reported.”h]”(hŒzspecial handling options. LSM_FLAG_SINGLE indicates that only attributes associated with the LSM identified in the passed ”…”�”}”(hj ˜h²hh³Nh´Nubjõ)�”}”(hŒ**ctx**”h]”hŒctx”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ˜ubhŒ be reported.”…”�”}”(hj ˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„hj ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjí—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˜h´M†hj?—ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj#—ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjA˜h]”hŒ Description”…”�”}”(hjC˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mˆhj#—ubhÝ)�”}”(hŒdA NULL value for **uctx** can be used to get both the number of attributes and the size of the data.”h]”(hŒA NULL value for ”…”�”}”(hjW˜h²hh³Nh´Nubjõ)�”}”(hŒ**uctx**”h]”hŒuctx”…”�”}”(hj_˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjW˜ubhŒK can be used to get both the number of attributes and the size of the data.”…”�”}”(hjW˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡hj#—ubhÝ)�”}”(hŒÀReturns the number of attributes found on success, negative value on error. **size** is reset to the total size of the data. If **size** is insufficient to contain the data -E2BIG is returned.”h]”(hŒLReturns the number of attributes found on success, negative value on error. ”…”�”}”(hjx˜h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj€˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx˜ubhŒ, is reset to the total size of the data. If ”…”�”}”(hjx˜h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj’˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx˜ubhŒ8 is insufficient to contain the data -E2BIG is returned.”…”�”}”(hjx˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŠhj#—ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_setselfattr (C function)”Œc.security_setselfattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ^int security_setselfattr (unsigned int attr, struct lsm_ctx __user *uctx, u32 size, u32 flags)”h]”j)�”}”(hŒ]int security_setselfattr(unsigned int attr, struct lsm_ctx __user *uctx, u32 size, u32 flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj˘h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjǘh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjǘh²hh³jÙ˜h´MÝubj{)�”}”(hŒsecurity_setselfattr”h]”j�)�”}”(hŒsecurity_setselfattr”h]”hŒsecurity_setselfattr”…”�”}”(hjì˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjè˜ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjǘh²hh³jÙ˜h´MÝubjœ)�”}”(hŒE(unsigned int attr, struct lsm_ctx __user *uctx, u32 size, u32 flags)”h]”(j¢)�”}”(hŒunsigned int attr”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj$™h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™ubj�)�”}”(hŒattr”h]”hŒattr”…”�”}”(hj@™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj™ubj¢)�”}”(hŒstruct lsm_ctx __user *uctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjY™h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjU™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjf™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjU™ubh)�”}”(hhh]”j�)�”}”(hŒlsm_ctx”h]”hŒlsm_ctx”…”�”}”(hjw™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjt™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jy™Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jî˜sbŒc.security_setselfattr”†”asbuh1hhjU™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjU™ubhŒ__user”…”�”}”(hjU™h²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjU™ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj·™h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjU™ubj�)�”}”(hŒuctx”h]”hŒuctx”…”�”}”(hjÄ™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjU™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj™ubj¢)�”}”(hŒu32 size”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjà™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝ™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j♌modname”NŒ classname”Nj] j` )�”}”jc ]”j“™Œc.security_setselfattr”†”asbuh1hhjÙ™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþ™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙ™ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙ™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj™ubj¢)�”}”(hŒ u32 flags”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj(šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j*šŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j“™Œc.security_setselfattr”†”asbuh1hhj!šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!šubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjTšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj™ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjǘh²hh³jÙ˜h´MÝubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjØh²hh³jÙ˜h´MÝubah}”(h]”j¾˜ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÙ˜h´MÝhjÀ˜h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Set an LSM attribute on the current process.”h]”hŒ,Set an LSM attribute on the current process.”…”�”}”(hj~šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÝhj{šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀ˜h²hh³jÙ˜h´MÝubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj–šjæj–šjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXþ**Parameters** ``unsigned int attr`` which attribute to set ``struct lsm_ctx __user *uctx`` the user-space source for the information ``u32 size`` the size of the data ``u32 flags`` reserved for future use, must be 0 **Description** Set an LSM attribute for the current process. The LSM, attribute and new value are included in **uctx**. Returns 0 on success, -EINVAL if the input is inconsistent, -EFAULT if the user buffer is inaccessible, E2BIG if size is too big, or an LSM specific failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj šh]”hŒ Parameters”…”�”}”(hj¢šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjžšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Máhjššubj )�”}”(hhh]”(j)�”}”(hŒ-``unsigned int attr`` which attribute to set ”h]”(j)�”}”(hŒ``unsigned int attr``”h]”j)�”}”(hj¿šh]”hŒunsigned int attr”…”�”}”(hjÁšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½šubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÞhj¹šubj2)�”}”(hhh]”hÝ)�”}”(hŒwhich attribute to set”h]”hŒwhich attribute to set”…”�”}”(hjØšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔšh´MÞhjÕšubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔšh´MÞhj¶šubj)�”}”(hŒJ``struct lsm_ctx __user *uctx`` the user-space source for the information ”h]”(j)�”}”(hŒ``struct lsm_ctx __user *uctx``”h]”j)�”}”(hjøšh]”hŒstruct lsm_ctx __user *uctx”…”�”}”(hjúšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöšubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mßhjòšubj2)�”}”(hhh]”hÝ)�”}”(hŒ)the user-space source for the information”h]”hŒ)the user-space source for the information”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ›h´Mßhj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjòšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ›h´Mßhj¶šubj)�”}”(hŒ"``u32 size`` the size of the data ”h]”(j)�”}”(hŒ ``u32 size``”h]”j)�”}”(hj1›h]”hŒu32 size”…”�”}”(hj3›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Màhj+›ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe size of the data”h]”hŒthe size of the data”…”�”}”(hjJ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jF›h´MàhjG›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj+›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jF›h´Màhj¶šubj)�”}”(hŒ1``u32 flags`` reserved for future use, must be 0 ”h]”(j)�”}”(hŒ ``u32 flags``”h]”j)�”}”(hjj›h]”hŒ u32 flags”…”�”}”(hjl›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Máhjd›ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"reserved for future use, must be 0”h]”hŒ"reserved for future use, must be 0”…”�”}”(hjƒ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›h´Máhj€›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjd›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›h´Máhj¶šubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjššubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¥›h]”hŒ Description”…”�”}”(hj§›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MãhjššubhÝ)�”}”(hŒhSet an LSM attribute for the current process. The LSM, attribute and new value are included in **uctx**.”h]”(hŒ_Set an LSM attribute for the current process. The LSM, attribute and new value are included in ”…”�”}”(hj»›h²hh³Nh´Nubjõ)�”}”(hŒ**uctx**”h]”hŒuctx”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»›ubhŒ.”…”�”}”(hj»›h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MâhjššubhÝ)�”}”(hŒ�Returns 0 on success, -EINVAL if the input is inconsistent, -EFAULT if the user buffer is inaccessible, E2BIG if size is too big, or an LSM specific failure.”h]”hŒ�Returns 0 on success, -EINVAL if the input is inconsistent, -EFAULT if the user buffer is inaccessible, E2BIG if size is too big, or an LSM specific failure.”…”�”}”(hjÜ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Måhjššubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_getprocattr (C function)”Œc.security_getprocattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ[int security_getprocattr (struct task_struct *p, int lsmid, const char *name, char **value)”h]”j)�”}”(hŒZint security_getprocattr(struct task_struct *p, int lsmid, const char *name, char **value)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjœh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœh²hh³jœh´Mubj{)�”}”(hŒsecurity_getprocattr”h]”j�)�”}”(hŒsecurity_getprocattr”h]”hŒsecurity_getprocattr”…”�”}”(hj,œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(œubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjœh²hh³jœh´Mubjœ)�”}”(hŒB(struct task_struct *p, int lsmid, const char *name, char **value)”h]”(j¢)�”}”(hŒstruct task_struct *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjHœh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjDœubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjDœubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjfœh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjcœubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jhœŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j.œsbŒc.security_getprocattr”†”asbuh1hhjDœubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjDœubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj”œh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjDœubj�)�”}”(hjïh]”hŒp”…”�”}”(hj¡œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj@œubj¢)�”}”(hŒ int lsmid”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¹œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjµœubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµœubj�)�”}”(hŒlsmid”h]”hŒlsmid”…”�”}”(hjÕœh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj@œubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjîœh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjêœubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêœubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjêœubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêœubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj%�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjêœubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj2�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj@œubj¢)�”}”(hŒ char **value”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjK�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjG�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjG�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjG�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjt�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjG�ubj�)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjG�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj@œubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjœh²hh³jœh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjœh²hh³jœh´Mubah}”(h]”jþ›ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jœh´Mhjœh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒRead an attribute for a task”h]”hŒRead an attribute for a task”…”�”}”(hj«�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj¨�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjœh²hh³jœh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÃ�jæjÃ�jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXY**Parameters** ``struct task_struct *p`` the task ``int lsmid`` LSM identification ``const char *name`` attribute name ``char **value`` attribute value **Description** Read attribute **name** for task **p** and store it into **value** if allowed. **Return** Returns the length of **value** on success, a negative value otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÍ�h]”hŒ Parameters”…”�”}”(hjÏ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjË�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÇ�ubj )�”}”(hhh]”(j)�”}”(hŒ#``struct task_struct *p`` the task ”h]”(j)�”}”(hŒ``struct task_struct *p``”h]”j)�”}”(hjì�h]”hŒstruct task_struct *p”…”�”}”(hjî�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjê�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjæ�ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe task”h]”hŒthe task”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jžh´Mhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jžh´Mhjã�ubj)�”}”(hŒ!``int lsmid`` LSM identification ”h]”(j)�”}”(hŒ ``int lsmid``”h]”j)�”}”(hj%žh]”hŒ int lsmid”…”�”}”(hj'žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#žubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjžubj2)�”}”(hhh]”hÝ)�”}”(hŒLSM identification”h]”hŒLSM identification”…”�”}”(hj>žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:žh´Mhj;žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:žh´Mhjã�ubj)�”}”(hŒ$``const char *name`` attribute name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hj^žh]”hŒconst char *name”…”�”}”(hj`žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\žubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjXžubj2)�”}”(hhh]”hÝ)�”}”(hŒattribute name”h]”hŒattribute name”…”�”}”(hjwžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jsžh´Mhjtžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjXžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jsžh´Mhjã�ubj)�”}”(hŒ!``char **value`` attribute value ”h]”(j)�”}”(hŒ``char **value``”h]”j)�”}”(hj—žh]”hŒ char **value”…”�”}”(hj™žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•žubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj‘žubj2)�”}”(hhh]”hÝ)�”}”(hŒattribute value”h]”hŒattribute value”…”�”}”(hj°žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¬žh´Mhj­žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‘žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬žh´Mhjã�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÇ�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÒžh]”hŒ Description”…”�”}”(hjÔžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjОubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÇ�ubhÝ)�”}”(hŒNRead attribute **name** for task **p** and store it into **value** if allowed.”h]”(hŒRead attribute ”…”�”}”(hjèžh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjðžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjèžubhŒ for task ”…”�”}”(hjèžh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjèžubhŒ and store it into ”…”�”}”(hjèžh²hh³Nh´Nubjõ)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjèžubhŒ if allowed.”…”�”}”(hjèžh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÇ�ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj/Ÿh]”hŒReturn”…”�”}”(hj1Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÇ�ubhÝ)�”}”(hŒGReturns the length of **value** on success, a negative value otherwise.”h]”(hŒReturns the length of ”…”�”}”(hjEŸh²hh³Nh´Nubjõ)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hjMŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEŸubhŒ( on success, a negative value otherwise.”…”�”}”(hjEŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÇ�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_setprocattr (C function)”Œc.security_setprocattr”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPint security_setprocattr (int lsmid, const char *name, void *value, size_t size)”h]”j)�”}”(hŒOint security_setprocattr(int lsmid, const char *name, void *value, size_t size)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj†Ÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‚Ÿh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M(ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚Ÿh²hh³j”Ÿh´M(ubj{)�”}”(hŒsecurity_setprocattr”h]”j�)�”}”(hŒsecurity_setprocattr”h]”hŒsecurity_setprocattr”…”�”}”(hj§Ÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£Ÿubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‚Ÿh²hh³j”Ÿh´M(ubjœ)�”}”(hŒ7(int lsmid, const char *name, void *value, size_t size)”h]”(j¢)�”}”(hŒ int lsmid”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(h•jßh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿Ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿Ÿubj�)�”}”(hŒlsmid”h]”hŒlsmid”…”�”}”(hjߟh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿Ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»Ÿubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjøŸh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjôŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôŸubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjôŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj! h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôŸubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjôŸubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôŸubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»Ÿubj¢)�”}”(hŒ void *value”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjQ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjq h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjQ ubj�)�”}”(hŒvalue”h]”hŒvalue”…”�”}”(hj~ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»Ÿubj¢)�”}”(hŒ size_t size”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj— ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jœ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j©ŸsbŒc.security_setprocattr”†”asbuh1hhj“ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“ ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjÈ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj»Ÿubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‚Ÿh²hh³j”Ÿh´M(ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj~Ÿh²hh³j”Ÿh´M(ubah}”(h]”jyŸah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j”Ÿh´M(hj{Ÿh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒSet an attribute for a task”h]”hŒSet an attribute for a task”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M(hjï h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj{Ÿh²hh³j”Ÿh´M(ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj ¡jæj ¡jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX[**Parameters** ``int lsmid`` LSM identification ``const char *name`` attribute name ``void *value`` attribute value ``size_t size`` attribute value size **Description** Write (set) the current task's attribute **name** to **value**, size **size** if allowed. **Return** Returns bytes written on success, a negative value otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¡h]”hŒ Parameters”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M,hj¡ubj )�”}”(hhh]”(j)�”}”(hŒ!``int lsmid`` LSM identification ”h]”(j)�”}”(hŒ ``int lsmid``”h]”j)�”}”(hj3¡h]”hŒ int lsmid”…”�”}”(hj5¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M)hj-¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒLSM identification”h]”hŒLSM identification”…”�”}”(hjL¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jH¡h´M)hjI¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj-¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jH¡h´M)hj*¡ubj)�”}”(hŒ$``const char *name`` attribute name ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjl¡h]”hŒconst char *name”…”�”}”(hjn¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M*hjf¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒattribute name”h]”hŒattribute name”…”�”}”(hj…¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�¡h´M*hj‚¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjf¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�¡h´M*hj*¡ubj)�”}”(hŒ ``void *value`` attribute value ”h]”(j)�”}”(hŒ``void *value``”h]”j)�”}”(hj¥¡h]”hŒ void *value”…”�”}”(hj§¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hjŸ¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒattribute value”h]”hŒattribute value”…”�”}”(hj¾¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jº¡h´M+hj»¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŸ¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jº¡h´M+hj*¡ubj)�”}”(hŒ%``size_t size`` attribute value size ”h]”(j)�”}”(hŒ``size_t size``”h]”j)�”}”(hjÞ¡h]”hŒ size_t size”…”�”}”(hjà¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M,hjØ¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒattribute value size”h]”hŒattribute value size”…”�”}”(hj÷¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jó¡h´M,hjô¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØ¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jó¡h´M,hj*¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¢h]”hŒ Description”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M.hj¡ubhÝ)�”}”(hŒYWrite (set) the current task's attribute **name** to **value**, size **size** if allowed.”h]”(hŒ+Write (set) the current task’s attribute ”…”�”}”(hj/¢h²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hj7¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/¢ubhŒ to ”…”�”}”(hj/¢h²hh³Nh´Nubjõ)�”}”(hŒ **value**”h]”hŒvalue”…”�”}”(hjI¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/¢ubhŒ, size ”…”�”}”(hj/¢h²hh³Nh´Nubjõ)�”}”(hŒ**size**”h]”hŒsize”…”�”}”(hj[¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/¢ubhŒ if allowed.”…”�”}”(hj/¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M-hj¡ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjv¢h]”hŒReturn”…”�”}”(hjx¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjt¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M0hj¡ubhÝ)�”}”(hŒ=Returns bytes written on success, a negative value otherwise.”h]”hŒ=Returns bytes written on success, a negative value otherwise.”…”�”}”(hjŒ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M1hj¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_post_notification (C function)”Œc.security_post_notification”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒqint security_post_notification (const struct cred *w_cred, const struct cred *cred, struct watch_notification *n)”h]”j)�”}”(hŒpint security_post_notification(const struct cred *w_cred, const struct cred *cred, struct watch_notification *n)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj»¢h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj·¢h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·¢h²hh³jÉ¢h´Mèubj{)�”}”(hŒsecurity_post_notification”h]”j�)�”}”(hŒsecurity_post_notification”h]”hŒsecurity_post_notification”…”�”}”(hjÜ¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØ¢ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj·¢h²hh³jÉ¢h´Mèubjœ)�”}”(hŒR(const struct cred *w_cred, const struct cred *cred, struct watch_notification *n)”h]”(j¢)�”}”(hŒconst struct cred *w_cred”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjø¢h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjô¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô¢ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjô¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj £h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô¢ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj1£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j3£Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÞ¢sbŒc.security_post_notification”†”asbuh1hhjô¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQ£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô¢ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj_£h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjô¢ubj�)�”}”(hŒw_cred”h]”hŒw_cred”…”�”}”(hjl£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô¢ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjð¢ubj¢)�”}”(hŒconst struct cred *cred”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj…£h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�£ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj £h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�£ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj¾£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÀ£Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jM£Œc.security_post_notification”†”asbuh1hhj�£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�£ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjê£h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�£ubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj÷£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjð¢ubj¢)�”}”(hŒstruct watch_notification *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ¤ubh)�”}”(hhh]”j�)�”}”(hŒwatch_notification”h]”hŒwatch_notification”…”�”}”(hj.¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j0¤Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jM£Œc.security_post_notification”†”asbuh1hhj ¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ¤ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjZ¤h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ¤ubj�)�”}”(hj�h]”hŒn”…”�”}”(hjg¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ¤ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjð¢ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj·¢h²hh³jÉ¢h´Mèubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj³¢h²hh³jÉ¢h´Mèubah}”(h]”j®¢ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÉ¢h´Mèhj°¢h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if a watch notification can be posted”h]”hŒ+Check if a watch notification can be posted”…”�”}”(hj�¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mèhj�¤h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj°¢h²hh³jÉ¢h´Mèubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¨¤jæj¨¤jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXm**Parameters** ``const struct cred *w_cred`` credentials of the task that set the watch ``const struct cred *cred`` credentials of the task which triggered the watch ``struct watch_notification *n`` the notification **Description** Check to see if a watch notification can be posted to a particular queue. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj²¤h]”hŒ Parameters”…”�”}”(hj´¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mìhj¬¤ubj )�”}”(hhh]”(j)�”}”(hŒI``const struct cred *w_cred`` credentials of the task that set the watch ”h]”(j)�”}”(hŒ``const struct cred *w_cred``”h]”j)�”}”(hjѤh]”hŒconst struct cred *w_cred”…”�”}”(hjÓ¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjϤubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Méhjˤubj2)�”}”(hhh]”hÝ)�”}”(hŒ*credentials of the task that set the watch”h]”hŒ*credentials of the task that set the watch”…”�”}”(hjê¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jæ¤h´Méhjç¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjˤubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jæ¤h´MéhjȤubj)�”}”(hŒN``const struct cred *cred`` credentials of the task which triggered the watch ”h]”(j)�”}”(hŒ``const struct cred *cred``”h]”j)�”}”(hj ¥h]”hŒconst struct cred *cred”…”�”}”(hj ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mêhj¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒ1credentials of the task which triggered the watch”h]”hŒ1credentials of the task which triggered the watch”…”�”}”(hj#¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥h´Mêhj ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥h´MêhjȤubj)�”}”(hŒ2``struct watch_notification *n`` the notification ”h]”(j)�”}”(hŒ ``struct watch_notification *n``”h]”j)�”}”(hjC¥h]”hŒstruct watch_notification *n”…”�”}”(hjE¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjA¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mëhj=¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe notification”h]”hŒthe notification”…”�”}”(hj\¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jX¥h´MëhjY¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jX¥h´MëhjȤubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¬¤ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj~¥h]”hŒ Description”…”�”}”(hj€¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Míhj¬¤ubhÝ)�”}”(hŒICheck to see if a watch notification can be posted to a particular queue.”h]”hŒICheck to see if a watch notification can be posted to a particular queue.”…”�”}”(hj”¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mìhj¬¤ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¥¥h]”hŒReturn”…”�”}”(hj§¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mîhj¬¤ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj»¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mïhj¬¤ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_watch_key (C function)”Œc.security_watch_key”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(int security_watch_key (struct key *key)”h]”j)�”}”(hŒ'int security_watch_key(struct key *key)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjê¥h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjæ¥h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjù¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæ¥h²hh³jø¥h´Mûubj{)�”}”(hŒsecurity_watch_key”h]”j�)�”}”(hŒsecurity_watch_key”h]”hŒsecurity_watch_key”…”�”}”(hj ¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjæ¥h²hh³jø¥h´Mûubjœ)�”}”(hŒ(struct key *key)”h]”j¢)�”}”(hŒstruct key *key”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj'¦h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj#¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#¦ubh)�”}”(hhh]”j�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjE¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjB¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jG¦Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j ¦sbŒc.security_watch_key”†”asbuh1hhj#¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#¦ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjs¦h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj#¦ubj�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hj€¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¦ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjæ¥h²hh³jø¥h´Mûubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjâ¥h²hh³jø¥h´Mûubah}”(h]”jÝ¥ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jø¥h´Mûhjߥh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2Check if a task is allowed to watch for key events”h]”hŒ2Check if a task is allowed to watch for key events”…”�”}”(hjª¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mûhj§¦h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjߥh²hh³jø¥h´Mûubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¦jæj¦jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÖ**Parameters** ``struct key *key`` the key to watch **Description** Check to see if a process is allowed to watch for event notifications from a key or keyring. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj̦h]”hŒ Parameters”…”�”}”(hjΦh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjʦubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÿhjƦubj )�”}”(hhh]”j)�”}”(hŒ%``struct key *key`` the key to watch ”h]”(j)�”}”(hŒ``struct key *key``”h]”j)�”}”(hjë¦h]”hŒstruct key *key”…”�”}”(hjí¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mühjå¦ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe key to watch”h]”hŒthe key to watch”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j§h´Mühj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjå¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§h´Mühjâ¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjƦubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj&§h]”hŒ Description”…”�”}”(hj(§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MþhjƦubhÝ)�”}”(hŒ\Check to see if a process is allowed to watch for event notifications from a key or keyring.”h]”hŒ\Check to see if a process is allowed to watch for event notifications from a key or keyring.”…”�”}”(hj<§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MýhjƦubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjM§h]”hŒReturn”…”�”}”(hjO§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjK§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjƦubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjc§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjƦubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_netlink_send (C function)”Œc.security_netlink_send”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@int security_netlink_send (struct sock *sk, struct sk_buff *skb)”h]”j)�”}”(hŒ?int security_netlink_send(struct sock *sk, struct sk_buff *skb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj’§h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjާh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjާh²hh³j §h´M ubj{)�”}”(hŒsecurity_netlink_send”h]”j�)�”}”(hŒsecurity_netlink_send”h]”hŒsecurity_netlink_send”…”�”}”(hj³§h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯§ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjާh²hh³j §h´M ubjœ)�”}”(hŒ&(struct sock *sk, struct sk_buff *skb)”h]”(j¢)�”}”(hŒstruct sock *sk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjϧh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj˧ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjܧh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˧ubh)�”}”(hhh]”j�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjí§h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjê§ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jï§Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jµ§sbŒc.security_netlink_send”†”asbuh1hhj˧ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˧ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj˧ubj�)�”}”(hŒsk”h]”hŒsk”…”�”}”(hj(¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˧ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjǧubj¢)�”}”(hŒstruct sk_buff *skb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjA¨h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj=¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj=¨ubh)�”}”(hhh]”j�)�”}”(hŒsk_buff”h]”hŒsk_buff”…”�”}”(hj_¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”ja¨Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j ¨Œc.security_netlink_send”†”asbuh1hhj=¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj=¨ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹¨h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj=¨ubj�)�”}”(hŒskb”h]”hŒskb”…”�”}”(hj˜¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj=¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjǧubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjާh²hh³j §h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjЧh²hh³j §h´M ubah}”(h]”j…§ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j §h´M hj‡§h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1Save info and check if netlink sending is allowed”h]”hŒ1Save info and check if netlink sending is allowed”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj¿¨h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‡§h²hh³j §h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÚ¨jæjÚ¨jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct sock *sk`` sending socket ``struct sk_buff *skb`` netlink message **Description** Save security information for a netlink message so that permission checking can be performed when the message is processed. The security information can be saved using the eff_cap field of the netlink_skb_parms structure. Also may be used to provide fine grained control over message transmission. **Return** Returns 0 if the information was successfully saved and message is allowed to be transmitted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjä¨h]”hŒ Parameters”…”�”}”(hjæ¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâ¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÞ¨ubj )�”}”(hhh]”(j)�”}”(hŒ#``struct sock *sk`` sending socket ”h]”(j)�”}”(hŒ``struct sock *sk``”h]”j)�”}”(hj©h]”hŒstruct sock *sk”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjý¨ubj2)�”}”(hhh]”hÝ)�”}”(hŒsending socket”h]”hŒsending socket”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©h´M hj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjý¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©h´M hjú¨ubj)�”}”(hŒ(``struct sk_buff *skb`` netlink message ”h]”(j)�”}”(hŒ``struct sk_buff *skb``”h]”j)�”}”(hj<©h]”hŒstruct sk_buff *skb”…”�”}”(hj>©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj6©ubj2)�”}”(hhh]”hÝ)�”}”(hŒnetlink message”h]”hŒnetlink message”…”�”}”(hjU©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQ©h´M hjR©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQ©h´M hjú¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÞ¨ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjw©h]”hŒ Description”…”�”}”(hjy©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhju©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÞ¨ubhÝ)�”}”(hX*Save security information for a netlink message so that permission checking can be performed when the message is processed. The security information can be saved using the eff_cap field of the netlink_skb_parms structure. Also may be used to provide fine grained control over message transmission.”h]”hX*Save security information for a netlink message so that permission checking can be performed when the message is processed. The security information can be saved using the eff_cap field of the netlink_skb_parms structure. Also may be used to provide fine grained control over message transmission.”…”�”}”(hj�©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÞ¨ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjž©h]”hŒReturn”…”�”}”(hj ©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœ©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÞ¨ubhÝ)�”}”(hŒ]Returns 0 if the information was successfully saved and message is allowed to be transmitted.”h]”hŒ]Returns 0 if the information was successfully saved and message is allowed to be transmitted.”…”�”}”(hj´©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÞ¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_socket_create (C function)”Œc.security_socket_create”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIint security_socket_create (int family, int type, int protocol, int kern)”h]”j)�”}”(hŒHint security_socket_create(int family, int type, int protocol, int kern)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjã©h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjß©h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjß©h²hh³jñ©h´MSubj{)�”}”(hŒsecurity_socket_create”h]”j�)�”}”(hŒsecurity_socket_create”h]”hŒsecurity_socket_create”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjß©h²hh³jñ©h´MSubjœ)�”}”(hŒ.(int family, int type, int protocol, int kern)”h]”(j¢)�”}”(hŒ int family”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjªubj�)�”}”(hŒfamily”h]”hŒfamily”…”�”}”(hj<ªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªubj¢)�”}”(hŒint type”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjUªh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjQªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQªubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hjqªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªubj¢)�”}”(hŒ int protocol”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŠªh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj†ªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†ªubj�)�”}”(hŒprotocol”h]”hŒprotocol”…”�”}”(hj¦ªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†ªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªubj¢)�”}”(hŒint kern”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¿ªh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj»ªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjͪh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»ªubj�)�”}”(hŒkern”h]”hŒkern”…”�”}”(hjÛªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»ªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjß©h²hh³jñ©h´MSubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÛ©h²hh³jñ©h´MSubah}”(h]”jÖ©ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jñ©h´MShjØ©h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Check if creating a new socket is allowed”h]”hŒ)Check if creating a new socket is allowed”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MShj«h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjØ©h²hh³jñ©h´MSubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj«jæj«jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX)**Parameters** ``int family`` protocol family ``int type`` communications type ``int protocol`` requested protocol ``int kern`` set to 1 if a kernel socket is requested **Description** Check permissions prior to creating a new socket. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj'«h]”hŒ Parameters”…”�”}”(hj)«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MWhj!«ubj )�”}”(hhh]”(j)�”}”(hŒ``int family`` protocol family ”h]”(j)�”}”(hŒ``int family``”h]”j)�”}”(hjF«h]”hŒ int family”…”�”}”(hjH«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MThj@«ubj2)�”}”(hhh]”hÝ)�”}”(hŒprotocol family”h]”hŒprotocol family”…”�”}”(hj_«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[«h´MThj\«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj@«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[«h´MThj=«ubj)�”}”(hŒ!``int type`` communications type ”h]”(j)�”}”(hŒ ``int type``”h]”j)�”}”(hj«h]”hŒint type”…”�”}”(hj�«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MUhjy«ubj2)�”}”(hhh]”hÝ)�”}”(hŒcommunications type”h]”hŒcommunications type”…”�”}”(hj˜«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”«h´MUhj•«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjy«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”«h´MUhj=«ubj)�”}”(hŒ$``int protocol`` requested protocol ”h]”(j)�”}”(hŒ``int protocol``”h]”j)�”}”(hj¸«h]”hŒ int protocol”…”�”}”(hjº«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MVhj²«ubj2)�”}”(hhh]”hÝ)�”}”(hŒrequested protocol”h]”hŒrequested protocol”…”�”}”(hjÑ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÍ«h´MVhjΫubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj²«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÍ«h´MVhj=«ubj)�”}”(hŒ6``int kern`` set to 1 if a kernel socket is requested ”h]”(j)�”}”(hŒ ``int kern``”h]”j)�”}”(hjñ«h]”hŒint kern”…”�”}”(hjó«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjï«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MWhjë«ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(set to 1 if a kernel socket is requested”h]”hŒ(set to 1 if a kernel socket is requested”…”�”}”(hj ¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¬h´MWhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjë«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬h´MWhj=«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj!«ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj,¬h]”hŒ Description”…”�”}”(hj.¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MYhj!«ubhÝ)�”}”(hŒ1Check permissions prior to creating a new socket.”h]”hŒ1Check permissions prior to creating a new socket.”…”�”}”(hjB¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MXhj!«ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjS¬h]”hŒReturn”…”�”}”(hjU¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjQ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MZhj!«ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hji¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M[hj!«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_socket_post_create (C function)”Œc.security_socket_post_create”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒcint security_socket_post_create (struct socket *sock, int family, int type, int protocol, int kern)”h]”j)�”}”(hŒbint security_socket_post_create(struct socket *sock, int family, int type, int protocol, int kern)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj˜¬h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj”¬h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§¬h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”¬h²hh³j¦¬h´Mcubj{)�”}”(hŒsecurity_socket_post_create”h]”j�)�”}”(hŒsecurity_socket_post_create”h]”hŒsecurity_socket_post_create”…”�”}”(hj¹¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµ¬ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj”¬h²hh³j¦¬h´Mcubjœ)�”}”(hŒC(struct socket *sock, int family, int type, int protocol, int kern)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÕ¬h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjѬubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ¬h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjѬubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjó¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjð¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jõ¬Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j»¬sbŒc.security_socket_post_create”†”asbuh1hhjѬubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjѬubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj!­h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjѬubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hj.­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjѬubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjͬubj¢)�”}”(hŒ int family”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjG­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjC­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjC­ubj�)�”}”(hŒfamily”h]”hŒfamily”…”�”}”(hjc­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjC­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjͬubj¢)�”}”(hŒint type”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj|­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjx­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjx­ubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj˜­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjx­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjͬubj¢)�”}”(hŒ int protocol”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj±­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­­ubj�)�”}”(hŒprotocol”h]”hŒprotocol”…”�”}”(hjÍ­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjͬubj¢)�”}”(hŒint kern”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjæ­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjâ­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâ­ubj�)�”}”(hŒkern”h]”hŒkern”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâ­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjͬubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj”¬h²hh³j¦¬h´Mcubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�¬h²hh³j¦¬h´Mcubah}”(h]”j‹¬ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¦¬h´Mchj�¬h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!Initialize a newly created socket”h]”hŒ!Initialize a newly created socket”…”�”}”(hj,®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mchj)®h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�¬h²hh³j¦¬h´Mcubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjD®jæjD®jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct socket *sock`` socket ``int family`` protocol family ``int type`` communications type ``int protocol`` requested protocol ``int kern`` set to 1 if a kernel socket is requested **Description** This hook allows a module to update or allocate a per-socket security structure. Note that the security field was not added directly to the socket structure, but rather, the socket security information is stored in the associated inode. Typically, the inode alloc_security hook will allocate and attach security information to SOCK_INODE(sock)->i_security. This hook may be used to update the SOCK_INODE(sock)->i_security field with additional information that wasn't available when the inode was allocated. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjN®h]”hŒ Parameters”…”�”}”(hjP®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjL®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MghjH®ubj )�”}”(hhh]”(j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjm®h]”hŒstruct socket *sock”…”�”}”(hjo®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjk®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mdhjg®ubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj†®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚®h´Mdhjƒ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjg®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚®h´Mdhjd®ubj)�”}”(hŒ``int family`` protocol family ”h]”(j)�”}”(hŒ``int family``”h]”j)�”}”(hj¦®h]”hŒ int family”…”�”}”(hj¨®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mehj ®ubj2)�”}”(hhh]”hÝ)�”}”(hŒprotocol family”h]”hŒprotocol family”…”�”}”(hj¿®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»®h´Mehj¼®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»®h´Mehjd®ubj)�”}”(hŒ!``int type`` communications type ”h]”(j)�”}”(hŒ ``int type``”h]”j)�”}”(hjß®h]”hŒint type”…”�”}”(hjá®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MfhjÙ®ubj2)�”}”(hhh]”hÝ)�”}”(hŒcommunications type”h]”hŒcommunications type”…”�”}”(hjø®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jô®h´Mfhjõ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÙ®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jô®h´Mfhjd®ubj)�”}”(hŒ$``int protocol`` requested protocol ”h]”(j)�”}”(hŒ``int protocol``”h]”j)�”}”(hj¯h]”hŒ int protocol”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mghj¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒrequested protocol”h]”hŒrequested protocol”…”�”}”(hj1¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j-¯h´Mghj.¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-¯h´Mghjd®ubj)�”}”(hŒ6``int kern`` set to 1 if a kernel socket is requested ”h]”(j)�”}”(hŒ ``int kern``”h]”j)�”}”(hjQ¯h]”hŒint kern”…”�”}”(hjS¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjO¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhhjK¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(set to 1 if a kernel socket is requested”h]”hŒ(set to 1 if a kernel socket is requested”…”�”}”(hjj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jf¯h´Mhhjg¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjK¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jf¯h´Mhhjd®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjH®ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŒ¯h]”hŒ Description”…”�”}”(hjޝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjНubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MjhjH®ubhÝ)�”}”(hXýThis hook allows a module to update or allocate a per-socket security structure. Note that the security field was not added directly to the socket structure, but rather, the socket security information is stored in the associated inode. Typically, the inode alloc_security hook will allocate and attach security information to SOCK_INODE(sock)->i_security. This hook may be used to update the SOCK_INODE(sock)->i_security field with additional information that wasn't available when the inode was allocated.”h]”hXÿThis hook allows a module to update or allocate a per-socket security structure. Note that the security field was not added directly to the socket structure, but rather, the socket security information is stored in the associated inode. Typically, the inode alloc_security hook will allocate and attach security information to SOCK_INODE(sock)->i_security. This hook may be used to update the SOCK_INODE(sock)->i_security field with additional information that wasn’t available when the inode was allocated.”…”�”}”(hj¢¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MihjH®ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj³¯h]”hŒReturn”…”�”}”(hjµ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MqhjH®ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjɯh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MrhjH®ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!security_socket_bind (C function)”Œc.security_socket_bind”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒUint security_socket_bind (struct socket *sock, struct sockaddr *address, int addrlen)”h]”j)�”}”(hŒTint security_socket_bind(struct socket *sock, struct sockaddr *address, int addrlen)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjø¯h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjô¯h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô¯h²hh³j°h´MŒubj{)�”}”(hŒsecurity_socket_bind”h]”j�)�”}”(hŒsecurity_socket_bind”h]”hŒsecurity_socket_bind”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjô¯h²hh³j°h´MŒubjœ)�”}”(hŒ<(struct socket *sock, struct sockaddr *address, int addrlen)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj5°h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj1°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjB°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1°ubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjS°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjP°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jU°Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j°sbŒc.security_socket_bind”†”asbuh1hhj1°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1°ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj1°ubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjްh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-°ubj¢)�”}”(hŒstruct sockaddr *address”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj§°h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj£°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£°ubh)�”}”(hhh]”j�)�”}”(hŒsockaddr”h]”hŒsockaddr”…”�”}”(hjŰh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jǰŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jo°Œc.security_socket_bind”†”asbuh1hhj£°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£°ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjñ°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj£°ubj�)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hjþ°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-°ubj¢)�”}”(hŒ int addrlen”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±ubj�)�”}”(hŒaddrlen”h]”hŒaddrlen”…”�”}”(hj3±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-°ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjô¯h²hh³j°h´MŒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjð¯h²hh³j°h´MŒubah}”(h]”jë¯ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j°h´MŒhjí¯h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if a socket bind operation is allowed”h]”hŒ+Check if a socket bind operation is allowed”…”�”}”(hj]±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŒhjZ±h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjí¯h²hh³j°h´MŒubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåju±jæju±jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXq**Parameters** ``struct socket *sock`` socket ``struct sockaddr *address`` requested bind address ``int addrlen`` length of address **Description** Check permission before socket protocol layer bind operation is performed and the socket **sock** is bound to the address specified in the **address** parameter. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj±h]”hŒ Parameters”…”�”}”(hj�±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj}±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjy±ubj )�”}”(hhh]”(j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjž±h]”hŒstruct socket *sock”…”�”}”(hj ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœ±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hj˜±ubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj·±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j³±h´M�hj´±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj˜±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j³±h´M�hj•±ubj)�”}”(hŒ4``struct sockaddr *address`` requested bind address ”h]”(j)�”}”(hŒ``struct sockaddr *address``”h]”j)�”}”(hj×±h]”hŒstruct sockaddr *address”…”�”}”(hjÙ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŽhjѱubj2)�”}”(hhh]”hÝ)�”}”(hŒrequested bind address”h]”hŒrequested bind address”…”�”}”(hjð±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jì±h´MŽhjí±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjѱubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jì±h´MŽhj•±ubj)�”}”(hŒ"``int addrlen`` length of address ”h]”(j)�”}”(hŒ``int addrlen``”h]”j)�”}”(hj²h]”hŒ int addrlen”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hj ²ubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of address”h]”hŒlength of address”…”�”}”(hj)²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j%²h´M�hj&²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j%²h´M�hj•±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjy±ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjK²h]”hŒ Description”…”�”}”(hjM²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjI²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‘hjy±ubhÝ)�”}”(hŒ¡Check permission before socket protocol layer bind operation is performed and the socket **sock** is bound to the address specified in the **address** parameter.”h]”(hŒYCheck permission before socket protocol layer bind operation is performed and the socket ”…”�”}”(hja²h²hh³Nh´Nubjõ)�”}”(hŒ**sock**”h]”hŒsock”…”�”}”(hji²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhja²ubhŒ* is bound to the address specified in the ”…”�”}”(hja²h²hh³Nh´Nubjõ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj{²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhja²ubhŒ parameter.”…”�”}”(hja²h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjy±ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj–²h]”hŒReturn”…”�”}”(hj˜²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”hjy±ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj¬²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M•hjy±ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_socket_connect (C function)”Œc.security_socket_connect”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒXint security_socket_connect (struct socket *sock, struct sockaddr *address, int addrlen)”h]”j)�”}”(hŒWint security_socket_connect(struct socket *sock, struct sockaddr *address, int addrlen)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÛ²h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjײh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mžubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê²h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjײh²hh³jé²h´Mžubj{)�”}”(hŒsecurity_socket_connect”h]”j�)�”}”(hŒsecurity_socket_connect”h]”hŒsecurity_socket_connect”…”�”}”(hjü²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjø²ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjײh²hh³jé²h´Mžubjœ)�”}”(hŒ<(struct socket *sock, struct sockaddr *address, int addrlen)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³ubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj6³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j8³Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jþ²sbŒc.security_socket_connect”†”asbuh1hhj³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjV³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjd³h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj³ubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjq³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³ubj¢)�”}”(hŒstruct sockaddr *address”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjгh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj†³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†³ubh)�”}”(hhh]”j�)�”}”(hŒsockaddr”h]”hŒsockaddr”…”�”}”(hj¨³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jª³Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jR³Œc.security_socket_connect”†”asbuh1hhj†³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƳh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†³ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÔ³h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj†³ubj�)�”}”(hŒaddress”h]”hŒaddress”…”�”}”(hjá³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³ubj¢)�”}”(hŒ int addrlen”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjú³h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjö³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjö³ubj�)�”}”(hŒaddrlen”h]”hŒaddrlen”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjö³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjײh²hh³jé²h´Mžubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÓ²h²hh³jé²h´Mžubah}”(h]”jβah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jé²h´Mžhjвh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Check if a socket connect operation is allowed”h]”hŒ.Check if a socket connect operation is allowed”…”�”}”(hj@´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mžhj=´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjвh²hh³jé²h´Mžubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjX´jæjX´jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXa**Parameters** ``struct socket *sock`` socket ``struct sockaddr *address`` address of remote connection point ``int addrlen`` length of address **Description** Check permission before socket protocol layer connect operation attempts to connect socket **sock** to a remote address, **address**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjb´h]”hŒ Parameters”…”�”}”(hjd´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¢hj\´ubj )�”}”(hhh]”(j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hj�´h]”hŒstruct socket *sock”…”�”}”(hjƒ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MŸhj{´ubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjš´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–´h´MŸhj—´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–´h´MŸhjx´ubj)�”}”(hŒ@``struct sockaddr *address`` address of remote connection point ”h]”(j)�”}”(hŒ``struct sockaddr *address``”h]”j)�”}”(hjº´h]”hŒstruct sockaddr *address”…”�”}”(hj¼´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj´´ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"address of remote connection point”h]”hŒ"address of remote connection point”…”�”}”(hjÓ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏ´h´M hjдubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏ´h´M hjx´ubj)�”}”(hŒ"``int addrlen`` length of address ”h]”(j)�”}”(hŒ``int addrlen``”h]”j)�”}”(hjó´h]”hŒ int addrlen”…”�”}”(hjõ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¡hjí´ubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of address”h]”hŒlength of address”…”�”}”(hj µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµh´M¡hj µubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjí´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµh´M¡hjx´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj\´ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj.µh]”hŒ Description”…”�”}”(hj0µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,µubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M£hj\´ubhÝ)�”}”(hŒ…Check permission before socket protocol layer connect operation attempts to connect socket **sock** to a remote address, **address**.”h]”(hŒ[Check permission before socket protocol layer connect operation attempts to connect socket ”…”�”}”(hjDµh²hh³Nh´Nubjõ)�”}”(hŒ**sock**”h]”hŒsock”…”�”}”(hjLµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjDµubhŒ to a remote address, ”…”�”}”(hjDµh²hh³Nh´Nubjõ)�”}”(hŒ **address**”h]”hŒaddress”…”�”}”(hj^µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjDµubhŒ.”…”�”}”(hjDµh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¢hj\´ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjyµh]”hŒReturn”…”�”}”(hj{µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjwµubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¥hj\´ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj�µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¦hj\´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_socket_listen (C function)”Œc.security_socket_listen”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=int security_socket_listen (struct socket *sock, int backlog)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hjºµh²hh³j̵h´M¯ubj{)�”}”(hŒsecurity_socket_listen”h]”j�)�”}”(hŒsecurity_socket_listen”h]”hŒsecurity_socket_listen”…”�”}”(hjßµh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛµubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjºµh²hh³j̵h´M¯ubjœ)�”}”(hŒ"(struct socket *sock, int backlog)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjûµh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj÷µubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷µubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¶Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jáµsbŒc.security_socket_listen”†”asbuh1hhj÷µubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9¶h²hh³N•h´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷µubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjG¶h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷µubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjT¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷µubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóµubj¢)�”}”(hŒ int backlog”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjm¶h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhji¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hji¶ubj�)�”}”(hŒbacklog”h]”hŒbacklog”…”�”}”(hj‰¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hji¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóµubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjºµh²hh³j̵h´M¯ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¶µh²hh³j̵h´M¯ubah}”(h]”j±µah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j̵h´M¯hj³µh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Check if a socket is allowed to listen”h]”hŒ&Check if a socket is allowed to listen”…”�”}”(hj³¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¯hj°¶h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj³µh²hh³j̵h´M¯ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj˶jæj˶jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÜ**Parameters** ``struct socket *sock`` socket ``int backlog`` connection queue size **Description** Check permission before socket protocol layer listen operation. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÕ¶h]”hŒ Parameters”…”�”}”(hj×¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓ¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³hj϶ubj )�”}”(hhh]”(j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjô¶h]”hŒstruct socket *sock”…”�”}”(hjö¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjò¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M°hjî¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ·h´M°hj ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjî¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ·h´M°hjë¶ubj)�”}”(hŒ&``int backlog`` connection queue size ”h]”(j)�”}”(hŒ``int backlog``”h]”j)�”}”(hj-·h]”hŒ int backlog”…”�”}”(hj/·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M±hj'·ubj2)�”}”(hhh]”hÝ)�”}”(hŒconnection queue size”h]”hŒconnection queue size”…”�”}”(hjF·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jB·h´M±hjC·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj'·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jB·h´M±hjë¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj϶ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh·h]”hŒ Description”…”�”}”(hjj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjf·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³hj϶ubhÝ)�”}”(hŒ?Check permission before socket protocol layer listen operation.”h]”hŒ?Check permission before socket protocol layer listen operation.”…”�”}”(hj~·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M²hj϶ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj�·h]”hŒReturn”…”�”}”(hj‘·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M´hj϶ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj¥·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mµhj϶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_socket_accept (C function)”Œc.security_socket_accept”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHint security_socket_accept (struct socket *sock, struct socket *newsock)”h]”j)�”}”(hŒGint security_socket_accept(struct socket *sock, struct socket *newsock)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÔ·h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjзh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjã·h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjзh²hh³jâ·h´M½ubj{)�”}”(hŒsecurity_socket_accept”h]”j�)�”}”(hŒsecurity_socket_accept”h]”hŒsecurity_socket_accept”…”�”}”(hjõ·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjñ·ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjзh²hh³jâ·h´M½ubjœ)�”}”(hŒ-(struct socket *sock, struct socket *newsock)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ¸ubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj/¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j1¸Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j÷·sbŒc.security_socket_accept”†”asbuh1hhj ¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj]¸h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ¸ubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjj¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ¸ubj¢)�”}”(hŒstruct socket *newsock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjƒ¸h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸ubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj¡¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjž¸ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j£¸Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jK¸Œc.security_socket_accept”†”asbuh1hhj¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj͸h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¸ubj�)�”}”(hŒnewsock”h]”hŒnewsock”…”�”}”(hjÚ¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ¸ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjзh²hh³jâ·h´M½ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÌ·h²hh³jâ·h´M½ubah}”(h]”jÇ·ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jâ·h´M½hjÉ·h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2Check if a socket is allowed to accept connections”h]”hŒ2Check if a socket is allowed to accept connections”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½hj¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÉ·h²hh³jâ·h´M½ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¹jæj¹jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX†**Parameters** ``struct socket *sock`` listening socket ``struct socket *newsock`` newly creation connection socket **Description** Check permission before accepting a new connection. Note that the new socket, **newsock**, has been created and some information copied to it, but the accept operation has not actually been performed. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj&¹h]”hŒ Parameters”…”�”}”(hj(¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÁhj ¹ubj )�”}”(hhh]”(j)�”}”(hŒ)``struct socket *sock`` listening socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjE¹h]”hŒstruct socket *sock”…”�”}”(hjG¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjC¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¾hj?¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒlistening socket”h]”hŒlistening socket”…”�”}”(hj^¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jZ¹h´M¾hj[¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj?¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZ¹h´M¾hj<¹ubj)�”}”(hŒ<``struct socket *newsock`` newly creation connection socket ”h]”(j)�”}”(hŒ``struct socket *newsock``”h]”j)�”}”(hj~¹h]”hŒstruct socket *newsock”…”�”}”(hj€¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¿hjx¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒ newly creation connection socket”h]”hŒ newly creation connection socket”…”�”}”(hj—¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j“¹h´M¿hj”¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjx¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j“¹h´M¿hj<¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ¹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¹¹h]”hŒ Description”…”�”}”(hj»¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÁhj ¹ubhÝ)�”}”(hŒÉCheck permission before accepting a new connection. Note that the new socket, **newsock**, has been created and some information copied to it, but the accept operation has not actually been performed.”h]”(hŒOCheck permission before accepting a new connection. Note that the new socket, ”…”�”}”(hjϹh²hh³Nh´Nubjõ)�”}”(hŒ **newsock**”h]”hŒnewsock”…”�”}”(hj×¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjϹubhŒo, has been created and some information copied to it, but the accept operation has not actually been performed.”…”�”}”(hjϹh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÀhj ¹ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjò¹h]”hŒReturn”…”�”}”(hjô¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjð¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÄhj ¹ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÅhj ¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_socket_sendmsg (C function)”Œc.security_socket_sendmsg”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOint security_socket_sendmsg (struct socket *sock, struct msghdr *msg, int size)”h]”j)�”}”(hŒNint security_socket_sendmsg(struct socket *sock, struct msghdr *msg, int size)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj7ºh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj3ºh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3ºh²hh³jEºh´MÍubj{)�”}”(hŒsecurity_socket_sendmsg”h]”j�)�”}”(hŒsecurity_socket_sendmsg”h]”hŒsecurity_socket_sendmsg”…”�”}”(hjXºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTºubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj3ºh²hh³jEºh´MÍubjœ)�”}”(hŒ3(struct socket *sock, struct msghdr *msg, int size)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjtºh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjpºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�ºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpºubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj’ºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j”ºŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jZºsbŒc.security_socket_sendmsg”†”asbuh1hhjpºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²ºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpºubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÀºh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjpºubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjͺh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjpºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlºubj¢)�”}”(hŒstruct msghdr *msg”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjæºh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjâºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâºubh)�”}”(hhh]”j�)�”}”(hŒmsghdr”h]”hŒmsghdr”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j»Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j®ºŒc.security_socket_sendmsg”†”asbuh1hhjâºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâºubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj0»h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâºubj�)�”}”(hŒmsg”h]”hŒmsg”…”�”}”(hj=»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlºubj¢)�”}”(hŒint size”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjV»h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjR»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjd»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjR»ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjr»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjR»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlºubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj3ºh²hh³jEºh´MÍubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj/ºh²hh³jEºh´MÍubah}”(h]”j*ºah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jEºh´MÍhj,ºh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Check if sending a message is allowed”h]”hŒ%Check if sending a message is allowed”…”�”}”(hjœ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÍhj™»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj,ºh²hh³jEºh´MÍubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj´»jæj´»jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct socket *sock`` sending socket ``struct msghdr *msg`` message to send ``int size`` size of message **Description** Check permission before transmitting a message to another socket. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾»h]”hŒ Parameters”…”�”}”(hjÀ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÑhj¸»ubj )�”}”(hhh]”(j)�”}”(hŒ'``struct socket *sock`` sending socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjÝ»h]”hŒstruct socket *sock”…”�”}”(hjß»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÎhj×»ubj2)�”}”(hhh]”hÝ)�”}”(hŒsending socket”h]”hŒsending socket”…”�”}”(hjö»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jò»h´MÎhjó»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj×»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jò»h´MÎhjÔ»ubj)�”}”(hŒ'``struct msghdr *msg`` message to send ”h]”(j)�”}”(hŒ``struct msghdr *msg``”h]”j)�”}”(hj¼h]”hŒstruct msghdr *msg”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÏhj¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒmessage to send”h]”hŒmessage to send”…”�”}”(hj/¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+¼h´MÏhj,¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+¼h´MÏhjÔ»ubj)�”}”(hŒ``int size`` size of message ”h]”(j)�”}”(hŒ ``int size``”h]”j)�”}”(hjO¼h]”hŒint size”…”�”}”(hjQ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjM¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÐhjI¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of message”h]”hŒsize of message”…”�”}”(hjh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jd¼h´MÐhje¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjI¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jd¼h´MÐhjÔ»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¸»ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjмh]”hŒ Description”…”�”}”(hjŒ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÒhj¸»ubhÝ)�”}”(hŒACheck permission before transmitting a message to another socket.”h]”hŒACheck permission before transmitting a message to another socket.”…”�”}”(hj ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÑhj¸»ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj±¼h]”hŒReturn”…”�”}”(hj³¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓhj¸»ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjǼh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔhj¸»ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_socket_recvmsg (C function)”Œc.security_socket_recvmsg”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒZint security_socket_recvmsg (struct socket *sock, struct msghdr *msg, int size, int flags)”h]”j)�”}”(hŒYint security_socket_recvmsg(struct socket *sock, struct msghdr *msg, int size, int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjö¼h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjò¼h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÜubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò¼h²hh³j½h´MÜubj{)�”}”(hŒsecurity_socket_recvmsg”h]”j�)�”}”(hŒsecurity_socket_recvmsg”h]”hŒsecurity_socket_recvmsg”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjò¼h²hh³j½h´MÜubjœ)�”}”(hŒ>(struct socket *sock, struct msghdr *msg, int size, int flags)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj3½h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/½ubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjQ½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjN½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jS½Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j½sbŒc.security_socket_recvmsg”†”asbuh1hhj/½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjq½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/½ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj/½ubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjŒ½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+½ubj¢)�”}”(hŒstruct msghdr *msg”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¥½h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¡½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡½ubh)�”}”(hhh]”j�)�”}”(hŒmsghdr”h]”hŒmsghdr”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀ½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŽŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jm½Œc.security_socket_recvmsg”†”asbuh1hhj¡½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡½ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjï½h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¡½ubj�)�”}”(hŒmsg”h]”hŒmsg”…”�”}”(hjü½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+½ubj¢)�”}”(hŒint size”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hj1¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+½ubj¢)�”}”(hŒ int flags”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjJ¾h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjF¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjF¾ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjf¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjF¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj+½ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjò¼h²hh³j½h´MÜubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjî¼h²hh³j½h´MÜubah}”(h]”jé¼ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j½h´MÜhjë¼h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Check if receiving a message is allowed”h]”hŒ'Check if receiving a message is allowed”…”�”}”(hj�¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÜhj�¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjë¼h²hh³j½h´MÜubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¨¾jæj¨¾jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX(**Parameters** ``struct socket *sock`` receiving socket ``struct msghdr *msg`` message to receive ``int size`` size of message ``int flags`` operational flags **Description** Check permission before receiving a message from a socket. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj²¾h]”hŒ Parameters”…”�”}”(hj´¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Màhj¬¾ubj )�”}”(hhh]”(j)�”}”(hŒ)``struct socket *sock`` receiving socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjѾh]”hŒstruct socket *sock”…”�”}”(hjÓ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjϾubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÝhj˾ubj2)�”}”(hhh]”hÝ)�”}”(hŒreceiving socket”h]”hŒreceiving socket”…”�”}”(hjê¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jæ¾h´MÝhjç¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj˾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jæ¾h´MÝhjȾubj)�”}”(hŒ*``struct msghdr *msg`` message to receive ”h]”(j)�”}”(hŒ``struct msghdr *msg``”h]”j)�”}”(hj ¿h]”hŒstruct msghdr *msg”…”�”}”(hj ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÞhj¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒmessage to receive”h]”hŒmessage to receive”…”�”}”(hj#¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¿h´MÞhj ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿h´MÞhjȾubj)�”}”(hŒ``int size`` size of message ”h]”(j)�”}”(hŒ ``int size``”h]”j)�”}”(hjC¿h]”hŒint size”…”�”}”(hjE¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjA¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mßhj=¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of message”h]”hŒsize of message”…”�”}”(hj\¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jX¿h´MßhjY¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jX¿h´MßhjȾubj)�”}”(hŒ ``int flags`` operational flags ”h]”(j)�”}”(hŒ ``int flags``”h]”j)�”}”(hj|¿h]”hŒ int flags”…”�”}”(hj~¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjz¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Màhjv¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒoperational flags”h]”hŒoperational flags”…”�”}”(hj•¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‘¿h´Màhj’¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjv¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‘¿h´MàhjȾubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¬¾ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj·¿h]”hŒ Description”…”�”}”(hj¹¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mâhj¬¾ubhÝ)�”}”(hŒ:Check permission before receiving a message from a socket.”h]”hŒ:Check permission before receiving a message from a socket.”…”�”}”(hjÍ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Máhj¬¾ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÞ¿h]”hŒReturn”…”�”}”(hjà¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mãhj¬¾ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjô¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mähj¬¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_socket_getsockname (C function)”Œc.security_socket_getsockname”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ5int security_socket_getsockname (struct socket *sock)”h]”j)�”}”(hŒ4int security_socket_getsockname(struct socket *sock)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj#Àh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÀh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Míubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2Àh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀh²hh³j1Àh´Míubj{)�”}”(hŒsecurity_socket_getsockname”h]”j�)�”}”(hŒsecurity_socket_getsockname”h]”hŒsecurity_socket_getsockname”…”�”}”(hjDÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@Àubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÀh²hh³j1Àh´Míubjœ)�”}”(hŒ(struct socket *sock)”h]”j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj`Àh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj\Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\Àubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj~Àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{Àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j€ÀŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jFÀsbŒc.security_socket_getsockname”†”asbuh1hhj\Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\Àubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¬Àh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\Àubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hj¹Àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjXÀubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÀh²hh³j1Àh´Míubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÀh²hh³j1Àh´Míubah}”(h]”jÀah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j1Àh´MíhjÀh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if reading the socket addr is allowed”h]”hŒ+Check if reading the socket addr is allowed”…”�”}”(hjãÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MíhjàÀh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀh²hh³j1Àh´Míubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjûÀjæjûÀjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÂ**Parameters** ``struct socket *sock`` socket **Description** Check permission before reading the local address (name) of the socket object. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÁh]”hŒ Parameters”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MñhjÿÀubj )�”}”(hhh]”j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hj$Áh]”hŒstruct socket *sock”…”�”}”(hj&Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MîhjÁubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj=Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j9Áh´Mîhj:Áubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9Áh´MîhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÿÀubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj_Áh]”hŒ Description”…”�”}”(hjaÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj]Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MðhjÿÀubhÝ)�”}”(hŒNCheck permission before reading the local address (name) of the socket object.”h]”hŒNCheck permission before reading the local address (name) of the socket object.”…”�”}”(hjuÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MïhjÿÀubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj†Áh]”hŒReturn”…”�”}”(hjˆÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj„Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MòhjÿÀubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjœÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MóhjÿÀubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_socket_getpeername (C function)”Œc.security_socket_getpeername”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ5int security_socket_getpeername (struct socket *sock)”h]”j)�”}”(hŒ4int security_socket_getpeername(struct socket *sock)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjËÁh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÇÁh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚÁh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇÁh²hh³jÙÁh´Mûubj{)�”}”(hŒsecurity_socket_getpeername”h]”j�)�”}”(hŒsecurity_socket_getpeername”h]”hŒsecurity_socket_getpeername”…”�”}”(hjìÁh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèÁubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÇÁh²hh³jÙÁh´Mûubjœ)�”}”(hŒ(struct socket *sock)”h]”j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÂubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj&Âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#Âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j(ÂŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jîÁsbŒc.security_socket_getpeername”†”asbuh1hhjÂubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFÂh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjTÂh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÂubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjaÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÂubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÇÁh²hh³jÙÁh´Mûubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÃÁh²hh³jÙÁh´Mûubah}”(h]”j¾Áah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÙÁh´MûhjÀÁh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if reading the peer's addr is allowed”h]”hŒ-Check if reading the peer’s addr is allowed”…”�”}”(hj‹Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MûhjˆÂh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀÁh²hh³jÙÁh´Mûubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj£Âjæj£Âjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¹**Parameters** ``struct socket *sock`` socket **Description** Check permission before the remote address (name) of a socket object. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj­Âh]”hŒ Parameters”…”�”}”(hj¯Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj«Âubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mÿhj§Âubj )�”}”(hhh]”j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjÌÂh]”hŒstruct socket *sock”…”�”}”(hjÎÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MühjÆÂubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjåÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jáÂh´MühjâÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÆÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jáÂh´MühjÃÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj§ÂubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÃh]”hŒ Description”…”�”}”(hj Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mþhj§ÂubhÝ)�”}”(hŒECheck permission before the remote address (name) of a socket object.”h]”hŒECheck permission before the remote address (name) of a socket object.”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mýhj§ÂubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj.Ãh]”hŒReturn”…”�”}”(hj0Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mÿhj§ÂubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjDÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj§Âubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_socket_getsockopt (C function)”Œc.security_socket_getsockopt”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLint security_socket_getsockopt (struct socket *sock, int level, int optname)”h]”j)�”}”(hŒKint security_socket_getsockopt(struct socket *sock, int level, int optname)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjsÃh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjoÃh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚Ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoÃh²hh³j�Ãh´Mubj{)�”}”(hŒsecurity_socket_getsockopt”h]”j�)�”}”(hŒsecurity_socket_getsockopt”h]”hŒsecurity_socket_getsockopt”…”�”}”(hj”Ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Ãubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjoÃh²hh³j�Ãh´Mubjœ)�”}”(hŒ-(struct socket *sock, int level, int optname)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj°Ãh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¬Ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½Ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬Ãubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjÎÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËÃubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÐÃŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j–ÃsbŒc.security_socket_getsockopt”†”asbuh1hhj¬Ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬Ãubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjüÃh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¬Ãubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hj Äh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬Ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨Ãubj¢)�”}”(hŒ int level”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj"Äh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Äh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄubj�)�”}”(hŒlevel”h]”hŒlevel”…”�”}”(hj>Äh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨Ãubj¢)�”}”(hŒ int optname”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjWÄh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjSÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeÄh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSÄubj�)�”}”(hŒoptname”h]”hŒoptname”…”�”}”(hjsÄh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨Ãubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjoÃh²hh³j�Ãh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjkÃh²hh³j�Ãh´Mubah}”(h]”jfÃah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�Ãh´MhjhÃh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if reading a socket option is allowed”h]”hŒ+Check if reading a socket option is allowed”…”�”}”(hj�Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjšÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjhÃh²hh³j�Ãh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjµÄjæjµÄjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX **Parameters** ``struct socket *sock`` socket ``int level`` option's protocol level ``int optname`` option name **Description** Check permissions before retrieving the options associated with socket **sock**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¿Äh]”hŒ Parameters”…”�”}”(hjÁÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½Äubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj¹Äubj )�”}”(hhh]”(j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjÞÄh]”hŒstruct socket *sock”…”�”}”(hjàÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjØÄubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj÷Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jóÄh´M hjôÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jóÄh´M hjÕÄubj)�”}”(hŒ&``int level`` option's protocol level ”h]”(j)�”}”(hŒ ``int level``”h]”j)�”}”(hjÅh]”hŒ int level”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÅubj2)�”}”(hhh]”hÝ)�”}”(hŒoption's protocol level”h]”hŒoption’s protocol level”…”�”}”(hj0Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,Åh´M hj-Åubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,Åh´M hjÕÄubj)�”}”(hŒ``int optname`` option name ”h]”(j)�”}”(hŒ``int optname``”h]”j)�”}”(hjPÅh]”hŒ int optname”…”�”}”(hjRÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjJÅubj2)�”}”(hhh]”hÝ)�”}”(hŒ option name”h]”hŒ option name”…”�”}”(hjiÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jeÅh´M hjfÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jeÅh´M hjÕÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹ÄubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‹Åh]”hŒ Description”…”�”}”(hj�Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‰Åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj¹ÄubhÝ)�”}”(hŒPCheck permissions before retrieving the options associated with socket **sock**.”h]”(hŒGCheck permissions before retrieving the options associated with socket ”…”�”}”(hj¡Åh²hh³Nh´Nubjõ)�”}”(hŒ**sock**”h]”hŒsock”…”�”}”(hj©Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡ÅubhŒ.”…”�”}”(hj¡Åh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj¹ÄubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjÄÅh]”hŒReturn”…”�”}”(hjÆÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj¹ÄubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjÚÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj¹Äubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_socket_setsockopt (C function)”Œc.security_socket_setsockopt”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLint security_socket_setsockopt (struct socket *sock, int level, int optname)”h]”j)�”}”(hŒKint security_socket_setsockopt(struct socket *sock, int level, int optname)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj Æh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÆh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆh²hh³jÆh´Mubj{)�”}”(hŒsecurity_socket_setsockopt”h]”j�)�”}”(hŒsecurity_socket_setsockopt”h]”hŒsecurity_socket_setsockopt”…”�”}”(hj*Æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&Æubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÆh²hh³jÆh´Mubjœ)�”}”(hŒ-(struct socket *sock, int level, int optname)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjFÆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjBÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBÆubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjdÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjaÆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jfÆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j,ÆsbŒc.security_socket_setsockopt”†”asbuh1hhjBÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„Æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBÆubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj’Æh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjBÆubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjŸÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjBÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj>Æubj¢)�”}”(hŒ int level”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¸Æh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj´Æubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´Æubj�)�”}”(hŒlevel”h]”hŒlevel”…”�”}”(hjÔÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´Æubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj>Æubj¢)�”}”(hŒ int optname”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjíÆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjéÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjéÆubj�)�”}”(hŒoptname”h]”hŒoptname”…”�”}”(hj Çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj>Æubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÆh²hh³jÆh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÆh²hh³jÆh´Mubah}”(h]”jüÅah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÆh´MhjþÅh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if setting a socket option is allowed”h]”hŒ+Check if setting a socket option is allowed”…”�”}”(hj3Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj0Çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjþÅh²hh³jÆh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjKÇjæjKÇjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX **Parameters** ``struct socket *sock`` socket ``int level`` option's protocol level ``int optname`` option name **Description** Check permissions before setting the options associated with socket **sock**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjUÇh]”hŒ Parameters”…”�”}”(hjWÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjSÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjOÇubj )�”}”(hhh]”(j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjtÇh]”hŒstruct socket *sock”…”�”}”(hjvÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjnÇubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj�Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰Çh´MhjŠÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjnÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰Çh´MhjkÇubj)�”}”(hŒ&``int level`` option's protocol level ”h]”(j)�”}”(hŒ ``int level``”h]”j)�”}”(hj­Çh]”hŒ int level”…”�”}”(hj¯Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj§Çubj2)�”}”(hhh]”hÝ)�”}”(hŒoption's protocol level”h]”hŒoption’s protocol level”…”�”}”(hjÆÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÂÇh´MhjÃÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj§Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÂÇh´MhjkÇubj)�”}”(hŒ``int optname`` option name ”h]”(j)�”}”(hŒ``int optname``”h]”j)�”}”(hjæÇh]”hŒ int optname”…”�”}”(hjèÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjàÇubj2)�”}”(hhh]”hÝ)�”}”(hŒ option name”h]”hŒ option name”…”�”}”(hjÿÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jûÇh´MhjüÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjàÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jûÇh´MhjkÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjOÇubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj!Èh]”hŒ Description”…”�”}”(hj#Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjOÇubhÝ)�”}”(hŒMCheck permissions before setting the options associated with socket **sock**.”h]”(hŒDCheck permissions before setting the options associated with socket ”…”�”}”(hj7Èh²hh³Nh´Nubjõ)�”}”(hŒ**sock**”h]”hŒsock”…”�”}”(hj?Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj7ÈubhŒ.”…”�”}”(hj7Èh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjOÇubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjZÈh]”hŒReturn”…”�”}”(hj\Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjOÇubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjpÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjOÇubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_socket_shutdown (C function)”Œc.security_socket_shutdown”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;int security_socket_shutdown (struct socket *sock, int how)”h]”j)�”}”(hŒ:int security_socket_shutdown(struct socket *sock, int how)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŸÈh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›Èh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M'ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›Èh²hh³j­Èh´M'ubj{)�”}”(hŒsecurity_socket_shutdown”h]”j�)�”}”(hŒsecurity_socket_shutdown”h]”hŒsecurity_socket_shutdown”…”�”}”(hjÀÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼Èubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj›Èh²hh³j­Èh´M'ubjœ)�”}”(hŒ(struct socket *sock, int how)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÜÈh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjØÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéÈh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØÈubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjúÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷Èubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jüÈŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÂÈsbŒc.security_socket_shutdown”†”asbuh1hhjØÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØÈubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj(Éh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjØÈubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hj5Éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔÈubj¢)�”}”(hŒint how”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjNÉh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjJÉubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJÉubj�)�”}”(hŒhow”h]”hŒhow”…”�”}”(hjjÉh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJÉubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÔÈubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj›Èh²hh³j­Èh´M'ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—Èh²hh³j­Èh´M'ubah}”(h]”j’Èah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­Èh´M'hj”Èh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Checks if shutting down the socket is allowed”h]”hŒ-Checks if shutting down the socket is allowed”…”�”}”(hj”Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M'hj‘Éh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”Èh²hh³j­Èh´M'ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¬Éjæj¬Éjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct socket *sock`` socket ``int how`` flag indicating how sends and receives are handled **Description** Checks permission before all or part of a connection on the socket **sock** is shut down. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¶Éh]”hŒ Parameters”…”�”}”(hj¸Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj´Éubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hj°Éubj )�”}”(hhh]”(j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hjÕÉh]”hŒstruct socket *sock”…”�”}”(hj×Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M(hjÏÉubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjîÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jêÉh´M(hjëÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêÉh´M(hjÌÉubj)�”}”(hŒ?``int how`` flag indicating how sends and receives are handled ”h]”(j)�”}”(hŒ ``int how``”h]”j)�”}”(hjÊh]”hŒint how”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Êubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M)hjÊubj2)�”}”(hhh]”hÝ)�”}”(hŒ2flag indicating how sends and receives are handled”h]”hŒ2flag indicating how sends and receives are handled”…”�”}”(hj'Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j#Êh´M)hj$Êubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#Êh´M)hjÌÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj°ÉubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjIÊh]”hŒ Description”…”�”}”(hjKÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGÊubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hj°ÉubhÝ)�”}”(hŒYChecks permission before all or part of a connection on the socket **sock** is shut down.”h]”(hŒCChecks permission before all or part of a connection on the socket ”…”�”}”(hj_Êh²hh³Nh´Nubjõ)�”}”(hŒ**sock**”h]”hŒsock”…”�”}”(hjgÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_ÊubhŒ is shut down.”…”�”}”(hj_Êh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M*hj°ÉubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj‚Êh]”hŒReturn”…”�”}”(hj„Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€Êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M-hj°ÉubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj˜Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M.hj°Éubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ.security_socket_getpeersec_stream (C function)”Œ#c.security_socket_getpeersec_stream”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒqint security_socket_getpeersec_stream (struct socket *sock, sockptr_t optval, sockptr_t optlen, unsigned int len)”h]”j)�”}”(hŒpint security_socket_getpeersec_stream(struct socket *sock, sockptr_t optval, sockptr_t optlen, unsigned int len)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÇÊh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÃÊh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃÊh²hh³jÕÊh´MHubj{)�”}”(hŒ!security_socket_getpeersec_stream”h]”j�)�”}”(hŒ!security_socket_getpeersec_stream”h]”hŒ!security_socket_getpeersec_stream”…”�”}”(hjèÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäÊubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÃÊh²hh³jÕÊh´MHubjœ)�”}”(hŒK(struct socket *sock, sockptr_t optval, sockptr_t optlen, unsigned int len)”h]”(j¢)�”}”(hŒstruct socket *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjËubh)�”}”(hhh]”j�)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hj"Ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j$ËŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jêÊsbŒ#c.security_socket_getpeersec_stream”†”asbuh1hhjËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjËubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjPËh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjËubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hj]Ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjüÊubj¢)�”}”(hŒsockptr_t optval”h]”(h)�”}”(hhh]”j�)�”}”(hŒ sockptr_t”h]”hŒ sockptr_t”…”�”}”(hjyËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j{ËŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j>ËŒ#c.security_socket_getpeersec_stream”†”asbuh1hhjrËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—Ëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjrËubj�)�”}”(hŒoptval”h]”hŒoptval”…”�”}”(hj¥Ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjrËubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjüÊubj¢)�”}”(hŒsockptr_t optlen”h]”(h)�”}”(hhh]”j�)�”}”(hŒ sockptr_t”h]”hŒ sockptr_t”…”�”}”(hjÁËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾Ëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÃËŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j>ËŒ#c.security_socket_getpeersec_stream”†”asbuh1hhjºËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºËubj�)�”}”(hŒoptlen”h]”hŒoptlen”…”�”}”(hjíËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºËubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjüÊubj¢)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj"Ìh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj>Ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjüÊubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÃÊh²hh³jÕÊh´MHubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¿Êh²hh³jÕÊh´MHubah}”(h]”jºÊah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÕÊh´MHhj¼Êh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒGet the remote peer label”h]”hŒGet the remote peer label”…”�”}”(hjhÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MHhjeÌh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¼Êh²hh³jÕÊh´MHubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj€Ìjæj€Ìjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX/**Parameters** ``struct socket *sock`` socket ``sockptr_t optval`` destination buffer ``sockptr_t optlen`` size of peer label copied into the buffer ``unsigned int len`` maximum size of the destination buffer **Description** This hook allows the security module to provide peer socket security state for unix or connected tcp sockets to userspace via getsockopt SO_GETPEERSEC. For tcp sockets this can be meaningful if the socket is associated with an ipsec SA. **Return** Returns 0 if all is well, otherwise, typical getsockopt return values.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŠÌh]”hŒ Parameters”…”�”}”(hjŒÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆÌubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MLhj„Ìubj )�”}”(hhh]”(j)�”}”(hŒ``struct socket *sock`` socket ”h]”(j)�”}”(hŒ``struct socket *sock``”h]”j)�”}”(hj©Ìh]”hŒstruct socket *sock”…”�”}”(hj«Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MIhj£Ìubj2)�”}”(hhh]”hÝ)�”}”(hŒsocket”h]”hŒsocket”…”�”}”(hjÂÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¾Ìh´MIhj¿Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£Ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾Ìh´MIhj Ìubj)�”}”(hŒ(``sockptr_t optval`` destination buffer ”h]”(j)�”}”(hŒ``sockptr_t optval``”h]”j)�”}”(hjâÌh]”hŒsockptr_t optval”…”�”}”(hjäÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàÌubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MJhjÜÌubj2)�”}”(hhh]”hÝ)�”}”(hŒdestination buffer”h]”hŒdestination buffer”…”�”}”(hjûÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷Ìh´MJhjøÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜÌubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷Ì•h´MJhj Ìubj)�”}”(hŒ?``sockptr_t optlen`` size of peer label copied into the buffer ”h]”(j)�”}”(hŒ``sockptr_t optlen``”h]”j)�”}”(hjÍh]”hŒsockptr_t optlen”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MKhjÍubj2)�”}”(hhh]”hÝ)�”}”(hŒ)size of peer label copied into the buffer”h]”hŒ)size of peer label copied into the buffer”…”�”}”(hj4Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0Íh´MKhj1Íubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0Íh´MKhj Ìubj)�”}”(hŒ<``unsigned int len`` maximum size of the destination buffer ”h]”(j)�”}”(hŒ``unsigned int len``”h]”j)�”}”(hjTÍh]”hŒunsigned int len”…”�”}”(hjVÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MLhjNÍubj2)�”}”(hhh]”hÝ)�”}”(hŒ&maximum size of the destination buffer”h]”hŒ&maximum size of the destination buffer”…”�”}”(hjmÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jiÍh´MLhjjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjNÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jiÍh´MLhj Ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj„ÌubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�Íh]”hŒ Description”…”�”}”(hj‘Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Íubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MNhj„ÌubhÝ)�”}”(hŒìThis hook allows the security module to provide peer socket security state for unix or connected tcp sockets to userspace via getsockopt SO_GETPEERSEC. For tcp sockets this can be meaningful if the socket is associated with an ipsec SA.”h]”hŒìThis hook allows the security module to provide peer socket security state for unix or connected tcp sockets to userspace via getsockopt SO_GETPEERSEC. For tcp sockets this can be meaningful if the socket is associated with an ipsec SA.”…”�”}”(hj¥Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MMhj„ÌubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¶Íh]”hŒReturn”…”�”}”(hj¸Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj´Íubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MRhj„ÌubhÝ)�”}”(hŒFReturns 0 if all is well, otherwise, typical getsockopt return values.”h]”hŒFReturns 0 if all is well, otherwise, typical getsockopt return values.”…”�”}”(hjÌÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MShj„Ìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlsm_sock_alloc (C function)”Œc.lsm_sock_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1int lsm_sock_alloc (struct sock *sock, gfp_t gfp)”h]”j)�”}”(hŒ0int lsm_sock_alloc(struct sock *sock, gfp_t gfp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjûÍh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj÷Íh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Msubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Îh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷Íh²hh³j Îh´Msubj{)�”}”(hŒlsm_sock_alloc”h]”j�)�”}”(hŒlsm_sock_alloc”h]”hŒlsm_sock_alloc”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj÷Íh²hh³j Îh´Msubjœ)�”}”(hŒ(struct sock *sock, gfp_t gfp)”h]”(j¢)�”}”(hŒstruct sock *sock”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj8Îh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj4Îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4Îubh)�”}”(hhh]”j�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjVÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSÎubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jXÎŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÎsbŒc.lsm_sock_alloc”†”asbuh1hhj4Îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4Îubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj„Îh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj4Îubj�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hj‘Îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4Îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0Îubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj­Îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªÎubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¯ÎŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jrÎŒc.lsm_sock_alloc”†”asbuh1hhj¦Îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦Îubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjÙÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦Îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj0Îubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj÷Íh²hh³j Îh´Msubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjóÍh²hh³j Îh´Msubah}”(h]”jîÍah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j Îh´MshjðÍh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a composite sock blob”h]”hŒallocate a composite sock blob”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MshjÏh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjðÍh²hh³j Îh´Msubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÏjæjÏjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÕ**Parameters** ``struct sock *sock`` the sock that needs a blob ``gfp_t gfp`` allocation mode **Description** Allocate the sock blob for all the modules Returns 0, or -ENOMEM if memory can't be allocated.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj%Ïh]”hŒ Parameters”…”�”}”(hj'Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MwhjÏubj )�”}”(hhh]”(j)�”}”(hŒ1``struct sock *sock`` the sock that needs a blob ”h]”(j)�”}”(hŒ``struct sock *sock``”h]”j)�”}”(hjDÏh]”hŒstruct sock *sock”…”�”}”(hjFÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjBÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mthj>Ïubj2)�”}”(hhh]”hÝ)�”}”(hŒthe sock that needs a blob”h]”hŒthe sock that needs a blob”…”�”}”(hj]Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jYÏh´MthjZÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj>Ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jYÏh´Mthj;Ïubj)�”}”(hŒ``gfp_t gfp`` allocation mode ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hj}Ïh]”hŒ gfp_t gfp”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MuhjwÏubj2)�”}”(hhh]”hÝ)�”}”(hŒallocation mode”h]”hŒallocation mode”…”�”}”(hj–Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j’Ïh´Muhj“Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjwÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j’Ïh´Muhj;Ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÏubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¸Ïh]”hŒ Description”…”�”}”(hjºÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MwhjÏubhÝ)�”}”(hŒ*Allocate the sock blob for all the modules”h]”hŒ*Allocate the sock blob for all the modules”…”�”}”(hjÎÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MvhjÏubhÝ)�”}”(hŒ3Returns 0, or -ENOMEM if memory can't be allocated.”h]”hŒ5Returns 0, or -ENOMEM if memory can’t be allocated.”…”�”}”(hjÝÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MxhjÏubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sk_alloc (C function)”Œc.security_sk_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCint security_sk_alloc (struct sock *sk, int family, gfp_t priority)”h]”j)�”}”(hŒBint security_sk_alloc(struct sock *sk, int family, gfp_t priority)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj Ðh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÐh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÐh²hh³jÐh´M�ubj{)�”}”(hŒsecurity_sk_alloc”h]”j�)�”}”(hŒsecurity_sk_alloc”h]”hŒsecurity_sk_alloc”…”�”}”(hj-Ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)Ðubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÐh²hh³jÐh´M�ubjœ)�”}”(hŒ-(struct sock *sk, int family, gfp_t priority)”h]”(j¢)�”}”(hŒstruct sock *sk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjIÐh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjEÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEÐubh)�”}”(hhh]”j�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjgÐh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jiÐŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j/ÐsbŒc.security_sk_alloc”†”asbuh1hhjEÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEÐubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj•Ðh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjEÐubj�)�”}”(hŒsk”h]”hŒsk”…”�”}”(hj¢Ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjEÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjAÐubj¢)�”}”(hŒ int family”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj»Ðh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj·Ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·Ðubj�)�”}”(hŒfamily”h]”hŒfamily”…”�”}”(hj×Ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·Ðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjAÐubj¢)�”}”(hŒgfp_t priority”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjóÐh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjðÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jõÐŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jƒÐŒc.security_sk_alloc”†”asbuh1hhjìÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìÐubj�)�”}”(hŒpriority”h]”hŒpriority”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjAÐubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÐh²hh³jÐh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÐh²hh³jÐh´M�ubah}”(h]”jÿÏah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÐh´M�hjÐh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Allocate and initialize a sock's LSM blob”h]”hŒ+Allocate and initialize a sock’s LSM blob”…”�”}”(hjIÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjFÑh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÐh²hh³jÐh´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjaÑjæjaÑjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXB**Parameters** ``struct sock *sk`` sock ``int family`` protocol family ``gfp_t priority`` gfp flags **Description** Allocate and attach a security structure to the sk->sk_security field, which is used to copy security attributes between local stream sockets. **Return** Returns 0 on success, error on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjkÑh]”hŒ Parameters”…”�”}”(hjmÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjiÑubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M…hjeÑubj )�”}”(hhh]”(j)�”}”(hŒ``struct sock *sk`` sock ”h]”(j)�”}”(hŒ``struct sock *sk``”h]”j)�”}”(hjŠÑh]”hŒstruct sock *sk”…”�”}”(hjŒÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‚hj„Ñubj2)�”}”(hhh]”hÝ)�”}”(hŒsock”h]”hŒsock”…”�”}”(hj£Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸÑh´M‚hj Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸÑh´M‚hj�Ñubj)�”}”(hŒ``int family`` protocol family ”h]”(j)�”}”(hŒ``int family``”h]”j)�”}”(hjÃÑh]”hŒ int family”…”�”}”(hjÅÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mƒhj½Ñubj2)�”}”(hhh]”hÝ)�”}”(hŒprotocol family”h]”hŒprotocol family”…”�”}”(hjÜÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØÑh´MƒhjÙÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj½Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØÑh´Mƒhj�Ñubj)�”}”(hŒ``gfp_t priority`` gfp flags ”h]”(j)�”}”(hŒ``gfp_t priority``”h]”j)�”}”(hjüÑh]”hŒgfp_t priority”…”�”}”(hjþÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„hjöÑubj2)�”}”(hhh]”hÝ)�”}”(hŒ gfp flags”h]”hŒ gfp flags”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒh´M„hjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjöÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒh´M„hj�Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjeÑubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj7Òh]”hŒ Description”…”�”}”(hj9Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5Òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M†hjeÑubhÝ)�”}”(hŒŽAllocate and attach a security structure to the sk->sk_security field, which is used to copy security attributes between local stream sockets.”h]”hŒŽAllocate and attach a security structure to the sk->sk_security field, which is used to copy security attributes between local stream sockets.”…”�”}”(hjMÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M…hjeÑubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj^Òh]”hŒReturn”…”�”}”(hj`Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\Òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MˆhjeÑubhÝ)�”}”(hŒ'Returns 0 on success, error on failure.”h]”hŒ'Returns 0 on success, error on failure.”…”�”}”(hjtÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‰hjeÑubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_sk_free (C function)”Œc.security_sk_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'void security_sk_free (struct sock *sk)”h]”j)�”}”(hŒ&void security_sk_free(struct sock *sk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj£Òh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŸÒh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²Òh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŸÒh²hh³j±Òh´M˜ubj{)�”}”(hŒsecurity_sk_free”h]”j�)�”}”(hŒsecurity_sk_free”h]”hŒsecurity_sk_free”…”�”}”(hjÄÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀÒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŸÒh²hh³j±Òh´M˜ubjœ)�”}”(hŒ(struct sock *sk)”h]”j¢)�”}”(hŒstruct sock *sk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjàÒh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÜÒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜÒubh)�”}”(hhh]”j�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjþÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjûÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÓŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÆÒsbŒc.security_sk_free”†”asbuh1hhjÜÒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜÒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj,Óh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÜÒubj�)�”}”(hŒsk”h]”hŒsk”…”�”}”(hj9Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjØÒubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjŸÒh²hh³j±Òh´M˜ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj›Òh²hh³j±Òh´M˜ubah}”(h]”j–Òah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j±Òh´M˜hj˜Òh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree the sock's LSM blob”h]”hŒFree the sock’s LSM blob”…”�”}”(hjcÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜hj`Óh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj˜Òh²hh³j±Òh´M˜ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj{Ójæj{Ójç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ[**Parameters** ``struct sock *sk`` sock **Description** Deallocate security structure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj…Óh]”hŒ Parameters”…”�”}”(hj‡Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MœhjÓubj )�”}”(hhh]”j)�”}”(hŒ``struct sock *sk`` sock ”h]”(j)�”}”(hŒ``struct sock *sk``”h]”j)�”}”(hj¤Óh]”hŒstruct sock *sk”…”�”}”(hj¦Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢Óubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™hjžÓubj2)�”}”(hhh]”hÝ)�”}”(hŒsock”h]”hŒsock”…”�”}”(hj½Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¹Óh´M™hjºÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjžÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¹Óh´M™hj›Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÓubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjßÓh]”hŒ Description”…”�”}”(hjáÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M›hjÓubhÝ)�”}”(hŒDeallocate security structure.”h]”hŒDeallocate security structure.”…”�”}”(hjõÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MšhjÓubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_inet_csk_clone (C function)”Œc.security_inet_csk_clone”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒQvoid security_inet_csk_clone (struct sock *newsk, const struct request_sock *req)”h]”j)�”}”(hŒPvoid security_inet_csk_clone(struct sock *newsk, const struct request_sock *req)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj$Ôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Ôh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3Ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Ôh²hh³j2Ôh´Mìubj{)�”}”(hŒsecurity_inet_csk_clone”h]”j�)�”}”(hŒsecurity_inet_csk_clone”h]”hŒsecurity_inet_csk_clone”…”�”}”(hjEÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjAÔubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Ôh²hh³j2Ôh´Mìubjœ)�”}”(hŒ4(struct sock *newsk, const struct request_sock *req)”h]”(j¢)�”}”(hŒstruct sock *newsk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjaÔh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj]Ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]Ôubh)�”}”(hhh]”j�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|Ôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�ÔŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jGÔsbŒc.security_inet_csk_clone”†”asbuh1hhj]Ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]Ôubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj­Ôh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj]Ôubj�)�”}”(hŒnewsk”h]”hŒnewsk”…”�”}”(hjºÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]Ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjYÔubj¢)�”}”(hŒconst struct request_sock *req”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÓÔh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÏÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏÔubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjîÔh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÏÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏÔubh)�”}”(hhh]”j�)�”}”(hŒ request_sock”h]”hŒ request_sock”…”�”}”(hj Õh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÕŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j›ÔŒc.security_inet_csk_clone”†”asbuh1hhjÏÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Õh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏÔubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj8Õh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÏÔubj�)�”}”(hŒreq”h]”hŒreq”…”�”}”(hjEÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjYÔubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Ôh²hh³j2Ôh´Mìubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÔh²hh³j2Ôh´Mìubah}”(h]”jÔah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j2Ôh´MìhjÔh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Set new sock LSM state based on request_sock”h]”hŒ,Set new sock LSM state based on request_sock”…”�”}”(hjoÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MìhjlÕh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÔh²hh³j2Ôh´Mìubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‡Õjæj‡Õjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÂ**Parameters** ``struct sock *newsk`` new sock ``const struct request_sock *req`` connection request_sock **Description** Set that LSM state of **sock** using the LSM state from **req**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‘Õh]”hŒ Parameters”…”�”}”(hj“Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Õubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mðhj‹Õubj )�”}”(hhh]”(j)�”}”(hŒ ``struct sock *newsk`` new sock ”h]”(j)�”}”(hŒ``struct sock *newsk``”h]”j)�”}”(hj°Õh]”hŒstruct sock *newsk”…”�”}”(hj²Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®Õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MíhjªÕubj2)�”}”(hhh]”hÝ)�”}”(hŒnew sock”h]”hŒnew sock”…”�”}”(hjÉÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÅÕh´MíhjÆÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjªÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÅÕh´Míhj§Õubj)�”}”(hŒ;``const struct request_sock *req`` connection request_sock ”h]”(j)�”}”(hŒ"``const struct request_sock *req``”h]”j)�”}”(hjéÕh]”hŒconst struct request_sock *req”…”�”}”(hjëÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MîhjãÕubj2)�”}”(hhh]”hÝ)�”}”(hŒconnection request_sock”h]”hŒconnection request_sock”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jþÕh´MîhjÿÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjãÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþÕh´Mîhj§Õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‹ÕubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj$Öh]”hŒ Description”…”�”}”(hj&Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj"Öubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mðhj‹ÕubhÝ)�”}”(hŒ@Set that LSM state of **sock** using the LSM state from **req**.”h]”(hŒSet that LSM state of ”…”�”}”(hj:Öh²hh³Nh´Nubjõ)�”}”(hŒ**sock**”h]”hŒsock”…”�”}”(hjBÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:ÖubhŒ using the LSM state from ”…”�”}”(hj:Öh²hh³Nh´Nubjõ)�”}”(hŒ**req**”h]”hŒreq”…”�”}”(hjTÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:ÖubhŒ.”…”�”}”(hj:Öh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mïhj‹Õubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_mptcp_add_subflow (C function)”Œc.security_mptcp_add_subflow”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBint security_mptcp_add_subflow (struct sock *sk, struct sock *ssk)”h]”j)�”}”(hŒAint security_mptcp_add_subflow(struct sock *sk, struct sock *ssk)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj�Öh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‰Öh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰Öh²hh³j›Öh´MÒubj{)�”}”(hŒsecurity_mptcp_add_subflow”h]”j�)�”}”(hŒsecurity_mptcp_add_subflow”h]”hŒsecurity_mptcp_add_subflow”…”�”}”(hj®Öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªÖubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‰Öh²hh³j›Öh´MÒubjœ)�”}”(hŒ#(struct sock *sk, struct sock *ssk)”h]”(j¢)�”}”(hŒstruct sock *sk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÊÖh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÆÖubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×Öh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆÖubh)�”}”(hhh]”j�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjèÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jêÖŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j°ÖsbŒc.security_mptcp_add_subflow”†”asbuh1hhjÆÖubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆÖubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÆÖubj�)�”}”(hŒsk”h]”hŒsk”…”�”}”(hj#×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÂÖubj¢)�”}”(hŒstruct sock *ssk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj<×h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj8×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj8×ubh)�”}”(hhh]”j�)�”}”(hŒsock”h]”hŒsock”…”�”}”(hjZ×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjW×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j\׌modname”NŒ classname”Nj] j` )�”}”jc ]”j׌c.security_mptcp_add_subflow”†”asbuh1hhj8×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj8×ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj†×h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj8×ubj�)�”}”(hŒssk”h]”hŒssk”…”�”}”(hj“×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÂÖubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‰Öh²hh³j›Öh´MÒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj…Öh²hh³j›Öh´MÒubah}”(h]”j€Öah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j›Öh´MÒhj‚Öh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Inherit the LSM label from the MPTCP socket”h]”hŒ+Inherit the LSM label from the MPTCP socket”…”�”}”(hj½×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÒhjº×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‚Öh²hh³j›Öh´MÒubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÕ×jæjÕ×jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX²**Parameters** ``struct sock *sk`` the owning MPTCP socket ``struct sock *ssk`` the new subflow **Description** Update the labeling for the given MPTCP subflow, to match the one of the owning MPTCP socket. This hook has to be called after the socket creation and initialization via the security_socket_create() and security_socket_post_create() LSM hooks. **Return** Returns 0 on success or a negative error code on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjß×h]”hŒ Parameters”…”�”}”(hjá×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÖhjÙ×ubj )�”}”(hhh]”(j)�”}”(hŒ,``struct sock *sk`` the owning MPTCP socket ”h]”(j)�”}”(hŒ``struct sock *sk``”h]”j)�”}”(hjþ×h]”hŒstruct sock *sk”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjü×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓhjø×ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe owning MPTCP socket”h]”hŒthe owning MPTCP socket”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØh´MÓhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjø×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØh´MÓhjõ×ubj)�”}”(hŒ%``struct sock *ssk`` the new subflow ”h]”(j)�”}”(hŒ``struct sock *ssk``”h]”j)�”}”(hj7Øh]”hŒstruct sock *ssk”…”�”}”(hj9Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔhj1Øubj2)�”}”(hhh]”hÝ)�”}”(hŒthe new subflow”h]”hŒthe new subflow”…”�”}”(hjPØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jLØh´MÔhjMØubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jLØh´MÔhjõ×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÙ×ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjrØh]”hŒ Description”…”�”}”(hjtØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjpØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÖhjÙ×ubhÝ)�”}”(hŒóUpdate the labeling for the given MPTCP subflow, to match the one of the owning MPTCP socket. This hook has to be called after the socket creation and initialization via the security_socket_create() and security_socket_post_create() LSM hooks.”h]”hŒóUpdate the labeling for the given MPTCP subflow, to match the one of the owning MPTCP socket. This hook has to be called after the socket creation and initialization via the security_socket_create() and security_socket_post_create() LSM hooks.”…”�”}”(hjˆØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÕhjÙ×ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj™Øh]”hŒReturn”…”�”}”(hj›Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—Øubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÚhjÙ×ubhÝ)�”}”(hŒ9Returns 0 on success or a negative error code on failure.”h]”hŒ9Returns 0 on success or a negative error code on failure.”…”�”}”(hj¯Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÛhjÙ×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_xfrm_policy_clone (C function)”Œc.security_xfrm_policy_clone”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ]int security_xfrm_policy_clone (struct xfrm_sec_ctx *old_ctx, struct xfrm_sec_ctx **new_ctxp)”h]”j)�”}”(hŒ\int security_xfrm_policy_clone(struct xfrm_sec_ctx *old_ctx, struct xfrm_sec_ctx **new_ctxp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÞØh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚØh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíØh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚØh²hh³jìØh´MUubj{)�”}”(hŒsecurity_xfrm_policy_clone”h]”j�)�”}”(hŒsecurity_xfrm_policy_clone”h]”hŒsecurity_xfrm_policy_clone”…”�”}”(hjÿØh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjûØubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÚØh²hh³jìØh´MUubjœ)�”}”(hŒ>(struct xfrm_sec_ctx *old_ctx, struct xfrm_sec_ctx **new_ctxp)”h]”(j¢)�”}”(hŒstruct xfrm_sec_ctx *old_ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(Ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙubh)�”}”(hhh]”j�)�”}”(hŒ xfrm_sec_ctx”h]”hŒ xfrm_sec_ctx”…”�”}”(hj9Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6Ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j;ÙŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÙsbŒc.security_xfrm_policy_clone”†”asbuh1hhjÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjgÙh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÙubj�)�”}”(hŒold_ctx”h]”hŒold_ctx”…”�”}”(hjtÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙubj¢)�”}”(hŒstruct xfrm_sec_ctx **new_ctxp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�Ùh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‰Ùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰Ùubh)�”}”(hhh]”j�)�”}”(hŒ xfrm_sec_ctx”h]”hŒ xfrm_sec_ctx”…”�”}”(hj«Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨Ùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j­ÙŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jUÙŒc.security_xfrm_policy_clone”†”asbuh1hhj‰Ùubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰Ùubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj×Ùh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‰Ùubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjäÙh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‰Ùubj�)�”}”(hŒnew_ctxp”h]”hŒnew_ctxp”…”�”}”(hjñÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰Ùubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÚØh²hh³jìØh´MUubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÖØh²hh³jìØh´MUubah}”(h]”jÑØah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jìØh´MUhjÓØh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒClone xfrm policy LSM state”h]”hŒClone xfrm policy LSM state”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MUhjÚh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÓØh²hh³jìØh´MUubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj3Újæj3Újç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX4**Parameters** ``struct xfrm_sec_ctx *old_ctx`` xfrm security context ``struct xfrm_sec_ctx **new_ctxp`` target xfrm security context **Description** Allocate a security structure in new_ctxp that contains the information from the old_ctx structure. **Return** Return 0 if operation was successful.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj=Úh]”hŒ Parameters”…”�”}”(hj?Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;Úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MYhj7Úubj )�”}”(hhh]”(j)�”}”(hŒ7``struct xfrm_sec_ctx *old_ctx`` xfrm security context ”h]”(j)�”}”(hŒ ``struct xfrm_sec_ctx *old_ctx``”h]”j)�”}”(hj\Úh]”hŒstruct xfrm_sec_ctx *old_ctx”…”�”}”(hj^Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MVhjVÚubj2)�”}”(hhh]”hÝ)�”}”(hŒxfrm security context”h]”hŒxfrm security context”…”�”}”(hjuÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jqÚh´MVhjrÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjVÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqÚh´MVhjSÚubj)�”}”(hŒ@``struct xfrm_sec_ctx **new_ctxp`` target xfrm security context ”h]”(j)�”}”(hŒ"``struct xfrm_sec_ctx **new_ctxp``”h]”j)�”}”(hj•Úh]”hŒstruct xfrm_sec_ctx **new_ctxp”…”�”}”(hj—Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MWhj�Úubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget xfrm security context”h]”hŒtarget xfrm security context”…”�”}”(hj®Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jªÚh´MWhj«Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªÚh´MWhjSÚubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj7ÚubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÐÚh]”hŒ Description”…”�”}”(hjÒÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MYhj7ÚubhÝ)�”}”(hŒcAllocate a security structure in new_ctxp that contains the information from the old_ctx structure.”h]”hŒcAllocate a security structure in new_ctxp that contains the information from the old_ctx structure.”…”�”}”(hjæÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MXhj7ÚubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj÷Úh]”hŒReturn”…”�”}”(hjùÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M[hj7ÚubhÝ)�”}”(hŒ%Return 0 if operation was successful.”h]”hŒ%Return 0 if operation was successful.”…”�”}”(hj Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M\hj7Úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_xfrm_policy_delete (C function)”Œc.security_xfrm_policy_delete”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:int security_xfrm_policy_delete (struct xfrm_sec_ctx *ctx)”h]”j)�”}”(hŒ9int security_xfrm_policy_delete(struct xfrm_sec_ctx *ctx)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj<Ûh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj8Ûh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj8Ûh²hh³jJÛh´Mqubj{)�”}”(hŒsecurity_xfrm_policy_delete”h]”j�)�”}”(hŒsecurity_xfrm_policy_delete”h]”hŒsecurity_xfrm_policy_delete”…”�”}”(hj]Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYÛubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj8Ûh²hh³jJÛh´Mqubjœ)�”}”(hŒ(struct xfrm_sec_ctx *ctx)”h]”j¢)�”}”(hŒstruct xfrm_sec_ctx *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjyÛh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjuÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†Ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuÛubh)�”}”(hhh]”j�)�”}”(hŒ xfrm_sec_ctx”h]”hŒ xfrm_sec_ctx”…”�”}”(hj—Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”Ûubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j™ÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j_ÛsbŒc.security_xfrm_policy_delete”†”asbuh1hhjuÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·Ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuÛubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÅÛh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjuÛubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hjÒÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjqÛubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj8Ûh²hh³jJÛh´Mqubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj4Ûh²hh³jJÛh´Mqubah}”(h]”j/Ûah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jJÛh´Mqhj1Ûh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Check if deleting a xfrm policy is allowed”h]”hŒ*Check if deleting a xfrm policy is allowed”…”�”}”(hjüÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MqhjùÛh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj1Ûh²hh³jJÛh´Mqubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÜjæjÜjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒª**Parameters** ``struct xfrm_sec_ctx *ctx`` xfrm security context **Description** Authorize deletion of a SPD entry. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÜh]”hŒ Parameters”…”�”}”(hj Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MuhjÜubj )�”}”(hhh]”j)�”}”(hŒ3``struct xfrm_sec_ctx *ctx`` xfrm security context ”h]”(j)�”}”(hŒ``struct xfrm_sec_ctx *ctx``”h]”j)�”}”(hj=Üh]”hŒstruct xfrm_sec_ctx *ctx”…”�”}”(hj?Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj;Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mrhj7Üubj2)�”}”(hhh]”hÝ)�”}”(hŒxfrm security context”h]”hŒxfrm security context”…”�”}”(hjVÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jRÜh´MrhjSÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj7Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jRÜh´Mrhj4Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjxÜh]”hŒ Description”…”�”}”(hjzÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjvÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MthjÜubhÝ)�”}”(hŒ"Authorize deletion of a SPD entry.”h]”hŒ"Authorize deletion of a SPD entry.”…”�”}”(hjŽÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MshjÜubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjŸÜh]”hŒReturn”…”�”}”(hj¡Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Üubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MuhjÜubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjµÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MvhjÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ.security_xfrm_state_alloc_acquire (C function)”Œ#c.security_xfrm_state_alloc_acquire”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒdint security_xfrm_state_alloc_acquire (struct xfrm_state *x, struct xfrm_sec_ctx *polsec, u32 secid)”h]”j)�”}”(hŒcint security_xfrm_state_alloc_acquire(struct xfrm_state *x, struct xfrm_sec_ctx *polsec, u32 secid)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjäÜh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjàÜh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóÜh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàÜh²hh³jòÜh´M�ubj{)�”}”(hŒ!security_xfrm_state_alloc_acquire”h]”j�)�”}”(hŒ!security_xfrm_state_alloc_acquire”h]”hŒ!security_xfrm_state_alloc_acquire”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjàÜh²hh³jòÜh´M�ubjœ)�”}”(hŒ>(struct xfrm_state *x, struct xfrm_sec_ctx *polsec, u32 secid)”h]”(j¢)�”}”(hŒstruct xfrm_state *x”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj!Ýh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝubh)�”}”(hhh]”j�)�”}”(hŒ xfrm_state”h]”hŒ xfrm_state”…”�”}”(hj?Ýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<Ýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jAÝŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÝsbŒ#c.security_xfrm_state_alloc_acquire”†”asbuh1hhjÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_Ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjmÝh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÝubj�)�”}”(hjÙh]”hŒx”…”�”}”(hjzÝh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝubj¢)�”}”(hŒstruct xfrm_sec_ctx *polsec”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj’Ýh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjŽÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽÝubh)�”}”(hhh]”j�)�”}”(hŒ xfrm_sec_ctx”h]”hŒ xfrm_sec_ctx”…”�”}”(hj°Ýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­Ýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j²ÝŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j[ÝŒ#c.security_xfrm_state_alloc_acquire”†”asbuh1hhjŽÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽÝubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÜÝh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjŽÝubj�)�”}”(hŒpolsec”h]”hŒpolsec”…”�”}”(hjéÝh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝubj¢)�”}”(hŒ u32 secid”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÞŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j[ÝŒ#c.security_xfrm_state_alloc_acquire”†”asbuh1hhjþÝubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþÝubj�)�”}”(hŒsecid”h]”hŒsecid”…”�”}”(hj1Þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþÝubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjàÜh²hh³jòÜh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÜÜh²hh³jòÜh´M�ubah}”(h]”j×Üah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jòÜh´M�hjÙÜh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒAllocate a xfrm state LSM blob”h]”hŒAllocate a xfrm state LSM blob”…”�”}”(hj[Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjXÞh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÙÜh²hh³jòÜh´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjsÞjæjsÞjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX¬**Parameters** ``struct xfrm_state *x`` xfrm state being added to the SAD ``struct xfrm_sec_ctx *polsec`` associated policy's security context ``u32 secid`` secid from the flow **Description** Allocate a security structure to the x->security field; the security field is initialized to NULL when the xfrm_state is allocated. Set the context to correspond to secid. **Return** Returns 0 if operation was successful.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj}Þh]”hŒ Parameters”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{Þubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”hjwÞubj )�”}”(hhh]”(j)�”}”(hŒ;``struct xfrm_state *x`` xfrm state being added to the SAD ”h]”(j)�”}”(hŒ``struct xfrm_state *x``”h]”j)�”}”(hjœÞh]”hŒstruct xfrm_state *x”…”�”}”(hjžÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‘hj–Þubj2)�”}”(hhh]”hÝ)�”}”(hŒ!xfrm state being added to the SAD”h]”hŒ!xfrm state being added to the SAD”…”�”}”(hjµÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±Þh´M‘hj²Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±Þh´M‘hj“Þubj)�”}”(hŒE``struct xfrm_sec_ctx *polsec`` associated policy's security context ”h]”(j)�”}”(hŒ``struct xfrm_sec_ctx *polsec``”h]”j)�”}”(hjÕÞh]”hŒstruct xfrm_sec_ctx *polsec”…”�”}”(hj×Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M’hjÏÞubj2)�”}”(hhh]”hÝ)�”}”(hŒ$associated policy's security context”h]”hŒ&associated policy’s security context”…”�”}”(hjîÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jêÞh´M’hjëÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêÞh´M’hj“Þubj)�”}”(hŒ"``u32 secid`` secid from the flow ”h]”(j)�”}”(hŒ ``u32 secid``”h]”j)�”}”(hjßh]”hŒ u32 secid”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M“hjßubj2)�”}”(hhh]”hÝ)�”}”(hŒsecid from the flow”h]”hŒsecid from the flow”…”�”}”(hj'ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j#ßh´M“hj$ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#ßh´M“hj“Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjwÞubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjIßh]”hŒ Description”…”�”}”(hjKßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M•hjwÞubhÝ)�”}”(hŒ¬Allocate a security structure to the x->security field; the security field is initialized to NULL when the xfrm_state is allocated. Set the context to correspond to secid.”h]”hŒ¬Allocate a security structure to the x->security field; the security field is initialized to NULL when the xfrm_state is allocated. Set the context to correspond to secid.”…”�”}”(hj_ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”hjwÞubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjpßh]”hŒReturn”…”�”}”(hjrßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜hjwÞubhÝ)�”}”(hŒ&Returns 0 if operation was successful.”h]”hŒ&Returns 0 if operation was successful.”…”�”}”(hj†ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M™hjwÞubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_xfrm_state_free (C function)”Œc.security_xfrm_state_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4void security_xfrm_state_free (struct xfrm_state *x)”h]”j)�”}”(hŒ3void security_xfrm_state_free(struct xfrm_state *x)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjµßh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj±ßh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄßh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±ßh²hh³jÃßh´M°ubj{)�”}”(hŒsecurity_xfrm_state_free”h]”j�)�”}”(hŒsecurity_xfrm_state_free”h]”hŒsecurity_xfrm_state_free”…”�”}”(hjÖßh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒßubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj±ßh²hh³jÃßh´M°ubjœ)�”}”(hŒ(struct xfrm_state *x)”h]”j¢)�”}”(hŒstruct xfrm_state *x”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjòßh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjîßubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿßh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîßubh)�”}”(hhh]”j�)�”}”(hŒ xfrm_state”h]”hŒ xfrm_state”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jàŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jØßsbŒc.security_xfrm_state_free”†”asbuh1hhjîßubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0àh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîßubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj>àh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjîßubj�)�”}”(hjÙh]”hŒx”…”�”}”(hjKàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjêßubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj±ßh²hh³jÃßh´M°ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj­ßh²hh³jÃßh´M°ubah}”(h]”j¨ßah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÃßh´M°hjªßh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a xfrm state”h]”hŒFree a xfrm state”…”�”}”(hjtàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M°hjqàh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjªßh²hh³jÃßh´M°ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŒàjæjŒàjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ_**Parameters** ``struct xfrm_state *x`` xfrm state **Description** Deallocate x->security.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj–àh]”hŒ Parameters”…”�”}”(hj˜àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”àubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M´hj�àubj )�”}”(hhh]”j)�”}”(hŒ$``struct xfrm_state *x`` xfrm state ”h]”(j)�”}”(hŒ``struct xfrm_state *x``”h]”j)�”}”(hjµàh]”hŒstruct xfrm_state *x”…”�”}”(hj·àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³àubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M±hj¯àubj2)�”}”(hhh]”hÝ)�”}”(hŒ xfrm state”h]”hŒ xfrm state”…”�”}”(hjÎàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÊàh´M±hjËàubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¯àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÊàh´M±hj¬àubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj�àubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjðàh]”hŒ Description”…”�”}”(hjòàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjîàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M³hj�àubhÝ)�”}”(hŒDeallocate x->security.”h]”hŒDeallocate x->security.”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M²hj�àubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(security_xfrm_policy_lookup (C function)”Œc.security_xfrm_policy_lookup”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHint security_xfrm_policy_lookup (struct xfrm_sec_ctx *ctx, u32 fl_secid)”h]”j)�”}”(hŒGint security_xfrm_policy_lookup(struct xfrm_sec_ctx *ctx, u32 fl_secid)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj5áh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1áh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDáh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1áh²hh³jCáh´M»ubj{)�”}”(hŒsecurity_xfrm_policy_lookup”h]”j�)�”}”(hŒsecurity_xfrm_policy_lookup”h]”hŒsecurity_xfrm_policy_lookup”…”�”}”(hjVáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRáubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj1áh²hh³jCáh´M»ubjœ)�”}”(hŒ((struct xfrm_sec_ctx *ctx, u32 fl_secid)”h]”(j¢)�”}”(hŒstruct xfrm_sec_ctx *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjráh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjnáubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnáubh)�”}”(hhh]”j�)�”}”(hŒ xfrm_sec_ctx”h]”hŒ xfrm_sec_ctx”…”�”}”(hj�áh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j’áŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jXásbŒc.security_xfrm_policy_lookup”†”asbuh1hhjnáubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°áh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnáubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¾áh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjnáubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hjËáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjáubj¢)�”}”(hŒ u32 fl_secid”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjçáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäáubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jéáŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¬áŒc.security_xfrm_policy_lookup”†”asbuh1hhjàáubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàáubj�)�”}”(hŒfl_secid”h]”hŒfl_secid”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjàáubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjáubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj1áh²hh³jCáh´M»ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj-áh²hh³jCáh´M»ubah}”(h]”j(áah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jCáh´M»hj*áh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Check if using a xfrm policy is allowed”h]”hŒ'Check if using a xfrm policy is allowed”…”�”}”(hj=âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M»hj:âh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj*áh²hh³jCáh´M»ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjUâjæjUâjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXŸ**Parameters** ``struct xfrm_sec_ctx *ctx`` target xfrm security context ``u32 fl_secid`` flow secid used to authorize access **Description** Check permission when a flow selects a xfrm_policy for processing XFRMs on a packet. The hook is called when selecting either a per-socket policy or a generic xfrm policy. **Return** Return 0 if permission is granted, -ESRCH otherwise, or -errno on other errors.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj_âh]”hŒ Parameters”…”�”}”(hjaâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj]âubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¿hjYâubj )�”}”(hhh]”(j)�”}”(hŒ:``struct xfrm_sec_ctx *ctx`` target xfrm security context ”h]”(j)�”}”(hŒ``struct xfrm_sec_ctx *ctx``”h]”j)�”}”(hj~âh]”hŒstruct xfrm_sec_ctx *ctx”…”�”}”(hj€âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|âubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¼hjxâubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget xfrm security context”h]”hŒtarget xfrm security context”…”�”}”(hj—âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j“âh´M¼hj”âubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjxâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j“âh´M¼hjuâubj)�”}”(hŒ5``u32 fl_secid`` flow secid used to authorize access ”h]”(j)�”}”(hŒ``u32 fl_secid``”h]”j)�”}”(hj·âh]”hŒ u32 fl_secid”…”�”}”(hj¹âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµâubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½hj±âubj2)�”}”(hhh]”hÝ)�”}”(hŒ#flow secid used to authorize access”h]”hŒ#flow secid used to authorize access”…”�”}”(hjÐâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌâh´M½hjÍâubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±âubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌâh´M½hjuâubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjYâubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjòâh]”hŒ Description”…”�”}”(hjôâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjðâubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¿hjYâubhÝ)�”}”(hŒ¬Check permission when a flow selects a xfrm_policy for processing XFRMs on a packet. The hook is called when selecting either a per-socket policy or a generic xfrm policy.”h]”hŒ¬Check permission when a flow selects a xfrm_policy for processing XFRMs on a packet. The hook is called when selecting either a per-socket policy or a generic xfrm policy.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¾hjYâubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjãh]”hŒReturn”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÂhjYâubhÝ)�”}”(hŒOReturn 0 if permission is granted, -ESRCH otherwise, or -errno on other errors.”h]”hŒOReturn 0 if permission is granted, -ESRCH otherwise, or -errno on other errors.”…”�”•}”(hj/ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÃhjYâubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ/security_xfrm_state_pol_flow_match (C function)”Œ$c.security_xfrm_state_pol_flow_match”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvint security_xfrm_state_pol_flow_match (struct xfrm_state *x, struct xfrm_policy *xp, const struct flowi_common *flic)”h]”j)�”}”(hŒuint security_xfrm_state_pol_flow_match(struct xfrm_state *x, struct xfrm_policy *xp, const struct flowi_common *flic)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj^ãh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZãh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZãh²hh³jlãh´MÌubj{)�”}”(hŒ"security_xfrm_state_pol_flow_match”h]”j�)�”}”(hŒ"security_xfrm_state_pol_flow_match”h]”hŒ"security_xfrm_state_pol_flow_match”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{ãubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjZãh²hh³jlãh´MÌubjœ)�”}”(hŒO(struct xfrm_state *x, struct xfrm_policy *xp, const struct flowi_common *flic)”h]”(j¢)�”}”(hŒstruct xfrm_state *x”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj›ãh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj—ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—ãubh)�”}”(hhh]”j�)�”}”(hŒ xfrm_state”h]”hŒ xfrm_state”…”�”}”(hj¹ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶ãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j»ãŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�ãsbŒ$c.security_xfrm_state_pol_flow_match”†”asbuh1hhj—ãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—ãubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjçãh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj—ãubj�)�”}”(hjÙh]”hŒx”…”�”}”(hjôãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—ãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“ãubj¢)�”}”(hŒstruct xfrm_policy *xp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj äh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäubh)�”}”(hhh]”j�)�”}”(hŒ xfrm_policy”h]”hŒ xfrm_policy”…”�”}”(hj*äh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j,äŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÕãŒ$c.security_xfrm_state_pol_flow_match”†”asbuh1hhjäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHäh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjVäh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjäubj�)�”}”(hŒxp”h]”hŒxp”…”�”}”(hjcäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“ãubj¢)�”}”(hŒconst struct flowi_common *flic”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj|äh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjxäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰äh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjxäubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj—äh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjxäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤äh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjxäubh)�”}”(hhh]”j�)�”}”(hŒ flowi_common”h]”hŒ flowi_common”…”�”}”(hjµäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j·äŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÕãŒ$c.security_xfrm_state_pol_flow_match”†”asbuh1hhjxäubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓäh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjxäubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjáäh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjxäubj�)�”}”(hŒflic”h]”hŒflic”…”�”}”(hjîäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxäubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj“ãubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjZãh²hh³jlãh´MÌubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjVãh²hh³jlãh´MÌubah}”(h]”jQãah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jlãh´MÌhjSãh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒCheck for a xfrm match”h]”hŒCheck for a xfrm match”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÌhjåh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjSãh²hh³jlãh´MÌubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj0åjæj0åjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX/**Parameters** ``struct xfrm_state *x`` xfrm state to match ``struct xfrm_policy *xp`` xfrm policy to check for a match ``const struct flowi_common *flic`` flow to check for a match. **Description** Check **xp** and **flic** for a match with **x**. **Return** Returns 1 if there is a match.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj:åh]”hŒ Parameters”…”�”}”(hj<åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÐhj4åubj )�”}”(hhh]”(j)�”}”(hŒ-``struct xfrm_state *x`` xfrm state to match ”h]”(j)�”}”(hŒ``struct xfrm_state *x``”h]”j)�”}”(hjYåh]”hŒstruct xfrm_state *x”…”�”}”(hj[åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjWåubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÍhjSåubj2)�”}”(hhh]”hÝ)�”}”(hŒxfrm state to match”h]”hŒxfrm state to match”…”�”}”(hjråh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jnåh´MÍhjoåubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjSåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jnåh´MÍhjPåubj)�”}”(hŒ<``struct xfrm_policy *xp`` xfrm policy to check for a match ”h]”(j)�”}”(hŒ``struct xfrm_policy *xp``”h]”j)�”}”(hj’åh]”hŒstruct xfrm_policy *xp”…”�”}”(hj”åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�åubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÎhjŒåubj2)�”}”(hhh]”hÝ)�”}”(hŒ xfrm policy to check for a match”h]”hŒ xfrm policy to check for a match”…”�”}”(hj«åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j§åh´MÎhj¨åubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŒåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§åh´MÎhjPåubj)�”}”(hŒ?``const struct flowi_common *flic`` flow to check for a match. ”h]”(j)�”}”(hŒ#``const struct flowi_common *flic``”h]”j)�”}”(hjËåh]”hŒconst struct flowi_common *flic”…”�”}”(hjÍåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉåubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÏhjÅåubj2)�”}”(hhh]”hÝ)�”}”(hŒflow to check for a match.”h]”hŒflow to check for a match.”…”�”}”(hjäåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jàåh´MÏhjáåubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jàåh´MÏhjPåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj4åubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjæh]”hŒ Description”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÑhj4åubhÝ)�”}”(hŒ1Check **xp** and **flic** for a match with **x**.”h]”(hŒCheck ”…”�”}”(hjæh²hh³Nh´Nubjõ)�”}”(hŒ**xp**”h]”hŒxp”…”�”}”(hj$æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæubhŒ and ”…”�”}”(hjæh²hh³Nh´Nubjõ)�”}”(hŒ**flic**”h]”hŒflic”…”�”}”(hj6æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæubhŒ for a match with ”…”�”}”(hjæh²hh³Nh´Nubjõ)�”}”(hŒ**x**”h]”hŒx”…”�”}”(hjHæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæubhŒ.”…”�”}”(hjæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÐhj4åubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjcæh]”hŒReturn”…”�”}”(hjeæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaæubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÒhj4åubhÝ)�”}”(hŒReturns 1 if there is a match.”h]”hŒReturns 1 if there is a match.”…”�”}”(hjyæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓhj4åubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_xfrm_decode_session (C function)”Œc.security_xfrm_decode_session”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBint security_xfrm_decode_session (struct sk_buff *skb, u32 *secid)”h]”j)�”}”(hŒAint security_xfrm_decode_session(struct sk_buff *skb, u32 *secid)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¨æh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤æh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Míubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤æh²hh³j¶æh´Míubj{)�”}”(hŒsecurity_xfrm_decode_session”h]”j�)�”}”(hŒsecurity_xfrm_decode_session”h]”hŒsecurity_xfrm_decode_session”…”�”}”(hjÉæh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅæubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¤æh²hh³j¶æh´Míubjœ)�”}”(hŒ!(struct sk_buff *skb, u32 *secid)”h]”(j¢)�”}”(hŒstruct sk_buff *skb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjåæh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjáæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòæh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáæubh)�”}”(hhh]”j�)�”}”(hŒsk_buff”h]”hŒsk_buff”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jçŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jËæsbŒc.security_xfrm_decode_session”†”asbuh1hhjáæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#çh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáæubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj1çh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjáæubj�)�”}”(hŒskb”h]”hŒskb”…”�”}”(hj>çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝæubj¢)�”}”(hŒ u32 *secid”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjZçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjWçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j\çŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jçŒc.security_xfrm_decode_session”†”asbuh1hhjSçubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxçh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSçubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj†çh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjSçubj�)�”}”(hŒsecid”h]”hŒsecid”…”�”}”(hj“çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝæubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¤æh²hh³j¶æh´Míubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj æh²hh³j¶æh´Míubah}”(h]”j›æah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¶æh´Míhj�æh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Determine the xfrm secid for a packet”h]”hŒ%Determine the xfrm secid for a packet”…”�”}”(hj½çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Míhjºçh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�æh²hh³j¶æh´Míubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÕçjæjÕçjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒå**Parameters** ``struct sk_buff *skb`` xfrm packet ``u32 *secid`` secid **Description** Decode the packet in **skb** and return the security label in **secid**. **Return** Return 0 if all xfrms used have the same secid.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjßçh]”hŒ Parameters”…”�”}”(hjáçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝçubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MñhjÙçubj )�”}”(hhh]”(j)�”}”(hŒ$``struct sk_buff *skb`` xfrm packet ”h]”(j)�”}”(hŒ``struct sk_buff *skb``”h]”j)�”}”(hjþçh]”hŒstruct sk_buff *skb”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjüçubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mîhjøçubj2)�”}”(hhh]”hÝ)�”}”(hŒ xfrm packet”h]”hŒ xfrm packet”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèh´Mîhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjøçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèh´Mîhjõçubj)�”}”(hŒ``u32 *secid`` secid ”h]”(j)�”}”(hŒ``u32 *secid``”h]”j)�”}”(hj7èh]”hŒ u32 *secid”…”�”}”(hj9èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5èubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mïhj1èubj2)�”}”(hhh]”hÝ)�”}”(hŒsecid”h]”hŒsecid”…”�”}”(hjPèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jLèh´MïhjMèubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1èubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jLèh´Mïhjõçubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÙçubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjrèh]”hŒ Description”…”�”}”(hjtèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjpèubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MñhjÙçubhÝ)�”}”(hŒHDecode the packet in **skb** and return the security label in **secid**.”h]”(hŒDecode the packet in ”…”�”}”(hjˆèh²hh³Nh´Nubjõ)�”}”(hŒ**skb**”h]”hŒskb”…”�”}”(hj�èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆèubhŒ" and return the security label in ”…”�”}”(hjˆèh²hh³Nh´Nubjõ)�”}”(hŒ **secid**”h]”hŒsecid”…”�”}”(hj¢èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆèubhŒ.”…”�”}”(hjˆèh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MðhjÙçubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj½èh]”hŒReturn”…”�”}”(hj¿èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MòhjÙçubhÝ)�”}”(hŒ/Return 0 if all xfrms used have the same secid.”h]”hŒ/Return 0 if all xfrms used have the same secid.”…”�”}”(hjÓèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MóhjÙçubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_key_alloc (C function)”Œc.security_key_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒVint security_key_alloc (struct key *key, const struct cred *cred, unsigned long flags)”h]”j)�”}”(hŒUint security_key_alloc(struct key *key, const struct cred *cred, unsigned long flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþèh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþèh²hh³jéh´Mubj{)�”}”(hŒsecurity_key_alloc”h]”j�)�”}”(hŒsecurity_key_alloc”h]”hŒsecurity_key_alloc”…”�”}”(hj#éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjþèh²hh³jéh´Mubjœ)�”}”(hŒ?(struct key *key, const struct cred *cred, unsigned long flags)”h]”(j¢)�”}”(hŒstruct key *key”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj?éh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;éubh)�”}”(hhh]”j�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hj]éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_éŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j%ésbŒc.security_key_alloc”†”asbuh1hhj;éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;éubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹éh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;éubj�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hj˜éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7éubj¢)�”}”(hŒconst struct cred *cred”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj±éh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj­éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­éubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÌéh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj­éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙéh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­éubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjêéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jìéŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jyéŒc.security_key_alloc”†”asbuh1hhj­éubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­éubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj­éubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj#êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­éubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7éubj¢)�”}”(hŒunsigned long flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj<êh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj8êubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj8êubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjXêh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj8êubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj8êubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjtêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7éubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjþèh²hh³jéh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjúèh²hh³jéh´Mubah}”(h]”jõèah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jéh´Mhj÷èh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Allocate and initialize a kernel key LSM blob”h]”hŒ-Allocate and initialize a kernel key LSM blob”…”�”}”(hjžêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj›êh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj÷èh²hh³jéh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¶êjæj¶êjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXP**Parameters** ``struct key *key`` key ``const struct cred *cred`` credentials ``unsigned long flags`` allocation flags **Description** Permit allocation of a key and assign security data. Note that key does not have a serial number assigned at this point. **Return** Return 0 if permission is granted, -ve error otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÀêh]”hŒ Parameters”…”�”}”(hjÂêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjºêubj )�”}”(hhh]”(j)�”}”(hŒ``struct key *key`` key ”h]”(j)�”}”(hŒ``struct key *key``”h]”j)�”}”(hjßêh]”hŒstruct key *key”…”�”}”(hjáêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝêubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjÙêubj2)�”}”(hhh]”hÝ)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjøêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jôêh´Mhjõêubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÙêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jôêh´MhjÖêubj)�”}”(hŒ(``const struct cred *cred`` credentials ”h]”(j)�”}”(hŒ``const struct cred *cred``”h]”j)�”}”(hjëh]”hŒconst struct cred *cred”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjëubj2)�”}”(hhh]”hÝ)�”}”(hŒ credentials”h]”hŒ credentials”…”�”}”(hj1ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j-ëh´Mhj.ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-ëh´MhjÖêubj)�”}”(hŒ)``unsigned long flags`` allocation flags ”h]”(j)�”}”(hŒ``unsigned long flags``”h]”j)�”}”(hjQëh]”hŒunsigned long flags”…”�”}”(hjSëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjOëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjKëubj2)�”}”(hhh]”hÝ)�”}”(hŒallocation flags”h]”hŒallocation flags”…”�”}”(hjjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jfëh´M hjgëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjKëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jfëh´M hjÖêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjºêubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŒëh]”hŒ Description”…”�”}”(hjŽëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŠëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjºêubhÝ)�”}”(hŒxPermit allocation of a key and assign security data. Note that key does not have a serial number assigned at this point.”h]”hŒxPermit allocation of a key and assign security data. Note that key does not have a serial number assigned at this point.”…”�”}”(hj¢ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjºêubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj³ëh]”hŒReturn”…”�”}”(hjµëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjºêubhÝ)�”}”(hŒ7Return 0 if permission is granted, -ve error otherwise.”h]”hŒ7Return 0 if permission is granted, -ve error otherwise.”…”�”}”(hjÉëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjºêubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_key_free (C function)”Œc.security_key_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(void security_key_free (struct key *key)”h]”j)�”}”(hŒ'void security_key_free(struct key *key)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjøëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjôëh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôëh²hh³jìh´Mubj{)�”}”(hŒsecurity_key_free”h]”j�)�”}”(hŒsecurity_key_free”h]”hŒsecurity_key_free”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjôëh²hh³jìh´Mubjœ)�”}”(hŒ(struct key *key)”h]”j¢)�”}”(hŒstruct key *key”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj5ìh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj1ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1ìubh)�”}”(hhh]”j�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjSìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jUìŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jìsbŒc.security_key_free”†”asbuh1hhj1ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1ìubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�ìh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj1ìubj�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjŽìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-ìubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjôëh²hh³jìh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjðëh²hh³jìh´Mubah}”(h]”jëëah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jìh´Mhjíëh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a kernel key LSM blob”h]”hŒFree a kernel key LSM blob”…”�”}”(hj¸ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjµìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjíëh²hh³jìh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÐìjæjÐìjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒl**Parameters** ``struct key *key`` key **Description** Notification of destruction; free security data.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÚìh]”hŒ Parameters”…”�”}”(hjÜìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M"hjÔìubj )�”}”(hhh]”j)�”}”(hŒ``struct key *key`` key ”h]”(j)�”}”(hŒ``struct key *key``”h]”j)�”}”(hjùìh]”hŒstruct key *key”…”�”}”(hjûìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjóìubj2)�”}”(hhh]”hÝ)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jíh´Mhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjóìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jíh´Mhjðìubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÔìubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj4íh]”hŒ Description”…”�”}”(hj6íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj2íubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M!hjÔìubhÝ)�”}”(hŒ0Notification of destruction; free security data.”h]”hŒ0Notification of destruction; free security data.”…”�”}”(hjJíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÔìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_key_permission (C function)”Œc.security_key_permission”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒfint security_key_permission (key_ref_t key_ref, const struct cred *cred, enum key_need_perm need_perm)”h]”j)�”}”(hŒeint security_key_permission(key_ref_t key_ref, const struct cred *cred, enum key_need_perm need_perm)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjyíh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjuíh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuíh²hh³j‡íh´M*ubj{)�”}”(hŒsecurity_key_permission”h]”j�)�”}”(hŒsecurity_key_permission”h]”hŒsecurity_key_permission”…”�”}”(hjšíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–íubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjuíh²hh³j‡íh´M*ubjœ)�”}”(hŒJ(key_ref_t key_ref, const struct cred *cred, enum key_need_perm need_perm)”h]”(j¢)�”}”(hŒkey_ref_t key_ref”h]”(h)�”}”(hhh]”j�)�”}”(hŒ key_ref_t”h]”hŒ key_ref_t”…”�”}”(hj¹íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j»íŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jœísbŒc.security_key_permission”†”asbuh1hhj²íubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj²íubj�)�”}”(hŒkey_ref”h]”hŒkey_ref”…”�”}”(hjçíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²íubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj®íubj¢)�”}”(hŒconst struct cred *cred”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjüíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj îh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjüíubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjüíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(îh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjüíubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hj9îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j;îŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÕíŒc.security_key_permission”†”asbuh1hhjüíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWîh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjüíubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjeîh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjüíubj�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjrîh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjüíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj®íubj¢)�”}”(hŒenum key_need_perm need_perm”h]”(j¨)�”}”(hj;@h]”hŒenum”…”�”}”(hj‹îh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜îh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡îubh)�”}”(hhh]”j�)�”}”(hŒ key_need_perm”h]”hŒ key_need_perm”…”�”}”(hj©îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j«îŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÕíŒc.security_key_permission”†”asbuh1hhj‡îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇîh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡îubj�)�”}”(hŒ need_perm”h]”hŒ need_perm”…”�”}”(hjÕîh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj®íubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjuíh²hh³j‡íh´M*ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjqíh²hh³j‡íh´M*ubah}”(h]”jlíah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‡íh´M*hjníh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Check if a kernel key operation is allowed”h]”hŒ*Check if a kernel key operation is allowed”…”�”}”(hjÿîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M*hjüîh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjníh²hh³j‡íh´M*ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjïjæjïjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXW**Parameters** ``key_ref_t key_ref`` key reference ``const struct cred *cred`` credentials of actor requesting access ``enum key_need_perm need_perm`` requested permissions **Description** See whether a specific operational right is granted to a process on a key. **Return** Return 0 if permission is granted, -ve error otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj!ïh]”hŒ Parameters”…”�”}”(hj#ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M.hjïubj )�”}”(hhh]”(j)�”}”(hŒ$``key_ref_t key_ref`` key reference ”h]”(j)�”}”(hŒ``key_ref_t key_ref``”h]”j)�”}”(hj@ïh]”hŒkey_ref_t key_ref”…”�”}”(hjBïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hj:ïubj2)�”}”(hhh]”hÝ)�”}”(hŒ key reference”h]”hŒ key reference”…”�”}”(hjYïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jUïh´M+hjVïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj:ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jUïh´M+hj7ïubj)�”}”(hŒC``const struct cred *cred`` credentials of actor requesting access ”h]”(j)�”}”(hŒ``const struct cred *cred``”h]”j)�”}”(hjyïh]”hŒconst struct cred *cred”…”�”}”(hj{ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M,hjsïubj2)�”}”(hhh]”hÝ)�”}”(hŒ&credentials of actor requesting access”h]”hŒ&credentials of actor requesting access”…”�”}”(hj’ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŽïh´M,hj�ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjsïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽïh´M,hj7ïubj)�”}”(hŒ7``enum key_need_perm need_perm`` requested permissions ”h]”(j)�”}”(hŒ ``enum key_need_perm need_perm``”h]”j)�”}”(hj²ïh]”hŒenum key_need_perm need_perm”…”�”}”(hj´ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M-hj¬ïubj2)�”}”(hhh]”hÝ)�”}”(hŒrequested permissions”h]”hŒrequested permissions”…”�”}”(hjËïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇïh´M-hjÈïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇïh´M-hj7ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjïubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjíïh]”hŒ Description”…”�”}”(hjïïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjëïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M/hjïubhÝ)�”}”(hŒJSee whether a specific operational right is granted to a process on a key.”h]”hŒJSee whether a specific operational right is granted to a process on a key.”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M.hjïubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjðh]”hŒReturn”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M0hjïubhÝ)�”}”(hŒ7Return 0 if permission is granted, -ve error otherwise.”h]”hŒ7Return 0 if permission is granted, -ve error otherwise.”…”�”}”(hj*ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M1hjïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_key_getsecurity (C function)”Œc.security_key_getsecurity”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=int security_key_getsecurity (struct key *key, char **buffer)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hjUðh²hh³jgðh´M:ubj{)�”}”(hŒsecurity_key_getsecurity”h]”j�)�”}”(hŒsecurity_key_getsecurity”h]”hŒsecurity_key_getsecurity”…”�”}”(hjzðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvðubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjUðh²hh³jgðh´M:ubjœ)�”}”(hŒ (struct key *key, char **buffer)”h]”(j¢)�”}”(hŒstruct key *key”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj–ðh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj’ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’ðubh)�”}”(hhh]”j�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hj´ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±ðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¶ðŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j|ðsbŒc.security_key_getsecurity”†”asbuh1hhj’ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’ðubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjâðh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj’ðubj�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjïðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’ðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽðubj¢)�”}”(hŒ char **buffer”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$ñh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjñubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj1ñh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjñubj�)�”}”(hŒbuffer”h]”hŒbuffer”…”�”}”(hj>ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjñubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽðubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjUðh²hh³jgðh´M:ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjQðh²hh³jgðh´M:ubah}”(h]”jLðah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jgðh´M:hjNðh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒGet the key's security label”h]”hŒGet the key’s security label”…”�”}”(hjhñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M:hjeñh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjNðh²hh³jgðh´M:ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj€ñjæj€ñjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX**Parameters** ``struct key *key`` key ``char **buffer`` security label buffer **Description** Get a textual representation of the security context attached to a key for the purposes of honouring KEYCTL_GETSECURITY. This function allocates the storage for the NUL-terminated string and the caller should free it. **Return** Returns the length of **buffer** (including terminating NUL) or -ve if an error occurs. May also return 0 (and a NULL buffer pointer) if there is no security label assigned to the key.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŠñh]”hŒ Parameters”…”�”}”(hjŒñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M>hj„ñubj )�”}”(hhh]”(j)�”}”(hŒ``struct key *key`` key ”h]”(j)�”}”(hŒ``struct key *key``”h]”j)�”}”(hj©ñh]”hŒstruct key *key”…”�”}”(hj«ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M;hj£ñubj2)�”}”(hhh]”hÝ)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjÂñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¾ñh´M;hj¿ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾ñh´M;hj ñubj)�”}”(hŒ(``char **buffer`` security label buffer ”h]”(j)�”}”(hŒ``char **buffer``”h]”j)�”}”(hjâñh]”hŒ char **buffer”…”�”}”(hjäñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M<hjÜñubj2)�”}”(hhh]”hÝ)�”}”(hŒsecurity label buffer”h]”hŒsecurity label buffer”…”�”}”(hjûñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷ñh´M<hjøñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷ñh´M<hj ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj„ñubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjòh]”hŒ Description”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M>hj„ñubhÝ)�”}”(hŒÚGet a textual representation of the security context attached to a key for the purposes of honouring KEYCTL_GETSECURITY. This function allocates the storage for the NUL-terminated string and the caller should free it.”h]”hŒÚGet a textual representation of the security context attached to a key for the purposes of honouring KEYCTL_GETSECURITY. This function allocates the storage for the NUL-terminated string and the caller should free it.”…”�”}”(hj3òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M=hj„ñubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjDòh]”hŒReturn”…”�”}”(hjFòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjBòubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MAhj„ñubhÝ)�”}”(hŒ¹Returns the length of **buffer** (including terminating NUL) or -ve if an error occurs. May also return 0 (and a NULL buffer pointer) if there is no security label assigned to the key.”h]”(hŒReturns the length of ”…”�”}”(hjZòh²hh³Nh´Nubjõ)�”}”(hŒ **buffer**”h]”hŒbuffer”…”�”}”(hjbòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjZòubhŒ™ (including terminating NUL) or -ve if an error occurs. May also return 0 (and a NULL buffer pointer) if there is no security label assigned to the key.”…”�”}”(hjZòh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MBhj„ñubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ/security_key_post_create_or_update (C function)”Œ$c.security_key_post_create_or_update”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ™void security_key_post_create_or_update (struct key *keyring, struct key *key, const void *payload, size_t payload_len, unsigned long flags, bool create)”h]”j)�”}”(hŒ˜void security_key_post_create_or_update(struct key *keyring, struct key *key, const void *payload, size_t payload_len, unsigned long flags, bool create)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj›òh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj—òh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MMubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—òh²hh³j©òh´MMubj{)�”}”(hŒ"security_key_post_create_or_update”h]”j�)�”}”(hŒ"security_key_post_create_or_update”h]”hŒ"security_key_post_create_or_update”…”�”}”(hj¼òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸òubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—òh²hh³j©òh´MMubjœ)�”}”(hŒq(struct key *keyring, struct key *key, const void *payload, size_t payload_len, unsigned long flags, bool create)”h]”(j¢)�”}”(hŒstruct key *keyring”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjØòh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÔòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔòubh)�”}”(hhh]”j�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjöòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóòubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jøòŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¾òsbŒ$c.security_key_post_create_or_update”†”asbuh1hhjÔòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔòubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$óh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔòubj�)�”}”(hŒkeyring”h]”hŒkeyring”…”�”}”(hj1óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐòubj¢)�”}”(hŒstruct key *key”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjJóh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjFóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFóubh)�”}”(hhh]”j�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hjhóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeóubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jjóŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jóŒ$c.security_key_post_create_or_update”†”asbuh1hhjFóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFóubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj”óh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjFóubj�)�”}”(hŒkey”h]”hŒkey”…”�”}”(hj¡óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐòubj¢)�”}”(hŒconst void *payload”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjºóh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¶óubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶óubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÕóh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶óubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶óubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjñóh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¶óubj�)�”}”(hŒpayload”h]”hŒpayload”…”�”}”(hjþóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐòubj¢)�”}”(hŒsize_t payload_len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jôŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jóŒ$c.security_key_post_create_or_update”†”asbuh1hhjôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôubj�)�”}”(hŒ payload_len”h]”hŒ payload_len”…”�”}”(hjFôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐòubj¢)�”}”(hŒunsigned long flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj_ôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj[ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[ôubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj{ôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj[ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[ôubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hj—ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐòubj¢)�”}”(hŒ bool create”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj°ôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¬ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬ôubj�)�”}”(hŒcreate”h]”hŒcreate”…”�”}”(hjËôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐòubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj—òh²hh³j©òh´MMubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj“òh²hh³j©òh´MMubah}”(h]”jŽòah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j©òh´MMhj�òh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Notification of key create or update”h]”hŒ$Notification of key create or update”…”�”}”(hjõôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MMhjòôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�òh²hh³j©òh´MMubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj õjæj õjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXŸ**Parameters** ``struct key *keyring`` keyring to which the key is linked to ``struct key *key`` created or updated key ``const void *payload`` data used to instantiate or update the key ``size_t payload_len`` length of payload ``unsigned long flags`` key flags ``bool create`` flag indicating whether the key was created or updated **Description** Notify the caller of a key creation or update.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjõh]”hŒ Parameters”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MQhjõubj )�”}”(hhh]”(j)�”}”(hŒ>``struct key *keyring`` keyring to which the key is linked to ”h]”(j)�”}”(hŒ``struct key *keyring``”h]”j)�”}”(hj6õh]”hŒstruct key *keyring”…”�”}”(hj8õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj4õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MNhj0õubj2)�”}”(hhh]”hÝ)�”}”(hŒ%keyring to which the key is linked to”h]”hŒ%keyring to which the key is linked to”…”�”}”(hjOõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jKõh´MNhjLõubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj0õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jKõh´MNhj-õubj)�”}”(hŒ+``struct key *key`` created or updated key ”h]”(j)�”}”(hŒ``struct key *key``”h]”j)�”}”(hjoõh]”hŒstruct key *key”…”�”}”(hjqõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjmõubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MOhjiõubj2)�”}”(hhh]”hÝ)�”}”(hŒcreated or updated key”h]”hŒcreated or updated key”…”�”}”(hjˆõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j„õh´MOhj…õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjiõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„õh´MOhj-õubj)�”}”(hŒC``const void *payload`` data used to instantiate or update the key ”h]”(j)�”}”(hŒ``const void *payload``”h]”j)�”}”(hj¨õh]”hŒconst void *payload”…”�”}”(hjªõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MPhj¢õubj2)�”}”(hhh]”hÝ)�”}”(hŒ*data used to instantiate or update the key”h]”hŒ*data used to instantiate or update the key”…”�”}”(hjÁõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j½õh´MPhj¾õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¢õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½õh´MPhj-õubj)�”}”(hŒ)``size_t payload_len`` length of payload ”h]”(j)�”}”(hŒ``size_t payload_len``”h]”j)�”}”(hjáõh]”hŒsize_t payload_len”…”�”}”(hjãõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßõubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MQhjÛõubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of payload”h]”hŒlength of payload”…”�”}”(hjúõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jöõh´MQhj÷õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÛõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jöõh´MQhj-õubj)�”}”(hŒ"``unsigned long flags`` key flags ”h]”(j)�”}”(hŒ``unsigned long flags``”h]”j)�”}”(hjöh]”hŒunsigned long flags”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MRhjöubj2)�”}”(hhh]”hÝ)�”}”(hŒ key flags”h]”hŒ key flags”…”�”}”(hj3öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j/öh´MRhj0öubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjöubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j/öh´MRhj-õubj)�”}”(hŒG``bool create`` flag indicating whether the key was created or updated ”h]”(j)�”}”(hŒ``bool create``”h]”j)�”}”(hjSöh]”hŒ bool create”…”�”}”(hjUöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQöubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MShjMöubj2)�”}”(hhh]”hÝ)�”}”(hŒ6flag indicating whether the key was created or updated”h]”hŒ6flag indicating whether the key was created or updated”…”�”}”(hjlöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jhöh´MShjiöubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjMöubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jhöh´MShj-õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjõubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŽöh]”hŒ Description”…”�”}”(hj�öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒöubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MUhjõubhÝ)�”}”(hŒ.Notify the caller of a key creation or update.”h]”hŒ.Notify the caller of a key creation or update.”…”�”}”(hj¤öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MThjõubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_audit_rule_init (C function)”Œc.security_audit_rule_init”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒZint security_audit_rule_init (u32 field, u32 op, char *rulestr, void **lsmrule, gfp_t gfp)”h]”j)�”}”(hŒYint security_audit_rule_init(u32 field, u32 op, char *rulestr, void **lsmrule, gfp_t gfp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÓöh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÏöh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâöh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÏöh²hh³jáöh´Mbubj{)�”}”(hŒsecurity_audit_rule_init”h]”j�)�”}”(hŒsecurity_audit_rule_init”h]”hŒsecurity_audit_rule_init”…”�”}”(hjôöh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjðöubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÏöh²hh³jáöh´Mbubjœ)�”}”(hŒ=(u32 field, u32 op, char *rulestr, void **lsmrule, gfp_t gfp)”h]”(j¢)�”}”(hŒ u32 field”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j÷Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jöösbŒc.security_audit_rule_init”†”asbuh1hhj ÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ÷ubj�)�”}”(hŒfield”h]”hŒfield”…”�”}”(hjA÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷ubj¢)�”}”(hŒu32 op”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj]÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_÷Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j/÷Œc.security_audit_rule_init”†”asbuh1hhjV÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjV÷ubj�)�”}”(hŒop”h]”hŒop”…”�”}”(hj‰÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjV÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷ubj¢)�”}”(hŒ char *rulestr”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¢÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjž÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž÷ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¾÷h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjž÷ubj�)�”}”(hŒrulestr”h]”hŒrulestr”…”�”}”(hjË÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjž÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷ubj¢)�”}”(hŒvoid **lsmrule”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjä÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjà÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjà÷ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjà÷ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj øh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjà÷ubj�)�”}”(hŒlsmrule”h]”hŒlsmrule”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjà÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷ubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj6øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3øubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j8øŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j/÷Œc.security_audit_rule_init”†”asbuh1hhj/øubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTøh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/øubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjbøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/øubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÏöh²hh³jáöh´Mbubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjËöh²hh³jáöh´Mbubah}”(h]”jÆöah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jáöh´MbhjÈöh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Allocate and init an LSM audit rule struct”h]”hŒ*Allocate and init an LSM audit rule struct”…”�”}”(hjŒøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mbhj‰øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÈöh²hh³jáöh´Mbubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¤øjæj¤øjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX{**Parameters** ``u32 field`` audit action ``u32 op`` rule operator ``char *rulestr`` rule context ``void **lsmrule`` receive buffer for audit rule struct ``gfp_t gfp`` GFP flag used for kmalloc **Description** Allocate and initialize an LSM audit rule structure. **Return** Return 0 if **lsmrule** has been successfully set, -EINVAL in case of an invalid rule.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj®øh]”hŒ Parameters”…”�”}”(hj°øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¬øubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mfhj¨øubj )�”}”(hhh]”(j)�”}”(hŒ``u32 field`` audit action ”h]”(j)�”}”(hŒ ``u32 field``”h]”j)�”}”(hjÍøh]”hŒ u32 field”…”�”}”(hjÏøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËøubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MchjÇøubj2)�”}”(hhh]”hÝ)�”}”(hŒ audit action”h]”hŒ audit action”…”�”}”(hjæøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jâøh´Mchjãøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÇøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâøh´MchjÄøubj)�”}”(hŒ``u32 op`` rule operator ”h]”(j)�”}”(hŒ ``u32 op``”h]”j)�”}”(hjùh]”hŒu32 op”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mdhjùubj2)�”}”(hhh]”hÝ)�”}”(hŒ rule operator”h]”hŒ rule operator”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jùh´Mdhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jùh´MdhjÄøubj)�”}”(hŒ``char *rulestr`` rule context ”h]”(j)�”}”(hŒ``char *rulestr``”h]”j)�”}”(hj?ùh]”hŒ char *rulestr”…”�”}”(hjAùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mehj9ùubj2)�”}”(hhh]”hÝ)�”}”(hŒ rule context”h]”hŒ rule context”…”�”}”(hjXùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jTùh´MehjUùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj9ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jTùh´MehjÄøubj)�”}”(hŒ8``void **lsmrule`` receive buffer for audit rule struct ”h]”(j)�”}”(hŒ``void **lsmrule``”h]”j)�”}”(hjxùh]”hŒvoid **lsmrule”…”�”}”(hjzùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjvùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mfhjrùubj2)�”}”(hhh]”hÝ)�”}”(hŒ$receive buffer for audit rule struct”h]”hŒ$receive buffer for audit rule struct”…”�”}”(hj‘ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�ùh´MfhjŽùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjrùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�ùh´MfhjÄøubj)�”}”(hŒ(``gfp_t gfp`` GFP flag used for kmalloc ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hj±ùh]”hŒ gfp_t gfp”…”�”}”(hj³ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mghj«ùubj2)�”}”(hhh]”hÝ)�”}”(hŒGFP flag used for kmalloc”h]”hŒGFP flag used for kmalloc”…”�”}”(hjÊùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÆùh´MghjÇùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj«ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÆùh´MghjÄøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¨øubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjìùh]”hŒ Description”…”�”}”(hjîùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjêùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mihj¨øubhÝ)�”}”(hŒ4Allocate and initialize an LSM audit rule structure.”h]”hŒ4Allocate and initialize an LSM audit rule structure.”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhhj¨øubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjúh]”hŒReturn”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mjhj¨øubhÝ)�”}”(hŒVReturn 0 if **lsmrule** has been successfully set, -EINVAL in case of an invalid rule.”h]”(hŒ Return 0 if ”…”�”}”(hj)úh²hh³Nh´Nubjõ)�”}”(hŒ **lsmrule**”h]”hŒlsmrule”…”�”}”(hj1úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)úubhŒ? has been successfully set, -EINVAL in case of an invalid rule.”…”�”}”(hj)úh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mkhj¨øubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_audit_rule_known (C function)”•Œc.security_audit_rule_known”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9int security_audit_rule_known (struct audit_krule *krule)”h]”j)�”}”(hŒ8int security_audit_rule_known(struct audit_krule *krule)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjjúh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjfúh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Muubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjfúh²hh³jxúh´Muubj{)�”}”(hŒsecurity_audit_rule_known”h]”j�)�”}”(hŒsecurity_audit_rule_known”h]”hŒsecurity_audit_rule_known”…”�”}”(hj‹úh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡úubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjfúh²hh³jxúh´Muubjœ)�”}”(hŒ(struct audit_krule *krule)”h]”j¢)�”}”(hŒstruct audit_krule *krule”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj§úh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj£úubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´úh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£úubh)�”}”(hhh]”j�)�”}”(hŒ audit_krule”h]”hŒ audit_krule”…”�”}”(hjÅúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂúubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÇúŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�úsbŒc.security_audit_rule_known”†”asbuh1hhj£úubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£úubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjóúh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj£úubj�)�”}”(hŒkrule”h]”hŒkrule”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŸúubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjfúh²hh³jxúh´Muubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjbúh²hh³jxúh´Muubah}”(h]”j]úah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jxúh´Muhj_úh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Check if an audit rule contains LSM fields”h]”hŒ*Check if an audit rule contains LSM fields”…”�”}”(hj*ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Muhj'ûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj_úh²hh³jxúh´Muubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjBûjæjBûjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÝ**Parameters** ``struct audit_krule *krule`` audit rule **Description** Specifies whether given **krule** contains any fields related to the current LSM. **Return** Returns 1 in case of relation found, 0 otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjLûh]”hŒ Parameters”…”�”}”(hjNûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MyhjFûubj )�”}”(hhh]”j)�”}”(hŒ)``struct audit_krule *krule`` audit rule ”h]”(j)�”}”(hŒ``struct audit_krule *krule``”h]”j)�”}”(hjkûh]”hŒstruct audit_krule *krule”…”�”}”(hjmûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiûubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mvhjeûubj2)�”}”(hhh]”hÝ)�”}”(hŒ audit rule”h]”hŒ audit rule”…”�”}”(hj„ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j€ûh´Mvhj�ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjeûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€ûh´Mvhjbûubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjFûubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¦ûh]”hŒ Description”…”�”}”(hj¨ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MxhjFûubhÝ)�”}”(hŒQSpecifies whether given **krule** contains any fields related to the current LSM.”h]”(hŒSpecifies whether given ”…”�”}”(hj¼ûh²hh³Nh´Nubjõ)�”}”(hŒ **krule**”h]”hŒkrule”…”�”}”(hjÄûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼ûubhŒ0 contains any fields related to the current LSM.”…”�”}”(hj¼ûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MwhjFûubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjßûh]”hŒReturn”…”�”}”(hjáûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MzhjFûubhÝ)�”}”(hŒ1Returns 1 in case of relation found, 0 otherwise.”h]”hŒ1Returns 1 in case of relation found, 0 otherwise.”…”�”}”(hjõûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M{hjFûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_audit_rule_free (C function)”Œc.security_audit_rule_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-void security_audit_rule_free (void *lsmrule)”h]”j)�”}”(hŒ,void security_audit_rule_free(void *lsmrule)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj$üh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj üh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3üh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj üh²hh³j2üh´Mƒubj{)�”}”(hŒsecurity_audit_rule_free”h]”j�)�”}”(hŒsecurity_audit_rule_free”h]”hŒsecurity_audit_rule_free”…”�”}”(hjEüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjAüubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj üh²hh³j2üh´Mƒubjœ)�”}”(hŒ(void *lsmrule)”h]”j¢)�”}”(hŒ void *lsmrule”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjaüh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj]üubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjoüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj]üubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj}üh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj]üubj�)�”}”(hŒlsmrule”h]”hŒlsmrule”…”�”}”(hjŠüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]üubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjYüubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj üh²hh³j2üh´Mƒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjüh²hh³j2üh´Mƒubah}”(h]”jüah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j2üh´Mƒhjüh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree an LSM audit rule struct”h]”hŒFree an LSM audit rule struct”…”�”}”(hj´üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mƒhj±üh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjüh²hh³j2üh´Mƒubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÌüjæjÌüjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒš**Parameters** ``void *lsmrule`` audit rule struct **Description** Deallocate the LSM audit rule structure previously allocated by audit_rule_init().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÖüh]”hŒ Parameters”…”�”}”(hjØüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔüubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‡hjÐüubj )�”}”(hhh]”j)�”}”(hŒ$``void *lsmrule`` audit rule struct ”h]”(j)�”}”(hŒ``void *lsmrule``”h]”j)�”}”(hjõüh]”hŒ void *lsmrule”…”�”}”(hj÷üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjóüubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M„hjïüubj2)�”}”(hhh]”hÝ)�”}”(hŒaudit rule struct”h]”hŒaudit rule struct”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ýh´M„hj ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjïüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ýh´M„hjìüubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÐüubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj0ýh]”hŒ Description”…”�”}”(hj2ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M†hjÐüubhÝ)�”}”(hŒRDeallocate the LSM audit rule structure previously allocated by audit_rule_init().”h]”hŒRDeallocate the LSM audit rule structure previously allocated by audit_rule_init().”…”�”}”(hjFýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M…hjÐüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_audit_rule_match (C function)”Œc.security_audit_rule_match”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒWint security_audit_rule_match (struct lsm_prop *prop, u32 field, u32 op, void *lsmrule)”h]”j)�”}”(hŒVint security_audit_rule_match(struct lsm_prop *prop, u32 field, u32 op, void *lsmrule)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjuýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjqýh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqýh²hh³jƒýh´M�ubj{)�”}”(hŒsecurity_audit_rule_match”h]”j�)�”}”(hŒsecurity_audit_rule_match”h]”hŒsecurity_audit_rule_match”…”�”}”(hj–ýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’ýubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjqýh²hh³jƒýh´M�ubjœ)�”}”(hŒ9(struct lsm_prop *prop, u32 field, u32 op, void *lsmrule)”h]”(j¢)�”}”(hŒstruct lsm_prop *prop”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj²ýh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ýubh)�”}”(hhh]”j�)�”}”(hŒlsm_prop”h]”hŒlsm_prop”…”�”}”(hjÐýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÒýŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j˜ýsbŒc.security_audit_rule_match”†”asbuh1hhj®ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ýubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjþýh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj®ýubj�)�”}”(hŒprop”h]”hŒprop”…”�”}”(hj þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªýubj¢)�”}”(hŒ u32 field”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hj'þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j)þŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jìýŒc.security_audit_rule_match”†”asbuh1hhj þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj þubj�)�”}”(hŒfield”h]”hŒfield”…”�”}”(hjSþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªýubj¢)�”}”(hŒu32 op”h]”(h)�”}”(hhh]”j�)�”}”(hŒu32”h]”hŒu32”…”�”}”(hjoþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jqþŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jìýŒc.security_audit_rule_match”†”asbuh1hhjhþubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjhþubj�)�”}”(hŒop”h]”hŒop”…”�”}”(hj›þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjhþubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªýubj¢)�”}”(hŒ void *lsmrule”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj´þh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj°þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°þubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÐþh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj°þubj�)�”}”(hŒlsmrule”h]”hŒlsmrule”…”�”}”(hjÝþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjªýubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjqýh²hh³jƒýh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjmýh²hh³jƒýh´M�ubah}”(h]”jhýah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jƒýh´M�hjjýh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Check if a label matches an audit rule”h]”hŒ&Check if a label matches an audit rule”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjjýh²hh³jƒýh´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÿjæjÿjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXd**Parameters** ``struct lsm_prop *prop`` security label ``u32 field`` LSM audit field ``u32 op`` matching operator ``void *lsmrule`` audit rule **Description** Determine if given **secid** matches a rule previously approved by security_audit_rule_known(). **Return** Returns 1 if secid matches the rule, 0 if it does not, -ERRNO on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj)ÿh]”hŒ Parameters”…”�”}”(hj+ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M“hj#ÿubj )�”}”(hhh]”(j)�”}”(hŒ)``struct lsm_prop *prop`` security label ”h]”(j)�”}”(hŒ``struct lsm_prop *prop``”h]”j)�”}”(hjHÿh]”hŒstruct lsm_prop *prop”…”�”}”(hjJÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M�hjBÿubj2)�”}”(hhh]”hÝ)�”}”(hŒsecurity label”h]”hŒsecurity label”…”�”}”(hjaÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j]ÿh´M�hj^ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjBÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]ÿh´M�hj?ÿubj)�”}”(hŒ``u32 field`` LSM audit field ”h]”(j)�”}”(hŒ ``u32 field``”h]”j)�”}”(hj�ÿh]”hŒ u32 field”…”�”}”(hjƒÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M‘hj{ÿubj2)�”}”(hhh]”hÝ)�”}”(hŒLSM audit field”h]”hŒLSM audit field”…”�”}”(hjšÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–ÿh´M‘hj—ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–ÿh´M‘hj?ÿubj)�”}”(hŒ``u32 op`` matching operator ”h]”(j)�”}”(hŒ ``u32 op``”h]”j)�”}”(hjºÿh]”hŒu32 op”…”�”}”(hj¼ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M’hj´ÿubj2)�”}”(hhh]”hÝ)�”}”(hŒmatching operator”h]”hŒmatching operator”…”�”}”(hjÓÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏÿh´M’hjÐÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏÿh´M’hj?ÿubj)�”}”(hŒ``void *lsmrule`` audit rule ”h]”(j)�”}”(hŒ``void *lsmrule``”h]”j)�”}”(hjóÿh]”hŒ void *lsmrule”…”�”}”(hjõÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M“hjíÿubj2)�”}”(hhh]”hÝ)�”}”(hŒ audit rule”h]”hŒ audit rule”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M“hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjíÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M“hj?ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj#ÿubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj.h]”hŒ Description”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M•hj#ÿubhÝ)�”}”(hŒ_Determine if given **secid** matches a rule previously approved by security_audit_rule_known().”h]”(hŒDetermine if given ”…”�”}”(hjDh²hh³Nh´Nubjõ)�”}”(hŒ **secid**”h]”hŒsecid”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjDubhŒC matches a rule previously approved by security_audit_rule_known().”…”�”}”(hjDh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M”hj#ÿubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjgh]”hŒReturn”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M—hj#ÿubhÝ)�”}”(hŒIReturns 1 if secid matches the rule, 0 if it does not, -ERRNO on failure.”h]”hŒIReturns 1 if secid matches the rule, 0 if it does not, -ERRNO on failure.”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M˜hj#ÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_bpf (C function)”Œc.security_bpf”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPint security_bpf (int cmd, union bpf_attr *attr, unsigned int size, bool kernel)”h]”j)�”}”(hŒOint security_bpf(int cmd, union bpf_attr *attr, unsigned int size, bool kernel)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¨h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¨h²hh³jºh´M¤ubj{)�”}”(hŒ security_bpf”h]”j�)�”}”(hŒ security_bpf”h]”hŒ security_bpf”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¨h²hh³jºh´M¤ubjœ)�”}”(hŒ?(int cmd, union bpf_attr *attr, unsigned int size, bool kernel)”h]”(j¢)�”}”(hŒint cmd”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjåubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjåubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjáubj¢)�”}”(hŒunion bpf_attr *attr”h]”(j¨)�”}”(hŒunion”h]”hŒunion”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒbpf_attr”h]”hŒbpf_attr”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j?Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÏsbŒc.security_bpf”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒattr”h]”hŒattr”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjáubj¢)�”}”(hŒunsigned int size”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubj�)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjáubj¢)�”}”(hŒ bool kernel”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞubj�)�”}”(hŒkernel”h]”hŒkernel”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjáubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¨h²hh³jºh´M¤ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¤h²hh³jºh´M¤ubah}”(h]”jŸah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jºh´M¤hj¡h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Check if the bpf syscall operation is allowed”h]”hŒ-Check if the bpf syscall operation is allowed”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¤hj$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¡h²hh³jºh´M¤ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj?jæj?jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX£**Parameters** ``int cmd`` command ``union bpf_attr *attr`` bpf attribute ``unsigned int size`` size ``bool kernel`` whether or not call originated from kernel **Description** Do a initial check for all bpf syscalls after the attribute is copied into the kernel. The actual security module can implement their own rules to check the specific cmd they need. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjIh]”hŒ Parameters”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¨hjCubj )�”}”(hhh]”(j)�”}”(hŒ``int cmd`` command ”h]”(j)�”}”(hŒ ``int cmd``”h]”j)�”}”(hjhh]”hŒint cmd”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¥hjbubj2)�”}”(hhh]”hÝ)�”}”(hŒcommand”h]”hŒcommand”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}h´M¥hj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjbubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}h´M¥hj_ubj)�”}”(hŒ'``union bpf_attr *attr`` bpf attribute ”h]”(j)�”}”(hŒ``union bpf_attr *attr``”h]”j)�”}”(hj¡h]”hŒunion bpf_attr *attr”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¦hj›ubj2)�”}”(hhh]”hÝ)�”}”(hŒ bpf attribute”h]”hŒ bpf attribute”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶h´M¦hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶h´M¦hj_ubj)�”}”(hŒ``unsigned int size`` size ”h]”(j)�”}”(hŒ``unsigned int size``”h]”j)�”}”(hjÚh]”hŒunsigned int size”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M§hjÔubj2)�”}”(hhh]”hÝ)�”}”(hŒsize”h]”hŒsize”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïh´M§hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïh´M§hj_ubj)�”}”(hŒ;``bool kernel`` whether or not call originated from kernel ”h]”(j)�”}”(hŒ``bool kernel``”h]”j)�”}”(hjh]”hŒ bool kernel”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¨hj ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*whether or not call originated from kernel”h]”hŒ*whether or not call originated from kernel”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(h´M¨hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(h´M¨hj_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjCubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjNh]”hŒ Description”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MªhjCubhÝ)�”}”(hŒ´Do a initial check for all bpf syscalls after the attribute is copied into the kernel. The actual security module can implement their own rules to check the specific cmd they need.”h]”hŒ´Do a initial check for all bpf syscalls after the attribute is copied into the kernel. The actual security module can implement their own rules to check the specific cmd they need.”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M©hjCubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjuh]”hŒReturn”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M­hjCubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M®hjCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_bpf_map (C function)”Œc.security_bpf_map”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9int security_bpf_map (struct bpf_map *map, fmode_t fmode)”h]”j)�”}”(hŒ8int security_bpf_map(struct bpf_map *map, fmode_t fmode)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶h²hh³jÈh´M¶ubj{)�”}”(hŒsecurity_bpf_map”h]”j�)�”}”(hŒsecurity_bpf_map”h]”hŒsecurity_bpf_map”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¶h²hh³jÈh´M¶ubjœ)�”}”(hŒ$(struct bpf_map *map, fmode_t fmode)”h]”(j¢)�”}”(hŒstruct bpf_map *map”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóubh)�”}”(hhh]”j�)�”}”(hŒbpf_map”h]”hŒbpf_map”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÝsbŒc.security_bpf_map”†”asbuh1hhjóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjóubj�)�”}”(hŒmap”h]”hŒmap”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjïubj¢)�”}”(hŒ fmode_t fmode”h]”(h)�”}”(hhh]”j�)�”}”(hŒfmode_t”h]”hŒfmode_t”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jnŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j1Œc.security_bpf_map”†”asbuh1hhjeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeubj�)�”}”(hŒfmode”h]”hŒfmode”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjïubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¶h²hh³jÈh´M¶ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj²h²hh³jÈh´M¶ubah}”(h]”j­ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÈh´M¶hj¯h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Check if access to a bpf map is allowed”h]”hŒ'Check if access to a bpf map is allowed”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¶hj¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¯h²hh³jÈh´M¶ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÚjæjÚjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒà**Parameters** ``struct bpf_map *map`` bpf map ``fmode_t fmode`` mode **Description** Do a check when the kernel generates and returns a file descriptor for eBPF maps. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjäh]”hŒ Parameters”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MºhjÞubj )�”}”(hhh]”(j)�”}”(hŒ ``struct bpf_map *map`` bpf map ”h]”(j)�”}”(hŒ``struct bpf_map *map``”h]”j)�”}”(hjh]”hŒstruct bpf_map *map”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M·hjýubj2)�”}”(hhh]”hÝ)�”}”(hŒbpf map”h]”hŒbpf map”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M·hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M·hjúubj)�”}”(hŒ``fmode_t fmode`` mode ”h]”(j)�”}”(hŒ``fmode_t fmode``”h]”j)�”}”(hj<h]”hŒ fmode_t fmode”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¸hj6ubj2)�”}”(hhh]”hÝ)�”}”(hŒmode”h]”hŒmode”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQh´M¸hjRubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQh´M¸hjúubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÞubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjwh]”hŒ Description”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MºhjÞubhÝ)�”}”(hŒQDo a check when the kernel generates and returns a file descriptor for eBPF maps.”h]”hŒQDo a check when the kernel generates and returns a file descriptor for eBPF maps.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¹hjÞubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjžh]”hŒReturn”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M¼hjÞubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M½hjÞubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_bpf_prog (C function)”Œc.security_bpf_prog”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-int security_bpf_prog (struct bpf_prog *prog)”h]”j)�”}”(hŒ,int security_bpf_prog(struct bpf_prog *prog)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjßh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÅubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjßh²hh³jñh´MÅubj{)�”}”(hŒsecurity_bpf_prog”h]”j�)�”}”(hŒsecurity_bpf_prog”h]”hŒsecurity_bpf_prog”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjßh²hh³jñh´MÅubjœ)�”}”(hŒ(struct bpf_prog *prog)”h]”j¢)�”}”(hŒstruct bpf_prog *prog”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒbpf_prog”h]”hŒbpf_prog”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j@Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jsbŒc.security_bpf_prog”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒprog”h]”hŒprog”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjßh²hh³jñh´MÅubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÛh²hh³jñh´MÅubah}”(h]”jÖah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jñh´MÅhjØh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+Check if access to a bpf program is allowed”h]”hŒ+Check if access to a bpf program is allowed”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÅhj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjØh²hh³jñh´MÅubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj»jæj»jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÐ**Parameters** ``struct bpf_prog *prog`` bpf program **Description** Do a check when the kernel generates and returns a file descriptor for eBPF programs. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÅh]”hŒ Parameters”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÉhj¿ubj )�”}”(hhh]”j)�”}”(hŒ&``struct bpf_prog *prog`` bpf program ”h]”(j)�”}”(hŒ``struct bpf_prog *prog``”h]”j)�”}”(hjäh]”hŒstruct bpf_prog *prog”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÆhjÞubj2)�”}”(hhh]”hÝ)�”}”(hŒ bpf program”h]”hŒ bpf program”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jùh´MÆhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jùh´MÆhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÈhj¿ubhÝ)�”}”(hŒUDo a check when the kernel generates and returns a file descriptor for eBPF programs.”h]”hŒUDo a check when the kernel generates and returns a file descriptor for eBPF programs.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÇhj¿ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjFh]”hŒReturn”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÊhj¿ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MËhj¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$security_bpf_map_create (C function)”Œc.security_bpf_map_create”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒmint security_bpf_map_create (struct bpf_map *map, union bpf_attr *attr, struct bpf_token *token, bool kernel)”h]”j)�”}”(hŒlint security_bpf_map_create(struct bpf_map *map, union bpf_attr *attr, struct bpf_token *token, bool kernel)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‡h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡h²hh³j™h´MÓubj{)�”}”(hŒsecurity_bpf_map_create”h]”j�)�”}”(hŒsecurity_bpf_map_create”h]”hŒsecurity_bpf_map_create”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‡h²hh³j™h´MÓubjœ)�”}”(hŒQ(struct bpf_map *map, union bpf_attr *attr, struct bpf_token *token, bool kernel)”h]”(j¢)�”}”(hŒstruct bpf_map *map”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄubh)�”}”(hhh]”j�)�”}”(hŒbpf_map”h]”hŒbpf_map”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jèŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j®sbŒc.security_bpf_map_create”†”asbuh1hhjÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÄubj�)�”}”(hŒmap”h]”hŒmap”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÀubj¢)�”}”(hŒunion bpf_attr *attr”h]”(j¨)�”}”(hj h]”hŒunion”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6ubh)�”}”(hhh]”j�)�”}”(hŒbpf_attr”h]”hŒbpf_attr”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒc.security_bpf_map_create”†”asbuh1hhj6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj6ubj�)�”}”(hŒattr”h]”hŒattr”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÀubj¢)�”}”(hŒstruct bpf_token *token”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦ubh)�”}”(hhh]”j�)�”}”(hŒ bpf_token”h]”hŒ bpf_token”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÊŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒc.security_bpf_map_create”†”asbuh1hhj¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¦ubj�)�”}”(hŒtoken”h]”hŒtoken”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÀubj¢)�”}”(hŒ bool kernel”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj' h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj�)�”}”(hŒkernel”h]”hŒkernel”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÀubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‡h²hh³j™h´MÓubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjƒh²hh³j™h´MÓubah}”(h]”j~ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j™h´MÓhj€h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Check if BPF map creation is allowed”h]”hŒ$Check if BPF map creation is allowed”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÓhj\ h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj€h²hh³j™h´MÓubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjw jæjw jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXÈ**Parameters** ``struct bpf_map *map`` BPF map object ``union bpf_attr *attr`` BPF syscall attributes used to create BPF map ``struct bpf_token *token`` BPF token used to grant user access ``bool kernel`` whether or not call originated from kernel **Description** Do a check when the kernel creates a new BPF map. This is also the point where LSM blob is allocated for LSMs that need them. **Return** Returns 0 on success, error on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj� h]”hŒ Parameters”…”�”}”(hjƒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M×hj{ ubj )�”}”(hhh]”(j)�”}”(hŒ'``struct bpf_map *map`` BPF map object ”h]”(j)�”}”(hŒ``struct bpf_map *map``”h]”j)�”}”(hj  h]”hŒstruct bpf_map *map”…”�”}”(hj¢ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjž ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÔhjš ubj2)�”}”(hhh]”hÝ)�”}”(hŒBPF map object”h]”hŒBPF map object”…”�”}”(hj¹ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµ h´MÔhj¶ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjš ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµ h´MÔhj— ubj)�”}”(hŒG``union bpf_attr *attr`` BPF syscall attributes used to create BPF map ”h]”(j)�”}”(hŒ``union bpf_attr *attr``”h]”j)�”}”(hjÙ h]”hŒunion bpf_attr *attr”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj× ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÕhjÓ ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-BPF syscall attributes used to create BPF map”h]”hŒ-BPF syscall attributes used to create BPF map”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jî h´MÕhjï ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jî h´MÕhj— ubj)�”}”(hŒ@``struct bpf_token *token`` BPF token used to grant user access ”h]”(j)�”}”(hŒ``struct bpf_token *token``”h]”j)�”}”(hj h]”hŒstruct bpf_token *token”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÖhj ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#BPF token used to grant user access”h]”hŒ#BPF token used to grant user access”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j' h´MÖhj( ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j' h´MÖhj— ubj)�”}”(hŒ;``bool kernel`` whether or not call originated from kernel ”h]”(j)�”}”(hŒ``bool kernel``”h]”j)�”}”(hjK h]”hŒ bool kernel”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjI ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M×hjE ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*whether or not call originated from kernel”h]”hŒ*whether or not call originated from kernel”…”�”}”(hjd h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j` h´M×hja ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjE ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j` h´M×hj— ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj{ ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj† h]”hŒ Description”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj„ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÙhj{ ubhÝ)�”}”(hŒ}Do a check when the kernel creates a new BPF map. This is also the point where LSM blob is allocated for LSMs that need them.”h]”hŒ}Do a check when the kernel creates a new BPF map. This is also the point where LSM blob is allocated for LSMs that need them.”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MØhj{ ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj­ h]”hŒReturn”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj« ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÛhj{ ubhÝ)�”}”(hŒ'Returns 0 on success, error on failure.”h]”hŒ'Returns 0 on success, error on failure.”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÜhj{ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_bpf_prog_load (C function)”Œc.security_bpf_prog_load”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒnint security_bpf_prog_load (struct bpf_prog *prog, union bpf_attr *attr, struct bpf_token *token, bool kernel)”h]”j)�”}”(hŒmint security_bpf_prog_load(struct bpf_prog *prog, union bpf_attr *attr, struct bpf_token *token, bool kernel)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjî h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mîubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjî h²hh³j h´Mîubj{)�”}”(hŒsecurity_bpf_prog_load”h]”j�)�”}”(hŒsecurity_bpf_prog_load”h]”hŒsecurity_bpf_prog_load”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjî h²hh³j h´Mîubjœ)�”}”(hŒS(struct bpf_prog *prog, union bpf_attr *attr, struct bpf_token *token, bool kernel)”h]”(j¢)�”}”(hŒstruct bpf_prog *prog”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj+ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj< h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+ ubh)�”}”(hhh]”j�)�”}”(hŒbpf_prog”h]”hŒbpf_prog”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jO Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j sbŒc.security_bpf_prog_load”†”asbuh1hhj+ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj+ ubj�)�”}”(hŒprog”h]”hŒprog”…”�”}”(hjˆ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj' ubj¢)�”}”(hŒunion bpf_attr *attr”h]”(j¨)�”}”(hj h]”hŒunion”…”�”}”(hj¡ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj� ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj� ubh)�”}”(hhh]”j�)�”}”(hŒbpf_attr”h]”hŒbpf_attr”…”�”}”(hj¿ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÁ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”ji Œc.security_bpf_prog_load”†”asbuh1hhj� ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj� ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj� ubj�)�”}”(hŒattr”h]”hŒattr”…”�”}”(hjø h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj� ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj' ubj¢)�”}”(hŒstruct bpf_token *token”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubh)�”}”(hhh]”j�)�”}”(hŒ bpf_token”h]”hŒ bpf_token”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj, ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j1 Œmodname”NŒ classname”Nj] j` )�”}”jc ]”ji Œc.security_bpf_prog_load”†”asbuh1hhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj[ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ubj�)�”}”(hŒtoken”h]”hŒtoken”…”�”}”(hjh h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj' ubj¢)�”}”(hŒ bool kernel”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj} ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj} ubj�)�”}”(hŒkernel”h]”hŒkernel”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj} ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj' ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjî h²hh³j h´Mîubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjê h²hh³j h´Mîubah}”(h]”jå ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j h´Mîhjç h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Check if loading of BPF program is allowed”h]”hŒ*Check if loading of BPF program is allowed”…”�”}”(hjÆ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mîhjà h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjç h²hh³j h´Mîubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÞ jæjÞ jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX/**Parameters** ``struct bpf_prog *prog`` BPF program object ``union bpf_attr *attr`` BPF syscall attributes used to create BPF program ``struct bpf_token *token`` BPF token used to grant user access to BPF subsystem ``bool kernel`` whether or not call originated from kernel **Description** Perform an access control check when the kernel loads a BPF program and allocates associated BPF program object. This hook is also responsible for allocating any required LSM state for the BPF program. **Return** Returns 0 on success, error on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjè h]”hŒ Parameters”…”�”}”(hjê h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mòhjâ ubj )�”}”(hhh]”(j)�”}”(hŒ-``struct bpf_prog *prog`` BPF program object ”h]”(j)�”}”(hŒ``struct bpf_prog *prog``”h]”j)�”}”(hj h]”hŒstruct bpf_prog *prog”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mïhj ubj2)�”}”(hhh]”hÝ)�”}”(hŒBPF program object”h]”hŒBPF program object”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´Mïhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´Mïhjþ ubj)�”}”(hŒK``union bpf_attr *attr`` BPF syscall attributes used to create BPF program ”h]”(j)�”}”(hŒ``union bpf_attr *attr``”h]”j)�”}”(hj@ h]”hŒunion bpf_attr *attr”…”�”}”(hjB h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mðhj: ubj2)�”}”(hhh]”hÝ)�”}”(hŒ1BPF syscall attributes used to create BPF program”h]”hŒ1BPF syscall attributes used to create BPF program”…”�”}”(hjY h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jU h´MðhjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj: ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jU h´Mðhjþ ubj)�”}”(hŒQ``struct bpf_token *token`` BPF token used to grant user access to BPF subsystem ”h]”(j)�”}”(hŒ``struct bpf_token *token``”h]”j)�”}”(hjy h]”hŒstruct bpf_token *token”…”�”}”(hj{ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjw ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mñhjs ubj2)�”}”(hhh]”hÝ)�”}”(hŒ4BPF token used to grant user access to BPF subsystem”h]”hŒ4BPF token used to grant user access to BPF subsystem”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŽ h´Mñhj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjs ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽ h´Mñhjþ ubj)�”}”(hŒ;``bool kernel`` whether or not call originated from kernel ”h]”(j)�”}”(hŒ``bool kernel``”h]”j)�”}”(hj² h]”hŒ bool kernel”…”�”}”(hj´ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj° ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mòhj¬ ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*whether or not call originated from kernel”h]”hŒ*whether or not call originated from kernel”…”�”}”(hjË h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇ h´MòhjÈ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇ h´Mòhjþ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjâ ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjí h]”hŒ Description”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Môhjâ ubhÝ)�”}”(hŒÉPerform an access control check when the kernel loads a BPF program and allocates associated BPF program object. This hook is also responsible for allocating any required LSM state for the BPF program.”h]”hŒÉPerform an access control check when the kernel loads a BPF program and allocates associated BPF program object. This hook is also responsible for allocating any required LSM state for the BPF program.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Móhjâ ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M÷hjâ ubhÝ)�”}”(hŒ'Returns 0 on success, error on failure.”h]”hŒ'Returns 0 on success, error on failure.”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Møhjâ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_bpf_token_create (C function)”Œc.security_bpf_token_create”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒfint security_bpf_token_create (struct bpf_token *token, union bpf_attr *attr, const struct path *path)”h]”j)�”}”(hŒeint security_bpf_token_create(struct bpf_token *token, union bpf_attr *attr, const struct path *path)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjUh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUh²hh³jgh´M ubj{)�”}”(hŒsecurity_bpf_token_create”h]”j�)�”}”(hŒsecurity_bpf_token_create”h]”hŒsecurity_bpf_token_create”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjUh²hh³jgh´M ubjœ)�”}”(hŒH(struct bpf_token *token, union bpf_attr *attr, const struct path *path)”h]”(j¢)�”}”(hŒstruct bpf_token *token”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’ubh)�”}”(hhh]”j�)�”}”(hŒ bpf_token”h]”hŒ bpf_token”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¶Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j|sbŒc.security_bpf_token_create”†”asbuh1hhj’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj’ubj�)�”}”(hŒtoken”h]”hŒtoken”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽubj¢)�”}”(hŒunion bpf_attr *attr”h]”(j¨)�”}”(hj h]”hŒunion”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒbpf_attr”h]”hŒbpf_attr”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j(Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÐŒc.security_bpf_token_create”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒattr”h]”hŒattr”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽubj¢)�”}”(hŒconst struct path *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjtubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjtubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjtubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjtubh)�”}”(hhh]”j�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j³Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÐŒc.security_bpf_token_create”†”asbuh1hhjtubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjtubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjtubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjtubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjUh²hh³jgh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjQh²hh³jgh´M ubah}”(h]”jLah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jgh´M hjNh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Check if creating of BPF token is allowed”h]”hŒ)Check if creating of BPF token is allowed”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjNh²hh³jgh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj,jæj,jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXÊ**Parameters** ``struct bpf_token *token`` BPF token object ``union bpf_attr *attr`` BPF syscall attributes used to create BPF token ``const struct path *path`` path pointing to BPF FS mount point from which BPF token is created **Description** Do a check when the kernel instantiates a new BPF token object from BPF FS instance. This is also the point where LSM blob can be allocated for LSMs. **Return** Returns 0 on success, error on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj6h]”hŒ Parameters”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj0ubj )�”}”(hhh]”(j)�”}”(hŒ-``struct bpf_token *token`` BPF token object ”h]”(j)�”}”(hŒ``struct bpf_token *token``”h]”j)�”}”(hjUh]”hŒstruct bpf_token *token”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjOubj2)�”}”(hhh]”hÝ)�”}”(hŒBPF token object”h]”hŒBPF token object”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jjh´M hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jjh´M hjLubj)�”}”(hŒI``union bpf_attr *attr`` BPF syscall attributes used to create BPF token ”h]”(j)�”}”(hŒ``union bpf_attr *attr``”h]”j)�”}”(hjŽh]”hŒunion bpf_attr *attr”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjˆubj2)�”}”(hhh]”hÝ)�”}”(hŒ/BPF syscall attributes used to create BPF token”h]”hŒ/BPF syscall attributes used to create BPF token”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j£h´M hj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j£h´M hjLubj)�”}”(hŒ```const struct path *path`` path pointing to BPF FS mount point from which BPF token is created ”h]”(j)�”}”(hŒ``const struct path *path``”h]”j)�”}”(hjÇh]”hŒconst struct path *path”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÁubj2)�”}”(hhh]”hÝ)�”}”(hŒCpath pointing to BPF FS mount point from which BPF token is created”h]”hŒCpath pointing to BPF FS mount point from which BPF token is created”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h •]”h"]”h$]”h&]”uh1hÜh³jÜh´M hjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÜh´M hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj0ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj0ubhÝ)�”}”(hŒ•Do a check when the kernel instantiates a new BPF token object from BPF FS instance. This is also the point where LSM blob can be allocated for LSMs.”h]”hŒ•Do a check when the kernel instantiates a new BPF token object from BPF FS instance. This is also the point where LSM blob can be allocated for LSMs.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj0ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj)h]”hŒReturn”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj0ubhÝ)�”}”(hŒ'Returns 0 on success, error on failure.”h]”hŒ'Returns 0 on success, error on failure.”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_bpf_token_cmd (C function)”Œc.security_bpf_token_cmd”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLint security_bpf_token_cmd (const struct bpf_token *token, enum bpf_cmd cmd)”h]”j)�”}”(hŒKint security_bpf_token_cmd(const struct bpf_token *token, enum bpf_cmd cmd)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjh²hh³j|h´M$ubj{)�”}”(hŒsecurity_bpf_token_cmd”h]”j�)�”}”(hŒsecurity_bpf_token_cmd”h]”hŒsecurity_bpf_token_cmd”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjjh²hh³j|h´M$ubjœ)�”}”(hŒ1(const struct bpf_token *token, enum bpf_cmd cmd)”h]”(j¢)�”}”(hŒconst struct bpf_token *token”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubh)�”}”(hhh]”j�)�”}”(hŒ bpf_token”h]”hŒ bpf_token”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jæŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‘sbŒc.security_bpf_token_cmd”†”asbuh1hhj§ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj§ubj�)�”}”(hŒtoken”h]”hŒtoken”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£ubj¢)�”}”(hŒenum bpf_cmd cmd”h]”(j¨)�”}”(hj;@h]”hŒenum”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4ubh)�”}”(hhh]”j�)�”}”(hŒbpf_cmd”h]”hŒbpf_cmd”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jXŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒc.security_bpf_token_cmd”†”asbuh1hhj4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4ubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjjh²hh³j|h´M$ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjfh²hh³j|h´M$ubah}”(h]”jaah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j|h´M$hjch²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒGCheck if BPF token is allowed to delegate requested BPF syscall command”h]”hŒGCheck if BPF token is allowed to delegate requested BPF syscall command”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M$hj©h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjch²hh³j|h´M$ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÄjæjÄjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXV**Parameters** ``const struct bpf_token *token`` BPF token object ``enum bpf_cmd cmd`` BPF syscall command requested to be delegated by BPF token **Description** Do a check when the kernel decides whether provided BPF token should allow delegation of requested BPF syscall command. **Return** Returns 0 on success, error on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÎh]”hŒ Parameters”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M(hjÈubj )�”}”(hhh]”(j)�”}”(hŒ3``const struct bpf_token *token`` BPF token object ”h]”(j)�”}”(hŒ!``const struct bpf_token *token``”h]”j)�”}”(hjíh]”hŒconst struct bpf_token *token”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M&hjçubj2)�”}”(hhh]”hÝ)�”}”(hŒBPF token object”h]”hŒBPF token object”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M&hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M&hjäubj)�”}”(hŒP``enum bpf_cmd cmd`` BPF syscall command requested to be delegated by BPF token ”h]”(j)�”}”(hŒ``enum bpf_cmd cmd``”h]”j)�”}”(hj&h]”hŒenum bpf_cmd cmd”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M'hj ubj2)�”}”(hhh]”hÝ)�”}”(hŒ:BPF syscall command requested to be delegated by BPF token”h]”hŒ:BPF syscall command requested to be delegated by BPF token”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;h´M'hj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;h´M'hjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÈubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjah]”hŒ Description”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M)hjÈubhÝ)�”}”(hŒwDo a check when the kernel decides whether provided BPF token should allow delegation of requested BPF syscall command.”h]”hŒwDo a check when the kernel decides whether provided BPF token should allow delegation of requested BPF syscall command.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M(hjÈubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjˆh]”hŒReturn”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hjÈubhÝ)�”}”(hŒ'Returns 0 on success, error on failure.”h]”hŒ'Returns 0 on success, error on failure.”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M,hjÈubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'security_bpf_token_capable (C function)”Œc.security_bpf_token_capable”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGint security_bpf_token_capable (const struct bpf_token *token, int cap)”h]”j)�”}”(hŒFint security_bpf_token_capable(const struct bpf_token *token, int cap)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÉh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉh²hh³jÛh´M4ubj{)�”}”(hŒsecurity_bpf_token_capable”h]”j�)�”}”(hŒsecurity_bpf_token_capable”h]”hŒsecurity_bpf_token_capable”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÉh²hh³jÛh´M4ubjœ)�”}”(hŒ((const struct bpf_token *token, int cap)”h]”(j¢)�”}”(hŒconst struct bpf_token *token”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒ bpf_token”h]”hŒ bpf_token”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jEŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jðsbŒc.security_bpf_token_capable”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒtoken”h]”hŒtoken”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒint cap”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“ubj�)�”}”(hŒcap”h]”hŒcap”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÉh²hh³jÛh´M4ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÅh²hh³jÛh´M4ubah}”(h]”jÀah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÛh´M4hjÂh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒJCheck if BPF token is allowed to delegate requested BPF-related capability”h]”hŒJCheck if BPF token is allowed to delegate requested BPF-related capability”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4hjÚh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÂh²hh³jÛh´M4ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjõjæjõjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXK**Parameters** ``const struct bpf_token *token`` BPF token object ``int cap`` capabilities requested to be delegated by BPF token **Description** Do a check when the kernel decides whether provided BPF token should allow delegation of requested BPF-related capabilities. **Return** Returns 0 on success, error on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÿh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8hjùubj )�”}”(hhh]”(j)�”}”(hŒ3``const struct bpf_token *token`` BPF token object ”h]”(j)�”}”(hŒ!``const struct bpf_token *token``”h]”j)�”}”(hjh]”hŒconst struct bpf_token *token”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M6hjubj2)�”}”(hhh]”hÝ)�”}”(hŒBPF token object”h]”hŒBPF token object”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3h´M6hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3h´M6hjubj)�”}”(hŒ@``int cap`` capabilities requested to be delegated by BPF token ”h]”(j)�”}”(hŒ ``int cap``”h]”j)�”}”(hjWh]”hŒint cap”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M7hjQubj2)�”}”(hhh]”hÝ)�”}”(hŒ3capabilities requested to be delegated by BPF token”h]”hŒ3capabilities requested to be delegated by BPF token”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlh´M7hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlh´M7hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjùubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj’h]”hŒ Description”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M9hjùubhÝ)�”}”(hŒ|Do a check when the kernel decides whether provided BPF token should allow delegation of requested BPF-related capabilities.”h]”hŒ|Do a check when the kernel decides whether provided BPF token should allow delegation of requested BPF-related capabilities.”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8hjùubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¹h]”hŒReturn”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M;hjùubhÝ)�”}”(hŒ'Returns 0 on success, error on failure.”h]”hŒ'Returns 0 on success, error on failure.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M<hjùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_bpf_map_free (C function)”Œc.security_bpf_map_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ0void security_bpf_map_free (struct bpf_map *map)”h]”j)�”}”(hŒ/void security_bpf_map_free(struct bpf_map *map)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjúh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúh²hh³j h´MDubj{)�”}”(hŒsecurity_bpf_map_free”h]”j�)�”}”(hŒsecurity_bpf_map_free”h]”hŒsecurity_bpf_map_free”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjúh²hh³j h´MDubjœ)�”}”(hŒ(struct bpf_map *map)”h]”j¢)�”}”(hŒstruct bpf_map *map”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7ubh)�”}”(hhh]”j�)�”}”(hŒbpf_map”h]”hŒbpf_map”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j[Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j!sbŒc.security_bpf_map_free”†”asbuh1hhj7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj7ubj�)�”}”(hŒmap”h]”hŒmap”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj3ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjúh²hh³j h´MDubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjöh²hh³j h´MDubah}”(h]”jñah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j h´MDhjóh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a bpf map's LSM blob”h]”hŒFree a bpf map’s LSM blob”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MDhj»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjóh²hh³j h´MDubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÖjæjÖjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ|**Parameters** ``struct bpf_map *map`` bpf map **Description** Clean up the security information stored inside bpf map.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjàh]”hŒ Parameters”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MHhjÚubj )�”}”(hhh]”j)�”}”(hŒ ``struct bpf_map *map`` bpf map ”h]”(j)�”}”(hŒ``struct bpf_map *map``”h]”j)�”}”(hjÿh]”hŒstruct bpf_map *map”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MEhjùubj2)�”}”(hhh]”hÝ)�”}”(hŒbpf map”h]”hŒbpf map”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´MEhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´MEhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÚubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj:h]”hŒ Description”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MGhjÚubhÝ)�”}”(hŒ8Clean up the security information stored inside bpf map.”h]”hŒ8Clean up the security information stored inside bpf map.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MFhjÚubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_bpf_prog_free (C function)”Œc.security_bpf_prog_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3void security_bpf_prog_free (struct bpf_prog *prog)”h]”j)�”}”(hŒ2void security_bpf_prog_free(struct bpf_prog *prog)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj{h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj{h²hh³j�h´MQubj{)�”}”(hŒsecurity_bpf_prog_free”h]”j�)�”}”(hŒsecurity_bpf_prog_free”h]”hŒsecurity_bpf_prog_free”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj{h²hh³j�h´MQubjœ)�”}”(hŒ(struct bpf_prog *prog)”h]”j¢)�”}”(hŒstruct bpf_prog *prog”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸ubh)�”}”(hhh]”j�)�”}”(hŒbpf_prog”h]”hŒbpf_prog”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÜŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¢sbŒc.security_bpf_prog_free”†”asbuh1hhj¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¸ubj�)�”}”(hŒprog”h]”hŒprog”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj´ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj{h²hh³j�h´MQubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjwh²hh³j�h´MQubah}”(h]”jrah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�h´MQhjth²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a BPF program's LSM blob”h]”hŒFree a BPF program’s LSM blob”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MQhj<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjth²hh³j�h´MQubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjWjæjWjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ�**Parameters** ``struct bpf_prog *prog`` BPF program struct **Description** Clean up the security information stored inside BPF program.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjah]”hŒ Parameters”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MUhj[ubj )�”}”(hhh]”j)�”}”(hŒ-``struct bpf_prog *prog`` BPF program struct ”h]”(j)�”}”(hŒ``struct bpf_prog *prog``”h]”j)�”}”(hj€h]”hŒstruct bpf_prog *prog”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MRhjzubj2)�”}”(hhh]”hÝ)�”}”(hŒBPF program struct”h]”hŒBPF program struct”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j•h´MRhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j•h´MRhjwubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj[ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj»h]”hŒ Description”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MThj[ubhÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjüh²hh³jh´M^ubj{)�”}”(hŒsecurity_bpf_token_free”h]”j�)�”}”(hŒsecurity_bpf_token_free”h]”hŒsecurity_bpf_token_free”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjüh²hh³jh´M^ubjœ)�”}”(hŒ(struct bpf_token *token)”h]”j¢)�”}”(hŒstruct bpf_token *token”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9ubh)�”}”(hhh]”j�)�”}”(hŒ bpf_token”h]”hŒ bpf_token”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j]Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j#sbŒc.security_bpf_token_free”†”asbuh1hhj9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj9ubj�)�”}”(hŒtoken”h]”hŒtoken”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj5ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjüh²hh³jh´M^ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjøh²hh³jh´M^ubah}”(h]”jóah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´M^hjõh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a BPF token's LSM blob”h]”hŒFree a BPF token’s LSM blob”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M^hj½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjõh²hh³jh´M^ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjØjæjØjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ‹**Parameters** ``struct bpf_token *token`` BPF token struct **Description** Clean up the security information stored inside BPF token.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjâh]”hŒ Parameters”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MbhjÜubj )�”}”(hhh]”j)�”}”(hŒ-``struct bpf_token *token`` BPF token struct ”h]”(j)�”}”(hŒ``struct bpf_token *token``”h]”j)�”}”(hjh]”hŒstruct bpf_token *token”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M_hjûubj2)�”}”(hhh]”hÝ)�”}”(hŒBPF token struct”h]”hŒBPF token struct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M_hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M_hjøubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj<h]”hŒ Description”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MahjÜubhÝ)�”}”(hŒ:Clean up the security information stored inside BPF token.”h]”hŒ:Clean up the security information stored inside BPF token.”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M`hjÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_perf_event_open (C function)”Œc.security_perf_event_open”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'int security_perf_event_open (int type)”h]”j)�”}”(hŒ&int security_perf_event_open(int type)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj}h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj}h²hh³j�h´MËubj{)�”}”(hŒsecurity_perf_event_open”h]”j�)�”}”(hŒsecurity_perf_event_open”h]”hŒsecurity_perf_event_open”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj}h²hh³j�h´MËubjœ)�”}”(hŒ (int type)”h]”j¢)�”}”(hŒint type”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¶ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj}h²hh³j�h´MËubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjyh²hh³j�h´MËubah}”(h]”jtah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�h´MËhjvh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Check if a perf event open is allowed”h]”hŒ%Check if a perf event open is allowed”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MËhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjvh²hh³j�h´MËubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ±**Parameters** ``int type`` type of event **Description** Check whether the **type** of perf_event_open syscall is allowed. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj&h]”hŒ Parameters”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÏhj ubj )�”}”(hhh]”j)�”}”(hŒ``int type`` type of event ”h]”(j)�”}”(hŒ ``int type``”h]”j)�”}”(hjEh]”hŒint type”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÌhj?ubj2)�”}”(hhh]”hÝ)�”}”(hŒ type of event”h]”hŒ type of event”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jZh´MÌhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZh´MÌhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj€h]”hŒ Description”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÎhj ubhÝ)�”}”(hŒACheck whether the **type** of perf_event_open syscall is allowed.”h]”(hŒCheck whether the ”…”�”}”(hj–h²hh³Nh´Nubjõ)�”}”(hŒ**type**”h]”hŒtype”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj–ubhŒ' of perf_event_open syscall is allowed.”…”�”}”(hj–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÍhj ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj¹h]”hŒReturn”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÏhj ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÐhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_perf_event_alloc (C function)”Œc.security_perf_event_alloc”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int security_perf_event_alloc (struct perf_event *event)”h]”j)�”}”(hŒ7int security_perf_event_alloc(struct perf_event *event)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjúh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúh²hh³j h´MØubj{)�”}”(hŒsecurity_perf_event_alloc”h]”j�)�”}”(hŒsecurity_perf_event_alloc”h]”hŒsecurity_perf_event_alloc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjúh²hh³j h´MØubjœ)�”}”(hŒ(struct perf_event *event)”h]”j¢)�”}”(hŒstruct perf_event *event”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7ubh)�”}”(hhh]”j�)�”}”(hŒ perf_event”h]”hŒ perf_event”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j[Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j!sbŒc.security_perf_event_alloc”†”asbuh1hhj7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj7ubj�)�”}”(hŒevent”h]”hŒevent”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj3ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjúh²hh³j h´MØubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjöh²hh³j h´MØubah}”(h]”jñah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j h´MØhjóh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒAllocate a perf event LSM blob”h]”hŒAllocate a perf event LSM blob”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MØhj»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjóh²hh³j h´MØubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÖjæjÖjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¬**Parameters** ``struct perf_event *event`` perf event **Description** Allocate and save perf_event security info. **Return** Returns 0 on success, error on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjàh]”hŒ Parameters”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÜhjÚubj )�”}”(hhh]”j)�”}”(hŒ(``struct perf_event *event`` perf event ”h]”(j)�”}”(hŒ``struct perf_event *event``”h]”j)�”}”(hjÿh]”hŒstruct perf_event *event”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÙhjùubj2)�”}”(hhh]”hÝ)�”}”(hŒ perf event”h]”hŒ perf event”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´MÙhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´MÙhjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÚubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj:h]”hŒ Description”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÛhjÚubhÝ)�”}”(hŒ+Allocate and save perf_event security info.”h]”hŒ+Allocate and save perf_event security info.”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÚhjÚubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjah]”hŒReturn”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÜhjÚubhÝ)�”}”(hŒ'Returns 0 on success, error on failure.”h]”hŒ'Returns 0 on success, error on failure.”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MÝhjÚubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_perf_event_free (C function)”Œc.security_perf_event_free”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8void security_perf_event_free (struct perf_event *event)”h]”j)�”}”(hŒ7void security_perf_event_free(struct perf_event *event)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¢h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢h²hh³j´h´Mñubj{)�”}”(hŒsecurity_perf_event_free”h]”j�)�”}”(hŒsecurity_perf_event_free”h]”hŒsecurity_perf_event_free”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÃubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¢h²hh³j´h´Mñubjœ)�”}”(hŒ(struct perf_event *event)”h]”j¢)�”}”(hŒstruct perf_event *event”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjßubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjßubh)�”}”(hhh]”j�)�”}”(hŒ perf_event”h]”hŒ perf_event”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÉsbŒc.security_perf_event_free”†”asbuh1hhjßubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjßubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjßubj�)�”}”(hŒevent”h]”hŒevent”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjßubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÛubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¢h²hh³j´h´Mñubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjžh²hh³j´h´Mñubah}”(h]”j™ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j´h´Mñhj›h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFree a perf event LSM blob”h]”hŒFree a perf event LSM blob”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mñhjch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj›h²hh³j´h´Mñubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj~jæj~jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒt**Parameters** ``struct perf_event *event`` perf event **Description** Release (free) perf_event security info.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjˆh]”hŒ Parameters”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mõhj‚ubj )�”}”(hhh]”j)�”}”(hŒ(``struct perf_event *event`` perf event ”h]”(j)�”}”(hŒ``struct perf_event *event``”h]”j)�”}”(hj§h]”hŒstruct perf_event *event”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mòhj¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒ perf event”h]”hŒ perf event”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼h´Mòhj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼h´Mòhjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‚ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjâh]”hŒ Description”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Môhj‚ubhÝ)�”}”(hŒ(Release (free) perf_event security info.”h]”hŒ(Release (free) perf_event security info.”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Móhj‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%security_perf_event_read (C function)”Œc.security_perf_event_read”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7int security_perf_event_read (struct perf_event *event)”h]”j)�”}”(hŒ6int security_perf_event_read(struct perf_event *event)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj#h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#h²hh³j5h´Mýubj{)�”}”(hŒsecurity_perf_event_read”h]”j�)�”}”(hŒsecurity_perf_event_read”h]”hŒsecurity_perf_event_read”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj#h²hh³j5h´Mýubjœ)�”}”(hŒ(struct perf_event *event)”h]”j¢)�”}”(hŒstruct perf_event *event”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`ubh)�”}”(hhh]”j�)�”}”(hŒ perf_event”h]”hŒ perf_event”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j„Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jJsbŒc.security_perf_event_read”†”asbuh1hhj`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj`ubj�)�”}”(hŒevent”h]”hŒevent”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj\ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj#h²hh³j5h´Mýubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³j5h´Mýubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j5h´Mýhjh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Check if reading a perf event label is allowed”h]”hŒ.Check if reading a perf event label is allowed”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mýhjäh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³j5h´Mýubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÿjæjÿjç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ¦**Parameters** ``struct perf_event *event`` perf event **Description** Read perf_event security info if allowed. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj ubj )�”}”(hhh]”j)�”}”(hŒ(``struct perf_event *event`` perf event ”h]”(j)�”}”(hŒ``struct perf_event *event``”h]”j)�”}”(hj( h]”hŒstruct perf_event *event”…”�”}”(hj* h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj& ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mþhj" ubj2)�”}”(hhh]”hÝ)�”}”(hŒ perf event”h]”hŒ perf event”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j= h´Mþhj> ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj" ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j= h´Mþhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjc h]”hŒ Description”…”�”}”(hje h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhja ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj ubhÝ)�”}”(hŒ)Read perf_event security info if allowed.”h]”hŒ)Read perf_event security info if allowed.”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mÿhj ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjŠ h]”hŒReturn”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&security_perf_event_write (C function)”Œc.security_perf_event_write”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int security_perf_event_write (struct perf_event *event)”h]”j)�”}”(hŒ7int security_perf_event_write(struct perf_event *event)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÏ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjË h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjË h²hh³jÝ h´M ubj{)�”}”(hŒsecurity_perf_event_write”h]”j�)�”}”(hŒsecurity_perf_event_write”h]”hŒsecurity_perf_event_write”…”�”}”(hjð h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjË h²hh³jÝ h´M ubjœ)�”}”(hŒ(struct perf_event *event)”h]”j¢)�”}”(hŒstruct perf_event *event”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!ubh)�”}”(hhh]”j�)�”}”(hŒ perf_event”h]”hŒ perf_event”…”�”}”(hj*!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j,!Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jò sbŒc.security_perf_event_write”†”asbuh1hhj!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjX!h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!ubj�)�”}”(hŒevent”h]”hŒevent”…”�”}”(hje!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjË h²hh³jÝ h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÇ h²hh³jÝ h´M ubah}”(h]”j ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÝ h´M hjÄ h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Check if writing a perf event label is allowed”h]”hŒ.Check if writing a perf event label is allowed”…”�”}”(hj�!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjŒ!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÄ h²hh³jÝ h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj§!jæj§!jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ§**Parameters** ``struct perf_event *event`` perf event **Description** Write perf_event security info if allowed. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj±!h]”hŒ Parameters”…”�”}”(hj³!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj«!ubj )�”}”(hhh]”j)�”}”(hŒ(``struct perf_event *event`` perf event ”h]”(j)�”}”(hŒ``struct perf_event *event``”h]”j)�”}”(hjÐ!h]”hŒstruct perf_event *event”…”�”}”(hjÒ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hjÊ!ubj2)�”}”(hhh]”hÝ)�”}”(hŒ perf event”h]”hŒ perf event”…”�”}”(hjé!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jå!h´M hjæ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÊ!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jå!h´M hjÇ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj«!ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj "h]”hŒ Description”…”�”}”(hj "h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj "ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj«!ubhÝ)�”}”(hŒ*Write perf_event security info if allowed.”h]”hŒ*Write perf_event security info if allowed.”…”�”}”(hj!"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M hj«!ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj2"h]”hŒReturn”…”�”}”(hj4"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj«!ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjH"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj«!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*security_uring_override_creds (C function)”Œc.security_uring_override_creds”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:int security_uring_override_creds (const struct cred *new)”h]”j)�”}”(hŒ9int security_uring_override_creds(const struct cred *new)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjw"h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjs"h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjs"h²hh³j…"h´Mubj{)�”}”(hŒsecurity_uring_override_creds”h]”j�)�”}”(hŒsecurity_uring_override_creds”h]”hŒsecurity_uring_override_creds”…”�”}”(hj˜"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”"ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjs"h²hh³j…"h´Mubjœ)�”}”(hŒ(const struct cred *new)”h]”j¢)�”}”(hŒconst struct cred *new”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj´"h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj°"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°"ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÏ"h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj°"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°"ubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjí"h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjê"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jï"Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jš"sbŒc.security_uring_override_creds”†”asbuh1hhj°"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°"ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj°"ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj(#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¬"ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjs"h²hh³j…"h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjo"h²hh³j…"h´Mubah}”(h]”jj"ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j…"h´Mhjl"h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Check if overriding creds is allowed”h]”hŒ$Check if overriding creds is allowed”…”�”}”(hjR#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MhjO#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjl"h²hh³j…"h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjj#jæjj#jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒñ**Parameters** ``const struct cred *new`` new credentials **Description** Check if the current task, executing an io_uring operation, is allowed to override it's credentials with **new**. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjt#h]”hŒ Parameters”…”�”}”(hjv#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjr#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjn#ubj )�”}”(hhh]”j)�”}”(hŒ+``const struct cred *new`` new credentials ”h]”(j)�”}”(hŒ``const struct cred *new``”h]”j)�”}”(hj“#h]”hŒconst struct cred *new”…”�”}”(hj•#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhj�#ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew credentials”h]”hŒnew credentials”…”�”}”(hj¬#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¨#h´Mhj©#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¨#h´MhjŠ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjn#ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÎ#h]”hŒ Description”…”�”}”(hjÐ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÌ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjn#ubhÝ)�”}”(hŒqCheck if the current task, executing an io_uring operation, is allowed to override it's credentials with **new**.”h]”(hŒkCheck if the current task, executing an io_uring operation, is allowed to override it’s credentials with ”…”�”}”(hjä#h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hjì#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä#ubhŒ.”…”�”}”(hjä#h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjn#ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj$h]”hŒReturn”…”�”}”(hj $h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjn#ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Mhjn#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"security_uring_sqpoll (C function)”Œc.security_uring_sqpoll”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ int security_uring_sqpoll (void)”h]”j)�”}”(hŒint security_uring_sqpoll(void)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjL$h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjH$h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M'ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjH$h²hh³jZ$h´M'ubj{)�”}”(hŒsecurity_uring_sqpoll”h]”j�)�”}”(hŒsecurity_uring_sqpoll”h]”hŒsecurity_uring_sqpoll”…”�”}”(hjm$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hji$ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjH$h²hh³jZ$h´M'ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‰$h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj…$ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�$ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjH$h²hh³jZ$h´M'ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjD$h²hh³jZ$h´M'ubah}”(h]”j?$ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jZ$h´M'hjA$h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Check if IORING_SETUP_SQPOLL is allowed”h]”hŒ'Check if IORING_SETUP_SQPOLL is allowed”…”�”}”(hj³$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M'hj°$h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjA$h²hh³jZ$h´M'ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjË$jæjË$jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒÎ**Parameters** ``void`` no arguments **Description** Check whether the current task is allowed to spawn a io_uring polling thread (IORING_SETUP_SQPOLL). **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÕ$h]”hŒ Parameters”…”�”}”(hj×$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓ$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hjÏ$ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjô$h]”hŒvoid”…”�”}”(hjö$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjò$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Khjî$ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj %h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j %h´Khj %ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjî$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j %h´Khjë$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÏ$ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj/%h]”hŒ Description”…”�”}”(hj1%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KhjÏ$ubhÝ)�”}”(hŒcCheck whether the current task is allowed to spawn a io_uring polling thread (IORING_SETUP_SQPOLL).”h]”hŒcCheck whether the current task is allowed to spawn a io_uring polling thread (IORING_SETUP_SQPOLL).”…”�”}”(hjE%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M(hjÏ$ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjV%h]”hŒReturn”…”�”}”(hjX%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjT%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M+hjÏ$ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjl%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M,hjÏ$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurity_uring_cmd (C function)”Œc.security_uring_cmd”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4int security_uring_cmd (struct io_uring_cmd *ioucmd)”h]”j)�”}”(hŒ3int security_uring_cmd(struct io_uring_cmd *ioucmd)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj›%h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj—%h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—%h²hh³j©%h´M4ubj{)�”}”(hŒsecurity_uring_cmd”h]”j�)�”}”(hŒsecurity_uring_cmd”h]”hŒsecurity_uring_cmd”…”�”}”(hj¼%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸%ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—%h²hh³j©%h´M4ubjœ)�”}”(hŒ(struct io_uring_cmd *ioucmd)”h]”j¢)�”}”(hŒstruct io_uring_cmd *ioucmd”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjØ%h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÔ%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjå%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔ%ubh)�”}”(hhh]”j�)�”}”(hŒ io_uring_cmd”h]”hŒ io_uring_cmd”…”�”}”(hjö%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjó%ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jø%Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¾%sbŒc.security_uring_cmd”†”asbuh1hhjÔ%ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔ%ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$&h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔ%ubj�)�”}”(hŒioucmd”h]”hŒioucmd”…”�”}”(hj1&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔ%ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐ%ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj—%h²hh³j©%h´M4ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj“%h²hh³j©%h´M4ubah}”(h]”jŽ%ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j©%h´M4hj�%h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2Check if a io_uring passthrough command is allowed”h]”hŒ2Check if a io_uring passthrough command is allowed”…”�”}”(hj[&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M4hjX&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�%h²hh³j©%h´M4ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjs&jæjs&jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ»**Parameters** ``struct io_uring_cmd *ioucmd`` command **Description** Check whether the file_operations uring_cmd is allowed to run. **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj}&h]”hŒ Parameters”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8hjw&ubj )�”}”(hhh]”j)�”}”(hŒ(``struct io_uring_cmd *ioucmd`` command ”h]”(j)�”}”(hŒ``struct io_uring_cmd *ioucmd``”h]”j)�”}”(hjœ&h]”hŒstruct io_uring_cmd *ioucmd”…”�”}”(hjž&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjš&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M5hj–&ubj2)�”}”(hhh]”hÝ)�”}”(hŒcommand”h]”hŒcommand”…”�”}”(hjµ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±&h´M5hj²&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±&h´M5hj“&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjw&ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(•hj×&h]”hŒ Description”…”�”}”(hjÙ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÕ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M7hjw&ubhÝ)�”}”(hŒ>Check whether the file_operations uring_cmd is allowed to run.”h]”hŒ>Check whether the file_operations uring_cmd is allowed to run.”…”�”}”(hjí&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M6hjw&ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjþ&h]”hŒReturn”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjü&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M8hjw&ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´M9hjw&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#security_uring_allowed (C function)”Œc.security_uring_allowed”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ!int security_uring_allowed (void)”h]”j)�”}”(hŒ int security_uring_allowed(void)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjC'h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?'h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MAubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR'h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?'h²hh³jQ'h´MAubj{)�”}”(hŒsecurity_uring_allowed”h]”j�)�”}”(hŒsecurity_uring_allowed”h]”hŒsecurity_uring_allowed”…”�”}”(hjd'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`'ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj?'h²hh³jQ'h´MAubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj€'h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj|'ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjx'ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj?'h²hh³jQ'h´MAubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj;'h²hh³jQ'h´MAubah}”(h]”j6'ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jQ'h´MAhj8'h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Check if io_uring_setup() is allowed”h]”hŒ$Check if io_uring_setup() is allowed”…”�”}”(hjª'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MAhj§'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj8'h²hh³jQ'h´MAubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÂ'jæjÂ'jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒ®**Parameters** ``void`` no arguments **Description** Check whether the current task is allowed to call io_uring_setup(). **Return** Returns 0 if permission is granted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÌ'h]”hŒ Parameters”…”�”}”(hjÎ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MEhjÆ'ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjë'h]”hŒvoid”…”�”}”(hjí'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Khjå'ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(h´Khj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjå'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(h´Khjâ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÆ'ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj&(h]”hŒ Description”…”�”}”(hj((h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´KhjÆ'ubhÝ)�”}”(hŒCCheck whether the current task is allowed to call io_uring_setup().”h]”hŒCCheck whether the current task is allowed to call io_uring_setup().”…”�”}”(hj<(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MBhjÆ'ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjM(h]”hŒReturn”…”�”}”(hjO(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjK(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MDhjÆ'ubhÝ)�”}”(hŒ#Returns 0 if permission is granted.”h]”hŒ#Returns 0 if permission is granted.”…”�”}”(hjc(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MEhjÆ'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)security_initramfs_populated (C function)”Œc.security_initramfs_populated”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(void security_initramfs_populated (void)”h]”j)�”}”(hŒ'void security_initramfs_populated(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj’(h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŽ(h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŽ(h²hh³j (h´MNubj{)�”}”(hŒsecurity_initramfs_populated”h]”j�)�”}”(hŒsecurity_initramfs_populated”h]”hŒsecurity_initramfs_populated”…”�”}”(hj³(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯(ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŽ(h²hh³j (h´MNubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÏ(h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjË(ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÇ(ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjŽ(h²hh³j (h´MNubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŠ(h²hh³j (h´MNubah}”(h]”j…(ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j (h´MNhj‡(h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Notify LSMs that initramfs has been loaded”h]”hŒ*Notify LSMs that initramfs has been loaded”…”�”}”(hjù(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MNhjö(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‡(h²hh³j (h´MNubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj)jæj)jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hŒy**Parameters** ``void`` no arguments **Description** Tells the LSMs the initramfs has been unpacked into the rootfs.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj)h]”hŒ Parameters”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MRhj)ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj:)h]”hŒvoid”…”�”}”(hj<)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Khj4)ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjS)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jO)h´KhjP)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jO)h´Khj1)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj)ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hju)h]”hŒ Description”…”�”}”(hjw)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjs)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´Khj)ubhÝ)�”}”(hŒ?Tells the LSMs the initramfs has been unpacked into the rootfs.”h]”hŒ?Tells the LSMs the initramfs has been unpacked into the rootfs.”…”�”}”(hj‹)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:283: ./security/security.c”h´MOhj)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#securityfs_create_file (C function)”Œc.securityfs_create_file”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒŽstruct dentry * securityfs_create_file (const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops)”h]”j)�”}”(hŒŒstruct dentry *securityfs_create_file(const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjº)h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¶)h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶)h²hh³jÇ)h´K«ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÙ)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖ)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÛ)Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œsecurityfs_create_file”sbŒc.securityfs_create_file”†”asbuh1hhj¶)h²hh³jÇ)h´K«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶)h²hh³jÇ)h´K«ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¶)h²hh³jÇ)h´K«ubj{)�”}”(hŒsecurityfs_create_file”h]”j�)�”}”(hj÷)h]”hŒsecurityfs_create_file”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj*ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¶)h²hh³jÇ)h´K«ubjœ)�”}”(hŒg(const char *name, umode_t mode, struct dentry *parent, void *data, const struct file_operations *fops)”h]”(j¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj4*h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj0*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0*ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjO*h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj0*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0*ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjk*h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj0*ubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjx*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,*ubj¢)�”}”(hŒ umode_t mode”h]”(h)�”}”(hhh]”j�)�”}”(hŒumode_t”h]”hŒumode_t”…”�”}”(hj”*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j–*Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jõ)Œc.securityfs_create_file”†”asbuh1hhj�*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�*ubj�)�”}”(hŒmode”h]”hŒmode”…”�”}”(hjÀ*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,*ubj¢)�”}”(hŒstruct dentry *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÙ*h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÕ*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕ*ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj÷*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jù*Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jõ)Œc.securityfs_create_file”†”asbuh1hhjÕ*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕ*ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj#+h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÕ*ubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hj0+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕ*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,*ubj¢)�”}”(hŒ void *data”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjI+h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjE+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjE+ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hje+h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjE+ubj�)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjr+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjE+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,*ubj¢)�”}”(hŒ"const struct file_operations *fops”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj‹+h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡+ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¦+h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡+ubh)�”}”(hhh]”j�)�”}”(hŒfile_operations”h]”hŒfile_operations”…”�”}”(hjÄ+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁ+ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÆ+Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jõ)Œc.securityfs_create_file”†”asbuh1hhj‡+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡+ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjð+h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‡+ubj�)�”}”(hŒfops”h]”hŒfops”…”�”}”(hjý+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,*ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¶)h²hh³jÇ)h´K«ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj²)h²hh³jÇ)h´K«ubah}”(h]”j­)ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÇ)h´K«hj¯)h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*create a file in the securityfs filesystem”h]”hŒ*create a file in the securityfs filesystem”…”�”}”(hj',h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K«hj$,h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¯)h²hh³jÇ)h´K«ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj?,jæj?,jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX…**Parameters** ``const char *name`` a pointer to a string containing the name of the file to create. ``umode_t mode`` the permission that the file should have ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the securityfs filesystem. ``void *data`` a pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call. ``const struct file_operations *fops`` a pointer to a struct file_operations that should be used for this file. **Description** This function creates a file in securityfs with the given **name**. This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR). If securityfs is not enabled in the kernel, the value ``-ENODEV`` is returned.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjI,h]”hŒ Parameters”…”�”}”(hjK,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjG,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K¯hjC,ubj )�”}”(hhh]”(j)�”}”(hŒV``const char *name`` a pointer to a string containing the name of the file to create. ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjh,h]”hŒconst char *name”…”�”}”(hjj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjf,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K­hjb,ubj2)�”}”(hhh]”hÝ)�”}”(hŒ@a pointer to a string containing the name of the file to create.”h]”hŒ@a pointer to a string containing the name of the file to create.”…”�”}”(hj�,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j},h´K­hj~,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjb,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j},h´K­hj_,ubj)�”}”(hŒ:``umode_t mode`` the permission that the file should have ”h]”(j)�”}”(hŒ``umode_t mode``”h]”j)�”}”(hj¡,h]”hŒ umode_t mode”…”�”}”(hj£,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K®hj›,ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(the permission that the file should have”h]”hŒ(the permission that the file should have”…”�”}”(hjº,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶,h´K®hj·,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶,h´K®hj_,ubj)�”}”(hŒÛ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the securityfs filesystem. ”h]”(j)�”}”(hŒ``struct dentry *parent``”h]”j)�”}”(hjÚ,h]”hŒstruct dentry *parent”…”�”}”(hjÜ,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØ,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K±hjÔ,ubj2)�”}”(hhh]”hÝ)�”}”(hŒÀa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the file will be created in the root of the securityfs filesystem.”h]”(hŒoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ”…”�”}”(hjó,h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjû,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjó,ubhŒI, then the file will be created in the root of the securityfs filesystem.”…”�”}”(hjó,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K¯hjð,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔ,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jï,h´K±hj_,ubj)�”}”(hŒž``void *data`` a pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call. ”h]”(j)�”}”(hŒ``void *data``”h]”j)�”}”(hj&-h]”hŒ void *data”…”�”}”(hj(-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K´hj -ubj2)�”}”(hhh]”hÝ)�”}”(hŒŽa pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call.”h]”hŒŽa pointer to something that the caller will want to get to later on. The inode.i_private pointer will point to this value on the open() call.”…”�”}”(hj?-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K²hj<-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj -ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;-h´K´hj_,ubj)�”}”(hŒp``const struct file_operations *fops`` a pointer to a struct file_operations that should be used for this file. ”h]”(j)�”}”(hŒ&``const struct file_operations *fops``”h]”j)�”}”(hj`-h]”hŒ"const struct file_operations *fops”…”�”}”(hjb-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K¶hjZ-ubj2)�”}”(hhh]”hÝ)�”}”(hŒHa pointer to a struct file_operations that should be used for this file.”h]”hŒHa pointer to a struct file_operations that should be used for this file.”…”�”}”(hjy-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kµhjv-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjZ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ju-h´K¶hj_,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjC,ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjœ-h]”hŒ Description”…”�”}”(hjž-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjš-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K¸hjC,ubhÝ)�”}”(hŒCThis function creates a file in securityfs with the given **name**.”h]”(hŒ:This function creates a file in securityfs with the given ”…”�”}”(hj²-h²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjº-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²-ubhŒ.”…”�”}”(hj²-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K·hjC,ubhÝ)�”}”(hX=This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR).”h]”hX=This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR).”…”�”}”(hjÓ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K¹hjC,ubhÝ)�”}”(hŒNIf securityfs is not enabled in the kernel, the value ``-ENODEV`` is returned.”h]”(hŒ6If securityfs is not enabled in the kernel, the value ”…”�”}”(hjâ-h²hh³Nh´Nubj)�”}”(hŒ ``-ENODEV``”h]”hŒ-ENODEV”…”�”}”(hjê-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ-ubhŒ is returned.”…”�”}”(hjâ-h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´K¿hjC,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"securityfs_create_dir (C function)”Œc.securityfs_create_dir”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOstruct dentry * securityfs_create_dir (const char *name, struct dentry *parent)”h]”j)�”}”(hŒMstruct dentry *securityfs_create_dir(const char *name, struct dentry *parent)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj#.h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.h²hh³j0.h´KÌubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjB.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?.ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jD.Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œsecurityfs_create_dir”sbŒc.securityfs_create_dir”†”asbuh1hhj.h²hh³j0.h´KÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.h²hh³j0.h´KÌubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjq.h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj.h²hh³j0.h´KÌubj{)�”}”(hŒsecurityfs_create_dir”h]”j�)�”}”(hj`.h]”hŒsecurityfs_create_dir”…”�”}”(hj‚.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~.ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj.h²hh³j0.h´KÌubjœ)�”}”(hŒ)(const char *name, struct dentry *parent)”h]”(j¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj�.h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj™.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjª.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™.ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj¸.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj™.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™.ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÔ.h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj™.ubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjá.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•.ubj¢)�”}”(hŒstruct dentry *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjú.h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjö.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjö.ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j/Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j^.Œc.securityfs_create_dir”†”asbuh1hhjö.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6/h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjö.ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjD/h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjö.ubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjQ/h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjö.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•.ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj.h²hh³j0.h´KÌubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj.h²hh³j0.h´KÌubah}”(h]”j.ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j0.h´KÌhj.h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/create a directory in the securityfs filesystem”h]”hŒ/create a directory in the securityfs filesystem”…”�”}”(hj{/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÌhjx/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj.h²hh³j0.h´KÌubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj“/jæj“/jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX?**Parameters** ``const char *name`` a pointer to a string containing the name of the directory to create. ``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the directory will be created in the root of the securityfs filesystem. **Description** This function creates a directory in securityfs with the given **name**. This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR). If securityfs is not enabled in the kernel, the value ``-ENODEV`` is returned.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�/h]”hŒ Parameters”…”�”}”(hjŸ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj›/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÐhj—/ubj )�”}”(hhh]”(j)�”}”(hŒ[``const char *name`` a pointer to a string containing the name of the directory to create. ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hj¼/h]”hŒconst char *name”…”�”}”(hj¾/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjº/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÏhj¶/ubj2)�”}”(hhh]”hÝ)�”}”(hŒEa pointer to a string containing the name of the directory to create.”h]”hŒEa pointer to a string containing the name of the directory to create.”…”�”}”(hjÕ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÎhjÒ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¶/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÑ/h´KÏhj³/ubj)�”}”(hŒà``struct dentry *parent`` a pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the directory will be created in the root of the securityfs filesystem. ”h]”(j)�”}”(hŒ``struct dentry *parent``”h]”j)�”}”(hjö/h]”hŒstruct dentry *parent”…”�”}”(hjø/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjô/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÒhjð/ubj2)�”}”(hhh]”hÝ)�”}”(hŒÅa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ``NULL``, then the directory will be created in the root of the securityfs filesystem.”h]”(hŒoa pointer to the parent dentry for this file. This should be a directory dentry if set. If this parameter is ”…”�”}”(hj0h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0ubhŒN, then the directory will be created in the root of the securityfs filesystem.”…”�”}”(hj0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÐhj 0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjð/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j 0h´KÒhj³/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj—/ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjD0h]”hŒ Description”…”�”}”(hjF0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjB0ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÔhj—/ubhÝ)�”}”(hŒHThis function creates a directory in securityfs with the given **name**.”h]”(hŒ?This function creates a directory in securityfs with the given ”…”�”}”(hjZ0h²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjb0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjZ0ubhŒ.”…”�”}”(hjZ0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÓhj—/ubhÝ)�”}”(hX=This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR).”h]”hX=This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR).”…”�”}”(hj{0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÕhj—/ubhÝ)�”}”(hŒNIf securityfs is not enabled in the kernel, the value ``-ENODEV`` is returned.”h]”(hŒ6If securityfs is not enabled in the kernel, the value ”…”�”}”(hjŠ0h²hh³Nh´Nubj)�”}”(hŒ ``-ENODEV``”h]”hŒ-ENODEV”…”�”}”(hj’0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠ0ubhŒ is returned.”…”�”}”(hjŠ0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KÛhj—/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&securityfs_create_symlink (C function)”Œc.securityfs_create_symlink”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒŒstruct dentry * securityfs_create_symlink (const char *name, struct dentry *parent, const char *target, const struct inode_operations *iops)”h]”j)�”}”(hŒŠstruct dentry *securityfs_create_symlink(const char *name, struct dentry *parent, const char *target, const struct inode_operations *iops)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjË0h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÇ0h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇ0h²hh³jØ0h´Kæubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjê0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjç0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jì0Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œsecurityfs_create_symlink”sbŒc.securityfs_create_symlink”†”asbuh1hhjÇ0h²hh³jØ0h´Kæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj 1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇ0h²hh³jØ0h´Kæubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÇ0h²hh³jØ0h´Kæubj{)�”}”(hŒsecurityfs_create_symlink”h]”j�)�”}”(hj1h]”hŒsecurityfs_create_symlink”…”�”}”(hj*1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&1ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÇ0h²hh³jØ0h´Kæubjœ)�”}”(hŒb(const char *name, struct dentry *parent, const char *target, const struct inode_operations *iops)”h]”(j¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjE1h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjA1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjA1ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj`1h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjA1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjA1ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj|1h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjA1ubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj‰1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjA1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=1ubj¢)�”}”(hŒstruct dentry *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¢1h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjž1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž1ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjÀ1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÂ1Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j1Œc.securityfs_create_symlink”†”asbuh1hhjž1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž1ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjì1h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjž1ubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjù1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjž1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=1ubj¢)�”}”(hŒconst char *target”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj-2h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjI2h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj2ubj�)�”}”(hŒtarget”h]”hŒtarget”…”�”}”(hjV2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=1ubj¢)�”}”(hŒ#const struct inode_operations *iops”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjo2h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjk2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk2ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjŠ2h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjk2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk2ubh)�”}”(hhh]”j�)�”}”(hŒinode_operations”h]”hŒinode_operations”…”�”}”(hj¨2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jª2Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j1Œc.securityfs_create_symlink”†”asbuh1hhjk2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆ2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk2ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÔ2h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjk2ubj�)�”}”(hŒiops”h]”hŒiops”…”�”}”(hjá2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjk2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=1ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÇ0h²hh³jØ0h´Kæubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÃ0h²hh³jØ0h´Kæubah}”(h]”j¾0ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jØ0h´KæhjÀ0h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-create a symlink in the securityfs filesystem”h]”hŒ-create a symlink in the securityfs filesystem”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kæhj3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀ0h²hh³jØ0h´Kæubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj#3jæj#3jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hXí**Parameters** ``const char *name`` a pointer to a string containing the name of the symlink to create. ``struct dentry *parent`` a pointer to the parent dentry for the symlink. This should be a directory dentry if set. If this parameter is ``NULL``, then the directory will be created in the root of the securityfs filesystem. ``const char *target`` a pointer to a string containing the name of the symlink's target. If this parameter is ``NULL``, then the **iops** parameter needs to be setup to handle .readlink and .get_link inode_operations. ``const struct inode_operations *iops`` a pointer to the struct inode_operations to use for the symlink. If this parameter is ``NULL``, then the default simple_symlink_inode operations will be used. **Description** This function creates a symlink in securityfs with the given **name**. This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR). If securityfs is not enabled in the kernel, the value ``-ENODEV`` is returned.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj-3h]”hŒ Parameters”…”�”}”(hj/3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kêhj'3ubj )�”}”(hhh]”(j)�”}”(hŒY``const char *name`` a pointer to a string containing the name of the symlink to create. ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjL3h]”hŒconst char *name”…”�”}”(hjN3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KéhjF3ubj2)�”}”(hhh]”hÝ)�”}”(hŒCa pointer to a string containing the name of the symlink to create.”h]”hŒCa pointer to a string containing the name of the symlink to create.”…”�”}”(hje3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kèhjb3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjF3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ja3h´KéhjC3ubj)�”}”(hŒâ``struct dentry *parent`` a pointer to the parent dentry for the symlink. This should be a directory dentry if set. If this parameter is ``NULL``, then the directory will be created in the root of the securityfs filesystem. ”h]”(j)�”}”(hŒ``struct dentry *parent``”h]”j)�”}”(hj†3h]”hŒstruct dentry *parent”…”�”}”(hjˆ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kìhj€3ubj2)�”}”(hhh]”hÝ)�”}”(hŒÇa pointer to the parent dentry for the symlink. This should be a directory dentry if set. If this parameter is ``NULL``, then the directory will be created in the root of the securityfs filesystem.”h]”(hŒqa pointer to the parent dentry for the symlink. This should be a directory dentry if set. If this parameter is ”…”�”}”(hjŸ3h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hj§3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ3ubhŒN, then the directory will be created in the root of the securityfs filesystem.”…”�”}”(hjŸ3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kêhjœ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›3h´KìhjC3ubj)�”}”(hŒÛ``const char *target`` a pointer to a string containing the name of the symlink's target. If this parameter is ``NULL``, then the **iops** parameter needs to be setup to handle .readlink and .get_link inode_operations. ”h]”(j)�”}”(hŒ``const char *target``”h]”j)�”}”(hjÒ3h]”hŒconst char *target”…”�”}”(hjÔ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÐ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KïhjÌ3ubj2)�”}”(hhh]”hÝ)�”}”(hŒÃa pointer to a string containing the name of the symlink's target. If this parameter is ``NULL``, then the **iops** parameter needs to be setup to handle .readlink and .get_link inode_operations.”h]”(hŒZa pointer to a string containing the name of the symlink’s target. If this parameter is ”…”�”}”(hjë3h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjó3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjë3ubhŒ , then the ”…”�”}”(hjë3h²hh³Nh´Nubjõ)�”}”(hŒ**iops**”h]”hŒiops”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjë3ubhŒP parameter needs to be setup to handle .readlink and .get_link inode_operations.”…”�”}”(hjë3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kíhjè3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÌ3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jç3h´KïhjC3ubj)�”}”(hŒÇ``const struct inode_operations *iops`` a pointer to the struct inode_operations to use for the symlink. If this parameter is ``NULL``, then the default simple_symlink_inode operations will be used. ”h]”(j)�”}”(hŒ'``const struct inode_operations *iops``”h]”j)�”}”(hj04h]”hŒ#const struct inode_operations *iops”…”�”}”(hj24h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kòhj*4ubj2)�”}”(hhh]”hÝ)�”}”(hŒža pointer to the struct inode_operations to use for the symlink. If this parameter is ``NULL``, then the default simple_symlink_inode operations will be used.”h]”(hŒVa pointer to the struct inode_operations to use for the symlink. If this parameter is ”…”�”}”(hjI4h²hh³Nh´Nubj)�”}”(hŒ``NULL``”h]”hŒNULL”…”�”}”(hjQ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjI4ubhŒ@, then the default simple_symlink_inode operations will be used.”…”�”}”(hjI4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´KðhjF4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj*4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jE4h´KòhjC3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj'3ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj~4h]”hŒ Description”…”�”}”(hj€4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kôhj'3ubhÝ)�”}”(hŒFThis function creates a symlink in securityfs with the given **name**.”h]”(hŒ=This function creates a symlink in securityfs with the given ”…”�”}”(hj”4h²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjœ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”4ubhŒ.”…”�”}”(hj”4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kóhj'3ubhÝ)�”}”(hX=This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR).”h]”hX=This function returns a pointer to a dentry if it succeeds. This pointer must be passed to the securityfs_remove() function when the file is to be removed (no automatic cleanup happens if your module is unloaded, you are responsible here). If an error occurs, the function will return the error value (via ERR_PTR).”…”�”}”(hjµ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kõhj'3ubhÝ)�”}”(hŒNIf securityfs is not enabled in the kernel, the value ``-ENODEV`` is returned.”h]”(hŒ6If securityfs is not enabled in the kernel, the value ”…”�”}”(hjÄ4h²hh³Nh´Nubj)�”}”(hŒ ``-ENODEV``”h]”hŒ-ENODEV”…”�”}”(hjÌ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄ4ubhŒ is returned.”…”�”}”(hjÄ4h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Kûhj'3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsecurityfs_remove (C function)”Œc.securityfs_remove”hNt”auh1hýhjè-h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void securityfs_remove (struct dentry *dentry)”h]”j)�”}”(hŒ-void securityfs_remove(struct dentry *dentry)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj5h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5h²hh³j5h´Mubj{)�”}”(hŒsecurityfs_remove”h]”j�)�”}”(hŒsecurityfs_remove”h]”hŒsecurityfs_remove”…”�”}”(hj&5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"5ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj5h²hh³j5h´Mubjœ)�”}”(hŒ(struct dentry *dentry)”h]”j¢)�”}”(hŒstruct dentry *dentry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjB5h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj>5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>5ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj`5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]5ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jb5Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j(5sbŒc.securityfs_remove”†”asbuh1hhj>5ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>5ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŽ5h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj>5ubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj›5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>5ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj:5ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj5h²hh³j5h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjý4h²hh³j5h´Mubah}”(h]”jø4ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j5h´Mhjú4h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ:removes a file or directory from the securityfs filesystem”h]”hŒ:removes a file or directory from the securityfs filesystem”…”�”}”(hjÅ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´MhjÂ5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjú4h²hh³j5h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÝ5jæjÝ5jç‰jè‰jé‰uh1jh²hhjè-h³Nh´Nubjë)�”}”(hX^**Parameters** ``struct dentry *dentry`` a pointer to a the dentry of the file or directory to be removed. **Description** This function removes a file or directory in securityfs that was previously created with a call to another securityfs function (like securityfs_create_file() or variants thereof.) This function is required to be called in order for the file to be removed. No automatic cleanup of files will happen when a module is removed; you are responsible here. AV: when applied to directory it will take all children out; no need to call it for descendents if ancestor is getting killed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjç5h]”hŒ Parameters”…”�”}”(hjé5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjå5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´M hjá5ubj )�”}”(hhh]”j)�”}”(hŒ\``struct dentry *dentry`` a pointer to a the dentry of the file or directory to be removed. ”h]”(j)�”}”(hŒ``struct dentry *dentry``”h]”j)�”}”(hj6h]”hŒstruct dentry *dentry”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Mhj6ubj2)�”}”(hhh]”hÝ)�”}”(hŒAa pointer to a the dentry of the file or directory to be removed.”h]”hŒAa pointer to a the dentry of the file or directory to be removed.”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j6h´Mhj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j6h´Mhjý5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjá5ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjA6h]”hŒ Description”…”�”}”(hjC6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´M hjá5ubhÝ)�”}”(hŒ³This function removes a file or directory in securityfs that was previously created with a call to another securityfs function (like securityfs_create_file() or variants thereof.)”h]”hŒ³This function removes a file or directory in securityfs that was previously created with a call to another securityfs function (like securityfs_create_file() or variants thereof.)”…”�”}”(hjW6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´Mhjá5ubhÝ)�”}”(hŒ©This function is required to be called in order for the file to be removed. No automatic cleanup of files will happen when a module is removed; you are responsible here.”h]”hŒ©This function is required to be called in order for the file to be removed. No automatic cleanup of files will happen when a module is removed; you are responsible here.”…”�”}”(hjf6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´M#hjá5ubhÝ)�”}”(hŒ~AV: when applied to directory it will take all children out; no need to call it for descendents if ancestor is getting killed.”h]”hŒ~AV: when applied to directory it will take all children out; no need to call it for descendents if ancestor is getting killed.”…”�”}”(hju6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:286: ./security/inode.c”h´M'hjá5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjè-h²hh³Nh´Nubeh}”(h]”Œsecurity-framework”ah ]”h"]”Œsecurity framework”ah$]”h&]”uh1hµhh·h²hh³hÊh´Mubh¶)�”}”(hhh]”(h»)�”}”(hŒAudit Interfaces”h]”hŒAudit Interfaces”…”�”}”(hj–6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj“6h²hh³hÊh´M"ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_log_start (C function)”Œc.audit_log_start”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ[struct audit_buffer * audit_log_start (struct audit_context *ctx, gfp_t gfp_mask, int type)”h]”j)�”}”(hŒYstruct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, int type)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj½6h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¹6h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mkubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹6h²hh³jÊ6h´Mkubh)�”}”(hhh]”j�)�”}”(hŒ audit_buffer”h]”hŒ audit_buffer”…”�”}”(hjÜ6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙ6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÞ6Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œaudit_log_start”sbŒc.audit_log_start”†”asbuh1hhj¹6h²hh³jÊ6h´Mkubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹6h²hh³jÊ6h´Mkubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj 7h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¹6h²hh³jÊ6h´Mkubj{)�”}”(hŒaudit_log_start”h]”j�)�”}”(hjú6h]”hŒaudit_log_start”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¹6h²hh³jÊ6h´Mkubjœ)�”}”(hŒ5(struct audit_context *ctx, gfp_t gfp_mask, int type)”h]”(j¢)�”}”(hŒstruct audit_context *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj77h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj37ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj37ubh)�”}”(hhh]”j�)�”}”(hŒ audit_context”h]”hŒ audit_context”…”�”}”(hjU7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjR7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jW7Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jø6Œc.audit_log_start”†”asbuh1hhj37ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj37ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�7h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj37ubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hjŽ7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj37ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/7ubj¢)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjª7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§7ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¬7Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jø6Œc.audit_log_start”†”asbuh1hhj£7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈ7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£7ubj�)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjÖ7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/7ubj¢)�”}”(hŒint type”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjï7h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjë7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjë7ubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj 8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjë7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/7ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¹6h²hh³jÊ6h´Mkubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjµ6h²hh³jÊ6h´Mkubah}”(h]”j°6ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÊ6h´Mkhj²6h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒobtain an audit buffer”h]”hŒobtain an audit buffer”…”�”}”(hj58h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mkhj28h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj²6h²hh³jÊ6h´Mkubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjM8jæjM8jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hXV**Parameters** ``struct audit_context *ctx`` audit_context (may be NULL) ``gfp_t gfp_mask`` type of allocation ``int type`` audit message type **Description** Returns audit_buffer pointer on success or NULL on error. Obtain an audit buffer. This routine does locking to obtain the audit buffer, but then no locking is required for calls to audit_log_*format. If the task (ctx) is a task that is currently in a syscall, then the syscall is marked as auditable and an audit record will be written at syscall exit. If there is no associated task, then task context (ctx) should be NULL.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjW8h]”hŒ Parameters”…”�”}”(hjY8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjU8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´MohjQ8ubj )�”}”(hhh]”(j)�”}”(hŒ:``struct audit_context *ctx`` audit_context (may be NULL) ”h]”(j)�”}”(hŒ``struct audit_context *ctx``”h]”j)�”}”(hjv8h]”hŒstruct audit_context *ctx”…”�”}”(hjx8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjt8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mlhjp8ubj2)�”}”(hhh]”hÝ)�”}”(hŒaudit_context (may be NULL)”h]”hŒaudit_context (may be NULL)”…”�”}”(hj�8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‹8h´MlhjŒ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjp8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹8h´Mlhjm8ubj)�”}”(hŒ&``gfp_t gfp_mask`` type of allocation ”h]”(j)�”}”(hŒ``gfp_t gfp_mask``”h]”j)�”}”(hj¯8h]”hŒgfp_t gfp_mask”…”�”}”(hj±8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mmhj©8ubj2)�”}”(hhh]”hÝ)�”}”(hŒtype of allocation”h]”hŒtype of allocation”…”�”}”(hjÈ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄ8h´MmhjÅ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj©8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄ8h´Mmhjm8ubj)�”}”(hŒ ``int type`` audit message type ”h]”(j)�”}”(hŒ ``int type``”h]”j)�”}”(hjè8h]”hŒint type”…”�”}”(hjê8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjæ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mnhjâ8ubj2)�”}”(hhh]”hÝ)�”}”(hŒaudit message type”h]”hŒaudit message type”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jý8h´Mnhjþ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjâ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jý8h´Mnhjm8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjQ8ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj#9h]”hŒ Description”…”�”}”(hj%9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´MphjQ8ubhÝ)�”}”(hŒ9Returns audit_buffer pointer on success or NULL on error.”h]”hŒ9Returns audit_buffer pointer on success or NULL on error.”…”�”}”(hj99h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´MohjQ8ubhÝ)�”}”(hXqObtain an audit buffer. This routine does locking to obtain the audit buffer, but then no locking is required for calls to audit_log_*format. If the task (ctx) is a task that is currently in a syscall, then the syscall is marked as auditable and an audit record will be written at syscall exit. If there is no associated task, then task context (ctx) should be NULL.”h]”hXqObtain an audit buffer. This routine does locking to obtain the audit buffer, but then no locking is required for calls to audit_log_*format. If the task (ctx) is a task that is currently in a syscall, then the syscall is marked as auditable and an audit record will be written at syscall exit. If there is no associated task, then task context (ctx) should be NULL.”…”�”}”(hjH9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´MqhjQ8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_log_format (C function)”Œc.audit_log_format”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEvoid audit_log_format (struct audit_buffer *ab, const char *fmt, ...)”h]”j)�”}”(hŒDvoid audit_log_format(struct audit_buffer *ab, const char *fmt, ...)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjw9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjs9h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjs9h²hh³j…9h´Mubj{)�”}”(hŒaudit_log_format”h]”j�)�”}”(hŒaudit_log_format”h]”hŒaudit_log_format”…”�”}”(hj˜9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”9ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjs9h²hh³j…9h´Mubjœ)�”}”(hŒ/(struct audit_buffer *ab, const char *fmt, ...)”h]”(j¢)�”}”(hŒstruct audit_buffer *ab”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj´9h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj°9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°9ubh)�”}”(hhh]”j�)�”}”(hŒ audit_buffer”h]”hŒ audit_buffer”…”�”}”(hjÒ9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏ9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÔ9Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jš9sbŒc.audit_log_format”†”asbuh1hhj°9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°9ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj°9ubj�)�”}”(hŒab”h]”hŒab”…”�”}”(hj :h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¬9ubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj&:h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj":ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj3:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj":ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjA:h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj":ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjO:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj":ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj]:h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj":ubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hjj:h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj":ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¬9ubj¢)�”}”(hŒ...”h]”jã)�”}”(hjÚh]”hŒ...”…”�”}”(hjƒ:h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj:ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¬9ubeh}”(h•]”h ]”h"]”h$]”h&]”j™jšuh1j›hjs9h²hh³j…9h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjo9h²hh³j…9h´Mubah}”(h]”jj9ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j…9h´Mhjl9h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'format a message into the audit buffer.”h]”hŒ'format a message into the audit buffer.”…”�”}”(hj¬:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mhj©:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjl9h²hh³j…9h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÄ:jæjÄ:jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒÓ**Parameters** ``struct audit_buffer *ab`` audit_buffer ``const char *fmt`` format string ``...`` optional parameters matching **fmt** string **Description** All the work is done in audit_log_vformat.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÎ:h]”hŒ Parameters”…”�”}”(hjÐ:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÌ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´MhjÈ:ubj )�”}”(hhh]”(j)�”}”(hŒ)``struct audit_buffer *ab`` audit_buffer ”h]”(j)�”}”(hŒ``struct audit_buffer *ab``”h]”j)�”}”(hjí:h]”hŒstruct audit_buffer *ab”…”�”}”(hjï:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjë:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mhjç:ubj2)�”}”(hhh]”hÝ)�”}”(hŒ audit_buffer”h]”hŒ audit_buffer”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;h´Mhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjç:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;h´Mhjä:ubj)�”}”(hŒ"``const char *fmt`` format string ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hj&;h]”hŒconst char *fmt”…”�”}”(hj(;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mhj ;ubj2)�”}”(hhh]”hÝ)�”}”(hŒ format string”h]”hŒ format string”…”�”}”(hj?;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;;h´Mhj<;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;;h´Mhjä:ubj)�”}”(hŒ4``...`` optional parameters matching **fmt** string ”h]”(j)�”}”(hŒ``...``”h]”j)�”}”(hj_;h]”hŒ...”…”�”}”(hja;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj];ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´MhjY;ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+optional parameters matching **fmt** string”h]”(hŒoptional parameters matching ”…”�”}”(hjx;h²hh³Nh´Nubjõ)�”}”(hŒ**fmt**”h]”hŒfmt”…”�”}”(hj€;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx;ubhŒ string”…”�”}”(hjx;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jt;h´Mhju;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjY;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jt;h´Mhjä:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÈ:ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¬;h]”hŒ Description”…”�”}”(hj®;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjª;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´M hjÈ:ubhÝ)�”}”(hŒ*All the work is done in audit_log_vformat.”h]”hŒ*All the work is done in audit_log_vformat.”…”�”}”(hjÂ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´MhjÈ:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_log_subj_ctx (C function)”Œc.audit_log_subj_ctx”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGint audit_log_subj_ctx (struct audit_buffer *ab, struct lsm_prop *prop)”h]”j)�”}”(hŒFint audit_log_subj_ctx(struct audit_buffer *ab, struct lsm_prop *prop)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjñ;h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjí;h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mûubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjí;h²hh³jÿ;h´Mûubj{)�”}”(hŒaudit_log_subj_ctx”h]”j�)�”}”(hŒaudit_log_subj_ctx”h]”hŒaudit_log_subj_ctx”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjí;h²hh³jÿ;h´Mûubjœ)�”}”(hŒ0(struct audit_buffer *ab, struct lsm_prop *prop)”h]”(j¢)�”}”(hŒstruct audit_buffer *ab”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj.<h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj*<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj*<ubh)�”}”(hhh]”j�)�”}”(hŒ audit_buffer”h]”hŒ audit_buffer”…”�”}”(hjL<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjI<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jN<Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j<sbŒc.audit_log_subj_ctx”†”asbuh1hhj*<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj*<ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjz<h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj*<ubj�)�”}”(hŒab”h]”hŒab”…”�”}”(hj‡<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj*<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj&<ubj¢)�”}”(hŒstruct lsm_prop *prop”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj <h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjœ<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœ<ubh)�”}”(hhh]”j�)�”}”(hŒlsm_prop”h]”hŒlsm_prop”…”�”}”(hj¾<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»<ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÀ<Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jh<Œc.audit_log_subj_ctx”†”asbuh1hhjœ<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœ<ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjê<h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjœ<ubj�)�”}”(hŒprop”h]”hŒprop”…”�”}”(hj÷<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœ<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj&<ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjí;h²hh³jÿ;h´Mûubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjé;h²hh³jÿ;h´Mûubah}”(h]”jä;ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÿ;h´Mûhjæ;h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒAdd LSM subject information”h]”hŒAdd LSM subject information”…”�”}”(hj!=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mûhj=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjæ;h²hh³jÿ;h´Mûubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj9=jæj9=jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒÈ**Parameters** ``struct audit_buffer *ab`` audit_buffer ``struct lsm_prop *prop`` LSM subject properties. **Description** Add a subj= field and, if necessary, a AUDIT_MAC_TASK_CONTEXTS record.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjC=h]”hŒ Parameters”…”�”}”(hjE=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjA=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mÿhj==ubj )�”}”(hhh]”(j)�”}”(hŒ)``struct audit_buffer *ab`` audit_buffer ”h]”(j)�”}”(hŒ``struct audit_buffer *ab``”h]”j)�”}”(hjb=h]”hŒstruct audit_buffer *ab”…”�”}”(hjd=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mühj\=ubj2)�”}”(hhh]”hÝ)�”}”(hŒ audit_buffer”h]”hŒ audit_buffer”…”�”}”(hj{=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jw=h´Mühjx=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj\=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jw=h´MühjY=ubj)�”}”(hŒ2``struct lsm_prop *prop`` LSM subject properties. ”h]”(j)�”}”(hŒ``struct lsm_prop *prop``”h]”j)�”}”(hj›=h]”hŒstruct lsm_prop *prop”…”�”}”(hj�=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mýhj•=ubj2)�”}”(hhh]”hÝ)�”}”(hŒLSM subject properties.”h]”hŒLSM subject properties.”…”�”}”(hj´=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j°=h´Mýhj±=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj•=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j°=h´MýhjY=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj==ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÖ=h]”hŒ Description”…”�”}”(hjØ=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔ=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mÿhj==ubhÝ)�”}”(hŒFAdd a subj= field and, if necessary, a AUDIT_MAC_TASK_CONTEXTS record.”h]”hŒFAdd a subj= field and, if necessary, a AUDIT_MAC_TASK_CONTEXTS record.”…”�”}”(hjì=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mþhj==ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_log_end (C function)”Œc.audit_log_end”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,void audit_log_end (struct audit_buffer *ab)”h]”j)�”}”(hŒ+void audit_log_end(struct audit_buffer *ab)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj>h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mõ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>h²hh³j)>h´Mõ ubj{)�”}”(hŒ audit_log_end”h]”j�)�”}”(hŒ audit_log_end”h]”hŒ audit_log_end”…”�”}”(hj<>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8>ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj>h²hh³j)>h´Mõ ubjœ)�”}”(hŒ(struct audit_buffer *ab)”h]”j¢)�”}”(hŒstruct audit_buffer *ab”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjX>h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjT>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjT>ubh)�”}”(hhh]”j�)�”}”(hŒ audit_buffer”h]”hŒ audit_buffer”…”�”}”(hjv>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjs>ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jx>Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j>>sbŒc.audit_log_end”†”asbuh1hhjT>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjT>ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¤>h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjT>ubj�)�”}”(hŒab”h]”hŒab”…”�”}”(hj±>h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjT>ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjP>ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj>h²hh³j)>h´Mõ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj>h²hh³j)>h´Mõ ubah}”(h]”j>ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j)>h´Mõ hj>h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒend one audit record”h]”hŒend one audit record”…”�”}”(hjÛ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mõ hjØ>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj>h²hh³j)>h´Mõ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjó>jæjó>jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hX^**Parameters** ``struct audit_buffer *ab`` the audit_buffer **Description** We can not do a netlink send inside an irq context because it blocks (last arg, flags, is not set to MSG_DONTWAIT), so the audit buffer is placed on a queue and a kthread is scheduled to remove them from the queue outside the irq context. May be called in any context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjý>h]”hŒ Parameters”…”�”}”(hjÿ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjû>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mù hj÷>ubj )�”}”(hhh]”j)�”}”(hŒ-``struct audit_buffer *ab`` the audit_buffer ”h]”(j)�”}”(hŒ``struct audit_buffer *ab``”h]”j)�”}”(hj?h]”hŒstruct audit_buffer *ab”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mö hj?ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe audit_buffer”h]”hŒthe audit_buffer”…”�”}”(hj5?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j1?h´Mö hj2?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1?h´Mö hj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj÷>ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjW?h]”hŒ Description”…”�”}”(hjY?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjU?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´Mø hj÷>ubhÝ)�”}”(hX We can not do a netlink send inside an irq context because it blocks (last arg, flags, is not set to MSG_DONTWAIT), so the audit buffer is placed on a queue and a kthread is scheduled to remove them from the queue outside the irq context. May be called in any context.”h]”hX We can not do a netlink send inside an irq context because it blocks (last arg, flags, is not set to MSG_DONTWAIT), so the audit buffer is placed on a queue and a kthread is scheduled to remove them from the queue outside the irq context. May be called in any context.”…”�”}”(hjm?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´M÷ hj÷>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_log (C function)”Œ c.audit_log”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒZvoid audit_log (struct audit_context *ctx, gfp_t gfp_mask, int type, const char *fmt, ...)”h]”j)�”}”(hŒYvoid audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type, const char *fmt, ...)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjœ?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj˜?h²hh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˜?h²hh³jª?h´M ubj{)�”}”(hŒ audit_log”h]”j�)�”}”(hŒ audit_log”h]”hŒ audit_log”…”�”}”(hj½?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹?ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj˜?h²hh³jª?h´M ubjœ)�”}”(hŒK(struct audit_context *ctx, gfp_t gfp_mask, int type, const char *fmt, ...)”h]”(j¢)�”}”(hŒstruct audit_context *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÙ?h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÕ?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕ?ubh)�”}”(hhh]”j�)�”}”(hŒ audit_context”h]”hŒ audit_context”…”�”}”(hj÷?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô?ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jù?Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¿?sbŒ c.audit_log”†”asbuh1hhjÕ?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕ?ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj%@h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÕ?ubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hj2@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕ?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÑ?ubj¢)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjN@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjK@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jP@Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j@Œ c.audit_log”†”asbuh1hhjG@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjG@ubj�)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjz@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjG@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÑ?ubj¢)�”}”(hŒint type”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj“@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�@ubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hj¯@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÑ?ubj¢)�”}”(hŒconst char *fmt”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÈ@h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÄ@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄ@ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjã@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÄ@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄ@ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÿ@h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÄ@ubj�)�”}”(hŒfmt”h]”hŒfmt”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÑ?ubj¢)�”}”(hŒ...”h]”jã)�”}”(hjÚh]”hŒ...”…”�”}”(hj%Ah²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!Aubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÑ?ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj˜?h²hh³jª?h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj”?h²hh³jª?h´M ubah}”(h]”j�?ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jª?h´M hj‘?h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒLog an audit record”h]”hŒLog an audit record”…”�”}”(hjNAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´M hjKAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‘?h²hh³jª?h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjfAjæjfAjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hX„**Parameters** ``struct audit_context *ctx`` audit context ``gfp_t gfp_mask`` type of allocation ``int type`` audit message type ``const char *fmt`` format string to use ``...`` variable parameters matching the format string **Description** This is a convenience function that calls audit_log_start, audit_log_vformat, and audit_log_end. It may be called in any context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjpAh]”hŒ Parameters”…”�”}”(hjrAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´M hjjAubj )�”}”(hhh]”(j)�”}”(hŒ,``struct audit_context *ctx`` audit context ”h]”(j)�”}”(hŒ``struct audit_context *ctx``”h]”j)�”}”(hj�Ah]”hŒstruct audit_context *ctx”…”�”}”(hj‘Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´M hj‰Aubj2)�”}”(hhh]”hÝ)�”}”(hŒ audit context”h]”hŒ audit context”…”�”}”(hj¨Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤Ah´M hj¥Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰Aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤Ah´M hj†Aubj)�”}”(hŒ&``gfp_t gfp_mask`` type of allocation ”h]”(j)�”}”(hŒ``gfp_t gfp_mask``”h]”j)�”}”(hjÈAh]”hŒgfp_t gfp_mask”…”�”}”(hjÊAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆAubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´M hjÂAubj2)�”}”(hhh]”hÝ)�”}”(hŒtype of allocation”h]”hŒtype of allocation”…”�”}”(hjáAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝAh´M hjÞAubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝAh´M hj†Aubj)�”}”(hŒ ``int type`` audit message type ”h]”(j)�”}”(hŒ ``int type``”h]”j)�”}”(hjBh]”hŒint type”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿAubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒS/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:292: ./kernel/audit.c”h´M hjûAubj2)�”}”(hhh]”hÝ)�”}”(hŒaudit message type”h]”hŒaudit message type”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jBh´M hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jBh´M hj†Aubj)�”}”(hŒ)``const char *fmt`` format string to use ”h]”(j)�”}”(hŒ``const char *fmt``”h]”j)�”}”(hj:Bh]”hŒconst char *fmt”…”�”}”(hjah"]”h$]”h&]”uh1j1hjïBh²hh³jCh´M.ubj{)�”}”(hŒ__audit_filter_op”h]”j�)�”}”(hŒ__audit_filter_op”h]”hŒ__audit_filter_op”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjïBh²hh³jCh´M.ubjœ)�”}”(hŒx(struct task_struct *tsk, struct audit_context *ctx, struct list_head *list, struct audit_names *name, unsigned long op)”h]”(j¢)�”}”(hŒstruct task_struct *tsk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj0Ch²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj,Cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=Ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,Cubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjNCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKCubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jPCŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jCsbŒc.__audit_filter_op”†”asbuh1hhj,Cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,Cubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj|Ch²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj,Cubj�)�”}”(hŒtsk”h]”hŒtsk”…”�”}”(hj‰Ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,Cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj(Cubj¢)�”}”(hŒstruct audit_context *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¢Ch²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjžCubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžCubh)�”}”(hhh]”j�)�”}”(hŒ audit_context”h]”hŒ audit_context”…”�”}”(hjÀCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½Cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÂCŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jjCŒc.__audit_filter_op”†”asbuh1hhjžCubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžCubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjìCh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjžCubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hjùCh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžCubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj(Cubj¢)�”}”(hŒstruct list_head *list”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjDubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj0Dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j2DŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jjCŒc.__audit_filter_op”†”asbuh1hhjDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjDubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj\Dh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjDubj�)�”}”(hŒlist”h]”hŒlist”…”�”}”(hjiDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj(Cubj¢)�”}”(hŒstruct audit_names *name”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‚Dh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj~Dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Dh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~Dubh)�”}”(hhh]”j�)�”}”(hŒ audit_names”h]”hŒ audit_names”…”�”}”(hj Dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Dubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¢DŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jjCŒc.__audit_filter_op”†”asbuh1hhj~Dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Dh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~Dubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÌDh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj~Dubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjÙDh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~Dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj(Cubj¢)�”}”(hŒunsigned long op”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjòDh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîDubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîDubj�)�”}”(hŒop”h]”hŒop”…”�”}”(hj*Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîDubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj(Cubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjïBh²hh³jCh´M.ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjëBh²hh³jCh´M.ubah}”(h]”jæBah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jCh´M.hjèBh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7common filter helper for operations (syscall/uring/etc)”h]”hŒ7common filter helper for operations (syscall/uring/etc)”…”�”}”(hjTEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M.hjQEh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjèBh²hh³jCh´M.ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjlEjæjlEjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hXq**Parameters** ``struct task_struct *tsk`` associated task ``struct audit_context *ctx`` audit context ``struct list_head *list`` audit filter list ``struct audit_names *name`` audit_name (can be NULL) ``unsigned long op`` current syscall/uring_op **Description** Run the udit filters specified in **list** against **tsk** using **ctx**, **name**, and **op**, as necessary; the caller is responsible for ensuring that the call is made while the RCU read lock is held. The **name** parameter can be NULL, but all others must be specified. Returns 1/true if the filter finds a match, 0/false if none are found.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjvEh]”hŒ Parameters”…”�”}”(hjxEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M2hjpEubj )�”}”(hhh]”(j)�”}”(hŒ,``struct task_struct *tsk`` associated task ”h]”(j)�”}”(hŒ``struct task_struct *tsk``”h]”j)�”}”(hj•Eh]”hŒstruct task_struct *tsk”…”�”}”(hj—Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M/hj�Eubj2)�”}”(hhh]”hÝ)�”}”(hŒassociated task”h]”hŒassociated task”…”�”}”(hj®Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jªEh´M/hj«Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªEh´M/hjŒEubj)�”}”(hŒ,``struct audit_context *ctx`` audit context ”h]”(j)�”}”(hŒ``struct audit_context *ctx``”h]”j)�”}”(hjÎEh]”hŒstruct audit_context *ctx”…”�”}”(hjÐEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌEubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M0hjÈEubj2)�”}”(hhh]”hÝ)�”}”(hŒ audit context”h]”hŒ audit context”…”�”}”(hjçEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jãEh´M0hjäEubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãEh´M0hjŒEubj)�”}”(hŒ-``struct list_head *list`` audit filter list ”h]”(j)�”}”(hŒ``struct list_head *list``”h]”j)�”}”(hjFh]”hŒstruct list_head *list”…”�”}”(hj Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M1hjFubj2)�”}”(hhh]”hÝ)�”}”(hŒaudit filter list”h]”hŒaudit filter list”…”�”}”(hj Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jFh´M1hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jFh´M1hjŒEubj)�”}”(hŒ6``struct audit_names *name`` audit_name (can be NULL) ”h]”(j)�”}”(hŒ``struct audit_names *name``”h]”j)�”}”(hj@Fh]”hŒstruct audit_names *name”…”�”}”(hjBFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M2hj:Fubj2)�”}”(hhh]”hÝ)�”}”(hŒaudit_name (can be NULL)”h]”hŒaudit_name (can be NULL)”…”�”}”(hjYFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jUFh´M2hjVFubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj:Fubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jUFh´M2hjŒEubj)�”}”(hŒ.``unsigned long op`` current syscall/uring_op ”h]”(j)�”}”(hŒ``unsigned long op``”h]”j)�”}”(hjyFh]”hŒunsigned long op”…”�”}”(hj{Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M3hjsFubj2)�”}”(hhh]”hÝ)�”}”(hŒcurrent syscall/uring_op”h]”hŒcurrent syscall/uring_op”…”�”}”(hj’Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŽFh´M3hj�Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjsFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽFh´M3hjŒEubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjpEubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj´Fh]”hŒ Description”…”�”}”(hj¶Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M5hjpEubhÝ)�”}”(hXXRun the udit filters specified in **list** against **tsk** using **ctx**, **name**, and **op**, as necessary; the caller is responsible for ensuring that the call is made while the RCU read lock is held. The **name** parameter can be NULL, but all others must be specified. Returns 1/true if the filter finds a match, 0/false if none are found.”h]”(hŒ"Run the udit filters specified in ”…”�”}”(hjÊFh²hh³Nh´Nubjõ)�”}”(hŒ**list**”h]”hŒlist”…”�”}”(hjÒFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊFubhŒ against ”…”�”}”(hjÊFh²hh³Nh´Nubjõ)�”}”(hŒ**tsk**”h]”hŒtsk”…”�”}”(hjäFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊFubhŒ using ”…”�”}”(hjÊFh²hh³Nh´Nubjõ)�”}”(hŒ**ctx**”h]”hŒctx”…”�”}”(hjöFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊFubhŒ, ”…”�”}”(hjÊFh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊFubhŒ, and ”…”�”}”(hjÊFh²hh³Nh´Nubjõ)�”}”(hŒ**op**”h]”hŒop”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊFubhŒr, as necessary; the caller is responsible for ensuring that the call is made while the RCU read lock is held. The ”…”�”}”(hjÊFh²hh³Nh´Nubjõ)�”}”(hŒ**name**”h]”hŒname”…”�”}”(hj,Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊFubhŒ€ parameter can be NULL, but all others must be specified. Returns 1/true if the filter finds a match, 0/false if none are found.”…”�”}”(hjÊFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M4hjpEubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_filter_uring (C function)”Œc.audit_filter_uring”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLvoid audit_filter_uring (struct task_struct *tsk, struct audit_context *ctx)”h]”j)�”}”(hŒKvoid audit_filter_uring(struct task_struct *tsk, struct audit_context *ctx)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjeGh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjaGh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MPubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjaGh²hh³jsGh´MPubj{)�”}”(hŒaudit_filter_uring”h]”j�)�”}”(hŒaudit_filter_uring”h]”hŒaudit_filter_uring”…”�”}”(hj†Gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚Gubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjaGh²hh³jsGh´MPubjœ)�”}”(hŒ4(struct task_struct *tsk, struct audit_context *ctx)”h]”(j¢)�”}”(hŒstruct task_struct *tsk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¢Gh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjžGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Gh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžGubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjÀGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½Gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÂGŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jˆGsbŒc.audit_filter_uring”†”asbuh1hhjžGubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžGubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjîGh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjžGubj�)�”}”(hŒtsk”h]”hŒtsk”…”�”}”(hjûGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžGubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjšGubj¢)�”}”(hŒstruct audit_context *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!Hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHubh)�”}”(hhh]”j�)�”}”(hŒ audit_context”h]”hŒ audit_context”…”�”}”(hj2Hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/Hubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j4HŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÜGŒc.audit_filter_uring”†”asbuh1hhjHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj^Hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjHubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hjkHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjšGubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjaGh²hh³jsGh´MPubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj]Gh²hh³jsGh´MPubah}”(h]”jXGah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jsGh´MPhjZGh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&apply filters to an io_uring operation”h]”hŒ&apply filters to an io_uring operation”…”�”}”(hj•Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MPhj’Hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjZGh²hh³jsGh´MPubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj­Hjæj­Hjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒl**Parameters** ``struct task_struct *tsk`` associated task ``struct audit_context *ctx`` audit context”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj·Hh]”hŒ Parameters”…”�”}”(hj¹Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MThj±Hubj )�”}”(hhh]”(j)�”}”(hŒ,``struct task_struct *tsk`` associated task ”h]”(j)�”}”(hŒ``struct task_struct *tsk``”h]”j)�”}”(hjÖHh]”hŒstruct task_struct *tsk”…”�”}”(hjØHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔHubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MQhjÐHubj2)�”}”(hhh]”hÝ)�”}”(hŒassociated task”h]”hŒassociated task”…”�”}”(hjïHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jëHh´MQhjìHubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÐHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jëHh´MQhjÍHubj)�”}”(hŒ+``struct audit_context *ctx`` audit context”h]”(j)�”}”(hŒ``struct audit_context *ctx``”h]”j)�”}”(hjIh]”hŒstruct audit_context *ctx”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MShj Iubj2)�”}”(hhh]”hÝ)�”}”(hŒ audit context”h]”hŒ audit context”…”�”}”(hj(Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MRhj%Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$Ih´MShjÍHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj±Hubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ audit_reset_context (C function)”Œc.audit_reset_context”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4void audit_reset_context (struct audit_context *ctx)”h]”j)�”}”(hŒ3void audit_reset_context(struct audit_context *ctx)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjiIh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjeIh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjxIh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeIh²hh³jwIh´MÄubj{)�”}”(hŒaudit_reset_context”h]”j�)�”}”(hŒaudit_reset_context”h]”hŒaudit_reset_context”…”�”}”(hjŠIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†Iubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjeIh²hh³jwIh´MÄubjœ)�”}”(hŒ(struct audit_context *ctx)”h]”j¢)�”}”(hŒstruct audit_context *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¦Ih²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¢Iubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢Iubh)�”}”(hhh]”j�)�”}”(hŒ audit_context”h]”hŒ audit_context”…”�”}”(hjÄIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁIubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÆIŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŒIsbŒc.audit_reset_context”†”asbuh1hhj¢Iubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäIh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢Iubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjòIh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¢Iubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hjÿIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢Iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjžIubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjeIh²hh³jwIh´MÄubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjaIh²hh³jwIh´MÄubah}”(h]”j\Iah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jwIh´MÄhj^Ih²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒreset a audit_context structure”h]”hŒreset a audit_context structure”…”�”}”(hj)Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÄhj&Jh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj^Ih²hh³jwIh´MÄubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjAJjæjAJjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hX{**Parameters** ``struct audit_context *ctx`` the audit_context to reset **Description** All fields in the audit_context will be reset to an initial state, all references held by fields will be dropped, and private memory will be released. When this function returns the audit_context will be suitable for reuse, so long as the passed context is not NULL or a dummy context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjKJh]”hŒ Parameters”…”�”}”(hjMJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjIJubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÈhjEJubj )�”}”(hhh]”j)�”}”(hŒ9``struct audit_context *ctx`` the audit_context to reset ”h]”(j)�”}”(hŒ``struct audit_context *ctx``”h]”j)�”}”(hjjJh]”hŒstruct audit_context *ctx”…”�”}”(hjlJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjhJubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÅhjdJubj2)�”}”(hhh]”hÝ)�”}”(hŒthe audit_context to reset”h]”hŒthe audit_context to reset”…”�”}”(hjƒJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jJh´MÅhj€Jubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjdJubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJh´MÅhjaJubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjEJubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¥Jh]”hŒ Description”…”�”}”(hj§Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£Jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÇhjEJubhÝ)�”}”(hXAll fields in the audit_context will be reset to an initial state, all references held by fields will be dropped, and private memory will be released. When this function returns the audit_context will be suitable for reuse, so long as the passed context is not NULL or a dummy context.”h]”hXAll fields in the audit_context will be reset to an initial state, all references held by fields will be dropped, and private memory will be released. When this function returns the audit_context will be suitable for reuse, so long as the passed context is not NULL or a dummy context.”…”�”}”(hj»Jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÆhjEJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_alloc (C function)”Œ c.audit_alloc”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)int audit_alloc (struct task_struct *tsk)”h]”j)�”}”(hŒ(int audit_alloc(struct task_struct *tsk)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjêJh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjæJh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæJh²hh³jøJh´Mubj{)�”}”(hŒ audit_alloc”h]”j�)�”}”(hŒ audit_alloc”h]”hŒ audit_alloc”…”�”}”(hj Kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjæJh²hh³jøJh´Mubjœ)�”}”(hŒ(struct task_struct *tsk)”h]”j¢)�”}”(hŒstruct task_struct *tsk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj'Kh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj#Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4Kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#Kubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjEKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjBKubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jGKŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j KsbŒ c.audit_alloc”†”asbuh1hhj#Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeKh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#Kubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjsKh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj#Kubj�)�”}”(hŒtsk”h]”hŒtsk”…”�”}”(hj€Kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#Kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjKubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjæJh²hh³jøJh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjâJh²hh³jøJh´Mubah}”(h]”jÝJah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jøJh´MhjßJh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*allocate an audit context block for a task”h]”hŒ*allocate an audit context block for a task”…”�”}”(hjªKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mhj§Kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjßJh²hh³jøJh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÂKjæjÂKjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hX**Parameters** ``struct task_struct *tsk`` task **Description** Filter on the task information and allocate a per-task audit context if necessary. Doing so turns on system call auditing for the specified task. This is called from copy_process, so no lock is needed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÌKh]”hŒ Parameters”…”�”}”(hjÎKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊKubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MhjÆKubj )�”}”(hhh]”j)�”}”(hŒ!``struct task_struct *tsk`` task ”h]”(j)�”}”(hŒ``struct task_struct *tsk``”h]”j)�”}”(hjëKh]”hŒstruct task_struct *tsk”…”�”}”(hjíKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MhjåKubj2)�”}”(hhh]”hÝ)�”}”(hŒtask”h]”hŒtask”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jLh´MhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjåKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jLh´MhjâKubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÆKubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj&Lh]”hŒ Description”…”�”}”(hj(Lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$Lubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MhjÆKubhÝ)�”}”(hŒËFilter on the task information and allocate a per-task audit context if necessary. Doing so turns on system call auditing for the specified task. This is called from copy_process, so no lock is needed.”h]”hŒËFilter on the task information and allocate a per-task audit context if necessary. Doing so turns on system call auditing for the specified task. This is called from copy_process, so no lock is needed.”…”�”}”(hjah"]”h$]”h&]”uh1j1hjgLh²hh³jyLh´MOubj{)�”}”(hŒaudit_log_uring”h]”j�)�”}”(hŒaudit_log_uring”h]”hŒaudit_log_uring”…”�”}”(hjŒLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆLubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjgLh²hh³jyLh´MOubjœ)�”}”(hŒ(struct audit_context *ctx)”h]”j¢)�”}”(hŒstruct audit_context *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¨Lh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¤Lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤Lubh)�”}”(hhh]”j�)�”}”(hŒ audit_context”h]”hŒ audit_context”…”�”}”(hjÆLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÃLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÈLŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŽLsbŒc.audit_log_uring”†”asbuh1hhj¤Lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤Lubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjôLh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¤Lubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Lubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjgLh²hh³jyLh´MOubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjcLh²hh³jyLh´MOubah}”(h]”j^Lah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jyLh´MOhj`Lh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒgenerate a AUDIT_URINGOP record”h]”hŒgenerate a AUDIT_URINGOP record”…”�”}”(hj+Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MOhj(Mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj`Lh²hh³jyLh´MOubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjCMjæjCMjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒA**Parameters** ``struct audit_context *ctx`` the audit context”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjMMh]”hŒ Parameters”…”�”}”(hjOMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjKMubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MShjGMubj )�”}”(hhh]”j)�”}”(hŒ/``struct audit_context *ctx`` the audit context”h]”(j)�”}”(hŒ``struct audit_context *ctx``”h]”j)�”}”(hjlMh]”hŒstruct audit_context *ctx”…”�”}”(hjnMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjMubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MUhjfMubj2)�”}”(hhh]”hÝ)�”}”(hŒthe audit context”h]”hŒthe audit context”…”�”}”(hj…Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MPhj‚Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjfMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�Mh´MUhjcMubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjGMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_free (C function)”Œc.__audit_free”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+void __audit_free (struct task_struct *tsk)”h]”j)�”}”(hŒ*void __audit_free(struct task_struct *tsk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÆMh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÂMh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕMh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂMh²hh³jÔMh´Mubj{)�”}”(hŒ __audit_free”h]”j�)�”}”(hŒ __audit_free”h]”hŒ __audit_free”…”�”}”(hjçMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjãMubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÂMh²hh³jÔMh´Mubjœ)�”}”(hŒ(struct task_struct *tsk)”h]”j¢)�”}”(hŒstruct task_struct *tsk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÿMubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿMubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hj!Nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j#NŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jéMsbŒc.__audit_free”†”asbuh1hhjÿMubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjANh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿMubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjONh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÿMubj�)�”}”(hŒtsk”h]”hŒtsk”…”�”}”(hj\Nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjûMubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÂMh²hh³jÔMh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¾Mh²hh³jÔMh´Mubah}”(h]”j¹Mah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÔMh´Mhj»Mh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒfree a per-task audit context”h]”hŒfree a per-task audit context”…”�”}”(hj†Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MhjƒNh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj»Mh²hh³jÔMh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjžNjæjžNjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒŸ**Parameters** ``struct task_struct *tsk`` task whose audit context block to free **Description** Called from copy_process, do_exit, and the io_uring code”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¨Nh]”hŒ Parameters”…”�”}”(hjªNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M hj¢Nubj )�”}”(hhh]”j)�”}”(hŒC``struct task_struct *tsk`` task whose audit context block to free ”h]”(j)�”}”(hŒ``struct task_struct *tsk``”h]”j)�”}”(hjÇNh]”hŒstruct task_struct *tsk”…”�”}”(hjÉNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅNubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MhjÁNubj2)�”}”(hhh]”hÝ)�”}”(hŒ&task whose audit context block to free”h]”hŒ&task whose audit context block to free”…”�”}”(hjàNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÜNh´MhjÝNubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÁNubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÜNh´Mhj¾Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¢NubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjOh]”hŒ Description”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mhj¢NubhÝ)�”}”(hŒ8Called from copy_process, do_exit, and the io_uring code”h]”hŒ8Called from copy_process, do_exit, and the io_uring code”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mhj¢Nubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_return_fixup (C function)”Œc.audit_return_fixup”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒKvoid audit_return_fixup (struct audit_context *ctx, int success, long code)”h]”j)�”}”(hŒJvoid audit_return_fixup(struct audit_context *ctx, int success, long code)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjGOh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjCOh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjVOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjCOh²hh³jUOh´M0ubj{)�”}”(hŒaudit_return_fixup”h]”j�)�”}”(hŒaudit_return_fixup”h]”hŒaudit_return_fixup”…”�”}”(hjhOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdOubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjCOh²hh³jUOh´M0ubjœ)�”}”(hŒ3(struct audit_context *ctx, int success, long code)”h]”(j¢)�”}”(hŒstruct audit_context *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj„Oh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj€Oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€Oubh)�”}”(hhh]”j�)�”}”(hŒ audit_context”h]”hŒ audit_context”…”�”}”(hj¢Oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¤OŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jjOsbŒc.audit_return_fixup”†”asbuh1hhj€Oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€Oubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÐOh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj€Oubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hjÝOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj€Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj|Oubj¢)�”}”(hŒ int success”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjöOh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjòOubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòOubj�)�”}”(hŒsuccess”h]”hŒsuccess”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòOubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj|Oubj¢)�”}”(hŒ long code”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj+Ph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj'Pubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Ph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'Pubj�)�”}”(hŒcode”h]”hŒcode”…”�”}”(hjGPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'Pubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj|Oubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjCOh²hh³jUOh´M0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj?Oh²hh³jUOh´M0ubah}”(h]”j:Oah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jUOh´M0hjtrue/false value to indicate if the operation succeeded or not”h]”hŒ>true/false value to indicate if the operation succeeded or not”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQh´M2hjQubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjåPubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQh´M2hj©Pubj)�”}”(hŒ$``long code`` operation return code ”h]”(j)�”}”(hŒ ``long code``”h]”j)�”}”(hj$Qh]”hŒ long code”…”�”}”(hj&Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"Qubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M3hjQubj2)�”}”(hhh]”hÝ)�”}”(•hŒoperation return code”h]”hŒoperation return code”…”�”}”(hj=Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j9Qh´M3hj:Qubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9Qh´M3hj©Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj�PubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj_Qh]”hŒ Description”…”�”}”(hjaQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj]Qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M5hj�PubhÝ)�”}”(hŒ�We need to fixup the return code in the audit logs if the actual return codes are later going to be fixed by the arch specific signal handlers.”h]”hŒ�We need to fixup the return code in the audit logs if the actual return codes are later going to be fixed by the arch specific signal handlers.”…”�”}”(hjuQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M4hj�Pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ __audit_uring_entry (C function)”Œc.__audit_uring_entry”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ void __audit_uring_entry (u8 op)”h]”j)�”}”(hŒvoid __audit_uring_entry(u8 op)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¤Qh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Qh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Qh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Qh²hh³j²Qh´MLubj{)�”}”(hŒ__audit_uring_entry”h]”j�)�”}”(hŒ__audit_uring_entry”h]”hŒ__audit_uring_entry”…”�”}”(hjÅQh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁQubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Qh²hh³j²Qh´MLubjœ)�”}”(hŒ(u8 op)”h]”j¢)�”}”(hŒu8 op”h]”(h)�”}”(hhh]”j�)�”}”(hŒu8”h]”hŒu8”…”�”}”(hjäQh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáQubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jæQŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÇQsbŒc.__audit_uring_entry”†”asbuh1hhjÝQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝQubj�)�”}”(hŒop”h]”hŒop”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝQubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙQubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Qh²hh³j²Qh´MLubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjœQh²hh³j²Qh´MLubah}”(h]”j—Qah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²Qh´MLhj™Qh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4prepare the kernel task's audit context for io_uring”h]”hŒ6prepare the kernel task’s audit context for io_uring”…”�”}”(hjah"]”h$]”h&]”uh1j1hjùRh²hh³j Sh´Moubj{)�”}”(hŒ__audit_uring_exit”h]”j�)�”}”(hŒ__audit_uring_exit”h]”hŒ__audit_uring_exit”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjùRh²hh³j Sh´Moubjœ)�”}”(hŒ(int success, long code)”h]”(j¢)�”}”(hŒ int success”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj:Sh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6Subj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6Subj�)�”}”(hŒsuccess”h]”hŒsuccess”…”�”}”(hjVSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6Subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj2Subj¢)�”}”(hŒ long code”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjoSh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjkSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Sh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjkSubj�)�”}”(hŒcode”h]”hŒcode”…”�”}”(hj‹Sh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj2Subeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjùRh²hh³j Sh´Moubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjõRh²hh³j Sh´Moubah}”(h]”jðRah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j Sh´MohjòRh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6wrap up the kernel task's audit context after io_uring”h]”hŒ8wrap up the kernel task’s audit context after io_uring”…”�”}”(hjµSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mohj²Sh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjòRh²hh³j Sh´Moubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÍSjæjÍSjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hXv**Parameters** ``int success`` true/false value to indicate if the operation succeeded or not ``long code`` operation return code **Description** This is similar to audit_syscall_exit() but is intended for use by io_uring operations. This function should only ever be called from audit_uring_exit() as we rely on the audit context checking present in that function.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj×Sh]”hŒ Parameters”…”�”}”(hjÙSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÕSubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MshjÑSubj )�”}”(hhh]”(j)�”}”(hŒO``int success`` true/false value to indicate if the operation succeeded or not ”h]”(j)�”}”(hŒ``int success``”h]”j)�”}”(hjöSh]”hŒ int success”…”�”}”(hjøSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôSubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MphjðSubj2)�”}”(hhh]”hÝ)�”}”(hŒ>true/false value to indicate if the operation succeeded or not”h]”hŒ>true/false value to indicate if the operation succeeded or not”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Th´Mphj Tubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Th´MphjíSubj)�”}”(hŒ$``long code`` operation return code ”h]”(j)�”}”(hŒ ``long code``”h]”j)�”}”(hj/Th]”hŒ long code”…”�”}”(hj1Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mqhj)Tubj2)�”}”(hhh]”hÝ)�”}”(hŒoperation return code”h]”hŒoperation return code”…”�”}”(hjHTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jDTh´MqhjETubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj)Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jDTh´MqhjíSubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÑSubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjjTh]”hŒ Description”…”�”}”(hjlTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhTubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MshjÑSubhÝ)�”}”(hŒÜThis is similar to audit_syscall_exit() but is intended for use by io_uring operations. This function should only ever be called from audit_uring_exit() as we rely on the audit context checking present in that function.”h]”hŒÜThis is similar to audit_syscall_exit() but is intended for use by io_uring operations. This function should only ever be called from audit_uring_exit() as we rely on the audit context checking present in that function.”…”�”}”(hj€Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MrhjÑSubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"__audit_syscall_entry (C function)”Œc.__audit_syscall_entry”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒnvoid __audit_syscall_entry (int major, unsigned long a1, unsigned long a2, unsigned long a3, unsigned long a4)”h]”j)�”}”(hŒmvoid __audit_syscall_entry(int major, unsigned long a1, unsigned long a2, unsigned long a3, unsigned long a4)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¯Th²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj«Th²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«Th²hh³j½Th´M³ubj{)�”}”(hŒ__audit_syscall_entry”h]”j�)�”}”(hŒ__audit_syscall_entry”h]”hŒ__audit_syscall_entry”…”�”}”(hjÐTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌTubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj«Th²hh³j½Th´M³ubjœ)�”}”(hŒS(int major, unsigned long a1, unsigned long a2, unsigned long a3, unsigned long a4)”h]”(j¢)�”}”(hŒ int major”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjìTh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjèTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèTubj�)�”}”(hŒmajor”h]”hŒmajor”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäTubj¢)�”}”(hŒunsigned long a1”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj!Uh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/Uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj=Uh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUubj�)�”}”(hŒa1”h]”hŒa1”…”�”}”(hjYUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäTubj¢)�”}”(hŒunsigned long a2”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjrUh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€Uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnUubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŽUh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnUubj�)�”}”(hŒa2”h]”hŒa2”…”�”}”(hjªUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäTubj¢)�”}”(hŒunsigned long a3”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÃUh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿Uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿Uubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjßUh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿Uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿Uubj�)�”}”(hŒa3”h]”hŒa3”…”�”}”(hjûUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäTubj¢)�”}”(hŒunsigned long a4”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"Vh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj0Vh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>Vh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVubj�)�”}”(hŒa4”h]”hŒa4”…”�”}”(hjLVh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäTubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj«Th²hh³j½Th´M³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj§Th²hh³j½Th´M³ubah}”(h]”j¢Tah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j½Th´M³hj¤Th²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(fill in an audit record at syscall entry”h]”hŒ(fill in an audit record at syscall entry”…”�”}”(hjvVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M³hjsVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¤Th²hh³j½Th´M³ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŽVjæjŽVjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hXË**Parameters** ``int major`` major syscall type (function) ``unsigned long a1`` additional syscall register 1 ``unsigned long a2`` additional syscall register 2 ``unsigned long a3`` additional syscall register 3 ``unsigned long a4`` additional syscall register 4 **Description** Fill in audit context at syscall entry. This only happens if the audit context was created when the task was created and the state or filters demand the audit context be built. If the state from the per-task filter or from the per-syscall filter is AUDIT_STATE_RECORD, then the record will be written at syscall exit time (otherwise, it will only be written if another part of the kernel requests that it be written).”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj˜Vh]”hŒ Parameters”…”�”}”(hjšVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj–Vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M·hj’Vubj )�”}”(hhh]”(j)�”}”(hŒ,``int major`` major syscall type (function) ”h]”(j)�”}”(hŒ ``int major``”h]”j)�”}”(hj·Vh]”hŒ int major”…”�”}”(hj¹Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµVubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M´hj±Vubj2)�”}”(hhh]”hÝ)�”}”(hŒmajor syscall type (function)”h]”hŒmajor syscall type (function)”…”�”}”(hjÐVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌVh´M´hjÍVubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌVh´M´hj®Vubj)�”}”(hŒ3``unsigned long a1`` additional syscall register 1 ”h]”(j)�”}”(hŒ``unsigned long a1``”h]”j)�”}”(hjðVh]”hŒunsigned long a1”…”�”}”(hjòVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjîVubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MµhjêVubj2)�”}”(hhh]”hÝ)�”}”(hŒadditional syscall register 1”h]”hŒadditional syscall register 1”…”�”}”(hj Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jWh´MµhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjêVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jWh´Mµhj®Vubj)�”}”(hŒ3``unsigned long a2`` additional syscall register 2 ”h]”(j)�”}”(hŒ``unsigned long a2``”h]”j)�”}”(hj)Wh]”hŒunsigned long a2”…”�”}”(hj+Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M¶hj#Wubj2)�”}”(hhh]”hÝ)�”}”(hŒadditional syscall register 2”h]”hŒadditional syscall register 2”…”�”}”(hjBWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j>Wh´M¶hj?Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj#Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>Wh´M¶hj®Vubj)�”}”(hŒ3``unsigned long a3`` additional syscall register 3 ”h]”(j)�”}”(hŒ``unsigned long a3``”h]”j)�”}”(hjbWh]”hŒunsigned long a3”…”�”}”(hjdWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M·hj\Wubj2)�”}”(hhh]”hÝ)�”}”(hŒadditional syscall register 3”h]”hŒadditional syscall register 3”…”�”}”(hj{Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jwWh´M·hjxWubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj\Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jwWh´M·hj®Vubj)�”}”(hŒ3``unsigned long a4`` additional syscall register 4 ”h]”(j)�”}”(hŒ``unsigned long a4``”h]”j)�”}”(hj›Wh]”hŒunsigned long a4”…”�”}”(hj�Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M¸hj•Wubj2)�”}”(hhh]”hÝ)�”}”(hŒadditional syscall register 4”h]”hŒadditional syscall register 4”…”�”}”(hj´Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j°Wh´M¸hj±Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj•Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j°Wh´M¸hj®Vubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj’VubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÖWh]”hŒ Description”…”�”}”(hjØWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔWubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mºhj’VubhÝ)�”}”(hX£Fill in audit context at syscall entry. This only happens if the audit context was created when the task was created and the state or filters demand the audit context be built. If the state from the per-task filter or from the per-syscall filter is AUDIT_STATE_RECORD, then the record will be written at syscall exit time (otherwise, it will only be written if another part of the kernel requests that it be written).”h]”hX£Fill in audit context at syscall entry. This only happens if the audit context was created when the task was created and the state or filters demand the audit context be built. If the state from the per-task filter or from the per-syscall filter is AUDIT_STATE_RECORD, then the record will be written at syscall exit time (otherwise, it will only be written if another part of the kernel requests that it be written).”…”�”}”(hjìWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M¹hj’Vubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!__audit_syscall_exit (C function)”Œc.__audit_syscall_exit”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9void __audit_syscall_exit (int success, long return_code)”h]”j)�”}”(hŒ8void __audit_syscall_exit(int success, long return_code)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjXh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Méubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXh²hh³j)Xh´Méubj{)�”}”(hŒ__audit_syscall_exit”h]”j�)�”}”(hŒ__audit_syscall_exit”h]”hŒ__audit_syscall_exit”…”�”}”(hjah"]”h$]”h&]”uh1j1hjTXubj�)�”}”(hŒsuccess”h]”hŒsuccess”…”�”}”(hjtXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjPXubj¢)�”}”(hŒlong return_code”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj�Xh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‰Xubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰Xubj�)�”}”(hŒ return_code”h]”hŒ return_code”…”�”}”(hj©Xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰Xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjPXubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjXh²hh³j)Xh´Méubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjXh²hh³j)Xh´Méubah}”(h]”jXah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j)Xh´MéhjXh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,deallocate audit context after a system call”h]”hŒ,deallocate audit context after a system call”…”�”}”(hjÓXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MéhjÐXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjXh²hh³j)Xh´Méubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjëXjæjëXjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hX´**Parameters** ``int success`` success value of the syscall ``long return_code`` return value of the syscall **Description** Tear down after system call. If the audit context has been marked as auditable (either because of the AUDIT_STATE_RECORD state from filtering, or because some other part of the kernel wrote an audit message), then write out the syscall information. In call cases, free the names stored from getname().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjõXh]”hŒ Parameters”…”�”}”(hj÷Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjóXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MíhjïXubj )�”}”(hhh]”(j)�”}”(hŒ-``int success`` success value of the syscall ”h]”(j)�”}”(hŒ``int success``”h]”j)�”}”(hjYh]”hŒ int success”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MêhjYubj2)�”}”(hhh]”hÝ)�”}”(hŒsuccess value of the syscall”h]”hŒsuccess value of the syscall”…”�”}”(hj-Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j)Yh´Mêhj*Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)Yh´Mêhj Yubj)�”}”(hŒ1``long return_code`` return value of the syscall ”h]”(j)�”}”(hŒ``long return_code``”h]”j)�”}”(hjMYh]”hŒlong return_code”…”�”}”(hjOYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKYubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MëhjGYubj2)�”}”(hhh]”hÝ)�”}”(hŒreturn value of the syscall”h]”hŒreturn value of the syscall”…”�”}”(hjfYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jbYh´MëhjcYubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjGYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbYh´Mëhj Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjïXubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjˆYh]”hŒ Description”…”�”}”(hjŠYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†Yubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MíhjïXubhÝ)�”}”(hX/Tear down after system call. If the audit context has been marked as auditable (either because of the AUDIT_STATE_RECORD state from filtering, or because some other part of the kernel wrote an audit message), then write out the syscall information. In call cases, free the names stored from getname().”h]”hX/Tear down after system call. If the audit context has been marked as auditable (either because of the AUDIT_STATE_RECORD state from filtering, or because some other part of the kernel wrote an audit message), then write out the syscall information. In call cases, free the names stored from getname().”…”�”}”(hjžYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MìhjïXubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_getname (C function)”Œc.__audit_getname”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,void __audit_getname (struct filename *name)”h]”j)�”}”(hŒ+void __audit_getname(struct filename *name)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÍYh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÉYh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉYh²hh³jÛYh´M}ubj{)�”}”(hŒ__audit_getname”h]”j�)�”}”(hŒ__audit_getname”h]”hŒ__audit_getname”…”�”}”(hjîYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêYubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÉYh²hh³jÛYh´M}ubjœ)�”}”(hŒ(struct filename *name)”h]”j¢)�”}”(hŒstruct filename *name”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj Zh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZubh)�”}”(hhh]”j�)�”}”(hŒfilename”h]”hŒfilename”…”�”}”(hj(Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%Zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j*ZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jðYsbŒc.__audit_getname”†”asbuh1hhjZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjVZh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjcZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjZubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÉYh²hh³jÛYh´M}ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÅYh²hh³jÛYh´M}ubah}”(h]”jÀYah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÛYh´M}hjÂYh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒadd a name to the list”h]”hŒadd a name to the list”…”�”}”(hj�Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M}hjŠZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÂYh²hh³jÛYh´M}ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¥Zjæj¥Zjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒ£**Parameters** ``struct filename *name`` name to add **Description** Add a name to the list of audit names for this context. Called from fs/namei.c:getname().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¯Zh]”hŒ Parameters”…”�”}”(hj±Zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­Zubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M�hj©Zubj )�”}”(hhh]”j)�”}”(hŒ&``struct filename *name`` name to add ”h]”(j)�”}”(hŒ``struct filename *name``”h]”j)�”}”(hjÎZh]”hŒstruct filename *name”…”�”}”(hjÐZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌZubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M~hjÈZubj2)�”}”(hhh]”hÝ)�”}”(hŒ name to add”h]”hŒ name to add”…”�”}”(hjçZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jãZh´M~hjäZubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãZh´M~hjÅZubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj©ZubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj [h]”hŒ Description”…”�”}”(hj [h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M€hj©ZubhÝ)�”}”(hŒYAdd a name to the list of audit names for this context. Called from fs/namei.c:getname().”h]”hŒYAdd a name to the list of audit names for this context. Called from fs/namei.c:getname().”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mhj©Zubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_inode (C function)”Œc.__audit_inode”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ[void __audit_inode (struct filename *name, const struct dentry *dentry, unsigned int flags)”h]”j)�”}”(hŒZvoid __audit_inode(struct filename *name, const struct dentry *dentry, unsigned int flags)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjN[h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjJ[h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÀubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj][h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ[h²hh³j\[h´MÀubj{)�”}”(hŒ __audit_inode”h]”j�)�”}”(hŒ __audit_inode”h]”hŒ __audit_inode”…”�”}”(hjo[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjk[ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjJ[h²hh³j\[h´MÀubjœ)�”}”(hŒH(struct filename *name, const struct dentry *dentry, unsigned int flags)”h]”(j¢)�”}”(hŒstruct filename *name”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‹[h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡[ubh)�”}”(hhh]”j�)�”}”(hŒfilename”h]”hŒfilename”…”�”}”(hj©[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦[ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j«[Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jq[sbŒc.__audit_inode”†”asbuh1hhj‡[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡[ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj×[h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‡[ubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjä[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒ[ubj¢)�”}”(hŒconst struct dentry *dentry”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjý[h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjù[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj \h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjù[ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjù[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjù[ubh)�”}”(hhh]”j�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hj6\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j8\Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÅ[Œc.__audit_inode”†”asbuh1hhjù[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjù[ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjb\h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjù[ubj�)�”}”(hŒdentry”h]”hŒdentry”…”�”}”(hjo\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjù[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒ[ubj¢)�”}”(hŒunsigned int flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjˆ\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj„\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„\ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj¤\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj„\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„\ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjÀ\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒ[ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjJ[h²hh³j\[h´MÀubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjF[h²hh³j\[h´MÀubah}”(h]”jA[ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j\[h´MÀhjC[h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(store the inode and device from a lookup”h]”hŒ(store the inode and device from a lookup”…”�”}”(hjê\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÀhjç\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjC[h²hh³j\[h´MÀubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj]jæj]jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒµ**Parameters** ``struct filename *name`` name being audited ``const struct dentry *dentry`` dentry being audited ``unsigned int flags`` attributes for this particular entry”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj ]h]”hŒ Parameters”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÄhj]ubj )�”}”(hhh]”(j)�”}”(hŒ-``struct filename *name`` name being audited ”h]”(j)�”}”(hŒ``struct filename *name``”h]”j)�”}”(hj+]h]”hŒstruct filename *name”…”�”}”(hj-]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÁhj%]ubj2)�”}”(hhh]”hÝ)�”}”(hŒname being audited”h]”hŒname being audited”…”�”}”(hjD]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@]h´MÁhjA]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@]h´MÁhj"]ubj)�”}”(hŒ5``const struct dentry *dentry`` dentry being audited ”h]”(j)�”}”(hŒ``const struct dentry *dentry``”h]”j)�”}”(hjd]h]”hŒconst struct dentry *dentry”…”�”}”(hjf]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÂhj^]ubj2)�”}”(hhh]”hÝ)�”}”(hŒdentry being audited”h]”hŒdentry being audited”…”�”}”(hj}]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jy]h´MÂhjz]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jy]h´MÂhj"]ubj)�”}”(hŒ;``unsigned int flags`` attributes for this particular entry”h]”(j)�”}”(hŒ``unsigned int flags``”h]”j)�”}”(hj�]h]”hŒunsigned int flags”…”�”}”(hjŸ]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÄhj—]ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$attributes for this particular entry”h]”hŒ$attributes for this particular entry”…”�”}”(hj¶]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÃhj³]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj—]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²]h´MÄhj"]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œauditsc_get_stamp (C function)”Œc.auditsc_get_stamp”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLint auditsc_get_stamp (struct audit_context *ctx, struct audit_stamp *stamp)”h]”j)�”}”(hŒKint auditsc_get_stamp(struct audit_context *ctx, struct audit_stamp *stamp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj÷]h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjó]h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mœ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjó]h²hh³j^h´Mœ ubj{)�”}”(hŒauditsc_get_stamp”h]”j�)�”}”(hŒauditsc_get_stamp”h]”hŒauditsc_get_stamp”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjó]h²hh³j^h´Mœ ubjœ)�”}”(hŒ6(struct audit_context *ctx, struct audit_stamp *stamp)”h]”(j¢)�”}”(hŒstruct audit_context *ctx”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj4^h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj0^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0^ubh)�”}”(hhh]”j�)�”}”(hŒ audit_context”h]”hŒ audit_context”…”�”}”(hjR^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjO^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jT^Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j^sbŒc.auditsc_get_stamp”†”asbuh1hhj0^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0^ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj€^h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj0^ubj�)�”}”(hŒctx”h]”hŒctx”…”�”}”(hj�^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,^ubj¢)�”}”(hŒstruct audit_stamp *stamp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¦^h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¢^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢^ubh)�”}”(hhh]”j�)�”}”(hŒ audit_stamp”h]”hŒ audit_stamp”…”�”}”(hjÄ^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁ^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÆ^Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jn^Œc.auditsc_get_stamp”†”asbuh1hhj¢^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢^ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjð^h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¢^ubj�)�”}”(hŒstamp”h]”hŒstamp”…”�”}”(hjý^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,^ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjó]h²hh³j^h´Mœ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjï]h²hh³j^h´Mœ ubah}”(h]”jê]ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j^h´Mœ hjì]h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(get local copies of audit_context values”h]”hŒ(get local copies of audit_context values”…”�”}”(hj'_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mœ hj$_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjì]h²hh³j^h´Mœ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj?_jæj?_jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒµ**Parameters** ``struct audit_context *ctx`` audit_context for the task ``struct audit_stamp *stamp`` timestamp to record **Description** Also sets the context as auditable.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjI_h]”hŒ Parameters”…”�”}”(hjK_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjG_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M  hjC_ubj )�”}”(hhh]”(j)�”}”(hŒ9``struct audit_context *ctx`` audit_context for the task ”h]”(j)�”}”(hŒ``struct audit_context *ctx``”h]”j)�”}”(hjh_h]”hŒstruct audit_context *ctx”…”�”}”(hjj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjf_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M� hjb_ubj2)�”}”(hhh]”hÝ)�”}”(hŒaudit_context for the task”h]”hŒaudit_context for the task”…”�”}”(hj�_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}_h´M� hj~_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjb_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}_h´M� hj__ubj)�”}”(hŒ2``struct audit_stamp *stamp`` timestamp to record ”h]”(j)�”}”(hŒ``struct audit_stamp *stamp``”h]”j)�”}”(hj¡_h]”hŒstruct audit_stamp *stamp”…”�”}”(hj£_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mž hj›_ubj2)�”}”(hhh]”hÝ)�”}”(hŒtimestamp to record”h]”hŒtimestamp to record”…”�”}”(hjº_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶_h´Mž hj·_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶_h´Mž hj__ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjC_ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÜ_h]”hŒ Description”…”�”}”(hjÞ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M  hjC_ubhÝ)�”}”(hŒ#Also sets the context as auditable.”h]”hŒ#Also sets the context as auditable.”…”�”}”(hjò_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MŸ hjC_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_mq_open (C function)”Œc.__audit_mq_open”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDvoid __audit_mq_open (int oflag, umode_t mode, struct mq_attr *attr)”h]”j)�”}”(hŒCvoid __audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj!`h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj`h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M± ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`h²hh³j/`h´M± ubj{)�”}”(hŒ__audit_mq_open”h]”j�)�”}”(hŒ__audit_mq_open”h]”hŒ__audit_mq_open”…”�”}”(hjB`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>`ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj`h²hh³j/`h´M± ubjœ)�”}”(hŒ/(int oflag, umode_t mode, struct mq_attr *attr)”h]”(j¢)�”}”(hŒ int oflag”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj^`h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZ`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ`ubj�)�”}”(hŒoflag”h]”hŒoflag”…”�”}”(hjz`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjV`ubj¢)�”}”(hŒ umode_t mode”h]”(h)�”}”(hhh]”j�)�”}”(hŒumode_t”h]”hŒumode_t”…”�”}”(hj–`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j˜`Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jD`sbŒc.__audit_mq_open”†”asbuh1hhj�`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�`ubj�)�”}”(hŒmode”h]”hŒmode”…”�”}”(hjÄ`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjV`ubj¢)�”}”(hŒstruct mq_attr *attr”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÝ`h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÙ`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙ`ubh)�”}”(hhh]”j�)�”}”(hŒmq_attr”h]”hŒmq_attr”…”�”}”(hjû`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjø`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jý`Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j²`Œc.__audit_mq_open”†”asbuh1hhjÙ`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙ`ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj'ah²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÙ`ubj�)�”}”(hŒattr”h]”hŒattr”…”�”}”(hj4ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙ`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjV`ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj`h²hh³j/`h´M± ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj`h²hh³j/`h´M± ubah}”(h]”j`ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j/`h´M± hj`h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%record audit data for a POSIX MQ open”h]”hŒ%record audit data for a POSIX MQ open”…”�”}”(hj^ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M± hj[ah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj`h²hh³j/`h´M± ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjvajæjvajç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒt**Parameters** ``int oflag`` open flag ``umode_t mode`` mode bits ``struct mq_attr *attr`` queue attributes”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj€ah]”hŒ Parameters”…”�”}”(hj‚ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~aubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mµ hjzaubj )�”}”(hhh]”(j)�”}”(hŒ``int oflag`` open flag ”h]”(j)�”}”(hŒ ``int oflag``”h]”j)�”}”(hjŸah]”hŒ int oflag”…”�”}”(hj¡ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M² hj™aubj2)�”}”(hhh]”hÝ)�”}”(hŒ open flag”h]”hŒ open flag”…”�”}”(hj¸ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j´ah´M² hjµaubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´ah´M² hj–aubj)�”}”(hŒ``umode_t mode`` mode bits ”h]”(j)�”}”(hŒ``umode_t mode``”h]”j)�”}”(hjØah]”hŒ umode_t mode”…”�”}”(hjÚah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖaubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M³ hjÒaubj2)�”}”(hhh]”hÝ)�”}”(hŒ mode bits”h]”hŒ mode bits”…”�”}”(hjñah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jíah´M³ hjîaubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÒaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jíah´M³ hj–aubj)�”}”(hŒ)``struct mq_attr *attr`` queue attributes”h]”(j)�”}”(hŒ``struct mq_attr *attr``”h]”j)�”}”(hjbh]”hŒstruct mq_attr *attr”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjbubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mµ hj bubj2)�”}”(hhh]”hÝ)�”}”(hŒqueue attributes”h]”hŒqueue attributes”…”�”}”(hj*bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M´ hj'bubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&bh´Mµ hj–aubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjzaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ __audit_mq_sendrecv (C function)”Œc.__audit_mq_sendrecv”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒsvoid __audit_mq_sendrecv (mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec64 *abs_timeout)”h]”j)�”}”(hŒrvoid __audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec64 *abs_timeout)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjkbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjgbh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÇ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgbh²hh³jybh´MÇ ubj{)�”}”(hŒ__audit_mq_sendrecv”h]”j�)�”}”(hŒ__audit_mq_sendrecv”h]”hŒ__audit_mq_sendrecv”…”�”}”(hjŒbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆbubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjgbh²hh³jybh´MÇ ubjœ)�”}”(hŒZ(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec64 *abs_timeout)”h]”(j¢)�”}”(hŒ mqd_t mqdes”h]”(h)�”}”(hhh]”j�)�”}”(hŒmqd_t”h]”hŒmqd_t”…”�”}”(hj«bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨bubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j­bŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŽbsbŒc.__audit_mq_sendrecv”†”asbuh1hhj¤bubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤bubj�)�”}”(hŒmqdes”h]”hŒmqdes”…”�”}”(hjÙbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj bubj¢)�”}”(hŒsize_t msg_len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjõbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j÷bŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÇbŒc.__audit_mq_sendrecv”†”asbuh1hhjîbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîbubj�)�”}”(hŒmsg_len”h]”hŒmsg_len”…”�”}”(hj!ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj bubj¢)�”}”(hŒunsigned int msg_prio”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj:ch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6cubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjVch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6cubj�)�”}”(hŒmsg_prio”h]”hŒmsg_prio”…”�”}”(hjrch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj bubj¢)�”}”(hŒ$const struct timespec64 *abs_timeout”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj‹ch²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡cubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¦ch²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡cubh)�”}”(hhh]”j�)�”}”(hŒ timespec64”h]”hŒ timespec64”…”�”}”(hjÄch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁcubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÆcŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÇbŒc.__audit_mq_sendrecv”†”asbuh1hhj‡cubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡cubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjðch²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‡cubj�)�”}”(hŒ abs_timeout”h]”hŒ abs_timeout”…”�”}”(hjých²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡cubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj bubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjgbh²hh³jybh´MÇ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjcbh²hh³jybh´MÇ ubah}”(h]”j^bah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jybh´MÇ hj`bh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3record audit data for a POSIX MQ timed send/receive”h]”hŒ3record audit data for a POSIX MQ timed send/receive”…”�”}”(hj'dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÇ hj$dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj`bh²hh³jybh´MÇ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj?djæj?djç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒÏ**Parameters** ``mqd_t mqdes`` MQ descriptor ``size_t msg_len`` Message length ``unsigned int msg_prio`` Message priority ``const struct timespec64 *abs_timeout`` Message timeout in absolute time”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjIdh]”hŒ Parameters”…”�”}”(hjKdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGdubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MË hjCdubj )�”}”(hhh]”(j)�”}”(hŒ``mqd_t mqdes`` MQ descriptor ”h]”(j)�”}”(hŒ``mqd_t mqdes``”h]”j)�”}”(hjhdh]”hŒ mqd_t mqdes”…”�”}”(hjjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfdubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÈ hjbdubj2)�”}”(hhh]”hÝ)�”}”(hŒ MQ descriptor”h]”hŒ MQ descriptor”…”�”}”(hj�dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}dh´MÈ hj~dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjbdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}dh´MÈ hj_dubj)�”}”(hŒ"``size_t msg_len`` Message length ”h]”(j)�”}”(hŒ``size_t msg_len``”h]”j)�”}”(hj¡dh]”hŒsize_t msg_len”…”�”}”(hj£dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸdubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÉ hj›dubj2)�”}”(hhh]”hÝ)�”}”(hŒMessage length”h]”hŒMessage length”…”�”}”(hjºdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶dh´MÉ hj·dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶dh´MÉ hj_dubj)�”}”(hŒ+``unsigned int msg_prio`` Message priority ”h]”(j)�”}”(hŒ``unsigned int msg_prio``”h]”j)�”}”(hjÚdh]”hŒunsigned int msg_prio”…”�”}”(hjÜdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØdubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÊ hjÔdubj2)�”}”(hhh]”hÝ)�”}”(hŒMessage priority”h]”hŒMessage priority”…”�”}”(hjódh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïdh´MÊ hjðdubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïdh´MÊ hj_dubj)�”}”(hŒI``const struct timespec64 *abs_timeout`` Message timeout in absolute time”h]”(j)�”}”(hŒ(``const struct timespec64 *abs_timeout``”h]”j)�”}”(hjeh]”hŒ$const struct timespec64 *abs_timeout”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÌ hj eubj2)�”}”(hhh]”hÝ)�”}”(hŒ Message timeout in absolute time”h]”hŒ Message timeout in absolute time”…”�”}”(hj,eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MË hj)eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj eubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(eh´MÌ hj_dubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjCdubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_mq_notify (C function)”Œc.__audit_mq_notify”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIvoid __audit_mq_notify (mqd_t mqdes, const struct sigevent *notification)”h]”j)�”}”(hŒHvoid __audit_mq_notify(mqd_t mqdes, const struct sigevent *notification)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjmeh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjieh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Má ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjieh²hh³j{eh´Má ubj{)�”}”(hŒ__audit_mq_notify”h]”j�)�”}”(hŒ__audit_mq_notify”h]”hŒ__audit_mq_notify”…”�”}”(hjŽeh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŠeubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjieh²hh³j{eh´Má ubjœ)�”}”(hŒ2(mqd_t mqdes, const struct sigevent *notification)”h]”(j¢)�”}”(hŒ mqd_t mqdes”h]”(h)�”}”(hhh]”j�)�”}”(hŒmqd_t”h]”hŒmqd_t”…”�”}”(hj­eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¯eŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�esbŒc.__audit_mq_notify”†”asbuh1hhj¦eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦eubj�)�”}”(hŒmqdes”h]”hŒmqdes”…”�”}”(hjÛeh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¢eubj¢)�”}”(hŒ#const struct sigevent *notification”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjôeh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjðeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjðeubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjðeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjðeubh)�”}”(hhh]”j�)�”}”(hŒsigevent”h]”hŒsigevent”…”�”}”(hj-fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj*fubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j/fŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÉeŒc.__audit_mq_notify”†”asbuh1hhjðeubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjðeubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjYfh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjðeubj�)�”}”(hŒ notification”h]”hŒ notification”…”�”}”(hjffh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjðeubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¢eubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjieh²hh³j{eh´Má ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjeeh²hh³j{eh´Má ubah}”(h]”j`eah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j{eh´Má hjbeh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'record audit data for a POSIX MQ notify”h]”hŒ'record audit data for a POSIX MQ notify”…”�”}”(hj�fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Má hj�fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjbeh²hh³j{eh´Má ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¨fjæj¨fjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒm**Parameters** ``mqd_t mqdes`` MQ descriptor ``const struct sigevent *notification`` Notification event”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj²fh]”hŒ Parameters”…”�”}”(hj´fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°fubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Må hj¬fubj )�”}”(hhh]”(j)�”}”(hŒ``mqd_t mqdes`` MQ descriptor ”h]”(j)�”}”(hŒ``mqd_t mqdes``”h]”j)�”}”(hjÑfh]”hŒ mqd_t mqdes”…”�”}”(hjÓfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏfubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mâ hjËfubj2)�”}”(hhh]”hÝ)�”}”(hŒ MQ descriptor”h]”hŒ MQ descriptor”…”�”}”(hjêfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jæfh´Mâ hjçfubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjËfubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jæfh´Mâ hjÈfubj)�”}”(hŒ:``const struct sigevent *notification`` Notification event”h]”(j)�”}”(hŒ'``const struct sigevent *notification``”h]”j)�”}”(hj gh]”hŒ#const struct sigevent *notification”…”�”}”(hj gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mä hjgubj2)�”}”(hhh]”hÝ)�”}”(hŒNotification event”h]”hŒNotification event”…”�”}”(hj#gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mã hj gubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jgh´Mä hjÈfubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¬fubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"__audit_mq_getsetattr (C function)”Œc.__audit_mq_getsetattr”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@void __audit_mq_getsetattr (mqd_t mqdes, struct mq_attr *mqstat)”h]”j)�”}”(hŒ?void __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjdgh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj`gh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mõ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjsgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj`gh²hh³jrgh´Mõ ubj{)�”}”(hŒ__audit_mq_getsetattr”h]”j�)�”}”(hŒ__audit_mq_getsetattr”h]”hŒ__audit_mq_getsetattr”…”�”}”(hj…gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�gubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj`gh²hh³jrgh´Mõ ubjœ)�”}”(hŒ%(mqd_t mqdes, struct mq_attr *mqstat)”h]”(j¢)�”}”(hŒ mqd_t mqdes”h]”(h)�”}”(hhh]”j�)�”}”(hŒmqd_t”h]”hŒmqd_t”…”�”}”(hj¤gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡gubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¦gŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‡gsbŒc.__audit_mq_getsetattr”†”asbuh1hhj�gubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�gubj�)�”}”(hŒmqdes”h]”hŒmqdes”…”�”}”(hjÒgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”•h&]”uh1j€hj�gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj™gubj¢)�”}”(hŒstruct mq_attr *mqstat”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjëgh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjçgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçgubh)�”}”(hhh]”j�)�”}”(hŒmq_attr”h]”hŒmq_attr”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjhubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j hŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÀgŒc.__audit_mq_getsetattr”†”asbuh1hhjçgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçgubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj5hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjçgubj�)�”}”(hŒmqstat”h]”hŒmqstat”…”�”}”(hjBhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj™gubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj`gh²hh³jrgh´Mõ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj\gh²hh³jrgh´Mõ ubah}”(h]”jWgah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jrgh´Mõ hjYgh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2record audit data for a POSIX MQ get/set attribute”h]”hŒ2record audit data for a POSIX MQ get/set attribute”…”�”}”(hjlhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mõ hjihh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjYgh²hh³jrgh´Mõ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj„hjæj„hjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒV**Parameters** ``mqd_t mqdes`` MQ descriptor ``struct mq_attr *mqstat`` MQ flags”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŽhh]”hŒ Parameters”…”�”}”(hj�hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mù hjˆhubj )�”}”(hhh]”(j)�”}”(hŒ``mqd_t mqdes`` MQ descriptor ”h]”(j)�”}”(hŒ``mqd_t mqdes``”h]”j)�”}”(hj­hh]”hŒ mqd_t mqdes”…”�”}”(hj¯hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«hubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mö hj§hubj2)�”}”(hhh]”hÝ)�”}”(hŒ MQ descriptor”h]”hŒ MQ descriptor”…”�”}”(hjÆhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÂhh´Mö hjÃhubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj§hubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÂhh´Mö hj¤hubj)�”}”(hŒ#``struct mq_attr *mqstat`` MQ flags”h]”(j)�”}”(hŒ``struct mq_attr *mqstat``”h]”j)�”}”(hjæhh]”hŒstruct mq_attr *mqstat”…”�”}”(hjèhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjähubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mø hjàhubj2)�”}”(hhh]”hÝ)�”}”(hŒMQ flags”h]”hŒMQ flags”…”�”}”(hjÿhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M÷ hjühubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjàhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jûhh´Mø hj¤hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjˆhubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_ipc_obj (C function)”Œc.__audit_ipc_obj”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1void __audit_ipc_obj (struct kern_ipc_perm *ipcp)”h]”j)�”}”(hŒ0void __audit_ipc_obj(struct kern_ipc_perm *ipcp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj@ih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjah"]”h$]”h&]”uh1j1hjah"]”h$]”h&]”uh1j1hjyiubh)�”}”(hhh]”j�)�”}”(hŒ kern_ipc_perm”h]”hŒ kern_ipc_perm”…”�”}”(hj›ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜iubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�iŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jcisbŒc.__audit_ipc_obj”†”asbuh1hhjyiubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyiubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÉih²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjyiubj�)�”}”(hŒipcp”h]”hŒipcp”…”�”}”(hjÖih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyiubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuiubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjah"]”h$]”h&]”uh1j1hj—jh²hh³j©jh´M ubj{)�”}”(hŒ__audit_ipc_set_perm”h]”j�)�”}”(hŒ__audit_ipc_set_perm”h]”hŒ__audit_ipc_set_perm”…”�”}”(hj¼jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸jubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—jh²hh³j©jh´M ubjœ)�”}”(hŒ:(unsigned long qbytes, uid_t uid, gid_t gid, umode_t mode)”h]”(j¢)�”}”(hŒunsigned long qbytes”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjØjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÔjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔjubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjôjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÔjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔjubj�)�”}”(hŒqbytes”h]”hŒqbytes”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐjubj¢)�”}”(hŒ uid_t uid”h]”(h)�”}”(hhh]”j�)�”}”(hŒuid_t”h]”hŒuid_t”…”�”}”(hj,kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j.kŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¾jsbŒc.__audit_ipc_set_perm”†”asbuh1hhj%kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%kubj�)�”}”(hŒuid”h]”hŒuid”…”�”}”(hjZkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐjubj¢)�”}”(hŒ gid_t gid”h]”(h)�”}”(hhh]”j�)�”}”(hŒgid_t”h]”hŒgid_t”…”�”}”(hjvkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjskubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jxkŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jHkŒc.__audit_ipc_set_perm”†”asbuh1hhjokubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”kh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjokubj�)�”}”(hŒgid”h]”hŒgid”…”�”}”(hj¢kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjokubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐjubj¢)�”}”(hŒ umode_t mode”h]”(h)�”}”(hhh]”j�)�”}”(hŒumode_t”h]”hŒumode_t”…”�”}”(hj¾kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÀkŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jHkŒc.__audit_ipc_set_perm”†”asbuh1hhj·kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·kubj�)�”}”(hŒmode”h]”hŒmode”…”�”}”(hjêkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·kubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj—jh²hh³j©jh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj“jh²hh³j©jh´M ubah}”(h]”jŽjah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j©jh´M hj�jh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)record audit data for new ipc permissions”h]”hŒ)record audit data for new ipc permissions”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M hjlh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�jh²hh³j©jh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj,ljæj,ljç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒÓ**Parameters** ``unsigned long qbytes`` msgq bytes ``uid_t uid`` msgq user id ``gid_t gid`` msgq group id ``umode_t mode`` msgq mode (permissions) **Description** Called only after audit_ipc_obj().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj6lh]”hŒ Parameters”…”�”}”(hj8lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj4lubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M hj0lubj )�”}”(hhh]”(j)�”}”(hŒ$``unsigned long qbytes`` msgq bytes ”h]”(j)�”}”(hŒ``unsigned long qbytes``”h]”j)�”}”(hjUlh]”hŒunsigned long qbytes”…”�”}”(hjWlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSlubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M hjOlubj2)�”}”(hhh]”hÝ)�”}”(hŒ msgq bytes”h]”hŒ msgq bytes”…”�”}”(hjnlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jjlh´M hjklubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjOlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jjlh´M hjLlubj)�”}”(hŒ``uid_t uid`` msgq user id ”h]”(j)�”}”(hŒ ``uid_t uid``”h]”j)�”}”(hjŽlh]”hŒ uid_t uid”…”�”}”(hj�lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒlubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M hjˆlubj2)�”}”(hhh]”hÝ)�”}”(hŒ msgq user id”h]”hŒ msgq user id”…”�”}”(hj§lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j£lh´M hj¤lubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjˆlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j£lh´M hjLlubj)�”}”(hŒ``gid_t gid`` msgq group id ”h]”(j)�”}”(hŒ ``gid_t gid``”h]”j)�”}”(hjÇlh]”hŒ gid_t gid”…”�”}”(hjÉlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅlubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M hjÁlubj2)�”}”(hhh]”hÝ)�”}”(hŒ msgq group id”h]”hŒ msgq group id”…”�”}”(hjàlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÜlh´M hjÝlubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÁlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÜlh´M hjLlubj)�”}”(hŒ)``umode_t mode`` msgq mode (permissions) ”h]”(j)�”}”(hŒ``umode_t mode``”h]”j)�”}”(hjmh]”hŒ umode_t mode”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþlubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M hjúlubj2)�”}”(hhh]”hÝ)�”}”(hŒmsgq mode (permissions)”h]”hŒmsgq mode (permissions)”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jmh´M hjmubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjúlubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jmh´M hjLlubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj0lubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj;mh]”hŒ Description”…”�”}”(hj=mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj9mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M hj0lubhÝ)�”}”(hŒ"Called only after audit_ipc_obj().”h]”hŒ"Called only after audit_ipc_obj().”…”�”}”(hjQmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M hj0lubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_socketcall (C function)”Œc.__audit_socketcall”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7int __audit_socketcall (int nargs, unsigned long *args)”h]”j)�”}”(hŒ6int __audit_socketcall(int nargs, unsigned long *args)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj€mh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj|mh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M2 ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�mh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|mh²hh³jŽmh´M2 ubj{)�”}”(hŒ__audit_socketcall”h]”j�)�”}”(hŒ__audit_socketcall”h]”hŒ__audit_socketcall”…”�”}”(hj¡mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�mubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj|mh²hh³jŽmh´M2 ubjœ)�”}”(hŒ (int nargs, unsigned long *args)”h]”(j¢)�”}”(hŒ int nargs”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj½mh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¹mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹mubj�)�”}”(hŒnargs”h]”hŒnargs”…”�”}”(hjÙmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹mubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµmubj¢)�”}”(hŒunsigned long *args”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjòmh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîmubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîmubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj*nh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjîmubj�)�”}”(hŒargs”h]”hŒargs”…”�”}”(hj7nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµmubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj|mh²hh³jŽmh´M2 ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjxmh²hh³jŽmh´M2 ubah}”(h]”jsmah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŽmh´M2 hjumh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$record audit data for sys_socketcall”h]”hŒ$record audit data for sys_socketcall”…”�”}”(hjanh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M2 hj^nh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjumh²hh³jŽmh´M2 ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjynjæjynjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒ�**Parameters** ``int nargs`` number of args, which should not be more than AUDITSC_ARGS. ``unsigned long *args`` args array”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjƒnh]”hŒ Parameters”…”�”}”(hj…nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M6 hj}nubj )�”}”(hhh]”(j)�”}”(hŒJ``int nargs`` number of args, which should not be more than AUDITSC_ARGS. ”h]”(j)�”}”(hŒ ``int nargs``”h]”j)�”}”(hj¢nh]”hŒ int nargs”…”�”}”(hj¤nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj nubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M3 hjœnubj2)�”}”(hhh]”hÝ)�”}”(hŒ;number of args, which should not be more than AUDITSC_ARGS.”h]”hŒ;number of args, which should not be more than AUDITSC_ARGS.”…”�”}”(hj»nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·nh´M3 hj¸nubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·nh´M3 hj™nubj)�”}”(hŒ"``unsigned long *args`` args array”h]”(j)�”}”(hŒ``unsigned long *args``”h]”j)�”}”(hjÛnh]”hŒunsigned long *args”…”�”}”(hjÝnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙnubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M5 hjÕnubj2)�”}”(hhh]”hÝ)�”}”(hŒ args array”h]”hŒ args array”…”�”}”(hjônh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M4 hjñnubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðnh´M5 hj™nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj}nubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_fd_pair (C function)”Œc.__audit_fd_pair”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'void __audit_fd_pair (int fd1, int fd2)”h]”j)�”}”(hŒ&void __audit_fd_pair(int fd1, int fd2)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5oh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1oh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MD ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDoh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1oh²hh³jCoh´MD ubj{)�”}”(hŒ__audit_fd_pair”h]”j�)�”}”(hŒ__audit_fd_pair”h]”hŒ__audit_fd_pair”…”�”}”(hjVoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRoubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj1oh²hh³jCoh´MD ubjœ)�”}”(hŒ(int fd1, int fd2)”h]”(j¢)�”}”(hŒint fd1”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjroh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnoubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnoubj�)�”}”(hŒfd1”h]”hŒfd1”…”�”}”(hjŽoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnoubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjoubj¢)�”}”(hŒint fd2”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj§oh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj£oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµoh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£oubj�)�”}”(hŒfd2”h]”hŒfd2”…”�”}”(hjÃoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjoubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj1oh²hh³jCoh´MD ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj-oh²hh³jCoh´MD ubah}”(h]”j(oah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jCoh´MD hj*oh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)record audit data for pipe and socketpair”h]”hŒ)record audit data for pipe and socketpair”…”�”}”(hjíoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MD hjêoh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj*oh²hh³jCoh´MD ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjpjæjpjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒa**Parameters** ``int fd1`` the first file descriptor ``int fd2`` the second file descriptor”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjph]”hŒ Parameters”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj pubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MH hj pubj )�”}”(hhh]”(j)�”}”(hŒ&``int fd1`` the first file descriptor ”h]”(j)�”}”(hŒ ``int fd1``”h]”j)�”}”(hj.ph]”hŒint fd1”…”�”}”(hj0ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,pubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´ME hj(pubj2)�”}”(hhh]”hÝ)�”}”(hŒthe first file descriptor”h]”hŒthe first file descriptor”…”�”}”(hjGph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jCph´ME hjDpubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj(pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jCph´ME hj%pubj)�”}”(hŒ&``int fd2`` the second file descriptor”h]”(j)�”}”(hŒ ``int fd2``”h]”j)�”}”(hjgph]”hŒint fd2”…”�”}”(hjiph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjepubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MG hjapubj2)�”}”(hhh]”hÝ)�”}”(hŒthe second file descriptor”h]”hŒthe second file descriptor”…”�”}”(hj€ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MF hj}pubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjapubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|ph´MG hj%pubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj pubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_sockaddr (C function)”Œc.__audit_sockaddr”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'int __audit_sockaddr (int len, void *a)”h]”j)�”}”(hŒ&int __audit_sockaddr(int len, void *a)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÁph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½ph²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MR ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½ph²hh³jÏph´MR ubj{)�”}”(hŒ__audit_sockaddr”h]”j�)�”}”(hŒ__audit_sockaddr”h]”hŒ__audit_sockaddr”…”�”}”(hjâph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞpubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj½ph²hh³jÏph´MR ubjœ)�”}”(hŒ(int len, void *a)”h]”(j¢)�”}”(hŒint len”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjþph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjúpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj qh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúpubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjöpubj¢)�”}”(hŒvoid *a”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj3qh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj/qubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAqh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/qubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjOqh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj/qubj�)�”}”(hjI¢h]”hŒa”…”�”}”(hj\qh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjöpubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj½ph²hh³jÏph´MR ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¹ph²hh³jÏph´MR ubah}”(h]”j´pah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÏph´MR hj¶ph²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7record audit data for sys_bind, sys_connect, sys_sendto”h]”hŒ7record audit data for sys_bind, sys_connect, sys_sendto”…”�”}”(hj…qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MR hj‚qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¶ph²hh³jÏph´MR ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�qjæj�qjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒ¬**Parameters** ``int len`` data length in user space ``void *a`` data address in kernel space **Description** Returns 0 for success or NULL context or < 0 on error.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj§qh]”hŒ Parameters”…”�”}”(hj©qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MV hj¡qubj )�”}”(hhh]”(j)�”}”(hŒ&``int len`` data length in user space ”h]”(j)�”}”(hŒ ``int len``”h]”j)�”}”(hjÆqh]”hŒint len”…”�”}”(hjÈqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄqubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MS hjÀqubj2)�”}”(hhh]”hÝ)�”}”(hŒdata length in user space”h]”hŒdata length in user space”…”�”}”(hjßqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÛqh´MS hjÜqubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÀqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛqh´MS hj½qubj)�”}”(hŒ)``void *a`` data address in kernel space ”h]”(j)�”}”(hŒ ``void *a``”h]”j)�”}”(hjÿqh]”hŒvoid *a”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýqubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MT hjùqubj2)�”}”(hhh]”hÝ)�”}”(hŒdata address in kernel space”h]”hŒdata address in kernel space”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jrh´MT hjrubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jrh´MT hj½qubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡qubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj:rh]”hŒ Description”…”�”}”(hjah"]”h$]”h&]”uh1j1hj{rh²hh³j�rh´Mv ubj{)�”}”(hŒaudit_signal_info_syscall”h]”j�)�”}”(hŒaudit_signal_info_syscall”h]”hŒaudit_signal_info_syscall”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœrubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj{rh²hh³j�rh´Mv ubjœ)�”}”(hŒ(struct task_struct *t)”h]”j¢)�”}”(hŒstruct task_struct *t”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¼rh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¸rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉrh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸rubh)�”}”(hhh]”j�)�”}”(hŒ task_struct”h]”hŒ task_struct”…”�”}”(hjÚrh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÜrŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¢rsbŒc.audit_signal_info_syscall”†”asbuh1hhj¸rubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúrh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸rubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¸rubj�)�”}”(hŒt”h]”hŒt”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸rubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj´rubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj{rh²hh³j�rh´Mv ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjwrh²hh³j�rh´Mv ubah}”(h]”jrrah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�rh´Mv hjtrh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒrecord signal info for syscalls”h]”hŒrecord signal info for syscalls”…”�”}”(hj?sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mv hjah"]”h$]”h&]”uh1j1hjüsh²hh³jth´Mª ubj{)�”}”(hŒ__audit_log_bprm_fcaps”h]”j�)�”}”(hŒ__audit_log_bprm_fcaps”h]”hŒ__audit_log_bprm_fcaps”…”�”}”(hj!th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjtubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjüsh²hh³jth´Mª ubjœ)�”}”(hŒK(struct linux_binprm *bprm, const struct cred *new, const struct cred *old)”h]”(j¢)�”}”(hŒstruct linux_binprm *bprm”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj=th²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj9tubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJth²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9tubh)�”}”(hhh]”j�)�”}”(hŒ linux_binprm”h]”hŒ linux_binprm”…”�”}”(hj[th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXtubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j]tŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j#tsbŒc.__audit_log_bprm_fcaps”†”asbuh1hhj9tubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9tubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‰th²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj9tubj�)�”}”(hŒbprm”h]”hŒbprm”…”�”}”(hj–th²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj5tubj¢)�”}”(hŒconst struct cred *new”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¯th²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj«tubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«tubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÊth²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj«tubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«tubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjèth²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjåtubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jêtŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jwtŒc.__audit_log_bprm_fcaps”†”asbuh1hhj«tubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«tubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj«tubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj!uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«tubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj5tubj¢)�”}”(hŒconst struct cred *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj:uh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj6uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6uubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjUuh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj6uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6uubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjsuh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjpuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”juuŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jwtŒc.__audit_log_bprm_fcaps”†”asbuh1hhj6uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6uubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŸuh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj6uubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hj¬uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj5tubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjüsh²hh³jth´Mª ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjøsh²hh³jth´Mª ubah}”(h]”jósah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jth´Mª hjõsh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9store information about a loading bprm and relevant fcaps”h]”hŒ9store information about a loading bprm and relevant fcaps”…”�”}”(hjÖuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mª hjÓuh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjõsh²hh³jth´Mª ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjîujæjîujç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hXp**Parameters** ``struct linux_binprm *bprm`` pointer to the bprm being processed ``const struct cred *new`` the proposed new credentials ``const struct cred *old`` the old credentials **Description** Simply check if the proc already has the caps given by the file and if not store the priv escalation info for later auditing at the end of the syscall -Eric”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjøuh]”hŒ Parameters”…”�”}”(hjúuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjöuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M® hjòuubj )�”}”(hhh]”(j)�”}”(hŒB``struct linux_binprm *bprm`` pointer to the bprm being processed ”h]”(j)�”}”(hŒ``struct linux_binprm *bprm``”h]”j)�”}”(hjvh]”hŒstruct linux_binprm *bprm”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M« hjvubj2)�”}”(hhh]”hÝ)�”}”(hŒ#pointer to the bprm being processed”h]”hŒ#pointer to the bprm being processed”…”�”}”(hj0vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,vh´M« hj-vubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,vh´M« hjvubj)�”}”(hŒ8``const struct cred *new`` the proposed new credentials ”h]”(j)�”}”(hŒ``const struct cred *new``”h]”j)�”}”(hjPvh]”hŒconst struct cred *new”…”�”}”(hjRvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNvubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M¬ hjJvubj2)�”}”(hhh]”hÝ)�”}”(hŒthe proposed new credentials”h]”hŒthe proposed new credentials”…”�”}”(hjivh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jevh´M¬ hjfvubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jevh´M¬ hjvubj)�”}”(hŒ/``const struct cred *old`` the old credentials ”h]”(j)�”}”(hŒ``const struct cred *old``”h]”j)�”}”(hj‰vh]”hŒconst struct cred *old”…”�”}”(hj‹vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡vubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M­ hjƒvubj2)�”}”(hhh]”hÝ)�”}”(hŒthe old credentials”h]”hŒthe old credentials”…”�”}”(hj¢vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jžvh´M­ hjŸvubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjƒvubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jžvh´M­ hjvubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjòuubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÄvh]”hŒ Description”…”�”}”(hjÆvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂvubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M¯ hjòuubhÝ)�”}”(hŒ–Simply check if the proc already has the caps given by the file and if not store the priv escalation info for later auditing at the end of the syscall”h]”hŒ–Simply check if the proc already has the caps given by the file and if not store the priv escalation info for later auditing at the end of the syscall”…”�”}”(hjÚvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M® hjòuubhÝ)�”}”(hŒ-Eric”h]”hŒ-Eric”…”�”}”(hjévh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M± hjòuubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__audit_log_capset (C function)”Œc.__audit_log_capset”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHvoid __audit_log_capset (const struct cred *new, const struct cred *old)”h]”j)�”}”(hŒGvoid __audit_log_capset(const struct cred *new, const struct cred *old)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjwh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÙ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwh²hh³j&wh´MÙ ubj{)�”}”(hŒ__audit_log_capset”h]”j�)�”}”(hŒ__audit_log_capset”h]”hŒ__audit_log_capset”…”�”}”(hj9wh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5wubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjwh²hh³j&wh´MÙ ubjœ)�”}”(hŒ0(const struct cred *new, const struct cred *old)”h]”(j¢)�”}”(hŒconst struct cred *new”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjUwh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjQwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQwubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjpwh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjQwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQwubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjŽwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹wubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�wŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j;wsbŒc.__audit_log_capset”†”asbuh1hhjQwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQwubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¼wh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjQwubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjÉwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjMwubj¢)�”}”(hŒconst struct cred *old”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjâwh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÞwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞwubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjýwh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÞwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞwubh)�”}”(hhh]”j�)�”}”(hŒcred”h]”hŒcred”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jxŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jªwŒc.__audit_log_capset”†”asbuh1hhjÞwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞwubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjGxh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞwubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hjTxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞwubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjMwubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjwh²hh³j&wh´MÙ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjwh²hh³j&wh´MÙ ubah}”(h]”j wah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j&wh´MÙ hj wh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ;store information about the arguments to the capset syscall”h]”hŒ;store information about the arguments to the capset syscall”…”�”}”(hj~xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÙ hj{xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj wh²hh³j&wh´MÙ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj–xjæj–xjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒõ**Parameters** ``const struct cred *new`` the new credentials ``const struct cred *old`` the old (current) credentials **Description** Record the arguments userspace sent to sys_capset for later printing by the audit system if applicable”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj xh]”hŒ Parameters”…”�”}”(hj¢xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjžxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÝ hjšxubj )�”}”(hhh]”(j)�”}”(hŒ/``const struct cred *new`` the new credentials ”h]”(j)�”}”(hŒ``const struct cred *new``”h]”j)�”}”(hj¿xh]”hŒconst struct cred *new”…”�”}”(hjÁxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½xubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÚ hj¹xubj2)�”}”(hhh]”hÝ)�”}”(hŒthe new credentials”h]”hŒthe new credentials”…”�”}”(hjØxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔxh´MÚ hjÕxubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹xubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔxh´MÚ hj¶xubj)�”}”(hŒ9``const struct cred *old`` the old (current) credentials ”h]”(j)�”}”(hŒ``const struct cred *old``”h]”j)�”}”(hjøxh]”hŒconst struct cred *old”…”�”}”(hjúxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöxubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÛ hjòxubj2)�”}”(hhh]”hÝ)�”}”(hŒthe old (current) credentials”h]”hŒthe old (current) credentials”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j yh´MÛ hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjòxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j yh´MÛ hj¶xubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjšxubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj3yh]”hŒ Description”…”�”}”(hj5yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1yubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÝ hjšxubhÝ)�”}”(hŒfRecord the arguments userspace sent to sys_capset for later printing by the audit system if applicable”h]”hŒfRecord the arguments userspace sent to sys_capset for later printing by the audit system if applicable”…”�”}”(hjIyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´MÜ hjšxubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_core_dumps (C function)”Œc.audit_core_dumps”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ"void audit_core_dumps (long signr)”h]”j)�”}”(hŒ!void audit_core_dumps(long signr)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjxyh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjtyh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M] ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjtyh²hh³j†yh´M] ubj{)�”}”(hŒaudit_core_dumps”h]”j�)�”}”(hŒaudit_core_dumps”h]”hŒaudit_core_dumps”…”�”}”(hj™yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•yubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjtyh²hh³j†yh´M] ubjœ)�”}”(hŒ (long signr)”h]”j¢)�”}”(hŒ long signr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjµyh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj±yubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±yubj�)�”}”(hŒsignr”h]”hŒsignr”…”�”}”(hjÑyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±yubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj­yubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjtyh²hh³j†yh´M] ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjpyh²hh³j†yh´M] ubah}”(h]”jkyah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j†yh´M] hjmyh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6record information about processes that end abnormally”h]”hŒ6record information about processes that end abnormally”…”�”}”(hjûyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M] hjøyh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjmyh²hh³j†yh´M] ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjzjæjzjç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒ±**Parameters** ``long signr`` signal value **Description** If a process ends with a core dump, something fishy is going on and we should record the event for investigation.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjzh]”hŒ Parameters”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjzubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Ma hjzubj )�”}”(hhh]”j)�”}”(hŒ``long signr`` signal value ”h]”(j)�”}”(hŒ``long signr``”h]”j)�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:zubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M^ hj6zubj2)�”}”(hhh]”hÝ)�”}”(hŒ signal value”h]”hŒ signal value”…”�”}”(hjUzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQzh´M^ hjRzubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6zubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQzh´M^ hj3zubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjzubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjwzh]”hŒ Description”…”�”}”(hjyzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjuzubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M` hjzubhÝ)�”}”(hŒqIf a process ends with a core dump, something fishy is going on and we should record the event for investigation.”h]”hŒqIf a process ends with a core dump, something fishy is going on and we should record the event for investigation.”…”�”}”(hj�zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M_ hjzubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_seccomp (C function)”Œc.audit_seccomp”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@void audit_seccomp (unsigned long syscall, long signr, int code)”h]”j)�”}”(hŒ?void audit_seccomp(unsigned long syscall, long signr, int code)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¼zh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¸zh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mv ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸zh²hh³jÊzh´Mv ubj{)�”}”(hŒ audit_seccomp”h]”j�)�”}”(hŒ audit_seccomp”h]”hŒ audit_seccomp”…”�”}”(hjÝzh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙzubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¸zh²hh³jÊzh´Mv ubjœ)�”}”(hŒ-(unsigned long syscall, long signr, int code)”h]”(j¢)�”}”(hŒunsigned long syscall”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjùzh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjõzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõzubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjõzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõzubj�)�”}”(hŒsyscall”h]”hŒsyscall”…”�”}”(hj1{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjñzubj¢)�”}”(hŒ long signr”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjJ{h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjF{ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjF{ubj�)�”}”(hŒsignr”h]”hŒsignr”…”�”}”(hjf{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjF{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjñzubj¢)�”}”(hŒint code”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj{{ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj{{ubj�)�”}”(hŒcode”h]”hŒcode”…”�”}”(hj›{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjñzubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¸zh²hh³jÊzh´Mv ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj´zh²hh³jÊzh´Mv ubah}”(h]”j¯zah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÊzh´Mv hj±zh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)record information about a seccomp action”h]”hŒ)record information about a seccomp action”…”�”}”(hjÅ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mv hjÂ{h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj±zh²hh³jÊzh´Mv ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÝ{jæjÝ{jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hXÉ**Parameters** ``unsigned long syscall`` syscall number ``long signr`` signal value ``int code`` the seccomp action **Description** Record the information associated with a seccomp action. Event filtering for seccomp actions that are not to be logged is done in seccomp_log(). Therefore, this function forces auditing independent of the audit_enabled and dummy context state because seccomp actions should be logged even when audit is not in use.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjç{h]”hŒ Parameters”…”�”}”(hjé{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjå{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mz hjá{ubj )�”}”(hhh]”(j)�”}”(hŒ)``unsigned long syscall`` syscall number ”h]”(j)�”}”(hŒ``unsigned long syscall``”h]”j)�”}”(hj|h]”hŒunsigned long syscall”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mw hj|ubj2)�”}”(hhh]”hÝ)�”}”(hŒsyscall number”h]”hŒsyscall number”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|h´Mw hj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|h´Mw hjý{ubj)�”}”(hŒ``long signr`` signal value ”h]”(j)�”}”(hŒ``long signr``”h]”j)�”}”(hj?|h]”hŒ long signr”…”�”}”(hjA|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mx hj9|ubj2)�”}”(hhh]”hÝ)�”}”(hŒ signal value”h]”hŒ signal value”…”�”}”(hjX|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jT|h´Mx hjU|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj9|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jT|h´Mx hjý{ubj)�”}”(hŒ ``int code`` the seccomp action ”h]”(j)�”}”(hŒ ``int code``”h]”j)�”}”(hjx|h]”hŒint code”…”�”}”(hjz|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjv|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´My hjr|ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe seccomp action”h]”hŒthe seccomp action”…”�”}”(hj‘|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�|h´My hjŽ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjr|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�|h´My hjý{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjá{ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj³|h]”hŒ Description”…”�”}”(hjµ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´M{ hjá{ubhÝ)�”}”(hX:Record the information associated with a seccomp action. Event filtering for seccomp actions that are not to be logged is done in seccomp_log(). Therefore, this function forces auditing independent of the audit_enabled and dummy context state because seccomp actions should be logged even when audit is not in use.”h]”hX:Record the information associated with a seccomp action. Event filtering for seccomp actions that are not to be logged is done in seccomp_log(). Therefore, this function forces auditing independent of the audit_enabled and dummy context state because seccomp actions should be logged even when audit is not in use.”…”�”}”(hjÉ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:295: ./kernel/auditsc.c”h´Mz hjá{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œaudit_rule_change (C function)”Œc.audit_rule_change”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDint audit_rule_change (int type, int seq, void *data, size_t datasz)”h]”j)�”}”(hŒCint audit_rule_change(int type, int seq, void *data, size_t datasz)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjø|h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjô|h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Meubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô|h²hh³j}h´Meubj{)�”}”(hŒaudit_rule_change”h]”j�)�”}”(hŒaudit_rule_change”h]”hŒaudit_rule_change”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj}ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjô|h²hh³j}h´Meubjœ)�”}”(hŒ.(int type, int seq, void *data, size_t datasz)”h]”(j¢)�”}”(hŒint type”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj5}h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1}ubj�)�”}”(hŒtype”h]”hŒtype”…”�”}”(hjQ}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-}ubj¢)�”}”(hŒint seq”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjj}h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjf}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjf}ubj�)�”}”(hŒseq”h]”hŒseq”…”�”}”(hj†}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjf}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-}ubj¢)�”}”(hŒ void *data”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŸ}h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›}ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj»}h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj›}ubj�)�”}”(hŒdata”h]”hŒdata”…”�”}”(hjÈ}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-}ubj¢)�”}”(hŒ size_t datasz”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjä}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjá}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jæ}Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j}sbŒc.audit_rule_change”†”asbuh1hhjÝ}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝ}ubj�)�”}”(hŒdatasz”h]”hŒdatasz”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝ}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-}ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjô|h²hh³j}h´Meubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjð|h²hh³j}h´Meubah}”(h]”jë|ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j}h´Mehjí|h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-apply all rules to the specified message type”h]”hŒ-apply all rules to the specified message type”…”�”}”(hj<~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mehj9~h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjí|h²hh³j}h´Meubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjT~jæjT~jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒ¸**Parameters** ``int type`` audit message type ``int seq`` netlink audit message sequence (serial) number ``void *data`` payload data ``size_t datasz`` size of payload data”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj^~h]”hŒ Parameters”…”�”}”(hj`~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´MihjX~ubj )�”}”(hhh]”(j)�”}”(hŒ ``int type`` audit message type ”h]”(j)�”}”(hŒ ``int type``”h]”j)�”}”(hj}~h]”hŒint type”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mfhjw~ubj2)�”}”(hhh]”hÝ)�”}”(hŒaudit message type”h]”hŒaudit message type”…”�”}”(hj–~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j’~h´Mfhj“~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjw~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j’~h´Mfhjt~ubj)�”}”(hŒ;``int seq`` netlink audit message sequence (serial) number ”h]”(j)�”}”(hŒ ``int seq``”h]”j)�”}”(hj¶~h]”hŒint seq”…”�”}”(hj¸~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj´~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mghj°~ubj2)�”}”(hhh]”hÝ)�”}”(hŒ.netlink audit message sequence (serial) number”h]”hŒ.netlink audit message sequence (serial) number”…”�”}”(hjÏ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jË~h´MghjÌ~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj°~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jË~h´Mghjt~ubj)�”}”(hŒ``void *data`` payload data ”h]”(j)�”}”(hŒ``void *data``”h]”j)�”}”(hjï~h]”hŒ void *data”…”�”}”(hjñ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjí~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mhhjé~ubj2)�”}”(hhh]”hÝ)�”}”(hŒ payload data”h]”hŒ payload data”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Mhhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjé~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mhhjt~ubj)�”}”(hŒ&``size_t datasz`` size of payload data”•h]”(j)�”}”(hŒ``size_t datasz``”h]”j)�”}”(hj(h]”hŒ size_t datasz”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mjhj"ubj2)�”}”(hhh]”hÝ)�”}”(hŒsize of payload data”h]”hŒsize of payload data”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mihj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j=h´Mjhjt~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjX~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"audit_list_rules_send (C function)”Œc.audit_list_rules_send”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@int audit_list_rules_send (struct sk_buff *request_skb, int seq)”h]”j)�”}”(hŒ?int audit_list_rules_send(struct sk_buff *request_skb, int seq)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~h²hh³j�h´M�ubj{)�”}”(hŒaudit_list_rules_send”h]”j�)�”}”(hŒaudit_list_rules_send”h]”hŒaudit_list_rules_send”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj~h²hh³j�h´M�ubjœ)�”}”(hŒ&(struct sk_buff *request_skb, int seq)”h]”(j¢)�”}”(hŒstruct sk_buff *request_skb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»ubh)�”}”(hhh]”j�)�”}”(hŒsk_buff”h]”hŒsk_buff”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jߌmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¥sbŒc.audit_list_rules_send”†”asbuh1hhj»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj»ubj�)�”}”(hŒ request_skb”h]”hŒ request_skb”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj·ubj¢)�”}”(hŒint seq”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj1€h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj-€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-€ubj�)�”}”(hŒseq”h]”hŒseq”…”�”}”(hjM€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj·ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj~h²hh³j�h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjzh²hh³j�h´M�ubah}”(h]”juah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�h´M�hjwh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒlist the audit rules”h]”hŒlist the audit rules”…”�”}”(hjw€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´M�hjt€h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjwh²hh³j�h´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�€jæj�€jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒ¬**Parameters** ``struct sk_buff *request_skb`` skb of request we are replying to (used to target the reply) ``int seq`` netlink audit message sequence (serial) number”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj™€h]”hŒ Parameters”…”�”}”(hj›€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´M”hj“€ubj )�”}”(hhh]”(j)�”}”(hŒ]``struct sk_buff *request_skb`` skb of request we are replying to (used to target the reply) ”h]”(j)�”}”(hŒ``struct sk_buff *request_skb``”h]”j)�”}”(hj¸€h]”hŒstruct sk_buff *request_skb”…”�”}”(hjº€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´M‘hj²€ubj2)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjG�h²hh³jY�h´Múubj{)�”}”(hŒ parent_len”h]”j�)�”}”(hŒ parent_len”h]”hŒ parent_len”…”�”}”(hjl�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjh�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjG�h²hh³jY�h´Múubjœ)�”}”(hŒ(const char *path)”h]”j¢)�”}”(hŒconst char *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjˆ�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj„�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„�ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj£�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj„�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¿�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj„�ubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjÌ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj€�ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjG�h²hh³jY�h´Múubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjC�h²hh³jY�h´Múubah}”(h]”j>�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jY�h´Múhj@�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3find the length of the parent portion of a pathname”h]”hŒ3find the length of the parent portion of a pathname”…”�”}”(hjö�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Múhjó�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj@�h²hh³jY�h´Múubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‚jæj‚jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hŒL**Parameters** ``const char *path`` pathname of which to determine length”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‚h]”hŒ Parameters”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mþhj‚ubj )�”}”(hhh]”j)�”}”(hŒ:``const char *path`` pathname of which to determine length”h]”(j)�”}”(hŒ``const char *path``”h]”j)�”}”(hj7‚h]”hŒconst char *path”…”�”}”(hj9‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mhj1‚ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%pathname of which to determine length”h]”hŒ%pathname of which to determine length”…”�”}”(hjP‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´MûhjM‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jL‚h´Mhj.‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‚ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%audit_compare_dname_path (C function)”Œc.audit_compare_dname_path”hNt”auh1hýhj“6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒXint audit_compare_dname_path (const struct qstr *dname, const char *path, int parentlen)”h]”j)�”}”(hŒWint audit_compare_dname_path(const struct qstr *dname, const char *path, int parentlen)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj‘‚h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�‚h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�‚h²hh³jŸ‚h´Mubj{)�”}”(hŒaudit_compare_dname_path”h]”j�)�”}”(hŒaudit_compare_dname_path”h]”hŒaudit_compare_dname_path”…”�”}”(hj²‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®‚ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�‚h²hh³jŸ‚h´Mubjœ)�”}”(hŒ;(const struct qstr *dname, const char *path, int parentlen)”h]”(j¢)�”}”(hŒconst struct qstr *dname”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj΂h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÊ‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊ‚ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjé‚h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÊ‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊ‚ubh)�”}”(hhh]”j�)�”}”(hŒqstr”h]”hŒqstr”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ƒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j´‚sbŒc.audit_compare_dname_path”†”asbuh1hhjÊ‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'ƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊ‚ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj5ƒh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÊ‚ubj�)�”}”(hŒdname”h]”hŒdname”…”�”}”(hjBƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊ‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÆ‚ubj¢)�”}”(hŒconst char *path”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj[ƒh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjWƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjhƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjWƒubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjvƒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjWƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„ƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjWƒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj’ƒh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjWƒubj�)�”}”(hŒpath”h]”hŒpath”…”�”}”(hjŸƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjWƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÆ‚ubj¢)�”}”(hŒ int parentlen”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¸ƒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj´ƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´ƒubj�)�”}”(hŒ parentlen”h]”hŒ parentlen”…”�”}”(hjÔƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´ƒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÆ‚ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�‚h²hh³jŸ‚h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‰‚h²hh³jŸ‚h´Mubah}”(h]”j„‚ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŸ‚h´Mhj†‚h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ[compare given dentry name with last component in given path. Return of 0 indicates a match.”h]”hŒ[compare given dentry name with last component in given path. Return of 0 indicates a match.”…”�”}”(hjþƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mhjûƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj†‚h²hh³jŸ‚h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj„jæj„jç‰jè‰jé‰uh1jh²hhj“6h³Nh´Nubjë)�”}”(hX **Parameters** ``const struct qstr *dname`` dentry name that we're comparing ``const char *path`` full pathname that we're comparing ``int parentlen`` length of the parent if known. Passing in AUDIT_NAME_FULL here indicates that we must compute this value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj „h]”hŒ Parameters”…”�”}”(hj"„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mhj„ubj )�”}”(hhh]”(j)�”}”(hŒ>``const struct qstr *dname`` dentry name that we're comparing ”h]”(j)�”}”(hŒ``const struct qstr *dname``”h]”j)�”}”(hj?„h]”hŒconst struct qstr *dname”…”�”}”(hjA„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mhj9„ubj2)�”}”(hhh]”hÝ)�”}”(hŒ dentry name that we're comparing”h]”hŒ"dentry name that we’re comparing”…”�”}”(hjX„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jT„h´MhjU„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj9„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jT„h´Mhj6„ubj)�”}”(hŒ8``const char *path`` full pathname that we're comparing ”h]”(j)�”}”(hŒ``const char *path``”h]”j)�”}”(hjx„h]”hŒconst char *path”…”�”}”(hjz„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjv„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mhjr„ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"full pathname that we're comparing”h]”hŒ$full pathname that we’re comparing”…”�”}”(hj‘„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�„h´MhjŽ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjr„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�„h´Mhj6„ubj)�”}”(hŒ{``int parentlen`` length of the parent if known. Passing in AUDIT_NAME_FULL here indicates that we must compute this value.”h]”(j)�”}”(hŒ``int parentlen``”h]”j)�”}”(hj±„h]”hŒ int parentlen”…”�”}”(hj³„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯„ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:298: ./kernel/auditfilter.c”h´Mhj«„ubj2)�”}”(hhh]”hÝ)�”}”(hŒilength of the parent if known. Passing in AUDIT_NAME_FULL here indicates that we must compute this value.”h]”hŒilength of the parent if known. Passing in AUDIT_NAME_FULL here indicates that we must compute this value.”…”�”}”(hjÊ„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÆ„h´MhjÇ„ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj«„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÆ„h´Mhj6„ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj„ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhj“6h²hh³Nh´Nubeh}”(h]”Œaudit-interfaces”ah ]”h"]”Œaudit interfaces”ah$]”h&]”uh1hµhh·h²hh³hÊh´M"ubh¶)�”}”(hhh]”(h»)�”}”(hŒAccounting Framework”h]”hŒAccounting Framework”…”�”}”(hjü„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjù„h²hh³hÊh´M.ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsys_acct (C function)”Œ c.sys_acct”hNt”auh1hýhjù„h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(long sys_acct (const char __user * name)”h]”j)�”}”(hŒ&long sys_acct(const char __user *name)”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj#…h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj…h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…h²hh³j1…h´Mubj{)�”}”(hŒsys_acct”h]”j�)�”}”(hŒsys_acct”h]”hŒsys_acct”…”�”}”(hjD…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@…ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj…h²hh³j1…h´Mubjœ)�”}”(hŒ(const char __user *name)”h]”j¢)�”}”(hŒconst char __user *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj`…h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj\…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\…ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj{…h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj\…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\…ubhŒ__user”…”�”}”(hj\…h²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\…ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj©…h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\…ubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj¶…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjX…ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj…h²hh³j1…h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj…h²hh³j1…h´Mubah}”(h]”j…ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j1…h´Mhj…h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!enable/disable process accounting”h]”hŒ!enable/disable process accounting”…”�”}”(hjà…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´MhjÝ…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj…h²hh³j1…h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjø…jæjø…jç‰jè‰jé‰uh1jh²hhjù„h³Nh´Nubjë)�”}”(hXŒ**Parameters** ``const char __user * name`` file name for accounting records or NULL to shutdown accounting **Description** sys_acct() is the only system call needed to implement process accounting. It takes the name of the file where accounting records should be written. If the filename is NULL, accounting will be shutdown. **Return** 0 for success or negative errno values for failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj†h]”hŒ Parameters”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Mhjü…ubj )�”}”(hhh]”j)�”}”(hŒ]``const char __user * name`` file name for accounting records or NULL to shutdown accounting ”h]”(j)�”}”(hŒ``const char __user * name``”h]”j)�”}”(hj!†h]”hŒconst char __user * name”…”�”}”(hj#†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Mhj†ubj2)�”}”(hhh]”hÝ)�”}”(hŒ?file name for accounting records or NULL to shutdown accounting”h]”hŒ?file name for accounting records or NULL to shutdown accounting”…”�”}”(hj:†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j6†h´Mhj7†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j6†h´Mhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjü…ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj\†h]”hŒ Description”…”�”}”(hj^†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjZ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Mhjü…ubhÝ)�”}”(hŒÊsys_acct() is the only system call needed to implement process accounting. It takes the name of the file where accounting records should be written. If the filename is NULL, accounting will be shutdown.”h]”hŒÊsys_acct() is the only system call needed to implement process accounting. It takes the name of the file where accounting records should be written. If the filename is NULL, accounting will be shutdown.”…”�”}”(hjr†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Mhjü…ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjƒ†h]”hŒReturn”…”�”}”(hj…†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´M"hjü…ubhÝ)�”}”(hŒ30 for success or negative errno values for failure.”h]”hŒ30 for success or negative errno values for failure.”…”�”}”(hj™†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´M#hjü…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjù„h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œacct_collect (C function)”Œc.acct_collect”hNt”auh1hýhjù„h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1void acct_collect (long exitcode, int group_dead)”h]”j)�”}”(hŒ0void acct_collect(long exitcode, int group_dead)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjȆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjĆh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´M)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj׆h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjĆh²hh³jÖ†h´M)ubj{)�”}”(hŒ acct_collect”h]”j�)�”}”(hŒ acct_collect”h]”hŒ acct_collect”…”�”}”(hjé†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjå†ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjĆh²hh³jÖ†h´M)ubjœ)�”}”(hŒ(long exitcode, int group_dead)”h]”(j¢)�”}”(hŒ long exitcode”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡ubj�)�”}”(hŒexitcode”h]”hŒexitcode”…”�”}”(hj!‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjý†ubj¢)�”}”(hŒint group_dead”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj:‡h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6‡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6‡ubj�)�”}”(hŒ group_dead”h]”hŒ group_dead”…”�”}”(hjV‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6‡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjý†ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjĆh²hh³jÖ†h´M)ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÀ†h²hh³jÖ†h´M)ubah}”(h]”j»†ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÖ†h´M)hj½†h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0collect accounting information into pacct_struct”h]”hŒ0collect accounting information into pacct_struct”…”�”}”(hj€‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´M)hj}‡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj½†h²hh³jÖ†h´M)ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj˜‡jæj˜‡jç‰jè‰jé‰uh1jh²hhjù„h³Nh´Nubjë)�”}”(hŒ~**Parameters** ``long exitcode`` task exit code ``int group_dead`` not 0, if this thread is the last one in the process.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¢‡h]”hŒ Parameters”…”�”}”(hj¤‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´M-hjœ‡ubj )�”}”(hhh]”(j)�”}”(hŒ!``long exitcode`` task exit code ”h]”(j)�”}”(hŒ``long exitcode``”h]”j)�”}”(hjÁ‡h]”hŒ long exitcode”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´M*hj»‡ubj2)�”}”(hhh]”hÝ)�”}”(hŒtask exit code”h]”hŒtask exit code”…”�”}”(hjÚ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÖ‡h´M*hjׇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj»‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÖ‡h´M*hj¸‡ubj)�”}”(hŒH``int group_dead`` not 0, if this thread is the last one in the process.”h]”(j)�”}”(hŒ``int group_dead``”h]”j)�”}”(hjú‡h]”hŒint group_dead”…”�”}”(hjü‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjø‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´M,hjô‡ubj2)�”}”(hhh]”hÝ)�”}”(hŒ5not 0, if this thread is the last one in the process.”h]”hŒ5not 0, if this thread is the last one in the process.”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´M+hjˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjô‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆh´M,hj¸‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjœ‡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjù„h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œacct_process (C function)”Œc.acct_process”hNt”auh1hýhjù„h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid acct_process (void)”h]”j)�”}”(hŒvoid acct_process(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjTˆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjPˆh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Mbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPˆh²hh³jbˆh´Mbubj{)�”}”(hŒ acct_process”h]”j�)�”}”(hŒ acct_process”h]”hŒ acct_process”…”�”}”(hjuˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqˆubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjPˆh²hh³jbˆh´Mbubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‘ˆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�ˆubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‰ˆubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjPˆh²hh³jbˆh´Mbubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjLˆh²hh³jbˆh´Mbubah}”(h]”jGˆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jbˆh´MbhjIˆh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.handles process accounting for an exiting task”h]”hŒ.handles process accounting for an exiting task”…”�”}”(hj»ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Mbhj¸ˆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjIˆh²hh³jbˆh´Mbubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÓˆjæjÓˆjç‰jè‰jé‰uh1jh²hhjù„h³Nh´Nubjë)�”}”(hŒ'**Parameters** ``void`` no arguments”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj݈h]”hŒ Parameters”…”�”}”(hj߈h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Mfhj׈ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjüˆh]”hŒvoid”…”�”}”(hjþˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjúˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Mhhjöˆubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:304: ./kernel/acct.c”h´Khj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjöˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰h´Mhhjóˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj׈ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjù„h²hh³Nh´Nubeh}”(h]”Œaccounting-framework”ah ]”h"]”Œaccounting framework”ah$]”h&]”uh1hµhh·h²hh³hÊh´M.ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Block Devices”h]”hŒ Block Devices”…”�”}”(hjH‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjE‰h²hh³hÊh´M4ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbio_vec (C struct)”Œ c.bio_vec”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒbio_vec”h]”j)�”}”(hŒstruct bio_vec”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjo‰h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjk‰h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}‰h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjk‰h²hh³j|‰h´Kubj{)�”}”(hŒbio_vec”h]”j�)�”}”(hji‰h]”hŒbio_vec”…”�”}”(hj�‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹‰ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjk‰h²hh³j|‰h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjg‰h²hh³j|‰h´Kubah}”(h]”jb‰ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j|‰h´Khjd‰h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/a contiguous range of physical memory addresses”h]”hŒ/a contiguous range of physical memory addresses”…”�”}”(hj±‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Khj®‰h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjd‰h²hh³j|‰h´Kubeh}”(h]”h ]”(jߌstruct”eh"]”h$]”h&]”jäjßjåjɉjæjɉjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXX**Definition**:: struct bio_vec { struct page *bv_page; unsigned int bv_len; unsigned int bv_offset; }; **Members** ``bv_page`` First page associated with the address range. ``bv_len`` Number of bytes in the address range. ``bv_offset`` Start of the address range relative to the start of **bv_page**.”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jõ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjÕ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjщubhŒ:”…”�”}”(hjщh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Khj͉ubj‘H)�”}”(hŒlstruct bio_vec { struct page *bv_page; unsigned int bv_len; unsigned int bv_offset; };”h]”hŒlstruct bio_vec { struct page *bv_page; unsigned int bv_len; unsigned int bv_offset; };”…”�”}”hjî‰sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Khj͉ubhÝ)�”}”(hŒ **Members**”h]”jõ)�”}”(hjÿ‰h]”hŒMembers”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjý‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K hj͉ubj )�”}”(hhh]”(j)�”}”(hŒ:``bv_page`` First page associated with the address range. ”h]”(j)�”}”(hŒ ``bv_page``”h]”j)�”}”(hjŠh]”hŒbv_page”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KhjŠubj2)�”}”(hhh]”hÝ)�”}”(hŒ-First page associated with the address range.”h]”hŒ-First page associated with the address range.”…”�”}”(hj7Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3Šh´Khj4Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3Šh´KhjŠubj)�”}”(hŒ1``bv_len`` Number of bytes in the address range. ”h]”(j)�”}”(hŒ ``bv_len``”h]”j)�”}”(hjWŠh]”hŒbv_len”…”�”}”(hjYŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KhjQŠubj2)�”}”(hhh]”hÝ)�”}”(hŒ%Number of bytes in the address range.”h]”hŒ%Number of bytes in the address range.”…”�”}”(hjpŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlŠh´KhjmŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlŠh´KhjŠubj)�”}”(hŒN``bv_offset`` Start of the address range relative to the start of **bv_page**.”h]”(j)�”}”(hŒ ``bv_offset``”h]”j)�”}”(hj�Šh]”hŒ bv_offset”…”�”}”(hj’Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KhjŠŠubj2)�”}”(hhh]”hÝ)�”}”(hŒ@Start of the address range relative to the start of **bv_page**.”h]”(hŒ4Start of the address range relative to the start of ”…”�”}”(hj©Šh²hh³Nh´Nubjõ)�”}”(hŒ **bv_page**”h]”hŒbv_page”…”�”}”(hj±Šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©ŠubhŒ.”…”�”}”(hj©Šh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Khj¦Šubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥Šh´KhjŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj͉ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´NubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjåŠh]”hŒ Description”…”�”}”(hjçŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjãŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KhjE‰h²hubhÝ)�”}”(hŒtAll pages within a bio_vec starting from **bv_page** are contiguous and can simply be iterated (see bvec_advance()).”h]”(hŒ)All pages within a bio_vec starting from ”…”�”}”(hjûŠh²hh³Nh´Nubjõ)�”}”(hŒ **bv_page**”h]”hŒbv_page”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjûŠubhŒ@ are contiguous and can simply be iterated (see bvec_advance()).”…”�”}”(hjûŠh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KhjE‰h²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbvec_set_page (C function)”Œc.bvec_set_page”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒavoid bvec_set_page (struct bio_vec *bv, struct page *page, unsigned int len, unsigned int offset)”h]”j)�”}”(hŒ`void bvec_set_page(struct bio_vec *bv, struct page *page, unsigned int len, unsigned int offset)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5‹h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1‹h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjD‹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1‹h²hh³jC‹h´K#ubj{)�”}”(hŒ bvec_set_page”h]”j�)�”}”(hŒ bvec_set_page”h]”hŒ bvec_set_page”…”�”}”(hjV‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjR‹ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj1‹h²hh³jC‹h´K#ubjœ)�”}”(hŒN(struct bio_vec *bv, struct page *page, unsigned int len, unsigned int offset)”h]”(j¢)�”}”(hŒstruct bio_vec *bv”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjr‹h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjn‹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjn‹ubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hj�‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�‹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j’‹Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jX‹sbŒc.bvec_set_page”†”asbuh1hhjn‹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°‹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjn‹ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¾‹h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjn‹ubj�)�”}”(hŒbv”h]”hŒbv”…”�”}”(hjË‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjn‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjj‹ubj¢)�”}”(hŒstruct page *page”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjä‹h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjà‹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ‹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjà‹ubh)�”}”(hhh]”j�)�”}”(hŒpage”h]”hŒpage”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿ‹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¬‹Œc.bvec_set_page”†”asbuh1hhjà‹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjà‹ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj.Œh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjà‹ubj�)�”}”(hŒpage”h]”hŒpage”…”�”}”(hj;Œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjà‹ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjj‹ubj¢)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjTŒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjPŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPŒubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjpŒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjPŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPŒubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjŒŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjj‹ubj¢)�”}”(hŒunsigned int offset”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¥Œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¡Œubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡Œubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÁŒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¡Œubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡Œubj�)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjÝŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡Œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjj‹ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj1‹h²hh³jC‹h´K#ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj-‹h²hh³jC‹h´K#ubah}”(h]”j(‹ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jC‹h´K#hj*‹h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)initialize a bvec based off a struct page”h]”hŒ)initialize a bvec based off a struct page”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K#hj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj*‹h²hh³jC‹h´K#ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�jæj�jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒÍ**Parameters** ``struct bio_vec *bv`` bvec to initialize ``struct page *page`` page the bvec should point to ``unsigned int len`` length of the bvec ``unsigned int offset`` offset into the page”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj)�h]”hŒ Parameters”…”�”}”(hj+�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K'hj#�ubj )�”}”(hhh]”(j)�”}”(hŒ*``struct bio_vec *bv`` bvec to initialize ”h]”(j)�”}”(hŒ``struct bio_vec *bv``”h]”j)�”}”(hjH�h]”hŒstruct bio_vec *bv”…”�”}”(hjJ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjF�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K$hjB�ubj2)�”}”(hhh]”hÝ)�”}”(hŒbvec to initialize”h]”hŒbvec to initialize”…”�”}”(hja�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j]�h´K$hj^�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjB�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]�h´K$hj?�ubj)�”}”(hŒ4``struct page *page`` page the bvec should point to ”h]”(j)�”}”(hŒ``struct page *page``”h]”j)�”}”(hj��h]”hŒstruct page *page”…”�”}”(hjƒ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K%hj{�ubj2)�”}”(hhh]”hÝ)�”}”(hŒpage the bvec should point to”h]”hŒpage the bvec should point to”…”�”}”(hjš�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–�h´K%hj—�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–�h´K%hj?�ubj)�”}”(hŒ(``unsigned int len`` length of the bvec ”h]”(j)�”}”(hŒ``unsigned int len``”h]”j)�”}”(hjº�h]”hŒunsigned int len”…”�”}”(hj¼�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K&hj´�ubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of the bvec”h]”hŒlength of the bvec”…”�”}”(hjÓ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏ�h´K&hjÐ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏ�h´K&hj?�ubj)�”}”(hŒ,``unsigned int offset`` offset into the page”h]”(j)�”}”(hŒ``unsigned int offset``”h]”j)�”}”(hjó�h]”hŒunsigned int offset”…”�”}”(hjõ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K(hjí�ubj2)�”}”(hhh]”hÝ)�”}”(hŒoffset into the page”h]”hŒoffset into the page”…”�”}”(hj Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K'hj Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjí�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽh´K(hj?�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj#�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbvec_set_folio (C function)”Œc.bvec_set_folio”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒXvoid bvec_set_folio (struct bio_vec *bv, struct folio *folio, size_t len, size_t offset)”h]”j)�”}”(hŒWvoid bvec_set_folio(struct bio_vec *bv, struct folio *folio, size_t len, size_t offset)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjMŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjIŽh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\Žh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjIŽh²hh³j[Žh´K2ubj{)�”}”(hŒbvec_set_folio”h]”j�)�”}”(hŒbvec_set_folio”h]”hŒbvec_set_folio”…”�”}”(hjnŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjŽubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjIŽh²hh³j[Žh´K2ubjœ)�”}”(hŒD(struct bio_vec *bv, struct folio *folio, size_t len, size_t offset)”h]”(j¢)�”}”(hŒstruct bio_vec *bv”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjŠŽh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj†Žubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—Žh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†Žubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hj¨Žh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¥Žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jªŽŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jpŽsbŒc.bvec_set_folio”†”asbuh1hhj†Žubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†Žubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÖŽh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj†Žubj�)�”}”(hŒbv”h]”hŒbv”…”�”}”(hjãŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‚Žubj¢)�”}”(hŒstruct folio *folio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjüŽh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjøŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøŽubh)�”}”(hhh]”j�)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÄŽŒc.bvec_set_folio”†”asbuh1hhjøŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøŽubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjF�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjøŽubj�)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjS�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjøŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‚Žubj¢)�”}”(hŒ size_t len”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hjo�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jq�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÄŽŒc.bvec_set_folio”†”asbuh1hhjh�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh�ubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj›�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjh�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‚Žubj¢)�”}”(hŒ size_t offset”h]”(h)�”}”(hhh]”j�)�”}”(hŒsize_t”h]”hŒsize_t”…”�”}”(hj·�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¹�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÄŽŒc.bvec_set_folio”†”asbuh1hhj°�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°�ubj�)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hjã�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‚Žubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjIŽh²hh³j[Žh´K2ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjEŽh²hh³j[Žh´K2ubah}”(h]”j@Žah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j[Žh´K2hjBŽh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*initialize a bvec based off a struct folio”h]”hŒ*initialize a bvec based off a struct folio”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K2hj �h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjBŽh²hh³j[Žh´K2ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj%�jæj%�jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒÅ**Parameters** ``struct bio_vec *bv`` bvec to initialize ``struct folio *folio`` folio the bvec should point to ``size_t len`` length of the bvec ``size_t offset`` offset into the folio”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj/�h]”hŒ Parameters”…”�”}”(hj1�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K6hj)�ubj )�”}”(hhh]”(j)�”}”(hŒ*``struct bio_vec *bv`` bvec to initialize ”h]”(j)�”}”(hŒ``struct bio_vec *bv``”h]”j)�”}”(hjN�h]”hŒstruct bio_vec *bv”…”�”}”(hjP�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjL�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K3hjH�ubj2)�”}”(hhh]”hÝ)�”}”(hŒbvec to initialize”h]”hŒbvec to initialize”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jc�h´K3hjd�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjH�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jc�h´K3hjE�ubj)�”}”(hŒ7``struct folio *folio`` folio the bvec should point to ”h]”(j)�”}”(hŒ``struct folio *folio``”h]”j)�”}”(hj‡�h]”hŒstruct folio *folio”…”�”}”(hj‰�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K4hj��ubj2)�”}”(hhh]”hÝ)�”}”(hŒfolio the bvec should point to”h]”hŒfolio the bvec should point to”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœ�h´K4hj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj��ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœ�h´K4hjE�ubj)�”}”(hŒ"``size_t len`` length of the bvec ”h]”(j)�”}”(hŒ``size_t len``”h]”j)�”}”(hjÀ�h]”hŒ size_t len”…”�”}”(hjÂ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K5hjº�ubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of the bvec”h]”hŒlength of the bvec”…”�”}”(hjÙ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÕ�h´K5hjÖ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjº�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕ�h´K5hjE�ubj)�”}”(hŒ'``size_t offset`` offset into the folio”h]”(j)�”}”(hŒ``size_t offset``”h]”j)�”}”(hjù�h]”hŒ size_t offset”…”�”}”(hjû�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj÷�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K7hjó�ubj2)�”}”(hhh]”hÝ)�”}”(hŒoffset into the folio”h]”hŒoffset into the folio”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´K6hj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjó�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‘h´K7hjE�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj)�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbvec_set_virt (C function)”Œc.bvec_set_virt”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFvoid bvec_set_virt (struct bio_vec *bv, void *vaddr, unsigned int len)”h]”j)�”}”(hŒEvoid bvec_set_virt(struct bio_vec *bv, void *vaddr, unsigned int len)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjS‘h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjO‘h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjb‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjO‘h²hh³ja‘h´KBubj{)�”}”(hŒ bvec_set_virt”h]”j�)�”}”(hŒ bvec_set_virt”h]”hŒ bvec_set_virt”…”�”}”(hjt‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjp‘ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjO‘h²hh³ja‘h´KBubjœ)�”}”(hŒ3(struct bio_vec *bv, void *vaddr, unsigned int len)”h]”(j¢)�”}”(hŒstruct bio_vec *bv”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�‘h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjŒ‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŒ‘ubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hj®‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«‘ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j°‘Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jv‘sbŒc.bvec_set_virt”†”asbuh1hhjŒ‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjΑh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŒ‘ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÜ‘h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjŒ‘ubj�)�”}”(hŒbv”h]”hŒbv”…”�”}”(hjé‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjˆ‘ubj¢)�”}”(hŒ void *vaddr”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþ‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ‘ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjþ‘ubj�)�”}”(hŒvaddr”h]”hŒvaddr”…”�”}”(hj+’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjˆ‘ubj¢)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjD’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@’ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj`’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@’ubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hj|’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjˆ‘ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjO‘h²hh³ja‘h´KBubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjK‘h²hh³ja‘h´KBubah}”(h]”jF‘ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³ja‘h´KBhjH‘h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,initialize a bvec based on a virtual address”h]”hŒ,initialize a bvec based on a virtual address”…”�”}”(hj¦’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KBhj£’h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjH‘h²hh³ja‘h´KBubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¾’jæj¾’jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒœ**Parameters** ``struct bio_vec *bv`` bvec to initialize ``void *vaddr`` virtual address to set the bvec to ``unsigned int len`` length of the bvec”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÈ’h]”hŒ Parameters”…”�”}”(hjÊ’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÆ’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KFhjÂ’ubj )�”}”(hhh]”(j)�”}”(hŒ*``struct bio_vec *bv`` bvec to initialize ”h]”(j)�”}”(hŒ``struct bio_vec *bv``”h]”j)�”}”(hjç’h]”hŒstruct bio_vec *bv”…”�”}”(hjé’h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå’ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KChjá’ubj2)�”}”(hhh]”hÝ)�”}”(hŒbvec to initialize”h]”hŒbvec to initialize”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jü’h´KChjý’ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjá’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jü’h´KChjÞ’ubj)�”}”(hŒ3``void *vaddr`` virtual address to set the bvec to ”h]”(j)�”}”(hŒ``void *vaddr``”h]”j)�”}”(hj “h]”hŒ void *vaddr”…”�”}”(hj"“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KDhj“ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"virtual address to set the bvec to”h]”hŒ"virtual address to set the bvec to”…”�”}”(hj9“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j5“h´KDhj6“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j5“h´KDhjÞ’ubj)�”}”(hŒ'``unsigned int len`` length of the bvec”h]”(j)�”}”(hŒ``unsigned int len``”h]”j)�”}”(hjY“h]”hŒunsigned int len”…”�”}”(hj[“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KFhjS“ubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of the bvec”h]”hŒlength of the bvec”…”�”}”(hjr“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KEhjo“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjS“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jn“h´KFhjÞ’ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÂ’ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbvec_folio (C function)”Œ c.bvec_folio”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4struct folio * bvec_folio (const struct bio_vec *bv)”h]”j)�”}”(hŒ2struct folio *bvec_folio(const struct bio_vec *bv)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj³“h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¯“h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯“h²hh³jÀ“h´KNubh)�”}”(hhh]”j�)�”}”(hŒfolio”h]”hŒfolio”…”�”}”(hjÒ“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏ“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÔ“Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ bvec_folio”sbŒ c.bvec_folio”†”asbuh1hhj¯“h²hh³jÀ“h´KNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯“h²hh³jÀ“h´KNubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¯“h²hh³jÀ“h´KNubj{)�”}”(hŒ bvec_folio”h]”j�)�”}”(hjð“h]”hŒ bvec_folio”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¯“h²hh³jÀ“h´KNubjœ)�”}”(hŒ(const struct bio_vec *bv)”h]”j¢)�”}”(hŒconst struct bio_vec *bv”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj-”h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)”ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)”ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjH”h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)”ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)”ubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hjf”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjc”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jh”Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j c.bvec_folio”†”asbuh1hhj)”ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)”ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj’”h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj)”ubj�)�”}”(hŒbv”h]”hŒbv”…”�”}”(hjŸ”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%”ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¯“h²hh³jÀ“h´KNubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj«“h²hh³jÀ“h´KNubah}”(h]”j¦“ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÀ“h´KNhj¨“h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Return the first folio referenced by this bvec”h]”hŒ.Return the first folio referenced by this bvec”…”�”}”(hjÉ”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KNhjÆ”h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¨“h²hh³jÀ“h´KNubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjá”jæjá”jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX²**Parameters** ``const struct bio_vec *bv`` bvec to access **Description** A bvec can contain non-folio memory, so this should only be called by the creator of the bvec; drivers have no business looking at the owner of the memory. It may not even be the right interface for the caller to use as a bvec can span multiple folios. You may be better off using something like bio_for_each_folio_all() which iterates over all folios.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjë”h]”hŒ Parameters”…”�”}”(hjí”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjé”ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KRhjå”ubj )�”}”(hhh]”j)�”}”(hŒ,``const struct bio_vec *bv`` bvec to access ”h]”(j)�”}”(hŒ``const struct bio_vec *bv``”h]”j)�”}”(hj •h]”hŒconst struct bio_vec *bv”…”�”}”(hj •h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KOhj•ubj2)�”}”(hhh]”hÝ)�”}”(hŒbvec to access”h]”hŒbvec to access”…”�”}”(hj#•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j•h´KOhj •ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j•h´KOhj•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjå”ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjE•h]”hŒ Description”…”�”}”(hjG•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjC•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KQhjå”ubhÝ)�”}”(hXbA bvec can contain non-folio memory, so this should only be called by the creator of the bvec; drivers have no business looking at the owner of the memory. It may not even be the right interface for the caller to use as a bvec can span multiple folios. You may be better off using something like bio_for_each_folio_all() which iterates over all folios.”h]”hXbA bvec can contain non-folio memory, so this should only be called by the creator of the bvec; drivers have no business looking at the owner of the memory. It may not even be the right interface for the caller to use as a bvec can span multiple folios. You may be better off using something like bio_for_each_folio_all() which iterates over all folios.”…”�”}”(hj[•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´KPhjå”ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbvec_kmap_local (C function)”Œc.bvec_kmap_local”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-void * bvec_kmap_local (struct bio_vec *bvec)”h]”j)�”}”(hŒ+void *bvec_kmap_local(struct bio_vec *bvec)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjŠ•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj†•h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†•h²hh³j˜•h´Mubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj§•h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj†•h²hh³j˜•h´Mubj{)�”}”(hŒbvec_kmap_local”h]”j�)�”}”(hŒbvec_kmap_local”h]”hŒbvec_kmap_local”…”�”}”(hj¸•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´•ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj†•h²hh³j˜•h´Mubjœ)�”}”(hŒ(struct bio_vec *bvec)”h]”j¢)�”}”(hŒstruct bio_vec *bvec”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÔ•h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjЕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjЕubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hjò•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjï•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jô•Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jº•sbŒc.bvec_kmap_local”†”asbu• h1hhjЕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjЕubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj –h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjЕubj�)�”}”(hŒbvec”h]”hŒbvec”…”�”}”(hj-–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjЕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÌ•ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj†•h²hh³j˜•h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‚•h²hh³j˜•h´Mubah}”(h]”j}•ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j˜•h´Mhj•h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0map a bvec into the kernel virtual address space”h]”hŒ0map a bvec into the kernel virtual address space”…”�”}”(hjW–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MhjT–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj•h²hh³j˜•h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjo–jæjo–jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ§**Parameters** ``struct bio_vec *bvec`` bvec to map **Description** Must be called on single-page bvecs only. Call kunmap_local on the returned address to unmap.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjy–h]”hŒ Parameters”…”�”}”(hj{–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjw–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Mhjs–ubj )�”}”(hhh]”j)�”}”(hŒ%``struct bio_vec *bvec`` bvec to map ”h]”(j)�”}”(hŒ``struct bio_vec *bvec``”h]”j)�”}”(hj˜–h]”hŒstruct bio_vec *bvec”…”�”}”(hjš–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj––ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Mhj’–ubj2)�”}”(hhh]”hÝ)�”}”(hŒ bvec to map”h]”hŒ bvec to map”…”�”}”(hj±–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j­–h´Mhj®–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj’–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­–h´Mhj�–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjs–ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÓ–h]”hŒ Description”…”�”}”(hjÕ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Mhjs–ubhÝ)�”}”(hŒ^Must be called on single-page bvecs only. Call kunmap_local on the returned address to unmap.”h]”hŒ^Must be called on single-page bvecs only. Call kunmap_local on the returned address to unmap.”…”�”}”(hjé–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´Mhjs–ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemcpy_from_bvec (C function)”Œc.memcpy_from_bvec”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6void memcpy_from_bvec (char *to, struct bio_vec *bvec)”h]”j)�”}”(hŒ5void memcpy_from_bvec(char *to, struct bio_vec *bvec)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj—h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—h²hh³j&—h´M#ubj{)�”}”(hŒmemcpy_from_bvec”h]”j�)�”}”(hŒmemcpy_from_bvec”h]”hŒmemcpy_from_bvec”…”�”}”(hj9—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5—ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—h²hh³j&—h´M#ubjœ)�”}”(hŒ (char *to, struct bio_vec *bvec)”h]”(j¢)�”}”(hŒchar *to”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjU—h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjQ—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQ—ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjq—h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjQ—ubj�)�”}”(hŒto”h]”hŒto”…”�”}”(hj~—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQ—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjM—ubj¢)�”}”(hŒstruct bio_vec *bvec”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj——h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj“—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“—ubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hjµ—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j·—Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j;—sbŒc.memcpy_from_bvec”†”asbuh1hhj“—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“—ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjã—h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj“—ubj�)�”}”(hŒbvec”h]”hŒbvec”…”�”}”(hjð—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjM—ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj—h²hh³j&—h´M#ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—h²hh³j&—h´M#ubah}”(h]”j —ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j&—h´M#hj —h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒcopy data from a bvec”h]”hŒcopy data from a bvec”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M#hj˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj —h²hh³j&—h´M#ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj2˜jæj2˜jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ«**Parameters** ``char *to`` Kernel virtual address to copy to. ``struct bio_vec *bvec`` bvec to copy from **Description** Must be called on single-page bvecs only.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj<˜h]”hŒ Parameters”…”�”}”(hj>˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj:˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M'hj6˜ubj )�”}”(hhh]”(j)�”}”(hŒ0``char *to`` Kernel virtual address to copy to. ”h]”(j)�”}”(hŒ ``char *to``”h]”j)�”}”(hj[˜h]”hŒchar *to”…”�”}”(hj]˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjY˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M$hjU˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒ"Kernel virtual address to copy to.”h]”hŒ"Kernel virtual address to copy to.”…”�”}”(hjt˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jp˜h´M$hjq˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjU˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jp˜h´M$hjR˜ubj)�”}”(hŒ+``struct bio_vec *bvec`` bvec to copy from ”h]”(j)�”}”(hŒ``struct bio_vec *bvec``”h]”j)�”}”(hj”˜h]”hŒstruct bio_vec *bvec”…”�”}”(hj–˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M%hjŽ˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒbvec to copy from”h]”hŒbvec to copy from”…”�”}”(hj­˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©˜h´M%hjª˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŽ˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©˜h´M%hjR˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj6˜ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjϘh]”hŒ Description”…”�”}”(hjјh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj͘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M'hj6˜ubhÝ)�”}”(hŒ)Must be called on single-page bvecs only.”h]”hŒ)Must be called on single-page bvecs only.”…”�”}”(hjå˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M&hj6˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemcpy_to_bvec (C function)”Œc.memcpy_to_bvec”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hj™h²hh³j"™h´M/ubj{)�”}”(hŒmemcpy_to_bvec”h]”j�)�”}”(hŒmemcpy_to_bvec”h]”hŒmemcpy_to_bvec”…”�”}”(hj5™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1™ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj™h²hh³j"™h´M/ubjœ)�”}”(hŒ((struct bio_vec *bvec, const char *from)”h]”(j¢)�”}”(hŒstruct bio_vec *bvec”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjQ™h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjM™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjM™ubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hjo™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl™ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jq™Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j7™sbŒc.memcpy_to_bvec”†”asbuh1hhjM™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjM™ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�™h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjM™ubj�)�”}”(hŒbvec”h]”hŒbvec”…”�”}”(hjª™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjM™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjI™ubj¢)�”}”(hŒconst char *from”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¿™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjЙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿™ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÞ™h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì™h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿™ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjú™h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¿™ubj�)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿™ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjI™ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj™h²hh³j"™h´M/ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj ™h²hh³j"™h´M/ubah}”(h]”j™ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j"™h´M/hj ™h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒcopy data to a bvec”h]”hŒcopy data to a bvec”…”�”}”(hj1šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M/hj.šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj ™h²hh³j"™h´M/ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjIšjæjIšjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ³**Parameters** ``struct bio_vec *bvec`` bvec to copy to ``const char *from`` Kernel virtual address to copy from. **Description** Must be called on single-page bvecs only.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjSšh]”hŒ Parameters”…”�”}”(hjUšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjQšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M3hjMšubj )�”}”(hhh]”(j)�”}”(hŒ)``struct bio_vec *bvec`` bvec to copy to ”h]”(j)�”}”(hŒ``struct bio_vec *bvec``”h]”j)�”}”(hjršh]”hŒstruct bio_vec *bvec”…”�”}”(hjtšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjpšubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M0hjlšubj2)�”}”(hhh]”hÝ)�”}”(hŒbvec to copy to”h]”hŒbvec to copy to”…”�”}”(hj‹šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‡šh´M0hjˆšubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjlšubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‡šh´M0hjišubj)�”}”(hŒ:``const char *from`` Kernel virtual address to copy from. ”h]”(j)�”}”(hŒ``const char *from``”h]”j)�”}”(hj«šh]”hŒconst char *from”…”�”}”(hj­šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©šubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M1hj¥šubj2)�”}”(hhh]”hÝ)�”}”(hŒ$Kernel virtual address to copy from.”h]”hŒ$Kernel virtual address to copy from.”…”�”}”(hjÄšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÀšh´M1hjÁšubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¥šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÀšh´M1hjišubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjMšubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjæšh]”hŒ Description”…”�”}”(hjèšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjäšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M3hjMšubhÝ)�”}”(hŒ)Must be called on single-page bvecs only.”h]”hŒ)Must be called on single-page bvecs only.”…”�”}”(hjüšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M2hjMšubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œmemzero_bvec (C function)”Œc.memzero_bvec”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(void memzero_bvec (struct bio_vec *bvec)”h]”j)�”}”(hŒ'void memzero_bvec(struct bio_vec *bvec)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj+›h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj'›h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'›h²hh³j9›h´M;ubj{)�”}”(hŒ memzero_bvec”h]”j�)�”}”(hŒ memzero_bvec”h]”hŒ memzero_bvec”…”�”}”(hjL›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjH›ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj'›h²hh³j9›h´M;ubjœ)�”}”(hŒ(struct bio_vec *bvec)”h]”j¢)�”}”(hŒstruct bio_vec *bvec”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh›h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjd›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjd›ubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hj†›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ›ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jˆ›Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jN›sbŒc.memzero_bvec”†”asbuh1hhjd›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjd›ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj´›h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjd›ubj�)�”}”(hŒbvec”h]”hŒbvec”…”�”}”(hjÁ›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjd›ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj`›ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj'›h²hh³j9›h´M;ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj#›h²hh³j9›h´M;ubah}”(h]”j›ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j9›h´M;hj ›h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒzero all data in a bvec”h]”hŒzero all data in a bvec”…”�”}”(hjë›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M;hjè›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj ›h²hh³j9›h´M;ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjœjæjœjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒs**Parameters** ``struct bio_vec *bvec`` bvec to zero **Description** Must be called on single-page bvecs only.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj œh]”hŒ Parameters”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M?hjœubj )�”}”(hhh]”j)�”}”(hŒ&``struct bio_vec *bvec`` bvec to zero ”h]”(j)�”}”(hŒ``struct bio_vec *bvec``”h]”j)�”}”(hj,œh]”hŒstruct bio_vec *bvec”…”�”}”(hj.œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*œubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M<hj&œubj2)�”}”(hhh]”hÝ)�”}”(hŒ bvec to zero”h]”hŒ bvec to zero”…”�”}”(hjEœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jAœh´M<hjBœubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj&œubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jAœh´M<hj#œubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjœubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjgœh]”hŒ Description”…”�”}”(hjiœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjeœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M>hjœubhÝ)�”}”(hŒ)Must be called on single-page bvecs only.”h]”hŒ)Must be called on single-page bvecs only.”…”�”}”(hj}œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´M=hjœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbvec_virt (C function)”Œ c.bvec_virt”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'void * bvec_virt (struct bio_vec *bvec)”h]”j)�”}”(hŒ%void *bvec_virt(struct bio_vec *bvec)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¬œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¨œh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¨œh²hh³jºœh´MFubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÉœh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¨œh²hh³jºœh´MFubj{)�”}”(hŒ bvec_virt”h]”j�)�”}”(hŒ bvec_virt”h]”hŒ bvec_virt”…”�”}”(hjÚœh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖœubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¨œh²hh³jºœh´MFubjœ)�”}”(hŒ(struct bio_vec *bvec)”h]”j¢)�”}”(hŒstruct bio_vec *bvec”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjöœh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjòœubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòœubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÜœsbŒ c.bvec_virt”†”asbuh1hhjòœubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòœubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjB�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjòœubj�)�”}”(hŒbvec”h]”hŒbvec”…”�”}”(hjO�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòœubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjîœubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¨œh²hh³jºœh´MFubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¤œh²hh³jºœh´MFubah}”(h]”jŸœah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jºœh´MFhj¡œh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%return the virtual address for a bvec”h]”hŒ%return the virtual address for a bvec”…”�”}”(hjy�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MFhjv�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¡œh²hh³jºœh´MFubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‘�jæj‘�jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ¡**Parameters** ``struct bio_vec *bvec`` bvec to return the virtual address for **Note** the caller must ensure that **bvec->bv_page** is not a highmem page.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj›�h]”hŒ Parameters”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MJhj•�ubj )�”}”(hhh]”j)�”}”(hŒ@``struct bio_vec *bvec`` bvec to return the virtual address for ”h]”(j)�”}”(hŒ``struct bio_vec *bvec``”h]”j)�”}”(hjº�h]”hŒstruct bio_vec *bvec”…”�”}”(hj¼�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MGhj´�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ&bvec to return the virtual address for”h]”hŒ&bvec to return the virtual address for”…”�”}”(hjÓ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏ�h´MGhjÐ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj´�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏ�h´MGhj±�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj•�ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjõ�h]”hŒNote”…”�”}”(hj÷�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjó�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MIhj•�ubhÝ)�”}”(hŒDthe caller must ensure that **bvec->bv_page** is not a highmem page.”h]”(hŒthe caller must ensure that ”…”�”}”(hj žh²hh³Nh´Nubjõ)�”}”(hŒ**bvec->bv_page**”h]”hŒ bvec->bv_page”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj žubhŒ is not a highmem page.”…”�”}”(hj žh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MIhj•�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbvec_phys (C function)”Œ c.bvec_phys”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2phys_addr_t bvec_phys (const struct bio_vec *bvec)”h]”j)�”}”(hŒ1phys_addr_t bvec_phys(const struct bio_vec *bvec)”h]”(h)�”}”(hhh]”j�)�”}”(hŒ phys_addr_t”h]”hŒ phys_addr_t”…”�”}”(hjOžh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jQžŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ bvec_phys”sbŒ c.bvec_phys”†”asbuh1hhjHžh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqžh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHžh²hh³jpžh´MRubj{)�”}”(hŒ bvec_phys”h]”j�)�”}”(hjmžh]”hŒ bvec_phys”…”�”}”(hjƒžh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjHžh²hh³jpžh´MRubjœ)�”}”(hŒ(const struct bio_vec *bvec)”h]”j¢)�”}”(hŒconst struct bio_vec *bvec”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjžžh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjšžubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«žh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšžubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¹žh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjšžubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆžh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšžubh)�”}”(hhh]”j�)�”}”(hŒbio_vec”h]”hŒbio_vec”…”�”}”(hjמh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔžubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÙžŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jkžŒ c.bvec_phys”†”asbuh1hhjšžubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõžh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšžubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjšžubj�)�”}”(hŒbvec”h]”hŒbvec”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšžubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj–žubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjHžh²hh³jpžh´MRubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjDžh²hh³jpžh´MRubah}”(h]”j?žah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jpžh´MRhjAžh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&return the physical address for a bvec”h]”hŒ&return the physical address for a bvec”…”�”}”(hj:Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MRhj7Ÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjAžh²hh³jpžh´MRubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjRŸjæjRŸjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒX**Parameters** ``const struct bio_vec *bvec`` bvec to return the physical address for”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj\Ÿh]”hŒ Parameters”…”�”}”(hj^Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjZŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MVhjVŸubj )�”}”(hhh]”j)�”}”(hŒF``const struct bio_vec *bvec`` bvec to return the physical address for”h]”(j)�”}”(hŒ``const struct bio_vec *bvec``”h]”j)�”}”(hj{Ÿh]”hŒconst struct bio_vec *bvec”…”�”}”(hj}Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjyŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MXhjuŸubj2)�”}”(hhh]”hÝ)�”}”(hŒ'bvec to return the physical address for”h]”hŒ'bvec to return the physical address for”…”�”}”(hj”Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:310: ./include/linux/bvec.h”h´MShj‘Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjuŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�Ÿh´MXhjrŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjVŸubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbio_advance (C function)”Œ c.bio_advance”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void bio_advance (struct bio *bio, unsigned int nbytes)”h]”j)�”}”(hŒ6void bio_advance(struct bio *bio, unsigned int nbytes)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÕŸh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÑŸh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´K‹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÑŸh²hh³jãŸh´K‹ubj{)�”}”(hŒ bio_advance”h]”j�)�”}”(hŒ bio_advance”h]”hŒ bio_advance”…”�”}”(hjöŸh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòŸubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÑŸh²hh³jãŸh´K‹ubjœ)�”}”(hŒ&(struct bio *bio, unsigned int nbytes)”h]”(j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj0 h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj- ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j2 Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jøŸsbŒ c.bio_advance”†”asbuh1hhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjk h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj  ubj¢)�”}”(hŒunsigned int nbytes”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj„ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj€ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€ ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj  h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj€ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€ ubj�)�”}”(hŒnbytes”h]”hŒnbytes”…”�”}”(hj¼ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj€ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj  ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÑŸh²hh³jãŸh´K‹ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÍŸh²hh³jãŸh´K‹ubah}”(h]”jÈŸah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jãŸh´K‹hjÊŸh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0increment/complete a bio by some number of bytes”h]”hŒ0increment/complete a bio by some number of bytes”…”�”}”(hjæ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´K‹hjã h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÊŸh²hh³jãŸh´K‹ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjþ jæjþ jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX**Parameters** ``struct bio *bio`` bio to advance ``unsigned int nbytes`` number of bytes to complete **Description** This updates bi_sector, bi_size and bi_idx; if the number of bytes to complete doesn't align with a bvec boundary, then bv_len and bv_offset will be updated on the last bvec as well. **bio** will then represent the remaining, uncompleted portion of the io.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¡h]”hŒ Parameters”…”�”}”(hj ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´K�hj¡ubj )�”}”(hhh]”(j)�”}”(hŒ#``struct bio *bio`` bio to advance ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hj'¡h]”hŒstruct bio *bio”…”�”}”(hj)¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´KŒhj!¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒbio to advance”h]”hŒbio to advance”…”�”}”(hj@¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j<¡h´KŒhj=¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj!¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j<¡h´KŒhj¡ubj)�”}”(hŒ4``unsigned int nbytes`` number of bytes to complete ”h]”(j)�”}”(hŒ``unsigned int nbytes``”h]”j)�”}”(hj`¡h]”hŒunsigned int nbytes”…”�”}”(hjb¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´K�hjZ¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of bytes to complete”h]”hŒnumber of bytes to complete”…”�”}”(hjy¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ju¡h´K�hjv¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjZ¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ju¡h´K�hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj›¡h]”hŒ Description”…”�”}”(hj�¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´K�hj¡ubhÝ)�”}”(hŒ¶This updates bi_sector, bi_size and bi_idx; if the number of bytes to complete doesn't align with a bvec boundary, then bv_len and bv_offset will be updated on the last bvec as well.”h]”hŒ¸This updates bi_sector, bi_size and bi_idx; if the number of bytes to complete doesn’t align with a bvec boundary, then bv_len and bv_offset will be updated on the last bvec as well.”…”�”}”(hj±¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´KŽhj¡ubhÝ)�”}”(hŒI**bio** will then represent the remaining, uncompleted portion of the io.”h]”(jõ)�”}”(hŒ**bio**”h]”hŒbio”…”�”}”(hjÄ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÀ¡ubhŒB will then represent the remaining, uncompleted portion of the io.”…”�”}”(hjÀ¡h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´K’hj¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œfolio_iter (C struct)”Œ c.folio_iter”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ folio_iter”h]”j)�”}”(hŒstruct folio_iter”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjý¡h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjù¡h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´K—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjù¡h²hh³j ¢h´K—ubj{)�”}”(hŒ folio_iter”h]”j�)�”}”(hj÷¡h]”hŒ folio_iter”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjù¡h²hh³j ¢h´K—ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjõ¡h²hh³j ¢h´K—ubah}”(h]”jð¡ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j ¢h´K—hjò¡h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(State for iterating all folios in a bio.”h]”hŒ(State for iterating all folios in a bio.”…”�”}”(hj?¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mhj<¢h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjò¡h²hh³j ¢h´K—ubeh}”(h]”h ]”(jߌstruct”eh"]”h$]”h&]”jäjßjåjW¢jæjW¢jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXY**Definition**:: struct folio_iter { struct folio *folio; size_t offset; size_t length; }; **Members** ``folio`` The current folio we're iterating. NULL after the last folio. ``offset`` The byte offset within the current folio. ``length`` The number of bytes in this iteration (will not cross folio boundary).”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jõ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjc¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_¢ubhŒ:”…”�”}”(hj_¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mhj[¢ubj‘H)�”}”(hŒUstruct folio_iter { struct folio *folio; size_t offset; size_t length; };”h]”hŒUstruct folio_iter { struct folio *folio; size_t offset; size_t length; };”…”�”}”hj|¢sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M hj[¢ubhÝ)�”}”(hŒ **Members**”h]”jõ)�”}”(hj�¢h]”hŒMembers”…”�”}”(hj�¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mhj[¢ubj )�”}”(hhh]”(j)�”}”(hŒI``folio`` The current folio we're iterating. NULL after the last folio. ”h]”(j)�”}”(hŒ ``folio``”h]”j)�”}”(hj¬¢h]”hŒfolio”…”�”}”(hj®¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjª¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mhj¦¢ubj2)�”}”(hhh]”hÝ)�”}”(hŒ>The current folio we're iterating. NULL after the last folio.”h]”hŒ@The current folio we’re iterating. NULL after the last folio.”…”�”}”(hjÅ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁ¢h´Mhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁ¢h´Mhj£¢ubj)�”}”(hŒ5``offset`` The byte offset within the current folio. ”h]”(j)�”}”(hŒ ``offset``”h]”j)�”}”(hjå¢h]”hŒoffset”…”�”}”(hjç¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjã¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mhjߢubj2)�”}”(hhh]”hÝ)�”}”(hŒ)The byte offset within the current folio.”h]”hŒ)The byte offset within the current folio.”…”�”}”(hjþ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jú¢h´Mhjû¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjߢubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jú¢h´Mhj£¢ubj)�”}”(hŒQ``length`` The number of bytes in this iteration (will not cross folio boundary).”h]”(j)�”}”(hŒ ``length``”h]”j)�”}”(hj£h]”hŒlength”…”�”}”(hj £h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mhj£ubj2)�”}”(hhh]”hÝ)�”}”(hŒFThe number of bytes in this iteration (will not cross folio boundary).”h]”hŒFThe number of bytes in this iteration (will not cross folio boundary).”…”�”}”(hj7£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3£h´Mhj4£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3£h´Mhj£¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj[¢ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ bio_for_each_folio_all (C macro)”Œc.bio_for_each_folio_all”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒbio_for_each_folio_all”h]”j)�”}”(hŒbio_for_each_folio_all”h]”j{)�”}”(hŒbio_for_each_folio_all”h]”j�)�”}”(hjq£h]”hŒbio_for_each_folio_all”…”�”}”(hj{£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjw£ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjs£h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M5ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjo£h²hh³jŽ£h´M5ubah}”(h]”jj£ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŽ£h´M5hjl£h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjl£h²hh³jŽ£h´M5ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj§£jæj§£jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´NubhÝ)�”}”(hŒ$``bio_for_each_folio_all (fi, bio)``”h]”j)�”}”(hj­£h]”hŒ bio_for_each_folio_all (fi, bio)”…”�”}”(hj¯£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M7hjE‰h²hubj•)�”}”(hŒ"Iterate over each folio in a bio. ”h]”hÝ)�”}”(hŒ!Iterate over each folio in a bio.”h]”hŒ!Iterate over each folio in a bio.”…”�”}”(hjÇ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M5hjãubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÕ£h´M5hjE‰h²hubjë)�”}”(hŒr**Parameters** ``fi`` struct folio_iter which is updated for each folio. ``bio`` struct bio to iterate over.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjâ£h]”hŒ Parameters”…”�”}”(hjä£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjà£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M9hjÜ£ubj )�”}”(hhh]”(j)�”}”(hŒ:``fi`` struct folio_iter which is updated for each folio. ”h]”(j)�”}”(hŒ``fi``”h]”j)�”}”(hj¤h]”hŒfi”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M6hjû£ubj2)�”}”(hhh]”hÝ)�”}”(hŒ2struct folio_iter which is updated for each folio.”h]”hŒ2struct folio_iter which is updated for each folio.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤h´M6hj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjû£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤h´M6hjø£ubj)�”}”(hŒ#``bio`` struct bio to iterate over.”h]”(j)�”}”(hŒ``bio``”h]”j)�”}”(hj:¤h]”hŒbio”…”�”}”(hj<¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M8hj4¤ubj2)�”}”(hhh]”hÝ)�”}”(hŒstruct bio to iterate over.”h]”hŒstruct bio to iterate over.”…”�”}”(hjS¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M7hjP¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jO¤h´M8hjø£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜ£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbio_next_split (C function)”Œc.bio_next_split”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒYstruct bio * bio_next_split (struct bio *bio, int sectors, gfp_t gfp, struct bio_set *bs)”h]”j)�”}”(hŒWstruct bio *bio_next_split(struct bio *bio, int sectors, gfp_t gfp, struct bio_set *bs)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj”¤h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�¤h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¢¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�¤h²hh³j¡¤h´MEubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj³¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°¤ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jµ¤Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œbio_next_split”sbŒc.bio_next_split”†”asbuh1hhj�¤h²hh³j¡¤h´MEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�¤h²hh³j¡¤h´MEubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjâ¤h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�¤h²hh³j¡¤h´MEubj{)�”}”(hŒbio_next_split”h]”j�)�”}”(hjѤh]”hŒbio_next_split”…”�”}”(hjó¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjï¤ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�¤h²hh³j¡¤h´MEubjœ)�”}”(hŒ=(struct bio *bio, int sectors, gfp_t gfp, struct bio_set *bs)”h]”(j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj ¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ¥ubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj,¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j.¥Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jϤŒc.bio_next_split”†”asbuh1hhj ¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ¥ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjX¥h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj ¥ubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hje¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¥ubj¢)�”}”(hŒ int sectors”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj~¥h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjz¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjz¥ubj�)�”}”(hŒsectors”h]”hŒsectors”…”�”}”(hjš¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjz¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¥ubj¢)�”}”(hŒ gfp_t gfp”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj¶¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¸¥Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jϤŒc.bio_next_split”†”asbuh1hhj¯¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¯¥ubj�)�”}”(hŒgfp”h]”hŒgfp”…”�”}”(hjâ¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¥ubj¢)�”}”(hŒstruct bio_set *bs”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjû¥h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj÷¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷¥ubh)�”}”(hhh]”j�)�”}”(hŒbio_set”h]”hŒbio_set”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¦Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jϤŒc.bio_next_split”†”asbuh1hhj÷¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷¥ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjE¦h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷¥ubj�)�”}”(hŒbs”h]”hŒbs”…”�”}”(hjR¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¥ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�¤h²hh³j¡¤h´MEubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŒ¤h²hh³j¡¤h´MEubah}”(h]”j‡¤ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¡¤h´MEhj‰¤h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7get next **sectors** from a bio, splitting if necessary”h]”(hŒ get next ”…”�”}”(hj|¦h²hh³Nh´Nubjõ)�”}”(hŒ **sectors**”h]”hŒsectors”…”�”}”(hj„¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|¦ubhŒ# from a bio, splitting if necessary”…”�”}”(hj|¦h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MEhjy¦h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‰¤h²hh³j¡¤h´MEubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¦¦jæj¦¦jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXU**Parameters** ``struct bio *bio`` bio to split ``int sectors`` number of sectors to split from the front of **bio** ``gfp_t gfp`` gfp mask ``struct bio_set *bs`` bio set to allocate from **Return** a bio representing the next **sectors** of **bio** - if the bio is smaller than **sectors**, returns the original bio unchanged.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj°¦h]”hŒ Parameters”…”�”}”(hj²¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MIhjª¦ubj )�”}”(hhh]”(j)�”}”(hŒ!``struct bio *bio`` bio to split ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hjϦh]”hŒstruct bio *bio”…”�”}”(hjѦh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjͦubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MFhjɦubj2)�”}”(hhh]”hÝ)�”}”(hŒ bio to split”h]”hŒ bio to split”…”�”}”(hjè¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jä¦h´MFhjå¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjɦubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jä¦h´MFhjƦubj)�”}”(hŒE``int sectors`` number of sectors to split from the front of **bio** ”h]”(j)�”}”(hŒ``int sectors``”h]”j)�”}”(hj§h]”hŒ int sectors”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MGhj§ubj2)�”}”(hhh]”hÝ)�”}”(hŒ4number of sectors to split from the front of **bio**”h]”(hŒ-number of sectors to split from the front of ”…”�”}”(hj!§h²hh³Nh´Nubjõ)�”}”(hŒ**bio**”h]”hŒbio”…”�”}”(hj)§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j§h´MGhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§h´MGhjƦubj)�”}”(hŒ``gfp_t gfp`` gfp mask ”h]”(j)�”}”(hŒ ``gfp_t gfp``”h]”j)�”}”(hjO§h]”hŒ gfp_t gfp”…”�”}”(hjQ§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjM§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MHhjI§ubj2)�”}”(hhh]”hÝ)�”}”(hŒgfp mask”h]”hŒgfp mask”…”�”}”(hjh§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jd§h´MHhje§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjI§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jd§h´MHhjƦubj)�”}”(hŒ0``struct bio_set *bs`` bio set to allocate from ”h]”(j)�”}”(hŒ``struct bio_set *bs``”h]”j)�”}”(hjˆ§h]”hŒstruct bio_set *bs”…”�”}”(hjЧh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MIhj‚§ubj2)�”}”(hhh]”hÝ)�”}”(hŒbio set to allocate from”h]”hŒbio set to allocate from”…”�”}”(hj¡§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�§h´MIhjž§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‚§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�§h´MIhjƦubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjª¦ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjçh]”hŒReturn”…”�”}”(hjŧh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MKhjª¦ubhÝ)�”}”(hŒ€a bio representing the next **sectors** of **bio** - if the bio is smaller than **sectors**, returns the original bio unchanged.”h]”(hŒa bio representing the next ”…”�”}”(hjÙ§h²hh³Nh´Nubjõ)�”}”(hŒ **sectors**”h]”hŒsectors”…”�”}”(hjá§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙ§ubhŒ of ”…”�”}”(hjÙ§h²hh³Nh´Nubjõ)�”}”(hŒ**bio**”h]”hŒbio”…”�”}”(hjó§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙ§ubhŒ - if the bio is smaller than ”…”�”}”(hjÙ§h²hh³Nh´Nubjõ)�”}”(hŒ **sectors**”h]”hŒsectors”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙ§ubhŒ%, returns the original bio unchanged.”…”�”}”(hjÙ§h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MKhjª¦ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbio_in_atomic (C function)”Œc.bio_in_atomic”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒbool bio_in_atomic (void)”h]”j)�”}”(hŒbool bio_in_atomic(void)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj>¨h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:¨h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mtubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjL¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:¨h²hh³jK¨h´Mtubj{)�”}”(hŒ bio_in_atomic”h]”j�)�”}”(hŒ bio_in_atomic”h]”hŒ bio_in_atomic”…”�”}”(hj^¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ¨ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj:¨h²hh³jK¨h´Mtubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjz¨h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjv¨ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjr¨ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj:¨h²hh³jK¨h´Mtubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj6¨h²hh³jK¨h´Mtubah}”(h]”j1¨ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jK¨h´Mthj3¨h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9check if the current context is unsafe for bio completion”h]”hŒ9check if the current context is unsafe for bio completion”…”�”}”(hj¤¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mthj¡¨h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj3¨h²hh³jK¨h´Mtubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¼¨jæj¼¨jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ½**Parameters** ``void`` no arguments **Return** ``true`` in atomic contexts (e.g. hard/soft IRQ, preempt-disabled); ``false`` when a bio can be safely completed in the current context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjƨh]”hŒ Parameters”…”�”}”(hjȨh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjĨubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MxhjÀ¨ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjå¨h]”hŒvoid”…”�”}”(hjç¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjã¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Khjߨubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjþ¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jú¨h´Khjû¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjߨubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jú¨h´Khjܨubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÀ¨ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj ©h]”hŒReturn”…”�”}”(hj"©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´KhjÀ¨ubhÝ)�”}”(hŒˆ``true`` in atomic contexts (e.g. hard/soft IRQ, preempt-disabled); ``false`` when a bio can be safely completed in the current context.”h]”(j)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj:©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6©ubhŒ< in atomic contexts (e.g. hard/soft IRQ, preempt-disabled); ”…”�”}”(hj6©h²hh³Nh´Nubj)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjL©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6©ubhŒ; when a bio can be safely completed in the current context.”…”�”}”(hj6©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MvhjÀ¨ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!bio_complete_in_task (C function)”Œc.bio_complete_in_task”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+bool bio_complete_in_task (struct bio *bio)”h]”j)�”}”(hŒ*bool bio_complete_in_task(struct bio *bio)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj…©h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�©h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�©h²hh³j’©h´M…ubj{)�”}”(hŒbio_complete_in_task”h]”j�)�”}”(hŒbio_complete_in_task”h]”hŒbio_complete_in_task”…”�”}”(hj¥©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡©ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�©h²hh³j’©h´M…ubjœ)�”}”(hŒ(struct bio *bio)”h]”j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÁ©h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj½©ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjΩh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½©ubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjß©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜ©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jᩌmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j§©sbŒc.bio_complete_in_task”†”asbuh1hhj½©ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½©ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj½©ubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¹©ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�©h²hh³j’©h´M…ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj}©h²hh³j’©h´M…ubah}”(h]”jx©ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j’©h´M…hjz©h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5ensure a bio is completed in preemptible task context”h]”hŒ5ensure a bio is completed in preemptible task context”…”�”}”(hjDªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M…hjAªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjz©h²hh³j’©h´M…ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj\ªjæj\ªjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXˆ**Parameters** ``struct bio *bio`` bio to complete **Description** If called from non-task context, offload the bio completion to a worker thread and return ``true``. Else return ``false`` and do nothing. Uses BIO_COMPLETE_IN_TASK as a sentinel: if set, the bio was already deferred and we are running in the worker — return ``false`` so the callback proceeds instead of re-deferring.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjfªh]”hŒ Parameters”…”�”}”(hjhªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjdªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M‰hj`ªubj )�”}”(hhh]”j)�”}”(hŒ$``struct bio *bio`` bio to complete ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hj…ªh]”hŒstruct bio *bio”…”�”}”(hj‡ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M†hjªubj2)�”}”(hhh]”hÝ)�”}”(hŒbio to complete”h]”hŒbio to complete”…”�”}”(hjžªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jšªh´M†hj›ªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjªubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jšªh´M†hj|ªubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj`ªubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÀªh]”hŒ Description”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾ªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mˆhj`ªubhÝ)�”}”(hŒ‰If called from non-task context, offload the bio completion to a worker thread and return ``true``. Else return ``false`` and do nothing.”h]”(hŒZIf called from non-task context, offload the bio completion to a worker thread and return ”…”�”}”(hjÖªh²hh³Nh´Nubj)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjÞªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖªubhŒ. Else return ”…”�”}”(hjÖªh²hh³Nh´Nubj)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjðªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖªubhŒ and do nothing.”…”�”}”(hjÖªh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M‡hj`ªubhÝ)�”}”(hŒµUses BIO_COMPLETE_IN_TASK as a sentinel: if set, the bio was already deferred and we are running in the worker — return ``false`` so the callback proceeds instead of re-deferring.”h]”(hŒzUses BIO_COMPLETE_IN_TASK as a sentinel: if set, the bio was already deferred and we are running in the worker — return ”…”�”}”(hj «h²hh³Nh´Nubj)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj «ubhŒ2 so the callback proceeds instead of re-deferring.”…”�”}”(hj «h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MŠhj`ªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbio_endio_status (C function)”Œc.bio_endio_status”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjF«h²hh³jX«h´M�ubj{)�”}”(hŒbio_endio_status”h]”j�)�”}”(hŒbio_endio_status”h]”hŒbio_endio_status”…”�”}”(hjk«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjg«ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjF«h²hh³jX«h´M�ubjœ)�”}”(hŒ&(struct bio *bio, blk_status_t status)”h]”(j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‡«h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjƒ«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ«ubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj¥«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j§«Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jm«sbŒc.bio_endio_status”†”asbuh1hhjƒ«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ«ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÓ«h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjƒ«ubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjà«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj«ubj¢)�”}”(hŒblk_status_t status”h]”(h)�”}”(hhh]”j�)�”}”(hŒ blk_status_t”h]”hŒ blk_status_t”…”�”}”(hjü«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjù«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jþ«Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÁ«Œc.bio_endio_status”†”asbuh1hhjõ«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõ«ubj�)�”}”(hŒstatus”h]”hŒstatus”…”�”}”(hj(¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõ«ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj«ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjF«h²hh³jX«h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjB«h²hh³jX«h´M�ubah}”(h]”j=«ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jX«h´M�hj?«h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'end I/O on a bio with a specific status”h]”hŒ'end I/O on a bio with a specific status”…”�”}”(hjR¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M�hjO¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj?«h²hh³jX«h´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjj¬jæjj¬jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒŸ**Parameters** ``struct bio *bio`` bio ``blk_status_t status`` status to set **Description** Set **bio->bi_status** to **status** and call bio_endio().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjt¬h]”hŒ Parameters”…”�”}”(hjv¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjr¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M¡hjn¬ubj )�”}”(hhh]”(j)�”}”(hŒ``struct bio *bio`` bio ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hj“¬h]”hŒstruct bio *bio”…”�”}”(hj•¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”•h´Mžhj�¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj¬¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¨¬h´Mžhj©¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¨¬h´MžhjЬubj)�”}”(hŒ&``blk_status_t status`` status to set ”h]”(j)�”}”(hŒ``blk_status_t status``”h]”j)�”}”(hj̬h]”hŒblk_status_t status”…”�”}”(hjάh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjʬubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MŸhjƬubj2)�”}”(hhh]”hÝ)�”}”(hŒ status to set”h]”hŒ status to set”…”�”}”(hjå¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³já¬h´MŸhjâ¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjƬubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³já¬h´MŸhjЬubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjn¬ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj­h]”hŒ Description”…”�”}”(hj ­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M¡hjn¬ubhÝ)�”}”(hŒ:Set **bio->bi_status** to **status** and call bio_endio().”h]”(hŒSet ”…”�”}”(hj­h²hh³Nh´Nubjõ)�”}”(hŒ**bio->bi_status**”h]”hŒbio->bi_status”…”�”}”(hj%­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ubhŒ to ”…”�”}”(hj­h²hh³Nh´Nubjõ)�”}”(hŒ **status**”h]”hŒstatus”…”�”}”(hj7­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ubhŒ and call bio_endio().”…”�”}”(hj­h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´M hjn¬ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#bio_iov_bounce_nr_vecs (C function)”Œc.bio_iov_bounce_nr_vecs”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒKunsigned short bio_iov_bounce_nr_vecs (struct iov_iter *iter, blk_opf_t op)”h]”j)�”}”(hŒJunsigned short bio_iov_bounce_nr_vecs(struct iov_iter *iter, blk_opf_t op)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjp­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjl­h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MÀubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl­h²hh³j~­h´MÀubj )�”}”(hŒshort”h]”hŒshort”…”�”}”(hj�­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjl­h²hh³j~­h´MÀubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl­h²hh³j~­h´MÀubj{)�”}”(hŒbio_iov_bounce_nr_vecs”h]”j�)�”}”(hŒbio_iov_bounce_nr_vecs”h]”hŒbio_iov_bounce_nr_vecs”…”�”}”(hj­­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©­ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjl­h²hh³j~­h´MÀubjœ)�”}”(hŒ%(struct iov_iter *iter, blk_opf_t op)”h]”(j¢)�”}”(hŒstruct iov_iter *iter”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÉ­h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÅ­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅ­ubh)�”}”(hhh]”j�)�”}”(hŒiov_iter”h]”hŒiov_iter”…”�”}”(hjç­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjä­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jé­Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¯­sbŒc.bio_iov_bounce_nr_vecs”†”asbuh1hhjÅ­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅ­ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÅ­ubj�)�”}”(hŒiter”h]”hŒiter”…”�”}”(hj"®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅ­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁ­ubj¢)�”}”(hŒ blk_opf_t op”h]”(h)�”}”(hhh]”j�)�”}”(hŒ blk_opf_t”h]”hŒ blk_opf_t”…”�”}”(hj>®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j@®Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j®Œc.bio_iov_bounce_nr_vecs”†”asbuh1hhj7®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7®ubj�)�”}”(hŒop”h]”hŒop”…”�”}”(hjj®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÁ­ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjl­h²hh³j~­h´MÀubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh­h²hh³j~­h´MÀubah}”(h]”jc­ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j~­h´MÀhje­h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*calculate number of bvecs for a bounce bio”h]”hŒ*calculate number of bvecs for a bounce bio”…”�”}”(hj”®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MÀhj‘®h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhje­h²hh³j~­h´MÀubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¬®jæj¬®jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒÌ**Parameters** ``struct iov_iter *iter`` iter to bounce from ``blk_opf_t op`` REQ_OP_* for the bio **Description** Calculates how many bvecs are needed for the next bio to bounce from/to **iter**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¶®h]”hŒ Parameters”…”�”}”(hj¸®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj´®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MÄhj°®ubj )�”}”(hhh]”(j)�”}”(hŒ.``struct iov_iter *iter`` iter to bounce from ”h]”(j)�”}”(hŒ``struct iov_iter *iter``”h]”j)�”}”(hjÕ®h]”hŒstruct iov_iter *iter”…”�”}”(hj×®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MÁhjÏ®ubj2)�”}”(hhh]”hÝ)�”}”(hŒiter to bounce from”h]”hŒiter to bounce from”…”�”}”(hjî®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jê®h´MÁhjë®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏ®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jê®h´MÁhjÌ®ubj)�”}”(hŒ&``blk_opf_t op`` REQ_OP_* for the bio ”h]”(j)�”}”(hŒ``blk_opf_t op``”h]”j)�”}”(hj¯h]”hŒ blk_opf_t op”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MÂhj¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒREQ_OP_* for the bio”h]”hŒREQ_OP_* for the bio”…”�”}”(hj'¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j#¯h´MÂhj$¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#¯h´MÂhjÌ®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj°®ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjI¯h]”hŒ Description”…”�”}”(hjK¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjG¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MÄhj°®ubhÝ)�”}”(hŒQCalculates how many bvecs are needed for the next bio to bounce from/to **iter**.”h]”(hŒHCalculates how many bvecs are needed for the next bio to bounce from/to ”…”�”}”(hj_¯h²hh³Nh´Nubjõ)�”}”(hŒ**iter**”h]”hŒiter”…”�”}”(hjg¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_¯ubhŒ.”…”�”}”(hj_¯h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´MÃhj°®ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbio_add_max_vecs (C function)”Œc.bio_add_max_vecs”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=unsigned int bio_add_max_vecs (void *kaddr, unsigned int len)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hjœ¯h²hh³j®¯h´Mñubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj½¯h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjœ¯h²hh³j®¯h´Mñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœ¯h²hh³j®¯h´Mñubj{)�”}”(hŒbio_add_max_vecs”h]”j�)�”}”(hŒbio_add_max_vecs”h]”hŒbio_add_max_vecs”…”�”}”(hjݯh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙ¯ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjœ¯h²hh³j®¯h´Mñubjœ)�”}”(hŒ(void *kaddr, unsigned int len)”h]”(j¢)�”}”(hŒ void *kaddr”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjù¯h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjõ¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõ¯ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjõ¯ubj�)�”}”(hŒkaddr”h]”hŒkaddr”…”�”}”(hj"°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõ¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjñ¯ubj¢)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj;°h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj7°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7°ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjW°h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj7°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7°ubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjs°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjñ¯ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjœ¯h²hh³j®¯h´Mñubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj˜¯h²hh³j®¯h´Mñubah}”(h]”j“¯ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j®¯h´Mñhj•¯h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.number of bio_vecs needed to add data to a bio”h]”hŒ.number of bio_vecs needed to add data to a bio”…”�”}”(hj�°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mñhjš°h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj•¯h²hh³j®¯h´Mñubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjµ°jæjµ°jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX**Parameters** ``void *kaddr`` kernel virtual address to add ``unsigned int len`` length in bytes to add **Description** Calculate how many bio_vecs need to be allocated to add the kernel virtual address range in [**kaddr**:**len**] in the worse case.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¿°h]”hŒ Parameters”…”�”}”(hjÁ°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mõhj¹°ubj )�”}”(hhh]”(j)�”}”(hŒ.``void *kaddr`` kernel virtual address to add ”h]”(j)�”}”(hŒ``void *kaddr``”h]”j)�”}”(hjÞ°h]”hŒ void *kaddr”…”�”}”(hjà°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjܰubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mòhjذubj2)�”}”(hhh]”hÝ)�”}”(hŒkernel virtual address to add”h]”hŒkernel virtual address to add”…”�”}”(hj÷°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jó°h´Mòhjô°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjذubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jó°h´MòhjÕ°ubj)�”}”(hŒ,``unsigned int len`` length in bytes to add ”h]”(j)�”}”(hŒ``unsigned int len``”h]”j)�”}”(hj±h]”hŒunsigned int len”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Móhj±ubj2)�”}”(hhh]”hÝ)�”}”(hŒlength in bytes to add”h]”hŒlength in bytes to add”…”�”}”(hj0±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,±h´Móhj-±ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,±h´MóhjÕ°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹°ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjR±h]”hŒ Description”…”�”}”(hjT±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjP±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mõhj¹°ubhÝ)�”}”(hŒ‚Calculate how many bio_vecs need to be allocated to add the kernel virtual address range in [**kaddr**:**len**] in the worse case.”h]”(hŒ]Calculate how many bio_vecs need to be allocated to add the kernel virtual address range in [”…”�”}”(hjh±h²hh³Nh´Nubjõ)�”}”(hŒ **kaddr**”h]”hŒkaddr”…”�”}”(hjp±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjh±ubhŒ:”…”�”}”(hjh±h²hh³Nh´Nubjõ)�”}”(hŒ**len**”h]”hŒlen”…”�”}”(hj‚±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjh±ubhŒ] in the worse case.”…”�”}”(hjh±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Môhj¹°ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbio_is_zone_append (C function)”Œc.bio_is_zone_append”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)bool bio_is_zone_append (struct bio *bio)”h]”j)�”}”(hŒ(bool bio_is_zone_append(struct bio *bio)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj»±h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj·±h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjɱh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·±h²hh³jȱh´Mñubj{)�”}”(hŒbio_is_zone_append”h]”j�)�”}”(hŒbio_is_zone_append”h]”hŒbio_is_zone_append”…”�”}”(hjÛ±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×±ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj·±h²hh³jȱh´Mñubjœ)�”}”(hŒ(struct bio *bio)”h]”j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj÷±h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjó±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjó±ubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j²Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jݱsbŒc.bio_is_zone_append”†”asbuh1hhjó±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5²h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjó±ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjC²h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjó±ubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjP²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjó±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjï±ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj·±h²hh³jȱh´Mñubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj³±h²hh³jȱh´Mñubah}”(h]”j®±ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jȱh´Mñhj°±h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒis this a zone append bio?”h]”hŒis this a zone append bio?”…”�”}”(hjz²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mñhjw²h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj°±h²hh³jȱh´Mñubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj’²jæj’²jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXD**Parameters** ``struct bio *bio`` bio to check **Description** Check if **bio** is a zone append operation. Core block layer code and end_io handlers must use this instead of an open coded REQ_OP_ZONE_APPEND check because the block layer can rewrite REQ_OP_ZONE_APPEND to REQ_OP_WRITE if it is not natively supported.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjœ²h]”hŒ Parameters”…”�”}”(hjž²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjš²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mõhj–²ubj )�”}”(hhh]”j)�”}”(hŒ!``struct bio *bio`` bio to check ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hj»²h]”hŒstruct bio *bio”…”�”}”(hj½²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Mòhjµ²ubj2)�”}”(hhh]”hÝ)�”}”(hŒ bio to check”h]”hŒ bio to check”…”�”}”(hjÔ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jвh´MòhjѲubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµ²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jвh´Mòhj²²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj–²ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjö²h]”hŒ Description”…”�”}”(hjø²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjô²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Môhj–²ubhÝ)�”}”(hŒÿCheck if **bio** is a zone append operation. Core block layer code and end_io handlers must use this instead of an open coded REQ_OP_ZONE_APPEND check because the block layer can rewrite REQ_OP_ZONE_APPEND to REQ_OP_WRITE if it is not natively supported.”h]”(hŒ Check if ”…”�”}”(hj ³h²hh³Nh´Nubjõ)�”}”(hŒ**bio**”h]”hŒbio”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ³ubhŒï is a zone append operation. Core block layer code and end_io handlers must use this instead of an open coded REQ_OP_ZONE_APPEND check because the block layer can rewrite REQ_OP_ZONE_APPEND to REQ_OP_WRITE if it is not natively supported.”…”�”}”(hj ³h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:311: ./include/linux/bio.h”h´Móhj–²ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_queue_flag_set (C function)”Œc.blk_queue_flag_set”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDvoid blk_queue_flag_set (unsigned int flag, struct request_queue *q)”h]”j)�”}”(hŒCvoid blk_queue_flag_set(unsigned int flag, struct request_queue *q)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjM³h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjI³h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KMubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjI³h²hh³j[³h´KMubj{)�”}”(hŒblk_queue_flag_set”h]”j�)�”}”(hŒblk_queue_flag_set”h]”hŒblk_queue_flag_set”…”�”}”(hjn³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjj³ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjI³h²hh³j[³h´KMubjœ)�”}”(hŒ,(unsigned int flag, struct request_queue *q)”h]”(j¢)�”}”(hŒunsigned int flag”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjгh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj†³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†³ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj¦³h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj†³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†³ubj�)�”}”(hŒflag”h]”hŒflag”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‚³ubj¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÛ³h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj׳ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj׳ubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hjù³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjö³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jû³Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jp³sbŒc.blk_queue_flag_set”†”asbuh1hhj׳ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj׳ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj'´h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj׳ubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj4´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj׳ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‚³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjI³h²hh³j[³h´KMubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjE³h²hh³j[³h´KMubah}”(h]”j@³ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j[³h´KMhjB³h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒatomically set a queue flag”h]”hŒatomically set a queue flag”…”�”}”(hj]´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KMhjZ´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjB³h²hh³j[³h´KMubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåju´jæju´jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒc**Parameters** ``unsigned int flag`` flag to be set ``struct request_queue *q`` request queue”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj´h]”hŒ Parameters”…”�”}”(hj�´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj}´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KQhjy´ubj )�”}”(hhh]”(j)�”}”(hŒ%``unsigned int flag`` flag to be set ”h]”(j)�”}”(hŒ``unsigned int flag``”h]”j)�”}”(hjž´h]”hŒunsigned int flag”…”�”}”(hj ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjœ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KNhj˜´ubj2)�”}”(hhh]”hÝ)�”}”(hŒflag to be set”h]”hŒflag to be set”…”�”}”(hj·´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j³´h´KNhj´´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj˜´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j³´h´KNhj•´ubj)�”}”(hŒ)``struct request_queue *q`` request queue”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj×´h]”hŒstruct request_queue *q”…”�”}”(hjÙ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KPhjÑ´ubj2)�”}”(hhh]”hÝ)�”}”(hŒ request queue”h]”hŒ request queue”…”�”}”(hjð´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KOhjí´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑ´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jì´h´KPhj•´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjy´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!blk_queue_flag_clear (C function)”Œc.blk_queue_flag_clear”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFvoid blk_queue_flag_clear (unsigned int flag, struct request_queue *q)”h]”j)�”}”(hŒEvoid blk_queue_flag_clear(unsigned int flag, struct request_queue *q)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj1µh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj-µh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@µh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-µh²hh³j?µh´KXubj{)�”}”(hŒblk_queue_flag_clear”h]”j�)�”}”(hŒblk_queue_flag_clear”h]”hŒblk_queue_flag_clear”…”�”}”(hjRµh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNµubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj-µh²hh³j?µh´KXubjœ)�”}”(hŒ,(unsigned int flag, struct request_queue *q)”h]”(j¢)�”}”(hŒunsigned int flag”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjnµh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|µh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjµubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjеh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜µh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjµubj�)�”}”(hŒflag”h]”hŒflag”…”�”}”(hj¦µh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjµubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjfµubj¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¿µh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj»µubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj̵h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»µubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hjݵh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jßµŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jTµsbŒc.blk_queue_flag_clear”†”asbuh1hhj»µubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýµh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»µubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ¶h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj»µubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»µubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjfµubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj-µh²hh³j?µh´KXubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj)µh²hh³j?µh´KXubah}”(h]”j$µah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j?µh´KXhj&µh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒatomically clear a queue flag”h]”hŒatomically clear a queue flag”…”�”}”(hjA¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KXhj>¶h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj&µh²hh³j?µh´KXubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjY¶jæjY¶jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒg**Parameters** ``unsigned int flag`` flag to be cleared ``struct request_queue *q`` request queue”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjc¶h]”hŒ Parameters”…”�”}”(hje¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhja¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´K\hj]¶ubj )�”}”(hhh]”(j)�”}”(hŒ)``unsigned int flag`` flag to be cleared ”h]”(j)�”}”(hŒ``unsigned int flag``”h]”j)�”}”(hj‚¶h]”hŒunsigned int flag”…”�”}”(hj„¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KYhj|¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒflag to be cleared”h]”hŒflag to be cleared”…”�”}”(hj›¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j—¶h´KYhj˜¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—¶h´KYhjy¶ubj)�”}”(hŒ)``struct request_queue *q`` request queue”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj»¶h]”hŒstruct request_queue *q”…”�”}”(hj½¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´K[hjµ¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒ request queue”h]”hŒ request queue”…”�”}”(hjÔ¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KZhjѶubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµ¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jжh´K[hjy¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj]¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_op_str (C function)”Œ c.blk_op_str”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(const char * blk_op_str (enum req_op op)”h]”j)�”}”(hŒ&const char *blk_op_str(enum req_op op)”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj·h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Kvubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#·h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·h²hh³j"·h´Kvubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj1·h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj·h²hh³j"·h´Kvubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?·h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·h²hh³j"·h´Kvubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjM·h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj·h²hh³j"·h´Kvubj{)�”}”(hŒ blk_op_str”h]”j�)�”}”(hŒ blk_op_str”h]”hŒ blk_op_str”…”�”}”(hj^·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ·ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj·h²hh³j"·h´Kvubjœ)�”}”(hŒ(enum req_op op)”h]”j¢)�”}”(hŒenum req_op op”h]”(j¨)�”}”(hj;@h]”hŒenum”…”�”}”(hjz·h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjv·ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡·h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjv·ubh)�”}”(hhh]”j�)�”}”(hŒreq_op”h]”hŒreq_op”…”�”}”(hj˜·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jš·Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j`·sbŒ c.blk_op_str”†”asbuh1hhjv·ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸·h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjv·ubj�)�”}”(hŒop”h]”hŒop”…”�”}”(hjÆ·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjv·ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjr·ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj·h²hh³j"·h´Kvubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj ·h²hh³j"·h´Kvubah}”(h]”j·ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j"·h´Kvhj ·h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6Return the string "name" for an operation REQ_OP_name.”h]”hŒ:Return the string “nameâ€� for an operation REQ_OP_name.”…”�”}”(hjð·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Kvhjí·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj ·h²hh³j"·h´Kvubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¸jæj¸jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX**Parameters** ``enum req_op op`` a request operation. **Description** Convert a request operation REQ_OP_name into the string "name". Useful for debugging and tracing BIOs and requests. For an invalid request operation code, the string "UNKNOWN" is returned.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¸h]”hŒ Parameters”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Kzhj ¸ubj )�”}”(hhh]”j)�”}”(hŒ(``enum req_op op`` a request operation. ”h]”(j)�”}”(hŒ``enum req_op op``”h]”j)�”}”(hj1¸h]”hŒenum req_op op”…”�”}”(hj3¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Kwhj+¸ubj2)�”}”(hhh]”hÝ)�”}”(hŒa request operation.”h]”hŒa request operation.”…”�”}”(hjJ¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jF¸h´KwhjG¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj+¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jF¸h´Kwhj(¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ¸ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjl¸h]”hŒ Description”…”�”}”(hjn¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Kyhj ¸ubhÝ)�”}”(hŒ¼Convert a request operation REQ_OP_name into the string "name". Useful for debugging and tracing BIOs and requests. For an invalid request operation code, the string "UNKNOWN" is returned.”h]”hŒÄConvert a request operation REQ_OP_name into the string “nameâ€�. Useful for debugging and tracing BIOs and requests. For an invalid request operation code, the string “UNKNOWNâ€� is returned.”…”�”}”(hj‚¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Kxhj ¸ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_sync_queue (C function)”Œc.blk_sync_queue”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-void blk_sync_queue (struct request_queue *q)”h]”j)�”}”(hŒ,void blk_sync_queue(struct request_queue *q)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj±¸h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­¸h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Köubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­¸h²hh³j¿¸h´Köubj{)�”}”(hŒblk_sync_queue”h]”j�)�”}”(hŒblk_sync_queue”h]”hŒblk_sync_queue”…”�”}”(hjÒ¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjθubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj­¸h²hh³j¿¸h´Köubjœ)�”}”(hŒ(struct request_queue *q)”h]”j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjî¸h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjê¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjê¸ubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj ¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ¹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¹Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÔ¸sbŒc.blk_sync_queue”†”asbuh1hhjê¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,¹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjê¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj:¹h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjê¸ubj�)�”}”(hj(lh]”hŒq”…”�”}”(hjG¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjê¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæ¸ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj­¸h²hh³j¿¸h´Köubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj©¸h²hh³j¿¸h´Köubah}”(h]”j¤¸ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¿¸h´Köhj¦¸h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'cancel any pending callbacks on a queue”h]”hŒ'cancel any pending callbacks on a queue”…”�”}”(hjp¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Köhjm¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¦¸h²hh³j¿¸h´Köubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjˆ¹jæjˆ¹jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXÆ**Parameters** ``struct request_queue *q`` the queue **Description** The block layer may perform asynchronous callback activity on a queue, such as calling the unplug function after a timeout. A block device may call blk_sync_queue to ensure that any such activity is cancelled, thus allowing it to release resources that the callbacks might use. The caller must already have made sure that its ->submit_bio will not re-add plugging prior to calling this function. This function does not cancel any asynchronous activity arising out of elevator or throttling code. That would require elevator_exit() and blkcg_exit_queue() to be called with queue lock initialized.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj’¹h]”hŒ Parameters”…”�”}”(hj”¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KúhjŒ¹ubj )�”}”(hhh]”j)�”}”(hŒ&``struct request_queue *q`` the queue ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj±¹h]”hŒstruct request_queue *q”…”�”}”(hj³¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´K÷hj«¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒ the queue”h]”hŒ the queue”…”�”}”(hjʹh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƹh´K÷hjǹubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj«¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƹh´K÷hj¨¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŒ¹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjì¹h]”hŒ Description”…”�”}”(hjî¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjê¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KùhjŒ¹ubj•)�”}”(hXTThe block layer may perform asynchronous callback activity on a queue, such as calling the unplug function after a timeout. A block device may call blk_sync_queue to ensure that any such activity is cancelled, thus allowing it to release resources that the callbacks might use. The caller must already have made sure that its ->submit_bio will not re-add plugging prior to calling this function. This function does not cancel any asynchronous activity arising out of elevator or throttling code. That would require elevator_exit() and blkcg_exit_queue() to be called with queue lock initialized.”h]”(hÝ)�”}”(hX‹The block layer may perform asynchronous callback activity on a queue, such as calling the unplug function after a timeout. A block device may call blk_sync_queue to ensure that any such activity is cancelled, thus allowing it to release resources that the callbacks might use. The caller must already have made sure that its ->submit_bio will not re-add plugging prior to calling this function.”h]”hX‹The block layer may perform asynchronous callback activity on a queue, such as calling the unplug function after a timeout. A block device may call blk_sync_queue to ensure that any such activity is cancelled, thus allowing it to release resources that the callbacks might use. The caller must already have made sure that its ->submit_bio will not re-add plugging prior to calling this function.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´KùhjºubhÝ)�”}”(hŒÇThis function does not cancel any asynchronous activity arising out of elevator or throttling code. That would require elevator_exit() and blkcg_exit_queue() to be called with queue lock initialized.”h]”hŒÇThis function does not cancel any asynchronous activity arising out of elevator or throttling code. That would require elevator_exit() and blkcg_exit_queue() to be called with queue lock initialized.”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mhjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jºh´KùhjŒ¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_set_pm_only (C function)”Œc.blk_set_pm_only”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void blk_set_pm_only (struct request_queue *q)”h]”j)�”}”(hŒ-void blk_set_pm_only(struct request_queue *q)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjJºh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjFºh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFºh²hh³jXºh´Mubj{)�”}”(hŒblk_set_pm_only”h]”j�)�”}”(hŒblk_set_pm_only”h]”hŒblk_set_pm_only”…”�”}”(hjkºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjgºubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjFºh²hh³jXºh´Mubjœ)�”}”(hŒ(struct request_queue *q)”h]”j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‡ºh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjƒºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”ºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒºubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj¥ºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢ºubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j§ºŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jmºsbŒc.blk_set_pm_only”†”asbuh1hhjƒºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjźh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒºubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÓºh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjƒºubj�)�”}”(hj(lh]”hŒq”…”�”}”(hjàºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjºubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjFºh²hh³jXºh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjBºh²hh³jXºh´Mubah}”(h]”j=ºah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jXºh´Mhj?ºh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒincrement pm_only counter”h]”hŒincrement pm_only counter”…”�”}”(hj »h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mhj»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj?ºh²hh³jXºh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj!»jæj!»jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒC**Parameters** ``struct request_queue *q`` request queue pointer”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj+»h]”hŒ Parameters”…”�”}”(hj-»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mhj%»ubj )�”}”(hhh]”j)�”}”(hŒ1``struct request_queue *q`` request queue pointer”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hjJ»h]”hŒstruct request_queue *q”…”�”}”(hjL»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MhjD»ubj2)�”}”(hhh]”hÝ)�”}”(hŒrequest queue pointer”h]”hŒrequest queue pointer”…”�”}”(hjc»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mhj`»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjD»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j_»h´MhjA»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj%»ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_put_queue (C function)”Œc.blk_put_queue”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,void blk_put_queue (struct request_queue *q)”h]”j)�”}”(hŒ+void blk_put_queue(struct request_queue *q)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¤»h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj »h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj »h²hh³j²»h´M9ubj{)�”}”(hŒ blk_put_queue”h]”j�)�”}”(hŒ blk_put_queue”h]”hŒ blk_put_queue”…”�”}”(hjÅ»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁ»ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj »h²hh³j²»h´M9ubjœ)�”}”(hŒ(struct request_queue *q)”h]”j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjá»h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÝ»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝ»ubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hjÿ»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjü»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¼Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÇ»sbŒc.blk_put_queue”†”asbuh1hhjÝ»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝ»ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj-¼h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÝ»ubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj:¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝ»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙ»ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj »h²hh³j²»h´M9ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjœ»h²hh³j²»h´M9ubah}”(h]”j—»ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²»h´M9hj™»h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$decrement the request_queue refcount”h]”hŒ$decrement the request_queue refcount”…”�”}”(hjc¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M9hj`¼h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj™»h²hh³j²»h´M9ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj{¼jæj{¼jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒÏ**Parameters** ``struct request_queue *q`` the request_queue structure to decrement the refcount for **Description** Decrements the refcount of the request_queue and free it when the refcount reaches 0.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj…¼h]”hŒ Parameters”…”�”}”(hj‡¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M=hj¼ubj )�”}”(hhh]”j)�”}”(hŒV``struct request_queue *q`` the request_queue structure to decrement the refcount for ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj¤¼h]”hŒstruct request_queue *q”…”�”}”(hj¦¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M:hjž¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒ9the request_queue structure to decrement the refcount for”h]”hŒ9the request_queue structure to decrement the refcount for”…”�”}”(hj½¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¹¼h´M:hjº¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjž¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¹¼h´M:hj›¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¼ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjß¼h]”hŒ Description”…”�”}”(hjá¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjݼubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M<hj¼ubhÝ)�”}”(hŒUDecrements the refcount of the request_queue and free it when the refcount reaches 0.”h]”hŒUDecrements the refcount of the request_queue and free it when the refcount reaches 0.”…”�”}”(hjõ¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M;hj¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_get_queue (C function)”Œc.blk_get_queue”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,bool blk_get_queue (struct request_queue *q)”h]”j)�”}”(hŒ+bool blk_get_queue(struct request_queue *q)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj$½h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ½h²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ½h²hh³j1½h´M ubj{)�”}”(hŒ blk_get_queue”h]”j�)�”}”(hŒ blk_get_queue”h]”hŒ blk_get_queue”…”�”}”(hjD½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@½ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj ½h²hh³j1½h´M ubjœ)�”}”(hŒ(struct request_queue *q)”h]”j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj`½h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj\½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\½ubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj~½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j€½Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jF½sbŒc.blk_get_queue”†”asbuh1hhj\½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\½ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¬½h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\½ubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj¹½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjX½ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj ½h²hh³j1½h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj½h²hh³j1½h´M ubah}”(h]”j½ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j1½h´M hj½h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$increment the request_queue refcount”h]”hŒ$increment the request_queue refcount”…”�”}”(hjâ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M hjß½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj½h²hh³j1½h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjú½jæjú½jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒÉ**Parameters** ``struct request_queue *q`` the request_queue structure to increment the refcount for **Description** Increment the refcount of the request_queue kobject. **Context** Any context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾h]”hŒ Parameters”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mhjþ½ubj )�”}”(hhh]”j)�”}”(hŒV``struct request_queue *q`` the request_queue structure to increment the refcount for ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj#¾h]”hŒstruct request_queue *q”…”�”}”(hj%¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M hj¾ubj2)�”}”(hhh]”hÝ)�”}”(hŒ9the request_queue structure to increment the refcount for”h]”hŒ9the request_queue structure to increment the refcount for”…”�”}”(hj<¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j8¾h´M hj9¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8¾h´M hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjþ½ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj^¾h]”hŒ Description”…”�”}”(hj`¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mhjþ½ubhÝ)�”}”(hŒ4Increment the refcount of the request_queue kobject.”h]”hŒ4Increment the refcount of the request_queue kobject.”…”�”}”(hjt¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M hjþ½ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hj…¾h]”hŒContext”…”�”}”(hj‡¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒ¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mhjþ½ubhÝ)�”}”(hŒ Any context.”h]”hŒ Any context.”…”�”}”(hj›¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mhjþ½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsubmit_bio_noacct (C function)”Œc.submit_bio_noacct”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(void submit_bio_noacct (struct bio *bio)”h]”j)�”}”(hŒ'void submit_bio_noacct(struct bio *bio)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjʾh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjƾh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ¾h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƾh²hh³jؾh´M)ubj{)�”}”(hŒsubmit_bio_noacct”h]”j�)�”}”(hŒsubmit_bio_noacct”h]”hŒsubmit_bio_noacct”…”�”}”(hjë¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjç¾ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjƾh²hh³jؾh´M)ubjœ)�”}”(hŒ(struct bio *bio)”h]”j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿ubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj%¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j'¿Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jí¾sbŒc.submit_bio_noacct”†”asbuh1hhj¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjE¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjS¿h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¿ubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj`¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÿ¾ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjƾh²hh³jؾh´M)ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¾h²hh³jؾh´M)ubah}”(h]”j½¾ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jؾh´M)hj¿¾h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1re-submit a bio to the block device layer for I/O”h]”hŒ1re-submit a bio to the block device layer for I/O”…”�”}”(hjŠ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M)hj‡¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¿¾h²hh³jؾh´M)ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¢¿jæj¢¿jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX^**Parameters** ``struct bio *bio`` The bio describing the location in memory and on the device. **Description** This is a version of submit_bio() that shall only be used for I/O that is resubmitted to lower level drivers by stacking block drivers. All file systems and other upper level users of the block layer should use submit_bio() instead.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¬¿h]”hŒ Parameters”…”�”}”(hj®¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjª¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M-hj¦¿ubj )�”}”(hhh]”j)�”}”(hŒQ``struct bio *bio`` The bio describing the location in memory and on the device. ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hjË¿h]”hŒstruct bio *bio”…”�”}”(hjÍ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M*hjÅ¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjGÀh²hh³jYÀh´M°ubj{)�”}”(hŒ submit_bio”h]”j�)�”}”(hŒ submit_bio”h]”hŒ submit_bio”…”�”}”(hjlÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjhÀubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjGÀh²hh³jYÀh´M°ubjœ)�”}”(hŒ(struct bio *bio)”h]”j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjˆÀh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj„Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Àh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„Àubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj¦Àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£Àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¨ÀŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jnÀsbŒ c.submit_bio”†”asbuh1hhj„Àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj„Àubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÔÀh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj„Àubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjáÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„Àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj€Àubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjGÀh²hh³jYÀh´M°ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjCÀh²hh³jYÀh´M°ubah}”(h]”j>Àah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jYÀh´M°hj@Àh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.submit a bio to the block device layer for I/O”h]”hŒ.submit a bio to the block device layer for I/O”…”�”}”(hj Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M°hjÁh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj@Àh²hh³jYÀh´M°ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj#Ájæj#Ájç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXD**Parameters** ``struct bio *bio`` The :c:type:`struct bio ` which describes the I/O **Description** submit_bio() is used to submit I/O requests to block devices. It is passed a fully set up :c:type:`struct bio ` that describes the I/O that needs to be done. The bio will be sent to the device described by the bi_bdev field. The success/failure status of the request, along with notification of completion, is delivered asynchronously through the ->bi_end_io() callback in **bio**. The bio must NOT be touched by the caller until ->bi_end_io() has been called.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj-Áh]”hŒ Parameters”…”�”}”(hj/Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M´hj'Áubj )�”}”(hhh]”j)�”}”(hŒK``struct bio *bio`` The :c:type:`struct bio ` which describes the I/O ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hjLÁh]”hŒstruct bio *bio”…”�”}”(hjNÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M±hjFÁubj2)�”}”(hhh]”hÝ)�”}”(hŒ6The :c:type:`struct bio ` which describes the I/O”h]”(hŒThe ”…”�”}”(hjeÁh²hh³Nh´Nubh)�”}”(hŒ:c:type:`struct bio `”h]”j)�”}”(hjoÁh]”hŒ struct bio”…”�”}”(hjqÁh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjmÁubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œbio”uh1hh³jaÁh´M±hjeÁubhŒ which describes the I/O”…”�”}”(hjeÁh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jaÁh´M±hjbÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjFÁubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jaÁh´M±hjCÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj'ÁubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjªÁh]”hŒ Description”…”�”}”(hj¬Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¨Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M³hj'ÁubhÝ)�”}”(hŒçsubmit_bio() is used to submit I/O requests to block devices. It is passed a fully set up :c:type:`struct bio ` that describes the I/O that needs to be done. The bio will be sent to the device described by the bi_bdev field.”h]”(hŒ[submit_bio() is used to submit I/O requests to block devices. It is passed a fully set up ”…”�”}”(hjÀÁh²hh³Nh´Nubh)�”}”(hŒ:c:type:`struct bio `”h]”j)�”}”(hjÊÁh]”hŒ struct bio”…”�”}”(hjÌÁh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjÈÁubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œbio”uh1hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M²hjÀÁubhŒr that describes the I/O that needs to be done. The bio will be sent to the device described by the bi_bdev field.”…”�”}”(hjÀÁh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jçÁh´M²hj'ÁubhÝ)�”}”(hŒìThe success/failure status of the request, along with notification of completion, is delivered asynchronously through the ->bi_end_io() callback in **bio**. The bio must NOT be touched by the caller until ->bi_end_io() has been called.”h]”(hŒ”The success/failure status of the request, along with notification of completion, is delivered asynchronously through the ->bi_end_io() callback in ”…”�”}”(hjòÁh²hh³Nh´Nubjõ)�”}”(hŒ**bio**”h]”hŒbio”…”�”}”(hjúÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjòÁubhŒQ. The bio must NOT be touched by the caller until ->bi_end_io() has been called.”…”�”}”(hjòÁh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M¶hj'Áubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰•Kh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbio_poll (C function)”Œ c.bio_poll”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒMint bio_poll (struct bio *bio, struct io_comp_batch *iob, unsigned int flags)”h]”j)�”}”(hŒLint bio_poll(struct bio *bio, struct io_comp_batch *iob, unsigned int flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj3Âh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj/Âh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBÂh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/Âh²hh³jAÂh´MËubj{)�”}”(hŒbio_poll”h]”j�)�”}”(hŒbio_poll”h]”hŒbio_poll”…”�”}”(hjTÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPÂubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj/Âh²hh³jAÂh´MËubjœ)�”}”(hŒ@(struct bio *bio, struct io_comp_batch *iob, unsigned int flags)”h]”(j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjpÂh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjlÂubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjlÂubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjŽÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹Âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�ÂŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jVÂsbŒ c.bio_poll”†”asbuh1hhjlÂubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjlÂubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¼Âh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjlÂubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjÉÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlÂubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjhÂubj¢)�”}”(hŒstruct io_comp_batch *iob”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjâÂh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÞÂubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïÂh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞÂubh)�”}”(hhh]”j�)�”}”(hŒ io_comp_batch”h]”hŒ io_comp_batch”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýÂubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÃŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jªÂŒ c.bio_poll”†”asbuh1hhjÞÂubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞÂubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj,Ãh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞÂubj�)�”}”(hŒiob”h]”hŒiob”…”�”}”(hj9Ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞÂubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjhÂubj¢)�”}”(hŒunsigned int flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjRÃh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjNÃubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNÃubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjnÃh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjNÃubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|Ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNÃubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjŠÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjhÂubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj/Âh²hh³jAÂh´MËubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj+Âh²hh³jAÂh´MËubah}”(h]”j&Âah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jAÂh´MËhj(Âh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒpoll for BIO completions”h]”hŒpoll for BIO completions”…”�”}”(hj´Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MËhj±Ãh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj(Âh²hh³jAÂh´MËubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÌÃjæjÌÃjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX¥**Parameters** ``struct bio *bio`` bio to poll for ``struct io_comp_batch *iob`` batches of IO ``unsigned int flags`` BLK_POLL_* flags that control the behavior **Description** Poll for completions on queue associated with the bio. Returns number of completed entries found. **Note** the caller must either be the context that submitted **bio**, or be in a RCU critical section to prevent freeing of **bio**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÖÃh]”hŒ Parameters”…”�”}”(hjØÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MÏhjÐÃubj )�”}”(hhh]”(j)�”}”(hŒ$``struct bio *bio`` bio to poll for ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hjõÃh]”hŒstruct bio *bio”…”�”}”(hj÷Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjóÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MÌhjïÃubj2)�”}”(hhh]”hÝ)�”}”(hŒbio to poll for”h]”hŒbio to poll for”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Äh´MÌhj Äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjïÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Äh´MÌhjìÃubj)�”}”(hŒ,``struct io_comp_batch *iob`` batches of IO ”h]”(j)�”}”(hŒ``struct io_comp_batch *iob``”h]”j)�”}”(hj.Äh]”hŒstruct io_comp_batch *iob”…”�”}”(hj0Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,Äubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MÍhj(Äubj2)�”}”(hhh]”hÝ)�”}”(hŒ batches of IO”h]”hŒ batches of IO”…”�”}”(hjGÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jCÄh´MÍhjDÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj(Äubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jCÄh´MÍhjìÃubj)�”}”(hŒB``unsigned int flags`` BLK_POLL_* flags that control the behavior ”h]”(j)�”}”(hŒ``unsigned int flags``”h]”j)�”}”(hjgÄh]”hŒunsigned int flags”…”�”}”(hjiÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MÎhjaÄubj2)�”}”(hhh]”hÝ)�”}”(hŒ*BLK_POLL_* flags that control the behavior”h]”hŒ*BLK_POLL_* flags that control the behavior”…”�”}”(hj€Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|Äh´MÎhj}Äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjaÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|Äh´MÎhjìÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÐÃubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¢Äh]”hŒ Description”…”�”}”(hj¤Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Äubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MÐhjÐÃubhÝ)�”}”(hŒaPoll for completions on queue associated with the bio. Returns number of completed entries found.”h]”hŒaPoll for completions on queue associated with the bio. Returns number of completed entries found.”…”�”}”(hj¸Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MÏhjÐÃubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjÉÄh]”hŒNote”…”�”}”(hjËÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÇÄubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MÒhjÐÃubhÝ)�”}”(hŒ|the caller must either be the context that submitted **bio**, or be in a RCU critical section to prevent freeing of **bio**.”h]”(hŒ5the caller must either be the context that submitted ”…”�”}”(hjßÄh²hh³Nh´Nubjõ)�”}”(hŒ**bio**”h]”hŒbio”…”�”}”(hjçÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjßÄubhŒ8, or be in a RCU critical section to prevent freeing of ”…”�”}”(hjßÄh²hh³Nh´Nubjõ)�”}”(hŒ**bio**”h]”hŒbio”…”�”}”(hjùÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjßÄubhŒ.”…”�”}”(hjßÄh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MÓhjÐÃubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbio_start_io_acct (C function)”Œc.bio_start_io_acct”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1unsigned long bio_start_io_acct (struct bio *bio)”h]”j)�”}”(hŒ0unsigned long bio_start_io_acct(struct bio *bio)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj2Åh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj.Åh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAÅh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.Åh²hh³j@Åh´MEubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjOÅh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj.Åh²hh³j@Åh´MEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Åh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.Åh²hh³j@Åh´MEubj{)�”}”(hŒbio_start_io_acct”h]”j�)�”}”(hŒbio_start_io_acct”h]”hŒbio_start_io_acct”…”�”}”(hjoÅh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkÅubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj.Åh²hh³j@Åh´MEubjœ)�”}”(hŒ(struct bio *bio)”h]”j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‹Åh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡Åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Åh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡Åubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj©Åh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦Åubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j«ÅŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jqÅsbŒc.bio_start_io_acct”†”asbuh1hhj‡Åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉÅh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡Åubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj×Åh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‡Åubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjäÅh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡Åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒÅubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj.Åh²hh³j@Åh´MEubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj*Åh²hh³j@Åh´MEubah}”(h]”j%Åah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j@Åh´MEhj'Åh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*start I/O accounting for bio based drivers”h]”hŒ*start I/O accounting for bio based drivers”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MEhj Æh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj'Åh²hh³j@Åh´MEubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj&Æjæj&Æjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ˜**Parameters** ``struct bio *bio`` bio to start account for **Description** Returns the start time that should be passed back to bio_end_io_acct().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj0Æh]”hŒ Parameters”…”�”}”(hj2Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.Æubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MIhj*Æubj )�”}”(hhh]”j)�”}”(hŒ-``struct bio *bio`` bio to start account for ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hjOÆh]”hŒstruct bio *bio”…”�”}”(hjQÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MFhjIÆubj2)�”}”(hhh]”hÝ)�”}”(hŒbio to start account for”h]”hŒbio to start account for”…”�”}”(hjhÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jdÆh´MFhjeÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjIÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jdÆh´MFhjFÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj*ÆubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŠÆh]”hŒ Description”…”�”}”(hjŒÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆÆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MHhj*ÆubhÝ)�”}”(hŒGReturns the start time that should be passed back to bio_end_io_acct().”h]”hŒGReturns the start time that should be passed back to bio_end_io_acct().”…”�”}”(hj Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MGhj*Æubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_lld_busy (C function)”Œc.blk_lld_busy”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ*int blk_lld_busy (struct request_queue *q)”h]”j)�”}”(hŒ)int blk_lld_busy(struct request_queue *q)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÏÆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjËÆh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Miubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjËÆh²hh³jÝÆh´Miubj{)�”}”(hŒ blk_lld_busy”h]”j�)�”}”(hŒ blk_lld_busy”h]”hŒ blk_lld_busy”…”�”}”(hjðÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìÆubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjËÆh²hh³jÝÆh´Miubjœ)�”}”(hŒ(struct request_queue *q)”h]”j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj Çh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÇubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj*Çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'Çubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j,ÇŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jòÆsbŒc.blk_lld_busy”†”asbuh1hhjÇubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjXÇh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÇubj�)�”}”(hj(lh]”hŒq”…”�”}”(hjeÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÇubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjËÆh²hh³jÝÆh´Miubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÇÆh²hh³jÝÆh´Miubah}”(h]”jÂÆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÝÆh´MihjÄÆh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ:Check if underlying low-level drivers of a device are busy”h]”hŒ:Check if underlying low-level drivers of a device are busy”…”�”}”(hjŽÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mihj‹Çh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÄÆh²hh³jÝÆh´Miubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¦Çjæj¦Çjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXë**Parameters** ``struct request_queue *q`` the queue of the device being checked **Description** Check if underlying low-level drivers of a device are busy. If the drivers want to export their busy state, they must set own exporting function using blk_queue_lld_busy() first. Basically, this function is used only by request stacking drivers to stop dispatching requests to underlying devices when underlying devices are busy. This behavior helps more I/O merging on the queue of the request stacking driver and prevents I/O throughput regression on burst I/O load. **Return** 0 - Not busy (The request stacking driver should dispatch request) 1 - Busy (The request stacking driver should stop dispatching request)”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj°Çh]”hŒ Parameters”…”�”}”(hj²Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®Çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MmhjªÇubj )�”}”(hhh]”j)�”}”(hŒB``struct request_queue *q`` the queue of the device being checked ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hjÏÇh]”hŒstruct request_queue *q”…”�”}”(hjÑÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MjhjÉÇubj2)�”}”(hhh]”hÝ)�”}”(hŒ%the queue of the device being checked”h]”hŒ%the queue of the device being checked”…”�”}”(hjèÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jäÇh´MjhjåÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÉÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jäÇh´MjhjÆÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjªÇubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj Èh]”hŒ Description”…”�”}”(hj Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MlhjªÇubj•)�”}”(hX×Check if underlying low-level drivers of a device are busy. If the drivers want to export their busy state, they must set own exporting function using blk_queue_lld_busy() first. Basically, this function is used only by request stacking drivers to stop dispatching requests to underlying devices when underlying devices are busy. This behavior helps more I/O merging on the queue of the request stacking driver and prevents I/O throughput regression on burst I/O load. ”h]”(hÝ)�”}”(hŒ²Check if underlying low-level drivers of a device are busy. If the drivers want to export their busy state, they must set own exporting function using blk_queue_lld_busy() first.”h]”hŒ²Check if underlying low-level drivers of a device are busy. If the drivers want to export their busy state, they must set own exporting function using blk_queue_lld_busy() first.”…”�”}”(hj$Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mlhj ÈubhÝ)�”}”(hX"Basically, this function is used only by request stacking drivers to stop dispatching requests to underlying devices when underlying devices are busy. This behavior helps more I/O merging on the queue of the request stacking driver and prevents I/O throughput regression on burst I/O load.”h]”hX"Basically, this function is used only by request stacking drivers to stop dispatching requests to underlying devices when underlying devices are busy. This behavior helps more I/O merging on the queue of the request stacking driver and prevents I/O throughput regression on burst I/O load.”…”�”}”(hj3Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mphj Èubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j2Èh´MlhjªÇubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjJÈh]”hŒReturn”…”�”}”(hjLÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjHÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MvhjªÇubhÝ)�”}”(hŒ‰0 - Not busy (The request stacking driver should dispatch request) 1 - Busy (The request stacking driver should stop dispatching request)”h]”hŒ‰0 - Not busy (The request stacking driver should dispatch request) 1 - Busy (The request stacking driver should stop dispatching request)”…”�”}”(hj`Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MwhjªÇubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_start_plug (C function)”Œc.blk_start_plug”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+void blk_start_plug (struct blk_plug *plug)”h]”j)�”}”(hŒ*void blk_start_plug(struct blk_plug *plug)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�Èh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‹Èh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M¬ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžÈh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹Èh²hh³j�Èh´M¬ubj{)�”}”(hŒblk_start_plug”h]”j�)�”}”(hŒblk_start_plug”h]”hŒblk_start_plug”…”�”}”(hj°Èh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬Èubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‹Èh²hh³j�Èh´M¬ubjœ)�”}”(hŒ(struct blk_plug *plug)”h]”j¢)�”}”(hŒstruct blk_plug *plug”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÌÈh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÈÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÈh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈÈubh)�”}”(hhh]”j�)�”}”(hŒblk_plug”h]”hŒblk_plug”…”�”}”(hjêÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçÈubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jìÈŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j²ÈsbŒc.blk_start_plug”†”asbuh1hhjÈÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈÈubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÈÈubj�)�”}”(hŒplug”h]”hŒplug”…”�”}”(hj%Éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÄÈubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‹Èh²hh³j�Èh´M¬ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‡Èh²hh³j�Èh´M¬ubah}”(h]”j‚Èah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�Èh´M¬hj„Èh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7initialize blk_plug and track it inside the task_struct”h]”hŒ7initialize blk_plug and track it inside the task_struct”…”�”}”(hjOÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M¬hjLÉh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj„Èh²hh³j�Èh´M¬ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjgÉjæjgÉjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXË**Parameters** ``struct blk_plug *plug`` The :c:type:`struct blk_plug ` that needs to be initialized **Description** blk_start_plug() indicates to the block layer an intent by the caller to submit multiple I/O requests in a batch. The block layer may use this hint to defer submitting I/Os from the caller until blk_finish_plug() is called. However, the block layer may choose to submit requests before a call to blk_finish_plug() if the number of queued I/Os exceeds ``BLK_MAX_REQUEST_COUNT``, or if the size of the I/O is larger than ``BLK_PLUG_FLUSH_SIZE``. The queued I/Os may also be submitted early if the task schedules (see below). Tracking blk_plug inside the task_struct will help with auto-flushing the pending I/O should the task end up blocking between blk_start_plug() and blk_finish_plug(). This is important from a performance perspective, but also ensures that we don't deadlock. For instance, if the task is blocking for a memory allocation, memory reclaim could end up wanting to free a page belonging to that request that is currently residing in our private plug. By flushing the pending I/O when the process goes to sleep, we avoid this kind of deadlock.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjqÉh]”hŒ Parameters”…”�”}”(hjsÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjoÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M°hjkÉubj )�”}”(hhh]”j)�”}”(hŒ```struct blk_plug *plug`` The :c:type:`struct blk_plug ` that needs to be initialized ”h]”(j)�”}”(hŒ``struct blk_plug *plug``”h]”j)�”}”(hj�Éh]”hŒstruct blk_plug *plug”…”�”}”(hj’Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M­hjŠÉubj2)�”}”(hhh]”hÝ)�”}”(hŒEThe :c:type:`struct blk_plug ` that needs to be initialized”h]”(hŒThe ”…”�”}”(hj©Éh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct blk_plug `”h]”j)�”}”(hj³Éh]”hŒstruct blk_plug”…”�”}”(hjµÉh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhj±Éubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œblk_plug”uh1hh³j¥Éh´M­hj©ÉubhŒ that needs to be initialized”…”�”}”(hj©Éh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥Éh´M­hj¦Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥Éh´M­hj‡Éubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjkÉubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjîÉh]”hŒ Description”…”�”}”(hjðÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjìÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M¯hjkÉubj•)�”}”(hX'blk_start_plug() indicates to the block layer an intent by the caller to submit multiple I/O requests in a batch. The block layer may use this hint to defer submitting I/Os from the caller until blk_finish_plug() is called. However, the block layer may choose to submit requests before a call to blk_finish_plug() if the number of queued I/Os exceeds ``BLK_MAX_REQUEST_COUNT``, or if the size of the I/O is larger than ``BLK_PLUG_FLUSH_SIZE``. The queued I/Os may also be submitted early if the task schedules (see below). Tracking blk_plug inside the task_struct will help with auto-flushing the pending I/O should the task end up blocking between blk_start_plug() and blk_finish_plug(). This is important from a performance perspective, but also ensures that we don't deadlock. For instance, if the task is blocking for a memory allocation, memory reclaim could end up wanting to free a page belonging to that request that is currently residing in our private plug. By flushing the pending I/O when the process goes to sleep, we avoid this kind of deadlock.”h]”(hÝ)�”}”(hX blk_start_plug() indicates to the block layer an intent by the caller to submit multiple I/O requests in a batch. The block layer may use this hint to defer submitting I/Os from the caller until blk_finish_plug() is called. However, the block layer may choose to submit requests before a call to blk_finish_plug() if the number of queued I/Os exceeds ``BLK_MAX_REQUEST_COUNT``, or if the size of the I/O is larger than ``BLK_PLUG_FLUSH_SIZE``. The queued I/Os may also be submitted early if the task schedules (see below).”h]”(hXablk_start_plug() indicates to the block layer an intent by the caller to submit multiple I/O requests in a batch. The block layer may use this hint to defer submitting I/Os from the caller until blk_finish_plug() is called. However, the block layer may choose to submit requests before a call to blk_finish_plug() if the number of queued I/Os exceeds ”…”�”}”(hjÊh²hh³Nh´Nubj)�”}”(hŒ``BLK_MAX_REQUEST_COUNT``”h]”hŒBLK_MAX_REQUEST_COUNT”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊubhŒ+, or if the size of the I/O is larger than ”…”�”}”(hjÊh²hh³Nh´Nubj)�”}”(hŒ``BLK_PLUG_FLUSH_SIZE``”h]”hŒBLK_PLUG_FLUSH_SIZE”…”�”}”(hj"Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊubhŒQ. The queued I/Os may also be submitted early if the task schedules (see below).”…”�”}”(hjÊh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M¯hjÊubhÝ)�”}”(hXTracking blk_plug inside the task_struct will help with auto-flushing the pending I/O should the task end up blocking between blk_start_plug() and blk_finish_plug(). This is important from a performance perspective, but also ensures that we don't deadlock. For instance, if the task is blocking for a memory allocation, memory reclaim could end up wanting to free a page belonging to that request that is currently residing in our private plug. By flushing the pending I/O when the process goes to sleep, we avoid this kind of deadlock.”h]”hXTracking blk_plug inside the task_struct will help with auto-flushing the pending I/O should the task end up blocking between blk_start_plug() and blk_finish_plug(). This is important from a performance perspective, but also ensures that we don’t deadlock. For instance, if the task is blocking for a memory allocation, memory reclaim could end up wanting to free a page belonging to that request that is currently residing in our private plug. By flushing the pending I/O when the process goes to sleep, we avoid this kind of deadlock.”…”�”}”(hj;Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M¸hjÊubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j:Êh´M¯hjkÉubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_finish_plug (C function)”Œc.blk_finish_plug”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,void blk_finish_plug (struct blk_plug *plug)”h]”j)�”}”(hŒ+void blk_finish_plug(struct blk_plug *plug)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjpÊh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjlÊh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjlÊh²hh³j~Êh´Mubj{)�”}”(hŒblk_finish_plug”h]”j�)�”}”(hŒblk_finish_plug”h]”hŒblk_finish_plug”…”�”}”(hj‘Êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Êubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjlÊh²hh³j~Êh´Mubjœ)�”}”(hŒ(struct blk_plug *plug)”h]”j¢)�”}”(hŒstruct blk_plug *plug”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj­Êh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj©Êubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©Êubh)�”}”(hhh]”j�)�”}”(hŒblk_plug”h]”hŒblk_plug”…”�”}”(hjËÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈÊubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÍÊŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j“ÊsbŒc.blk_finish_plug”†”asbuh1hhj©Êubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©Êubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjùÊh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj©Êubj�)�”}”(hŒplug”h]”hŒplug”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©Êubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¥Êubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjlÊh²hh³j~Êh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjhÊh²hh³j~Êh´Mubah}”(h]”jcÊah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j~Êh´MhjeÊh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(mark the end of a batch of submitted I/O”h]”hŒ(mark the end of a batch of submitted I/O”…”�”}”(hj0Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´Mhj-Ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjeÊh²hh³j~Êh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjHËjæjHËjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX…**Parameters** ``struct blk_plug *plug`` The :c:type:`struct blk_plug ` passed to blk_start_plug() **Description** Indicate that a batch of I/O submissions is complete. This function must be paired with an initial call to blk_start_plug(). The intent is to allow the block layer to optimize I/O submission. See the documentation for blk_start_plug() for more information.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjRËh]”hŒ Parameters”…”�”}”(hjTËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´M hjLËubj )�”}”(hhh]”j)�”}”(hŒ^``struct blk_plug *plug`` The :c:type:`struct blk_plug ` passed to blk_start_plug() ”h]”(j)�”}”(hŒ``struct blk_plug *plug``”h]”j)�”}”(hjqËh]”hŒstruct blk_plug *plug”…”�”}”(hjsËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoËubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MhjkËubj2)�”}”(hhh]”hÝ)�”}”(hŒCThe :c:type:`struct blk_plug ` passed to blk_start_plug()”h]”(hŒThe ”…”�”}”(hjŠËh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct blk_plug `”h]”j)�”}”(hj”Ëh]”hŒstruct blk_plug”…”�”}”(hj–Ëh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhj’Ëubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œblk_plug”uh1hh³j†Ëh´MhjŠËubhŒ passed to blk_start_plug()”…”�”}”(hjŠËh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†Ëh´Mhj‡Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjkËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†Ëh´MhjhËubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjLËubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÏËh]”hŒ Description”…”�”}”(hjÑËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÍËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MhjLËubhÝ)�”}”(hXIndicate that a batch of I/O submissions is complete. This function must be paired with an initial call to blk_start_plug(). The intent is to allow the block layer to optimize I/O submission. See the documentation for blk_start_plug() for more information.”h]”hXIndicate that a batch of I/O submissions is complete. This function must be paired with an initial call to blk_start_plug(). The intent is to allow the block layer to optimize I/O submission. See the documentation for blk_start_plug() for more information.”…”�”}”(hjåËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:312: ./block/blk-core.c”h´MhjLËubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_queue_enter (C function)”Œc.blk_queue_enter”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGint blk_queue_enter (struct request_queue *q, blk_mq_req_flags_t flags)”h]”j)�”}”(hŒFint blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÌh²hh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:315: ./block/blk-core.c”h´MWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌh²hh³j"Ìh´MWubj{)�”}”(hŒblk_queue_enter”h]”j�)�”}”(hŒblk_queue_enter”h]”hŒblk_queue_enter”…”�”}”(hj5Ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1Ìubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÌh²hh³j"Ìh´MWubjœ)�”}”(hŒ3(struct request_queue *q, blk_mq_req_flags_t flags)”h]”(j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjQÌh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjMÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjMÌubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hjoÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlÌubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jqÌŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j7ÌsbŒc.blk_queue_enter”†”asbuh1hhjMÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjMÌubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�Ìh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjMÌubj�)�”}”(hj(lh]”hŒq”…”�”}”(hjªÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIÌubj¢)�”}”(hŒblk_mq_req_flags_t flags”h]”(h)�”}”(hhh]”j�)�”}”(hŒblk_mq_req_flags_t”h]”hŒblk_mq_req_flags_t”…”�”}”(hjÅÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂÌubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÇÌŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j‹ÌŒc.blk_queue_enter”†”asbuh1hhj¾Ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾Ìubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjñÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾Ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIÌubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÌh²hh³j"Ìh´MWubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj Ìh²hh³j"Ìh´MWubah}”(h]”jÌah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j"Ìh´MWhj Ìh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"try to increase q->q_usage_counter”h]”hŒ"try to increase q->q_usage_counter”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:315: ./block/blk-core.c”h´MWhjÍh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj Ìh²hh³j"Ìh´MWubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj3Íjæj3Íjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒŠ**Parameters** ``struct request_queue *q`` request queue pointer ``blk_mq_req_flags_t flags`` BLK_MQ_REQ_NOWAIT and/or BLK_MQ_REQ_PM”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj=Íh]”hŒ Parameters”…”�”}”(hj?Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;Íubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:315: ./block/blk-core.c”h´M[hj7Íubj )�”}”(hhh]”(j)�”}”(hŒ2``struct request_queue *q`` request queue pointer ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj\Íh]”hŒstruct request_queue *q”…”�”}”(hj^Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:315: ./block/blk-core.c”h´MXhjVÍubj2)�”}”(hhh]”hÝ)�”}”(hŒrequest queue pointer”h]”hŒrequest queue pointer”…”�”}”(hjuÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jqÍh´MXhjrÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjVÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqÍh´MXhjSÍubj)�”}”(hŒC``blk_mq_req_flags_t flags`` BLK_MQ_REQ_NOWAIT and/or BLK_MQ_REQ_PM”h]”(j)�”}”(hŒ``blk_mq_req_flags_t flags``”h]”j)�”}”(hj•Íh]”hŒblk_mq_req_flags_t flags”…”�”}”(hj—Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“Íubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:315: ./block/blk-core.c”h´MZhj�Íubj2)�”}”(hhh]”hÝ)�”}”(hŒ&BLK_MQ_REQ_NOWAIT and/or BLK_MQ_REQ_PM”h]”hŒ&BLK_MQ_REQ_NOWAIT and/or BLK_MQ_REQ_PM”…”�”}”(hj®Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒU/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:315: ./block/blk-core.c”h´MYhj«Íubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Íubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªÍh´MZhjSÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj7Íubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ blk_rq_map_user_iov (C function)”Œc.blk_rq_map_user_iov”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ�int blk_rq_map_user_iov (struct request_queue *q, struct request *rq, struct rq_map_data *map_data, const struct iov_iter *iter, gfp_t gfp_mask)”h]”j)�”}”(hŒ�int blk_rq_map_user_iov(struct request_queue *q, struct request *rq, struct rq_map_data *map_data, const struct iov_iter *iter, gfp_t gfp_mask)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjïÍh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjëÍh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´Måubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëÍh²hh³jýÍh´Måubj{)�”}”(hŒblk_rq_map_user_iov”h]”j�)�”}”(hŒblk_rq_map_user_iov”h]”hŒblk_rq_map_user_iov”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Îubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjëÍh²hh³jýÍh´Måubjœ)�”}”(hŒx(struct request_queue *q, struct request *rq, struct rq_map_data *map_data, const struct iov_iter *iter, gfp_t gfp_mask)”h]”(j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj,Îh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj(Îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Îh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(Îubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hjJÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjGÎubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jLÎŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÎsbŒc.blk_rq_map_user_iov”†”asbuh1hhj(Îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(Îubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjxÎh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj(Îubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj…Îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(Îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$Îubj¢)�”}”(hŒstruct request *rq”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�Îh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj™Îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™Îubh)�”}”(hhh]”j�)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hj»Îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸Îubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j½ÎŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jfÎŒc.blk_rq_map_user_iov”†”asbuh1hhj™Îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™Îubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjçÎh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj™Îubj�)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjôÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™Îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$Îubj¢)�”}”(hŒstruct rq_map_data *map_data”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj Ïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj Ïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Ïubh)�”}”(hhh]”j�)�”}”(hŒ rq_map_data”h]”hŒ rq_map_data”…”�”}”(hj+Ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(Ïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j-ÏŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jfÎŒc.blk_rq_map_user_iov”†”asbuh1hhj Ïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Ïubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjWÏh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj Ïubj�)�”}”(hŒmap_data”h]”hŒmap_data”…”�”}”(hjdÏh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$Îubj¢)�”}”(hŒconst struct iov_iter *iter”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj}Ïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjyÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyÏubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj˜Ïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjyÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyÏubh)�”}”(hhh]”j�)�”}”(hŒiov_iter”h]”hŒiov_iter”…”�”}”(hj¶Ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³Ïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¸ÏŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jfÎŒc.blk_rq_map_user_iov”†”asbuh1hhjyÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyÏubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjâÏh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjyÏubj�)�”}”(hŒiter”h]”hŒiter”…”�”}”(hjïÏh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$Îubj¢)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj Ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ÐŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jfÎŒc.blk_rq_map_user_iov”†”asbuh1hhjÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÐubj�)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj7Ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj$Îubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjëÍh²hh³jýÍh´Måubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjçÍh²hh³jýÍh´Måubah}”(h]”jâÍah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jýÍh´MåhjäÍh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4map user data to a request, for passthrough requests”h]”hŒ4map user data to a request, for passthrough requests”…”�”}”(hjaÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´Måhj^Ðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjäÍh²hh³jýÍh´Måubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjyÐjæjyÐjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX0**Parameters** ``struct request_queue *q`` request queue where request should be inserted ``struct request *rq`` request to map data to ``struct rq_map_data *map_data`` pointer to the rq_map_data holding pages (if necessary) ``const struct iov_iter *iter`` iovec iterator ``gfp_t gfp_mask`` memory allocation flags **Description** Data will be mapped directly for zero copy I/O, if possible. Otherwise a kernel bounce buffer is used. A matching blk_rq_unmap_user() must be issued at the end of I/O, while still in process context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjƒÐh]”hŒ Parameters”…”�”}”(hj…Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´Méhj}Ðubj )�”}”(hhh]”(j)�”}”(hŒK``struct request_queue *q`` request queue where request should be inserted ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj¢Ðh]”hŒstruct request_queue *q”…”�”}”(hj¤Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´MæhjœÐubj2)�”}”(hhh]”hÝ)�”}”(hŒ.request queue where request should be inserted”h]”hŒ.request queue where request should be inserted”…”�”}”(hj»Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·Ðh´Mæhj¸Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·Ðh´Mæhj™Ðubj)�”}”(hŒ.``struct request *rq`` request to map data to ”h]”(j)�”}”(hŒ``struct request *rq``”h]”j)�”}”(hjÛÐh]”hŒstruct request *rq”…”�”}”(hjÝÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´MçhjÕÐubj2)�”}”(hhh]”hÝ)�”}”(hŒrequest to map data to”h]”hŒrequest to map data to”…”�”}”(hjôÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jðÐh´MçhjñÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðÐh´Mçhj™Ðubj)�”}”(hŒY``struct rq_map_data *map_data`` pointer to the rq_map_data holding pages (if necessary) ”h]”(j)�”}”(hŒ ``struct rq_map_data *map_data``”h]”j)�”}”(hjÑh]”hŒstruct rq_map_data *map_data”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´MèhjÑubj2)�”}”(hhh]”hÝ)�”}”(hŒ7pointer to the rq_map_data holding pages (if necessary)”h]”hŒ7pointer to the rq_map_data holding pages (if necessary)”…”�”}”(hj-Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j)Ñh´Mèhj*Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)Ñh´Mèhj™Ðubj)�”}”(hŒ/``const struct iov_iter *iter`` iovec iterator ”h]”(j)�”}”(hŒ``const struct iov_iter *iter``”h]”j)�”}”(hjMÑh]”hŒconst struct iov_iter *iter”…”�”}”(hjOÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´MéhjGÑubj2)�”}”(hhh]”hÝ)�”}”(hŒiovec iterator”h]”hŒiovec iterator”…”�”}”(hjfÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jbÑh´MéhjcÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjGÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbÑh´Méhj™Ðubj)�”}”(hŒ+``gfp_t gfp_mask`` memory allocation flags ”h]”(j)�”}”(hŒ``gfp_t gfp_mask``”h]”j)�”}”(hj†Ñh]”hŒgfp_t gfp_mask”…”�”}”(hjˆÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´Mêhj€Ñubj2)�”}”(hhh]”hÝ)�”}”(hŒmemory allocation flags”h]”hŒmemory allocation flags”…”�”}”(hjŸÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›Ñh´MêhjœÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›Ñh´Mêhj™Ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj}ÐubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÁÑh]”hŒ Description”…”�”}”(hjÃÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¿Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´Mìhj}Ðubj•)�”}”(hŒÈData will be mapped directly for zero copy I/O, if possible. Otherwise a kernel bounce buffer is used. A matching blk_rq_unmap_user() must be issued at the end of I/O, while still in process context.”h]”(hÝ)�”}”(hŒfData will be mapped directly for zero copy I/O, if possible. Otherwise a kernel bounce buffer is used.”h]”hŒfData will be mapped directly for zero copy I/O, if possible. Otherwise a kernel bounce buffer is used.”…”�”}”(hjÛÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´Mìhj×ÑubhÝ)�”}”(hŒ`A matching blk_rq_unmap_user() must be issued at the end of I/O, while still in process context.”h]”hŒ`A matching blk_rq_unmap_user() must be issued at the end of I/O, while still in process context.”…”�”}”(hjêÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´Mïhj×Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jéÑh´Mìhj}Ðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_rq_unmap_user (C function)”Œc.blk_rq_unmap_user”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'int blk_rq_unmap_user (struct bio *bio)”h]”j)�”}”(hŒ&int blk_rq_unmap_user(struct bio *bio)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÒh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.Òh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒh²hh³j-Òh´M^ubj{)�”}”(hŒblk_rq_unmap_user”h]”j�)�”}”(hŒblk_rq_unmap_user”h]”hŒblk_rq_unmap_user”…”�”}”(hj@Òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<Òubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÒh²hh³j-Òh´M^ubjœ)�”}”(hŒ(struct bio *bio)”h]”j¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj\Òh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjXÒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXÒubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjzÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j|ÒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jBÒsbŒc.blk_rq_unmap_user”†”asbuh1hhjXÒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXÒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¨Òh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjXÒubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjµÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXÒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjTÒubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÒh²hh³j-Òh´M^ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÒh²hh³j-Òh´M^ubah}”(h]”jÒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j-Òh´M^hjÒh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒunmap a request with user data”h]”hŒunmap a request with user data”…”�”}”(hjßÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M^hjÜÒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÒh²hh³j-Òh´M^ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj÷Òjæj÷Òjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX**Parameters** ``struct bio *bio`` start of bio list **Description** Unmap a rq previously mapped by blk_rq_map_user(). The caller must supply the original rq->bio from the blk_rq_map_user() return, since the I/O completion may have changed rq->bio.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÓh]”hŒ Parameters”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´MbhjûÒubj )�”}”(hhh]”j)�”}”(hŒ&``struct bio *bio`` start of bio list ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hj Óh]”hŒstruct bio *bio”…”�”}”(hj"Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M_hjÓubj2)�”}”(hhh]”hÝ)�”}”(hŒstart of bio list”h]”hŒstart of bio list”…”�”}”(hj9Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j5Óh´M_hj6Óubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j5Óh´M_hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjûÒubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj[Óh]”hŒ Description”…”�”}”(hj]Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjYÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´MahjûÒubj•)�”}”(hŒ´Unmap a rq previously mapped by blk_rq_map_user(). The caller must supply the original rq->bio from the blk_rq_map_user() return, since the I/O completion may have changed rq->bio.”h]”hÝ)�”}”(hŒ´Unmap a rq previously mapped by blk_rq_map_user(). The caller must supply the original rq->bio from the blk_rq_map_user() return, since the I/O completion may have changed rq->bio.”h]”hŒ´Unmap a rq previously mapped by blk_rq_map_user(). The caller must supply the original rq->bio from the blk_rq_map_user() return, since the I/O completion may have changed rq->bio.”…”�”}”(hjuÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´MahjqÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jƒÓh´MahjûÒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_rq_map_kern (C function)”Œc.blk_rq_map_kern”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒVint blk_rq_map_kern (struct request *rq, void *kbuf, unsigned int len, gfp_t gfp_mask)”h]”j)�”}”(hŒUint blk_rq_map_kern(struct request *rq, void *kbuf, unsigned int len, gfp_t gfp_mask)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjªÓh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¦Óh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹Óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¦Óh²hh³j¸Óh´M�ubj{)�”}”(hŒblk_rq_map_kern”h]”j�)�”}”(hŒblk_rq_map_kern”h]”hŒblk_rq_map_kern”…”�”}”(hjËÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇÓubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¦Óh²hh³j¸Óh´M�ubjœ)�”}”(hŒB(struct request *rq, void *kbuf, unsigned int len, gfp_t gfp_mask)”h]”(j¢)�”}”(hŒstruct request *rq”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjçÓh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjãÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjãÓubh)�”}”(hhh]”j�)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÔŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÍÓsbŒc.blk_rq_map_kern”†”asbuh1hhjãÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjãÓubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj3Ôh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjãÓubj�)�”}”(hŒrq”h]”hŒrq”…”�”}”(hj@Ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjãÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßÓubj¢)�”}”(hŒ void *kbuf”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjYÔh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjUÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUÔubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjuÔh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjUÔubj�)�”}”(hŒkbuf”h]”hŒkbuf”…”�”}”(hj‚Ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjUÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßÓubj¢)�”}”(hŒunsigned int len”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj›Ôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj—Ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©Ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—Ôubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj·Ôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj—Ôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—Ôubj�)�”}”(hŒlen”h]”hŒlen”…”�”}”(hjÓÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—Ôubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßÓubj¢)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjïÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìÔubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jñÔŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j!ÔŒc.blk_rq_map_kern”†”asbuh1hhjèÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Õh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèÔubj�)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjßÓubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¦Óh²hh³j¸Óh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¢Óh²hh³j¸Óh´M�ubah}”(h]”j�Óah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¸Óh´M�hjŸÓh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6map kernel data to a request, for passthrough requests”h]”hŒ6map kernel data to a request, for passthrough requests”…”�”}”(hjEÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M�hjBÕh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŸÓh²hh³j¸Óh´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj]Õjæj]Õjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXW**Parameters** ``struct request *rq`` request to fill ``void *kbuf`` the kernel buffer ``unsigned int len`` length of user data ``gfp_t gfp_mask`` memory allocation flags **Description** Data will be mapped directly if possible. Otherwise a bounce buffer is used. Can be called multiple times to append multiple buffers.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjgÕh]”hŒ Parameters”…”�”}”(hjiÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjeÕubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M…hjaÕubj )�”}”(hhh]”(j)�”}”(hŒ'``struct request *rq`` request to fill ”h]”(j)�”}”(hŒ``struct request *rq``”h]”j)�”}”(hj†Õh]”hŒstruct request *rq”…”�”}”(hjˆÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„Õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M‚hj€Õubj2)�”}”(hhh]”hÝ)�”}”(hŒrequest to fill”h]”hŒrequest to fill”…”�”}”(hjŸÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›Õh´M‚hjœÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€Õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›Õh´M‚hj}Õubj)�”}”(hŒ!``void *kbuf`` the kernel buffer ”h]”(j)�”}”(hŒ``void *kbuf``”h]”j)�”}”(hj¿Õh]”hŒ void *kbuf”…”�”}”(hjÁÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½Õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´Mƒhj¹Õubj2)�”}”(hhh]”hÝ)�”}”(hŒthe kernel buffer”h]”hŒthe kernel buffer”…”�”}”(hjØÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔÕh´MƒhjÕÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹Õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔÕh´Mƒhj}Õubj)�”}”(hŒ)``unsigned int len`` length of user data ”h]”(j)�”}”(hŒ``unsigned int len``”h]”j)�”}”(hjøÕh]”hŒunsigned int len”…”�”}”(hjúÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M„hjòÕubj2)�”}”(hhh]”hÝ)�”}”(hŒlength of user data”h]”hŒlength of user data”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Öh´M„hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjòÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Öh´M„hj}Õubj)�”}”(hŒ+``gfp_t gfp_mask`` memory allocation flags ”h]”(j)�”}”(hŒ``gfp_t gfp_mask``”h]”j)�”}”(hj1Öh]”hŒgfp_t gfp_mask”…”�”}”(hj3Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/Öubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M…hj+Öubj2)�”}”(hhh]”hÝ)�”}”(hŒmemory allocation flags”h]”hŒmemory allocation flags”…”�”}”(hjJÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jFÖh´M…hjGÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj+Öubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jFÖh´M…hj}Õubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjaÕubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjlÖh]”hŒ Description”…”�”}”(hjnÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M‡hjaÕubj•)�”}”(hŒ…Data will be mapped directly if possible. Otherwise a bounce buffer is used. Can be called multiple times to append multiple buffers.”•h]”hÝ)�”}”(hŒ…Data will be mapped directly if possible. Otherwise a bounce buffer is used. Can be called multiple times to append multiple buffers.”h]”hŒ…Data will be mapped directly if possible. Otherwise a bounce buffer is used. Can be called multiple times to append multiple buffers.”…”�”}”(hj†Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:318: ./block/blk-map.c”h´M‡hj‚Öubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j”Öh´M‡hjaÕubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_register_queue (C function)”Œc.blk_register_queue”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-int blk_register_queue (struct gendisk *disk)”h]”j)�”}”(hŒ,int blk_register_queue(struct gendisk *disk)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj»Öh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj·Öh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´M³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·Öh²hh³jÉÖh´M³ubj{)�”}”(hŒblk_register_queue”h]”j�)�”}”(hŒblk_register_queue”h]”hŒblk_register_queue”…”�”}”(hjÜÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØÖubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj·Öh²hh³jÉÖh´M³ubjœ)�”}”(hŒ(struct gendisk *disk)”h]”j¢)�”}”(hŒstruct gendisk *disk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjøÖh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjôÖubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôÖubh)�”}”(hhh]”j�)�”}”(hŒgendisk”h]”hŒgendisk”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j׌modname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÞÖsbŒc.blk_register_queue”†”asbuh1hhjôÖubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôÖubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjD×h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjôÖubj�)�”}”(hŒdisk”h]”hŒdisk”…”�”}”(hjQ×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôÖubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjðÖubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj·Öh²hh³jÉÖh´M³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj³Öh²hh³jÉÖh´M³ubah}”(h]”j®Öah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÉÖh´M³hj°Öh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'register a block layer queue with sysfs”h]”hŒ'register a block layer queue with sysfs”…”�”}”(hj{×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´M³hjx×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj°Öh²hh³jÉÖh´M³ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj“×jæj“×jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒk**Parameters** ``struct gendisk *disk`` Disk of which the request queue should be registered with sysfs.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�×h]”hŒ Parameters”…”�”}”(hjŸ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj›×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´M·hj—×ubj )�”}”(hhh]”j)�”}”(hŒY``struct gendisk *disk`` Disk of which the request queue should be registered with sysfs.”h]”(j)�”}”(hŒ``struct gendisk *disk``”h]”j)�”}”(hj¼×h]”hŒstruct gendisk *disk”…”�”}”(hj¾×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjº×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´M¹hj¶×ubj2)�”}”(hhh]”hÝ)�”}”(hŒ@Disk of which the request queue should be registered with sysfs.”h]”hŒ@Disk of which the request queue should be registered with sysfs.”…”�”}”(hjÕ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´M´hjÒ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¶×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÑ×h´M¹hj³×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj—×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!blk_unregister_queue (C function)”Œc.blk_unregister_queue”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ0void blk_unregister_queue (struct gendisk *disk)”h]”j)�”}”(hŒ/void blk_unregister_queue(struct gendisk *disk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjØh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%Øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØh²hh³j$Øh´Mubj{)�”}”(hŒblk_unregister_queue”h]”j�)�”}”(hŒblk_unregister_queue”h]”hŒblk_unregister_queue”…”�”}”(hj7Øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3Øubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjØh²hh³j$Øh´Mubjœ)�”}”(hŒ(struct gendisk *disk)”h]”j¢)�”}”(hŒstruct gendisk *disk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjSØh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjOØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOØubh)�”}”(hhh]”j�)�”}”(hŒgendisk”h]”hŒgendisk”…”�”}”(hjqØh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnØubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jsØŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j9ØsbŒc.blk_unregister_queue”†”asbuh1hhjOØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘Øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOØubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŸØh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjOØubj�)�”}”(hŒdisk”h]”hŒdisk”…”�”}”(hj¬Øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOØubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjKØubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjØh²hh³j$Øh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjØh²hh³j$Øh´Mubah}”(h]”j Øah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j$Øh´Mhj Øh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#counterpart of blk_register_queue()”h]”hŒ#counterpart of blk_register_queue()”…”�”}”(hjÖØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´MhjÓØh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj Øh²hh³j$Øh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjîØjæjîØjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒé**Parameters** ``struct gendisk *disk`` Disk of which the request queue should be unregistered from sysfs. **Note** the caller is responsible for guaranteeing that this function is called after blk_register_queue() has finished.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjøØh]”hŒ Parameters”…”�”}”(hjúØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjöØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´M hjòØubj )�”}”(hhh]”j)�”}”(hŒ\``struct gendisk *disk`` Disk of which the request queue should be unregistered from sysfs. ”h]”(j)�”}”(hŒ``struct gendisk *disk``”h]”j)�”}”(hjÙh]”hŒstruct gendisk *disk”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´MhjÙubj2)�”}”(hhh]”hÝ)�”}”(hŒBDisk of which the request queue should be unregistered from sysfs.”h]”hŒBDisk of which the request queue should be unregistered from sysfs.”…”�”}”(hj0Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,Ùh´Mhj-Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,Ùh´MhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjòØubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjRÙh]”hŒNote”…”�”}”(hjTÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´M hjòØubhÝ)�”}”(hŒpthe caller is responsible for guaranteeing that this function is called after blk_register_queue() has finished.”h]”hŒpthe caller is responsible for guaranteeing that this function is called after blk_register_queue() has finished.”…”�”}”(hjhÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:321: ./block/blk-sysfs.c”h´M hjòØubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$blk_set_stacking_limits (C function)”Œc.blk_set_stacking_limits”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void blk_set_stacking_limits (struct queue_limits *lim)”h]”j)�”}”(hŒ6void blk_set_stacking_limits(struct queue_limits *lim)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj—Ùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“Ùh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦Ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“Ùh²hh³j¥Ùh´Kubj{)�”}”(hŒblk_set_stacking_limits”h]”j�)�”}”(hŒblk_set_stacking_limits”h]”hŒblk_set_stacking_limits”…”�”}”(hj¸Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´Ùubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj“Ùh²hh³j¥Ùh´Kubjœ)�”}”(hŒ(struct queue_limits *lim)”h]”j¢)�”}”(hŒstruct queue_limits *lim”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÔÙh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÐÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÐÙubh)�”}”(hhh]”j�)�”}”(hŒ queue_limits”h]”hŒ queue_limits”…”�”}”(hjòÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jôÙŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jºÙsbŒc.blk_set_stacking_limits”†”asbuh1hhjÐÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÐÙubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Úh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÐÙubj�)�”}”(hŒlim”h]”hŒlim”…”�”}”(hj-Úh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÌÙubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj“Ùh²hh³j¥Ùh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�Ùh²hh³j¥Ùh´Kubah}”(h]”jŠÙah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¥Ùh´KhjŒÙh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'set default limits for stacking devices”h]”hŒ'set default limits for stacking devices”…”�”}”(hjWÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´KhjTÚh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŒÙh²hh³j¥Ùh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjoÚjæjoÚjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ¿**Parameters** ``struct queue_limits *lim`` the queue_limits structure to reset **Description** Prepare queue limits for applying limits from underlying devices using blk_stack_limits().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjyÚh]”hŒ Parameters”…”�”}”(hj{Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjwÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´K#hjsÚubj )�”}”(hhh]”j)�”}”(hŒA``struct queue_limits *lim`` the queue_limits structure to reset ”h]”(j)�”}”(hŒ``struct queue_limits *lim``”h]”j)�”}”(hj˜Úh]”hŒstruct queue_limits *lim”…”�”}”(hjšÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj–Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´K hj’Úubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the queue_limits structure to reset”h]”hŒ#the queue_limits structure to reset”…”�”}”(hj±Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j­Úh´K hj®Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj’Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­Úh´K hj�Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjsÚubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÓÚh]”hŒ Description”…”�”}”(hjÕÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÑÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´K"hjsÚubhÝ)�”}”(hŒZPrepare queue limits for applying limits from underlying devices using blk_stack_limits().”h]”hŒZPrepare queue limits for applying limits from underlying devices using blk_stack_limits().”…”�”}”(hjéÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´K!hjsÚubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'queue_limits_commit_update (C function)”Œc.queue_limits_commit_update”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRint queue_limits_commit_update (struct request_queue *q, struct queue_limits *lim)”h]”j)�”}”(hŒQint queue_limits_commit_update(struct request_queue *q, struct queue_limits *lim)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÛh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛh²hh³j&Ûh´Mubj{)�”}”(hŒqueue_limits_commit_update”h]”j�)�”}”(hŒqueue_limits_commit_update”h]”hŒqueue_limits_commit_update”…”�”}”(hj9Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5Ûubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÛh²hh³j&Ûh´Mubjœ)�”}”(hŒ3(struct request_queue *q, struct queue_limits *lim)”h]”(j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjUÛh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjQÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjbÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQÛubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hjsÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjpÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”juÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j;ÛsbŒc.queue_limits_commit_update”†”asbuh1hhjQÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjQÛubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¡Ûh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjQÛubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj®Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjMÛubj¢)�”}”(hŒstruct queue_limits *lim”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÆÛh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÂÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓÛh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂÛubh)�”}”(hhh]”j�)�”}”(hŒ queue_limits”h]”hŒ queue_limits”…”�”}”(hjäÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáÛubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jæÛŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j�ÛŒc.queue_limits_commit_update”†”asbuh1hhjÂÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂÛubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÂÛubj�)�”}”(hŒlim”h]”hŒlim”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjMÛubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÛh²hh³j&Ûh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÛh²hh³j&Ûh´Mubah}”(h]”j Ûah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j&Ûh´Mhj Ûh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'commit an atomic update of queue limits”h]”hŒ'commit an atomic update of queue limits”…”�”}”(hjGÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MhjDÜh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj Ûh²hh³j&Ûh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj_Üjæj_Üjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX�**Parameters** ``struct request_queue *q`` queue to update ``struct queue_limits *lim`` limits to apply **Description** Apply the limits in **lim** that were obtained from queue_limits_start_update() and updated by the caller to **q**. The caller must have frozen the queue or ensure that there are no outstanding I/Os by other means. Returns 0 if successful, else a negative error code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjiÜh]”hŒ Parameters”…”�”}”(hjkÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjgÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MhjcÜubj )�”}”(hhh]”(j)�”}”(hŒ,``struct request_queue *q`` queue to update ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hjˆÜh]”hŒstruct request_queue *q”…”�”}”(hjŠÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mhj‚Üubj2)�”}”(hhh]”hÝ)�”}”(hŒqueue to update”h]”hŒqueue to update”…”�”}”(hj¡Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�Üh´MhjžÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‚Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�Üh´MhjÜubj)�”}”(hŒ-``struct queue_limits *lim`` limits to apply ”h]”(j)�”}”(hŒ``struct queue_limits *lim``”h]”j)�”}”(hjÁÜh]”hŒstruct queue_limits *lim”…”�”}”(hjÃÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mhj»Üubj2)�”}”(hhh]”hÝ)�”}”(hŒlimits to apply”h]”hŒlimits to apply”…”�”}”(hjÚÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÖÜh´Mhj×Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj»Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÖÜh´MhjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjcÜubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjüÜh]”hŒ Description”…”�”}”(hjþÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúÜubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MhjcÜubhÝ)�”}”(hŒ×Apply the limits in **lim** that were obtained from queue_limits_start_update() and updated by the caller to **q**. The caller must have frozen the queue or ensure that there are no outstanding I/Os by other means.”h]”(hŒApply the limits in ”…”�”}”(hjÝh²hh³Nh´Nubjõ)�”}”(hŒ**lim**”h]”hŒlim”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝubhŒR that were obtained from queue_limits_start_update() and updated by the caller to ”…”�”}”(hjÝh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hj,Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝubhŒe. The caller must have frozen the queue or ensure that there are no outstanding I/Os by other means.”…”�”}”(hjÝh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MhjcÜubhÝ)�”}”(hŒ4Returns 0 if successful, else a negative error code.”h]”hŒ4Returns 0 if successful, else a negative error code.”…”�”}”(hjEÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MhjcÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ.queue_limits_commit_update_frozen (C function)”Œ#c.queue_limits_commit_update_frozen”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒYint queue_limits_commit_update_frozen (struct request_queue *q, struct queue_limits *lim)”h]”j)�”}”(hŒXint queue_limits_commit_update_frozen(struct request_queue *q, struct queue_limits *lim)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjtÝh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjpÝh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M>ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpÝh²hh³j‚Ýh´M>ubj{)�”}”(hŒ!queue_limits_commit_update_frozen”h]”j�)�”}”(hŒ!queue_limits_commit_update_frozen”h]”hŒ!queue_limits_commit_update_frozen”…”�”}”(hj•Ýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘Ýubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjpÝh²hh³j‚Ýh´M>ubjœ)�”}”(hŒ3(struct request_queue *q, struct queue_limits *lim)”h]”(j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj±Ýh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj­Ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Ýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­Ýubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hjÏÝh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÑÝŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j—ÝsbŒ#c.queue_limits_commit_update_frozen”†”asbuh1hhj­Ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïÝh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­Ýubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjýÝh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj­Ýubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj Þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­Ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©Ýubj¢)�”}”(hŒstruct queue_limits *lim”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj"Þh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/Þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞubh)�”}”(hhh]”j�)�”}”(hŒ queue_limits”h]”hŒ queue_limits”…”�”}”(hj@Þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj=Þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jBÞŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jëÝŒ#c.queue_limits_commit_update_frozen”†”asbuh1hhjÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjlÞh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞubj�)�”}”(hŒlim”h]”hŒlim”…”�”}”(hjyÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj©Ýubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjpÝh²hh³j‚Ýh´M>ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjlÝh²hh³j‚Ýh´M>ubah}”(h]”jgÝah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‚Ýh´M>hjiÝh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'commit an atomic update of queue limits”h]”hŒ'commit an atomic update of queue limits”…”�”}”(hj£Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M>hj Þh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjiÝh²hh³j‚Ýh´M>ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj»Þjæj»Þjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXz**Parameters** ``struct request_queue *q`` queue to update ``struct queue_limits *lim`` limits to apply **Description** Apply the limits in **lim** that were obtained from queue_limits_start_update() and updated with the new values by the caller to **q**. Freezes the queue before the update and unfreezes it after. Returns 0 if successful, else a negative error code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÅÞh]”hŒ Parameters”…”�”}”(hjÇÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MBhj¿Þubj )�”}”(hhh]”(j)�”}”(hŒ,``struct request_queue *q`` queue to update ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hjäÞh]”hŒstruct request_queue *q”…”�”}”(hjæÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M?hjÞÞubj2)�”}”(hhh]”hÝ)�”}”(hŒqueue to update”h]”hŒqueue to update”…”�”}”(hjýÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jùÞh´M?hjúÞubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÞÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jùÞh´M?hjÛÞubj)�”}”(hŒ-``struct queue_limits *lim`` limits to apply ”h]”(j)�”}”(hŒ``struct queue_limits *lim``”h]”j)�”}”(hjßh]”hŒstruct queue_limits *lim”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M@hjßubj2)�”}”(hhh]”hÝ)�”}”(hŒlimits to apply”h]”hŒlimits to apply”…”�”}”(hj6ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j2ßh´M@hj3ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2ßh´M@hjÛÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ÞubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjXßh]”hŒ Description”…”�”}”(hjZßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MBhj¿ÞubhÝ)�”}”(hŒÄApply the limits in **lim** that were obtained from queue_limits_start_update() and updated with the new values by the caller to **q**. Freezes the queue before the update and unfreezes it after.”h]”(hŒApply the limits in ”…”�”}”(hjnßh²hh³Nh´Nubjõ)�”}”(hŒ**lim**”h]”hŒlim”…”�”}”(hjvßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnßubhŒf that were obtained from queue_limits_start_update() and updated with the new values by the caller to ”…”�”}”(hjnßh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjˆßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnßubhŒ>. Freezes the queue before the update and unfreezes it after.”…”�”}”(hjnßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MAhj¿ÞubhÝ)�”}”(hŒ4Returns 0 if successful, else a negative error code.”h]”hŒ4Returns 0 if successful, else a negative error code.”…”�”}”(hj¡ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MEhj¿Þubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œqueue_limits_set (C function)”Œc.queue_limits_set”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHint queue_limits_set (struct request_queue *q, struct queue_limits *lim)”h]”j)�”}”(hŒGint queue_limits_set(struct request_queue *q, struct queue_limits *lim)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÐßh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÌßh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßßh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌßh²hh³jÞßh´MWubj{)�”}”(hŒqueue_limits_set”h]”j�)�”}”(hŒqueue_limits_set”h]”hŒqueue_limits_set”…”�”}”(hjñßh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjíßubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÌßh²hh³jÞßh´MWubjœ)�”}”(hŒ3(struct request_queue *q, struct queue_limits *lim)”h]”(j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj àh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj àubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj+àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j-àŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jóßsbŒc.queue_limits_set”†”asbuh1hhj àubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj àubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjYàh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj àubj�)�”}”(hj(lh]”hŒq”…”�”}”(hjfàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj àubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjàubj¢)�”}”(hŒstruct queue_limits *lim”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj~àh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjzàubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹àh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjzàubh)�”}”(hhh]”j�)�”}”(hŒ queue_limits”h]”hŒ queue_limits”…”�”}”(hjœàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™àubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jžàŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jGàŒc.queue_limits_set”†”asbuh1hhjzàubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºàh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjzàubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÈàh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjzàubj�)�”}”(hŒlim”h]”hŒlim”…”�”}”(hjÕàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjzàubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjàubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÌßh²hh³jÞßh´MWubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÈßh²hh³jÞßh´MWubah}”(h]”jÃßah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÞßh´MWhjÅßh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒapply queue limits to queue”h]”hŒapply queue limits to queue”…”�”}”(hjÿàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MWhjüàh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÅßh²hh³jÞßh´MWubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjájæjájç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX]**Parameters** ``struct request_queue *q`` queue to update ``struct queue_limits *lim`` limits to apply **Description** Apply the limits in **lim** that were freshly initialized to **q**. To update existing limits use queue_limits_start_update() and queue_limits_commit_update() instead. Returns 0 if successful, else a negative error code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj!áh]”hŒ Parameters”…”�”}”(hj#áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M[hjáubj )�”}”(hhh]”(j)�”}”(hŒ,``struct request_queue *q`` queue to update ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj@áh]”hŒstruct request_queue *q”…”�”}”(hjBáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MXhj:áubj2)�”}”(hhh]”hÝ)�”}”(hŒqueue to update”h]”hŒqueue to update”…”�”}”(hjYáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jUáh´MXhjVáubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj:áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jUáh´MXhj7áubj)�”}”(hŒ-``struct queue_limits *lim`` limits to apply ”h]”(j)�”}”(hŒ``struct queue_limits *lim``”h]”j)�”}”(hjyáh]”hŒstruct queue_limits *lim”…”�”}”(hj{áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjwáubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MYhjsáubj2)�”}”(hhh]”hÝ)�”}”(hŒlimits to apply”h]”hŒlimits to apply”…”�”}”(hj’áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŽáh´MYhj�áubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjsáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽáh´MYhj7áubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjáubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj´áh]”hŒ Description”…”�”}”(hj¶áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M[hjáubhÝ)�”}”(hŒ§Apply the limits in **lim** that were freshly initialized to **q**. To update existing limits use queue_limits_start_update() and queue_limits_commit_update() instead.”h]”(hŒApply the limits in ”…”�”}”(hjÊáh²hh³Nh´Nubjõ)�”}”(hŒ**lim**”h]”hŒlim”…”�”}”(hjÒáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊáubhŒ" that were freshly initialized to ”…”�”}”(hjÊáh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjäáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊáubhŒe. To update existing limits use queue_limits_start_update() and queue_limits_commit_update() instead.”…”�”}”(hjÊáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MZhjáubhÝ)�”}”(hŒ4Returns 0 if successful, else a negative error code.”h]”hŒ4Returns 0 if successful, else a negative error code.”…”�”}”(hjýáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M^hjáubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_stack_limits (C function)”Œc.blk_stack_limits”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒUint blk_stack_limits (struct queue_limits *t, struct queue_limits *b, sector_t start)”h]”j)�”}”(hŒTint blk_stack_limits(struct queue_limits *t, struct queue_limits *b, sector_t start)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj,âh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj(âh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Møubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(âh²hh³j:âh´Møubj{)�”}”(hŒblk_stack_limits”h]”j�)�”}”(hŒblk_stack_limits”h]”hŒblk_stack_limits”…”�”}”(hjMâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjIâubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj(âh²hh³j:âh´Møubjœ)�”}”(hŒ@(struct queue_limits *t, struct queue_limits *b, sector_t start)”h]”(j¢)�”}”(hŒstruct queue_limits *t”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjiâh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjeâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvâh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeâubh)�”}”(hhh]”j�)�”}”(hŒ queue_limits”h]”hŒ queue_limits”…”�”}”(hj‡âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„âubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‰âŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jOâsbŒc.blk_stack_limits”†”asbuh1hhjeâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeâubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjµâh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjeâubj�)�”}”(hjsh]”hŒt”…”�”}”(hjÂâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjaâubj¢)�”}”(hŒstruct queue_limits *b”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÚâh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÖâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçâh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖâubh)�”}”(hhh]”j�)�”}”(hŒ queue_limits”h]”hŒ queue_limits”…”�”}”(hjøâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõâubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”júâŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j£âŒc.blk_stack_limits”†”asbuh1hhjÖâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖâubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$ãh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÖâubj�)�”}”(hj¦¢h]”hŒb”…”�”}”(hj1ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjaâubj¢)�”}”(hŒsector_t start”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hjLãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjIãubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jNãŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j£âŒc.blk_stack_limits”†”asbuh1hhjEãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjjãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEãubj�)�”}”(hŒstart”h]”hŒstart”…”�”}”(hjxãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjEãubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjaâubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj(âh²hh³j:âh´Møubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj$âh²hh³j:âh´Møubah}”(h]”jâah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j:âh´Møhj!âh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'adjust queue_limits for stacked devices”h]”hŒ'adjust queue_limits for stacked devices”…”�”}”(hj¢ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MøhjŸãh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj!âh²hh³j:âh´Møubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjºãjæjºãjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXõ**Parameters** ``struct queue_limits *t`` the stacking driver limits (top device) ``struct queue_limits *b`` the underlying queue limits (bottom, component device) ``sector_t start`` first data sector within component device **Description** This function is used by stacking drivers like MD and DM to ensure that all component devices have compatible block sizes and alignments. The stacking driver must provide a queue_limits struct (top) and then iteratively call the stacking function for all component (bottom) devices. The stacking function will attempt to combine the values and ensure proper alignment. Returns 0 if the top and bottom queue_limits are compatible. The top device's block sizes and alignment offsets may be adjusted to ensure alignment with the bottom device. If no compatible sizes and alignments exist, -1 is returned and the resulting top queue_limits will have the misaligned flag set to indicate that the alignment_offset is undefined.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÄãh]”hŒ Parameters”…”�”}”(hjÆãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mühj¾ãubj )�”}”(hhh]”(j)�”}”(hŒC``struct queue_limits *t`` the stacking driver limits (top device) ”h]”(j)�”}”(hŒ``struct queue_limits *t``”h]”j)�”}”(hjããh]”hŒstruct queue_limits *t”…”�”}”(hjåãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MùhjÝãubj2)�”}”(hhh]”hÝ)�”}”(hŒ'the stacking driver limits (top device)”h]”hŒ'the stacking driver limits (top device)”…”�”}”(hjüãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jøãh´Mùhjùãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÝãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jøãh´MùhjÚãubj)�”}”(hŒR``struct queue_limits *b`` the underlying queue limits (bottom, component device) ”h]”(j)�”}”(hŒ``struct queue_limits *b``”h]”j)�”}”(hjäh]”hŒstruct queue_limits *b”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Múhjäubj2)�”}”(hhh]”hÝ)�”}”(hŒ6the underlying queue limits (bottom, component device)”h]”hŒ6the underlying queue limits (bottom, component device)”…”�”}”(hj5äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j1äh´Múhj2äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1äh´MúhjÚãubj)�”}”(hŒ=``sector_t start`` first data sector within component device ”h]”(j)�”}”(hŒ``sector_t start``”h]”j)�”}”(hjUäh]”hŒsector_t start”…”�”}”(hjWäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MûhjOäubj2)�”}”(hhh]”hÝ)�”}”(hŒ)first data sector within component device”h]”hŒ)first data sector within component device”…”�”}”(hjnäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jjäh´Mûhjkäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjOäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jjäh´MûhjÚãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¾ãubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�äh]”hŒ Description”…”�”}”(hj’äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŽäubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mýhj¾ãubj•)�”}”(hXÕThis function is used by stacking drivers like MD and DM to ensure that all component devices have compatible block sizes and alignments. The stacking driver must provide a queue_limits struct (top) and then iteratively call the stacking function for all component (bottom) devices. The stacking function will attempt to combine the values and ensure proper alignment. Returns 0 if the top and bottom queue_limits are compatible. The top device's block sizes and alignment offsets may be adjusted to ensure alignment with the bottom device. If no compatible sizes and alignments exist, -1 is returned and the resulting top queue_limits will have the misaligned flag set to indicate that the alignment_offset is undefined.”h]”(hÝ)�”}”(hXrThis function is used by stacking drivers like MD and DM to ensure that all component devices have compatible block sizes and alignments. The stacking driver must provide a queue_limits struct (top) and then iteratively call the stacking function for all component (bottom) devices. The stacking function will attempt to combine the values and ensure proper alignment.”h]”hXrThis function is used by stacking drivers like MD and DM to ensure that all component devices have compatible block sizes and alignments. The stacking driver must provide a queue_limits struct (top) and then iteratively call the stacking function for all component (bottom) devices. The stacking function will attempt to combine the values and ensure proper alignment.”…”�”}”(hjªäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mýhj¦äubhÝ)�”}”(hXaReturns 0 if the top and bottom queue_limits are compatible. The top device's block sizes and alignment offsets may be adjusted to ensure alignment with the bottom device. If no compatible sizes and alignments exist, -1 is returned and the resulting top queue_limits will have the misaligned flag set to indicate that the alignment_offset is undefined.”h]”hXcReturns 0 if the top and bottom queue_limits are compatible. The top device’s block sizes and alignment offsets may be adjusted to ensure alignment with the bottom device. If no compatible sizes and alignments exist, -1 is returned and the resulting top queue_limits will have the misaligned flag set to indicate that the alignment_offset is undefined.”…”�”}”(hj¹äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mhj¦äubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¸äh´Mýhj¾ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$queue_limits_stack_bdev (C function)”Œc.queue_limits_stack_bdev”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrvoid queue_limits_stack_bdev (struct queue_limits *t, struct block_device *bdev, sector_t offset, const char *pfx)”h]”j)�”}”(hŒqvoid queue_limits_stack_bdev(struct queue_limits *t, struct block_device *bdev, sector_t offset, const char *pfx)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjîäh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjêäh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýäh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêäh²hh³jüäh´M¨ubj{)�”}”(hŒqueue_limits_stack_bdev”h]”j�)�”}”(hŒqueue_limits_stack_bdev”h]”hŒqueue_limits_stack_bdev”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj åubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjêäh²hh³jüäh´M¨ubjœ)�”}”(hŒU(struct queue_limits *t, struct block_device *bdev, sector_t offset, const char *pfx)”h]”(j¢)�”}”(hŒstruct queue_limits *t”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj+åh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj'åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8åh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'åubh)�”}”(hhh]”j�)�”}”(hŒ queue_limits”h]”hŒ queue_limits”…”�”}”(hjIåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFåubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jKåŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jåsbŒc.queue_limits_stack_bdev”†”asbuh1hhj'åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'åubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjwåh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj'åubj�)�”}”(hjsh]”hŒt”…”�”}”(hj„åh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj#åubj¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjœåh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj˜åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©åh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˜åubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjºåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·åubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¼åŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jeåŒc.queue_limits_stack_bdev”†”asbuh1hhj˜åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˜åubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjæåh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj˜åubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjóåh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj#åubj¢)�”}”(hŒsector_t offset”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj æubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jæŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jeåŒc.queue_limits_stack_bdev”†”asbuh1hhjæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæubj�)�”}”(hŒoffset”h]”hŒoffset”…”�”}”(hj;æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj#åubj¢)�”}”(hŒconst char *pfx”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjTæh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjPæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaæh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPæubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjoæh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjPæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPæubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹æh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjPæubj�)�”}”(hŒpfx”h]”hŒpfx”…”�”}”(hj˜æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPæubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj#åubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjêäh²hh³jüäh´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjæäh²hh³jüäh´M¨ubah}”(h]”jáäah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jüäh´M¨hjãäh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'adjust queue_limits for stacked devices”h]”hŒ'adjust queue_limits for stacked devices”…”�”}”(hjÂæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M¨hj¿æh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjãäh²hh³jüäh´M¨ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÚæjæjÚæjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXµ**Parameters** ``struct queue_limits *t`` the stacking driver limits (top device) ``struct block_device *bdev`` the underlying block device (bottom) ``sector_t offset`` offset to beginning of data within component device ``const char *pfx`` prefix to use for warnings logged **Description** This function is used by stacking drivers like MD and DM to ensure that all component devices have compatible block sizes and alignments. The stacking driver must provide a queue_limits struct (top) and then iteratively call the stacking function for all component (bottom) devices. The stacking function will attempt to combine the values and ensure proper alignment.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjäæh]”hŒ Parameters”…”�”}”(hjææh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâæubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M¬hjÞæubj )�”}”(hhh]”(j)�”}”(hŒC``struct queue_limits *t`` the stacking driver limits (top device) ”h]”(j)�”}”(hŒ``struct queue_limits *t``”h]”j)�”}”(hjçh]”hŒstruct queue_limits *t”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M©hjýæubj2)�”}”(hhh]”hÝ)�”}”(hŒ'the stacking driver limits (top device)”h]”hŒ'the stacking driver limits (top device)”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jçh´M©hjçubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jçh´M©hjúæubj)�”}”(hŒC``struct block_device *bdev`` the underlying block device (bottom) ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hj<çh]”hŒstruct block_device *bdev”…”�”}”(hj>çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:çubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mªhj6çubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the underlying block device (bottom)”h]”hŒ$the underlying block device (bottom)”…”�”}”(hjUçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQçh´MªhjRçubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQçh´Mªhjúæubj)�”}”(hŒH``sector_t offset`` offset to beginning of data within component device ”h]”(j)�”}”(hŒ``sector_t offset``”h]”j)�”}”(hjuçh]”hŒsector_t offset”…”�”}”(hjwçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsçubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M«hjoçubj2)�”}”(hhh]”hÝ)�”}”(hŒ3offset to beginning of data within component device”h]”hŒ3offset to beginning of data within component device”…”�”}”(hjŽçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠçh´M«hj‹çubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjoçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠçh´M«hjúæubj)�”}”(hŒ6``const char *pfx`` prefix to use for warnings logged ”h]”(j)�”}”(hŒ``const char *pfx``”h]”j)�”}”(hj®çh]”hŒconst char *pfx”…”�”}”(hj°çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬çubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M¬hj¨çubj2)�”}”(hhh]”hÝ)�”}”(hŒ!prefix to use for warnings logged”h]”hŒ!prefix to use for warnings logged”…”�”}”(hjÇçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÃçh´M¬hjÄçubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¨çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÃçh´M¬hjúæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÞæubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjéçh]”hŒ Description”…”�”}”(hjëçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjççubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M®hjÞæubj•)�”}”(hXrThis function is used by stacking drivers like MD and DM to ensure that all component devices have compatible block sizes and alignments. The stacking driver must provide a queue_limits struct (top) and then iteratively call the stacking function for all component (bottom) devices. The stacking function will attempt to combine the values and ensure proper alignment.”h]”hÝ)�”}”(hXrThis function is used by stacking drivers like MD and DM to ensure that all component devices have compatible block sizes and alignments. The stacking driver must provide a queue_limits struct (top) and then iteratively call the stacking function for all component (bottom) devices. The stacking function will attempt to combine the values and ensure proper alignment.”h]”hXrThis function is used by stacking drivers like MD and DM to ensure that all component devices have compatible block sizes and alignments. The stacking driver must provide a queue_limits struct (top) and then iteratively call the stacking function for all component (bottom) devices. The stacking function will attempt to combine the values and ensure proper alignment.”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´M®hjÿçubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jèh´M®hjÞæubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)queue_limits_stack_integrity (C function)”Œc.queue_limits_stack_integrity”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRbool queue_limits_stack_integrity (struct queue_limits *t, struct queue_limits *b)”h]”j)�”}”(hŒQbool queue_limits_stack_integrity(struct queue_limits *t, struct queue_limits *b)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj8èh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj4èh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÁubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj4èh²hh³jEèh´MÁubj{)�”}”(hŒqueue_limits_stack_integrity”h]”j�)�”}”(hŒqueue_limits_stack_integrity”h]”hŒqueue_limits_stack_integrity”…”�”}”(hjXèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTèubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj4èh²hh³jEèh´MÁubjœ)�”}”(hŒ0(struct queue_limits *t, struct queue_limits *b)”h]”(j¢)�”}”(hŒstruct queue_limits *t”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjtèh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjpèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpèubh)�”}”(hhh]”j�)�”}”(hŒ queue_limits”h]”hŒ queue_limits”…”�”}”(hj’èh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�èubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j”èŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jZèsbŒc.queue_limits_stack_integrity”†”asbuh1hhjpèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpèubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÀèh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjpèubj�)�”}”(hjsh]”hŒt”…”�”}”(hjÍèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjpèubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlèubj¢)�”}”(hŒstruct queue_limits *b”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjåèh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjáèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòèh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáèubh)�”}”(hhh]”j�)�”}”(hŒ queue_limits”h]”hŒ queue_limits”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjéubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jéŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j®èŒc.queue_limits_stack_integrity”†”asbuh1hhjáèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáèubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj/éh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjáèubj�)�”}”(hj¦¢h]”hŒb”…”�”}”(hj<éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáèubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjlèubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj4èh²hh³jEèh´MÁubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj0èh²hh³jEèh´MÁubah}”(h]”j+èah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jEèh´MÁhj-èh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒstack integrity profile”h]”hŒstack integrity profile”…”�”}”(hjeéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÁhjbéh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj-èh²hh³jEèh´MÁubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj}éjæj}éjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX÷**Parameters** ``struct queue_limits *t`` target queue limits ``struct queue_limits *b`` base queue limits **Description** Check if the integrity profile in the **b** can be stacked into the target **t**. Stacking is possible if either: a) does not have any integrity information stacked into it yet b) the integrity profile in **b** is identical to the one in **t** If **b** can be stacked into **t**, return ``true``. Else return ``false`` and clear the integrity information in **t**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‡éh]”hŒ Parameters”…”�”}”(hj‰éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…éubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÅhj�éubj )�”}”(hhh]”(j)�”}”(hŒ/``struct queue_limits *t`` target queue limits ”h]”(j)�”}”(hŒ``struct queue_limits *t``”h]”j)�”}”(hj¦éh]”hŒstruct queue_limits *t”…”�”}”(hj¨éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤éubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÂhj éubj2)�”}”(hhh]”hÝ)�”}”(hŒtarget queue limits”h]”hŒtarget queue limits”…”�”}”(hj¿éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»éh´MÂhj¼éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»éh´MÂhj�éubj)�”}”(hŒ-``struct queue_limits *b`` base queue limits ”h]”(j)�”}”(hŒ``struct queue_limits *b``”h]”j)�”}”(hjßéh]”hŒstruct queue_limits *b”…”�”}”(hjáéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝéubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÃhjÙéubj2)�”}”(hhh]”hÝ)�”}”(hŒbase queue limits”h]”hŒbase queue limits”…”�”}”(hjøéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jôéh´MÃhjõéubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÙéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jôéh´MÃhj�éubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj�éubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjêh]”hŒ Description”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÅhj�éubhÝ)�”}”(hŒrCheck if the integrity profile in the **b** can be stacked into the target **t**. Stacking is possible if either:”h]”(hŒ&Check if the integrity profile in the ”…”�”}”(hj0êh²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hj8êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0êubhŒ can be stacked into the target ”…”�”}”(hj0êh²hh³Nh´Nubjõ)�”}”(hŒ**t**”h]”hŒt”…”�”}”(hjJêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0êubhŒ". Stacking is possible if either:”…”�”}”(hj0êh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÄhj�éubj•)�”}”(hŒ‚a) does not have any integrity information stacked into it yet b) the integrity profile in **b** is identical to the one in **t** ”h]”jM)�”}”(hhh]”(j )�”}”(hŒ;does not have any integrity information stacked into it yet”h]”hÝ)�”}”(hjlêh]”hŒ;does not have any integrity information stacked into it yet”…”�”}”(hjnêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÇhjjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjgêubj )�”}”(hŒ@the integrity profile in **b** is identical to the one in **t** ”h]”hÝ)�”}”(hŒ?the integrity profile in **b** is identical to the one in **t**”h]”(hŒthe integrity profile in ”…”�”}”(hj†êh²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjŽêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†êubhŒ is identical to the one in ”…”�”}”(hj†êh²hh³Nh´Nubjõ)�”}”(hŒ**t**”h]”hŒt”…”�”}”(hj êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†êubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÈhj‚êubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjgêubeh}”(h]”h ]”h"]”h$]”h&]”j×MjàjÙMhjÚMj“?uh1jMhjcêubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j{êh´MÇhj�éubhÝ)�”}”(hŒyIf **b** can be stacked into **t**, return ``true``. Else return ``false`` and clear the integrity information in **t**.”h]”(hŒIf ”…”�”}”(hjÇêh²hh³Nh´Nubjõ)�”}”(hŒ**b**”h]”hŒb”…”�”}”(hjÏêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÇêubhŒ can be stacked into ”…”�”}”(hjÇêh²hh³Nh´Nubjõ)�”}”(hŒ**t**”h]”hŒt”…”�”}”(hjáêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÇêubhŒ , return ”…”�”}”(hjÇêh²hh³Nh´Nubj)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjóêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇêubhŒ. Else return ”…”�”}”(hjÇêh²hh³Nh´Nubj)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇêubhŒ( and clear the integrity information in ”…”�”}”(hjÇêh²hh³Nh´Nubjõ)�”}”(hŒ**t**”h]”hŒt”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÇêubhŒ.”…”�”}”(hjÇêh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MÊhj�éube•h}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ blk_set_queue_depth (C function)”Œc.blk_set_queue_depth”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFvoid blk_set_queue_depth (struct request_queue *q, unsigned int depth)”h]”j)�”}”(hŒEvoid blk_set_queue_depth(struct request_queue *q, unsigned int depth)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjPëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjLëh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_ëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjLëh²hh³j^ëh´Mýubj{)�”}”(hŒblk_set_queue_depth”h]”j�)�”}”(hŒblk_set_queue_depth”h]”hŒblk_set_queue_depth”…”�”}”(hjqëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmëubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjLëh²hh³j^ëh´Mýubjœ)�”}”(hŒ-(struct request_queue *q, unsigned int depth)”h]”(j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�ëh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‰ëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰ëubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj«ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨ëubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j­ëŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jsësbŒc.blk_set_queue_depth”†”asbuh1hhj‰ëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰ëubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÙëh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‰ëubj�)�”}”(hj(lh]”hŒq”…”�”}”(hjæëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰ëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj…ëubj¢)�”}”(hŒunsigned int depth”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjþëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjúëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúëubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjúëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúëubj�)�”}”(hŒdepth”h]”hŒdepth”…”�”}”(hj6ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj…ëubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjLëh²hh³j^ëh´Mýubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjHëh²hh³j^ëh´Mýubah}”(h]”jCëah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j^ëh´MýhjEëh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1tell the block layer about the device queue depth”h]”hŒ1tell the block layer about the device queue depth”…”�”}”(hj`ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mýhj]ìh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjEëh²hh³j^ëh´Mýubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjxìjæjxìjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒt**Parameters** ``struct request_queue *q`` the request queue for the device ``unsigned int depth`` queue depth”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‚ìh]”hŒ Parameters”…”�”}”(hj„ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mhj|ìubj )�”}”(hhh]”(j)�”}”(hŒ=``struct request_queue *q`` the request queue for the device ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj¡ìh]”hŒstruct request_queue *q”…”�”}”(hj£ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mþhj›ìubj2)�”}”(hhh]”hÝ)�”}”(hŒ the request queue for the device”h]”hŒ the request queue for the device”…”�”}”(hjºìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶ìh´Mþhj·ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶ìh´Mþhj˜ìubj)�”}”(hŒ"``unsigned int depth`` queue depth”h]”(j)�”}”(hŒ``unsigned int depth``”h]”j)�”}”(hjÚìh]”hŒunsigned int depth”…”�”}”(hjÜìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´MhjÔìubj2)�”}”(hhh]”hÝ)�”}”(hŒ queue depth”h]”hŒ queue depth”…”�”}”(hjóìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:324: ./block/blk-settings.c”h´Mÿhjðìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïìh´Mhj˜ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj|ìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblkdev_issue_flush (C function)”Œc.blkdev_issue_flush”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2int blkdev_issue_flush (struct block_device *bdev)”h]”j)�”}”(hŒ1int blkdev_issue_flush(struct block_device *bdev)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj4íh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj0íh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:327: ./block/blk-flush.c”h´MÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCíh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0íh²hh³jBíh´MÐubj{)�”}”(hŒblkdev_issue_flush”h]”j�)�”}”(hŒblkdev_issue_flush”h]”hŒblkdev_issue_flush”…”�”}”(hjUíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQíubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj0íh²hh³jBíh´MÐubjœ)�”}”(hŒ(struct block_device *bdev)”h]”j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjqíh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjmíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmíubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj�íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒíubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‘íŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jWísbŒc.blkdev_issue_flush”†”asbuh1hhjmíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmíubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj½íh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjmíubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjÊíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjiíubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj0íh²hh³jBíh´MÐubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj,íh²hh³jBíh´MÐubah}”(h]”j'íah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jBíh´MÐhj)íh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ queue a flush”h]”hŒ queue a flush”…”�”}”(hjôíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:327: ./block/blk-flush.c”h´MÐhjñíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj)íh²hh³jBíh´MÐubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj îjæj îjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ�**Parameters** ``struct block_device *bdev`` blockdev to issue flush for **Description** Issue a flush for the block device in question.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjîh]”hŒ Parameters”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:327: ./block/blk-flush.c”h´MÔhjîubj )�”}”(hhh]”j)�”}”(hŒ:``struct block_device *bdev`` blockdev to issue flush for ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hj5îh]”hŒstruct block_device *bdev”…”�”}”(hj7îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3îubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:327: ./block/blk-flush.c”h´MÑhj/îubj2)�”}”(hhh]”hÝ)�”}”(hŒblockdev to issue flush for”h]”hŒblockdev to issue flush for”…”�”}”(hjNîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jJîh´MÑhjKîubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj/îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jJîh´MÑhj,îubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjîubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjpîh]”hŒ Description”…”�”}”(hjrîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnîubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:327: ./block/blk-flush.c”h´MÓhjîubj•)�”}”(hŒ/Issue a flush for the block device in question.”h]”hÝ)�”}”(hjˆîh]”hŒ/Issue a flush for the block device in question.”…”�”}”(hjŠîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:327: ./block/blk-flush.c”h´MÓhj†îubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j—îh´MÓhjîubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!blkdev_issue_discard (C function)”Œc.blkdev_issue_discard”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhint blkdev_issue_discard (struct block_device *bdev, sector_t sector, sector_t nr_sects, gfp_t gfp_mask)”h]”j)�”}”(hŒgint blkdev_issue_discard(struct block_device *bdev, sector_t sector, sector_t nr_sects, gfp_t gfp_mask)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¾îh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjºîh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍîh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºîh²hh³jÌîh´KKubj{)�”}”(hŒblkdev_issue_discard”h]”j�)�”}”(hŒblkdev_issue_discard”h]”hŒblkdev_issue_discard”…”�”}”(hjßîh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛîubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjºîh²hh³jÌîh´KKubjœ)�”}”(hŒO(struct block_device *bdev, sector_t sector, sector_t nr_sects, gfp_t gfp_mask)”h]”(j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjûîh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj÷îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷îubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jïŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jáîsbŒc.blkdev_issue_discard”†”asbuh1hhj÷îubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷îubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjGïh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷îubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjTïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷îubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóîubj¢)�”}”(hŒsector_t sector”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hjpïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jrïŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j5ïŒc.blkdev_issue_discard”†”asbuh1hhjiïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjiïubj�)�”}”(hŒsector”h]”hŒsector”…”�”}”(hjœïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóîubj¢)�”}”(hŒsector_t nr_sects”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hj¸ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jºïŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j5ïŒc.blkdev_issue_discard”†”asbuh1hhj±ïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±ïubj�)�”}”(hŒnr_sects”h]”hŒnr_sects”…”�”}”(hjäïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±ïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóîubj¢)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýïubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jðŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j5ïŒc.blkdev_issue_discard”†”asbuh1hhjùïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjùïubj�)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj,ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjùïubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóîubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjºîh²hh³jÌîh´KKubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¶îh²hh³jÌîh´KKubah}”(h]”j±îah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÌîh´KKhj³îh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒqueue a discard”h]”hŒqueue a discard”…”�”}”(hjVðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KKhjSðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj³îh²hh³jÌîh´KKubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjnðjæjnðjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX/**Parameters** ``struct block_device *bdev`` blockdev to issue discard for ``sector_t sector`` start sector ``sector_t nr_sects`` number of sectors to discard ``gfp_t gfp_mask`` memory allocation flags (for bio_alloc) **Description** Issue a discard request for the sectors in question.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjxðh]”hŒ Parameters”…”�”}”(hjzðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjvðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KOhjrðubj )�”}”(hhh]”(j)�”}”(hŒ<``struct block_device *bdev`` blockdev to issue discard for ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hj—ðh]”hŒstruct block_device *bdev”…”�”}”(hj™ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•ðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KLhj‘ðubj2)�”}”(hhh]”hÝ)�”}”(hŒblockdev to issue discard for”h]”hŒblockdev to issue discard for”…”�”}”(hj°ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¬ðh´KLhj­ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‘ðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬ðh´KLhjŽðubj)�”}”(hŒ!``sector_t sector`` start sector ”h]”(j)�”}”(hŒ``sector_t sector``”h]”j)�”}”(hjÐðh]”hŒsector_t sector”…”�”}”(hjÒðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KMhjÊðubj2)�”}”(hhh]”hÝ)�”}”(hŒ start sector”h]”hŒ start sector”…”�”}”(hjéðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jåðh´KMhjæðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÊðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jåðh´KMhjŽðubj)�”}”(hŒ3``sector_t nr_sects`` number of sectors to discard ”h]”(j)�”}”(hŒ``sector_t nr_sects``”h]”j)�”}”(hj ñh]”hŒsector_t nr_sects”…”�”}”(hj ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KNhjñubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of sectors to discard”h]”hŒnumber of sectors to discard”…”�”}”(hj"ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jñh´KNhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñh´KNhjŽðubj)�”}”(hŒ;``gfp_t gfp_mask`` memory allocation flags (for bio_alloc) ”h]”(j)�”}”(hŒ``gfp_t gfp_mask``”h]”j)�”}”(hjBñh]”hŒgfp_t gfp_mask”…”�”}”(hjDñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KOhj<ñubj2)�”}”(hhh]”hÝ)�”}”(hŒ'memory allocation flags (for bio_alloc)”h]”hŒ'memory allocation flags (for bio_alloc)”…”�”}”(hj[ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jWñh´KOhjXñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj<ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jWñh´KOhjŽðubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjrðubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj}ñh]”hŒ Description”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KQhjrðubj•)�”}”(hŒ4Issue a discard request for the sectors in question.”h]”hÝ)�”}”(hj•ñh]”hŒ4Issue a discard request for the sectors in question.”…”�”}”(hj—ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KQhj“ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¤ñh´KQhjrðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#__blkdev_issue_zeroout (C function)”Œc.__blkdev_issue_zeroout”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ�int __blkdev_issue_zeroout (struct block_device *bdev, sector_t sector, sector_t nr_sects, gfp_t gfp_mask, struct bio **biop, unsigned flags)”h]”j)�”}”(hŒŒint __blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, sector_t nr_sects, gfp_t gfp_mask, struct bio **biop, unsigned flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjËñh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÇñh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Kòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇñh²hh³jÙñh´Kòubj{)�”}”(hŒ__blkdev_issue_zeroout”h]”j�)�”}”(hŒ__blkdev_issue_zeroout”h]”hŒ__blkdev_issue_zeroout”…”�”}”(hjìñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèñubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÇñh²hh³jÙñh´Kòubjœ)�”}”(hŒr(struct block_device *bdev, sector_t sector, sector_t nr_sects, gfp_t gfp_mask, struct bio **biop, unsigned flags)”h]”(j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj&òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#òubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j(òŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jîñsbŒc.__blkdev_issue_zeroout”†”asbuh1hhjòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjTòh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjòubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjaòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjòubj¢)�”}”(hŒsector_t sector”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hj}òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjzòubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jòŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jBòŒc.__blkdev_issue_zeroout”†”asbuh1hhjvòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›òh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvòubj�)�”}”(hŒsector”h]”hŒsector”…”�”}”(hj©òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvòubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjòubj¢)�”}”(hŒsector_t nr_sects”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hjÅòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂòubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÇòŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jBòŒc.__blkdev_issue_zeroout”†”asbuh1hhj¾òubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾òubj�)�”}”(hŒnr_sects”h]”hŒnr_sects”…”�”}”(hjñòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾òubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjòubj¢)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj óubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jóŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jBòŒc.__blkdev_issue_zeroout”†”asbuh1hhjóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóubj�)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj9óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjòubj¢)�”}”(hŒstruct bio **biop”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjRóh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjNóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNóubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjpóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmóubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jróŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jBòŒc.__blkdev_issue_zeroout”†”asbuh1hhjNóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNóubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjœóh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjNóubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj©óh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjNóubj�)�”}”(hŒbiop”h]”hŒbiop”…”�”}”(hj¶óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjòubj¢)�”}”(hŒunsigned flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÏóh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjËóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÝóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjËóubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjëóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjòubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÇñh²hh³jÙñh´Kòubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÃñh²hh³jÙñh´Kòubah}”(h]”j¾ñah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÙñh´KòhjÀñh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(generate number of zero filed write bios”h]”hŒ(generate number of zero filed write bios”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Kòhjôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀñh²hh³jÙñh´Kòubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj-ôjæj-ôjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXÉ**Parameters** ``struct block_device *bdev`` blockdev to issue ``sector_t sector`` start sector ``sector_t nr_sects`` number of sectors to write ``gfp_t gfp_mask`` memory allocation flags (for bio_alloc) ``struct bio **biop`` pointer to anchor bio ``unsigned flags`` controls detailed behavior **Description** Zero-fill a block range, either using hardware offload or by explicitly writing zeroes to the device. If a device is using logical block provisioning, the underlying space will not be released if ``flags`` contains BLKDEV_ZERO_NOUNMAP. If ``flags`` contains BLKDEV_ZERO_NOFALLBACK, the function will return -EOPNOTSUPP if no explicit hardware offload for zeroing is provided.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj7ôh]”hŒ Parameters”…”�”}”(hj9ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Köhj1ôubj )�”}”(hhh]”(j)�”}”(hŒ0``struct block_device *bdev`` blockdev to issue ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hjVôh]”hŒstruct block_device *bdev”…”�”}”(hjXôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjTôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KóhjPôubj2)�”}”(hhh]”hÝ)�”}”(hŒblockdev to issue”h]”hŒblockdev to issue”…”�”}”(hjoôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jkôh´Kóhjlôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjPôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jkôh´KóhjMôubj)�”}”(hŒ!``sector_t sector`` start sector ”h]”(j)�”}”(hŒ``sector_t sector``”h]”j)�”}”(hj�ôh]”hŒsector_t sector”…”�”}”(hj‘ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Kôhj‰ôubj2)�”}”(hhh]”hÝ)�”}”(hŒ start sector”h]”hŒ start sector”…”�”}”(hj¨ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¤ôh´Kôhj¥ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰ôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¤ôh´KôhjMôubj)�”}”(hŒ1``sector_t nr_sects`` number of sectors to write ”h]”(j)�”}”(hŒ``sector_t nr_sects``”h]”j)�”}”(hjÈôh]”hŒsector_t nr_sects”…”�”}”(hjÊôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KõhjÂôubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of sectors to write”h]”hŒnumber of sectors to write”…”�”}”(hjáôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÝôh´KõhjÞôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÂôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÝôh´KõhjMôubj)�”}”(hŒ;``gfp_t gfp_mask`` memory allocation flags (for bio_alloc) ”h]”(j)�”}”(hŒ``gfp_t gfp_mask``”h]”j)�”}”(hjõh]”hŒgfp_t gfp_mask”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Köhjûôubj2)�”}”(hhh]”hÝ)�”}”(hŒ'memory allocation flags (for bio_alloc)”h]”hŒ'memory allocation flags (for bio_alloc)”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõh´Köhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõh´KöhjMôubj)�”}”(hŒ,``struct bio **biop`` pointer to anchor bio ”h]”(j)�”}”(hŒ``struct bio **biop``”h]”j)�”}”(hj:õh]”hŒstruct bio **biop”…”�”}”(hj<õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´K÷hj4õubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to anchor bio”h]”hŒpointer to anchor bio”…”�”}”(hjSõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jOõh´K÷hjPõubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4õubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jOõh´K÷hjMôubj)�”}”(hŒ.``unsigned flags`` controls detailed behavior ”h]”(j)�”}”(hŒ``unsigned flags``”h]”j)�”}”(hjsõh]”hŒunsigned flags”…”�”}”(hjuõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqõubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Køhjmõubj2)�”}”(hhh]”hÝ)�”}”(hŒcontrols detailed behavior”h]”hŒcontrols detailed behavior”…”�”}”(hjŒõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆõh´Køhj‰õubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjmõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆõh´KøhjMôubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj1ôubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj®õh]”hŒ Description”…”�”}”(hj°õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¬õubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Kúhj1ôubj•)�”}”(hXyZero-fill a block range, either using hardware offload or by explicitly writing zeroes to the device. If a device is using logical block provisioning, the underlying space will not be released if ``flags`` contains BLKDEV_ZERO_NOUNMAP. If ``flags`` contains BLKDEV_ZERO_NOFALLBACK, the function will return -EOPNOTSUPP if no explicit hardware offload for zeroing is provided.”h]”(hÝ)�”}”(hŒeZero-fill a block range, either using hardware offload or by explicitly writing zeroes to the device.”h]”hŒeZero-fill a block range, either using hardware offload or by explicitly writing zeroes to the device.”…”�”}”(hjÈõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KúhjÄõubhÝ)�”}”(hŒ…If a device is using logical block provisioning, the underlying space will not be released if ``flags`` contains BLKDEV_ZERO_NOUNMAP.”h]”(hŒ^If a device is using logical block provisioning, the underlying space will not be released if ”…”�”}”(hj×õh²hh³Nh´Nubj)�”}”(hŒ ``flags``”h]”hŒflags”…”�”}”(hjßõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×õubhŒ contains BLKDEV_ZERO_NOUNMAP.”…”�”}”(hj×õh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´KýhjÄõubhÝ)�”}”(hŒ‹If ``flags`` contains BLKDEV_ZERO_NOFALLBACK, the function will return -EOPNOTSUPP if no explicit hardware offload for zeroing is provided.”h]”(hŒIf ”…”�”}”(hjøõh²hh³Nh´Nubj)�”}”(hŒ ``flags``”h]”hŒflags”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøõubhŒ contains BLKDEV_ZERO_NOFALLBACK, the function will return -EOPNOTSUPP if no explicit hardware offload for zeroing is provided.”…”�”}”(hjøõh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´MhjÄõubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÖõh´Kúhj1ôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!blkdev_issue_zeroout (C function)”Œc.blkdev_issue_zeroout”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒxint blkdev_issue_zeroout (struct block_device *bdev, sector_t sector, sector_t nr_sects, gfp_t gfp_mask, unsigned flags)”h]”j)�”}”(hŒwint blkdev_issue_zeroout(struct block_device *bdev, sector_t sector, sector_t nr_sects, gfp_t gfp_mask, unsigned flags)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj?öh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj;öh²hh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNöh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;öh²hh³jMöh´Mubj{)�”}”(hŒblkdev_issue_zeroout”h]”j�)�”}”(hŒblkdev_issue_zeroout”h]”hŒblkdev_issue_zeroout”…”�”}”(hj`öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\öubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj;öh²hh³jMöh´Mubjœ)�”}”(hŒ_(struct block_device *bdev, sector_t sector, sector_t nr_sects, gfp_t gfp_mask, unsigned flags)”h]”(j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj|öh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjxöubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰öh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjxöubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjšöh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—öubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jœöŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jbösbŒc.blkdev_issue_zeroout”†”asbuh1hhjxöubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºöh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjxöubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÈöh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjxöubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjÕöh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjtöubj¢)�”}”(hŒsector_t sector”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hjñöh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîöubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jóöŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¶öŒc.blkdev_issue_zeroout”†”asbuh1hhjêöubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjêöubj�)�”}”(hŒsector”h]”hŒsector”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêöubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjtöubj¢)�”}”(hŒsector_t nr_sects”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hj9÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j;÷Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¶öŒc.blkdev_issue_zeroout”†”asbuh1hhj2÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2÷ubj�)�”}”(hŒnr_sects”h]”hŒnr_sects”…”�”}”(hje÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjtöubj¢)�”}”(hŒgfp_t gfp_mask”h]”(h)�”}”(hhh]”j�)�”}”(hŒgfp_t”h]”hŒgfp_t”…”�”}”(hj�÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jƒ÷Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¶öŒc.blkdev_issue_zeroout”†”asbuh1hhjz÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸ÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjz÷ubj�)�”}”(hŒgfp_mask”h]”hŒgfp_mask”…”�”}”(hj­÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjz÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjtöubj¢)�”}”(hŒunsigned flags”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÆ÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÂ÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂ÷ubj�)�”}”(hŒflags”h]”hŒflags”…”�”}”(hjâ÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂ÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjtöubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj;öh²hh³jMöh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj7öh²hh³jMöh´Mubah}”(h]”j2öah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jMöh´Mhj4öh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒzero-fill a block range”h]”hŒzero-fill a block range”…”�”}”(hj øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Mhj øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj4öh²hh³jMöh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj$øjæj$øjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXÅ**Parameters** ``struct block_device *bdev`` blockdev to write ``sector_t sector`` start sector ``sector_t nr_sects`` number of sectors to write ``gfp_t gfp_mask`` memory allocation flags (for bio_alloc) ``unsigned flags`` controls detailed behavior **Description** Zero-fill a block range, either using hardware offload or by explicitly writing zeroes to the device. See __blkdev_issue_zeroout() for the valid values for ``flags``.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj.øh]”hŒ Parameters”…”�”}”(hj0øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,øubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Mhj(øubj )�”}”(hhh]”(j)�”}”(hŒ0``struct block_device *bdev`` blockdev to write ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hjMøh]”hŒstruct block_device *bdev”…”�”}”(hjOøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKøubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´MhjGøubj2)�”}”(hhh]”hÝ)�”}”(hŒblockdev to write”h]”hŒblockdev to write”…”�”}”(hjføh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jbøh´Mhjcøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjGøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbøh´MhjDøubj)�”}”(hŒ!``sector_t sector`` start sector ”h]”(j)�”}”(hŒ``sector_t sector``”h]”j)�”}”(hj†øh]”hŒsector_t sector”…”�”}”(hjˆøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Mhj€øubj2)�”}”(hhh]”hÝ)�”}”(hŒ start sector”h]”hŒ start sector”…”�”}”(hjŸøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›øh´Mhjœøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›øh´MhjDøubj)�”}”(hŒ1``sector_t nr_sects`` number of sectors to write ”h]”(j)�”}”(hŒ``sector_t nr_sects``”h]”j)�”}”(hj¿øh]”hŒsector_t nr_sects”…”�”}”(hjÁøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Mhj¹øubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of sectors to write”h]”hŒnumber of sectors to write”…”�”}”(hjØøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔøh´MhjÕøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔøh´MhjDøubj)�”}”(hŒ;``gfp_t gfp_mask`` memory allocation flags (for bio_alloc) ”h]”(j)�”}”(hŒ``gfp_t gfp_mask``”h]”j)�”}”(hjøøh]”hŒgfp_t gfp_mask”…”�”}”(hjúøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjöøubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´Mhjòøubj2)�”}”(hhh]”hÝ)�”}”(hŒ'memory allocation flags (for bio_alloc)”h]”hŒ'memory allocation flags (for bio_alloc)”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ùh´Mhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjòøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ùh´MhjDøubj)�”}”(hŒ.``unsigned flags`` controls detailed behavior ”h]”(j)�”}”(hŒ``unsigned flags``”h]”j)�”}”(hj1ùh]”hŒunsigned flags”…”�”}”(hj3ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´M hj+ùubj2)�”}”(hhh]”hÝ)�”}”(hŒcontrols detailed behavior”h]”hŒcontrols detailed behavior”…”�”}”(hjJùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jFùh´M hjGùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj+ùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jFùh´M hjDøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj(øubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjlùh]”hŒ Description”…”�”}”(hjnùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjjùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´M"hj(øubj•)�”}”(hŒ§Zero-fill a block range, either using hardware offload or by explicitly writing zeroes to the device. See __blkdev_issue_zeroout() for the valid values for ``flags``.”h]”hÝ)�”}”(hŒ§Zero-fill a block range, either using hardware offload or by explicitly writing zeroes to the device. See __blkdev_issue_zeroout() for the valid values for ``flags``.”h]”(hŒ�Zero-fill a block range, either using hardware offload or by explicitly writing zeroes to the device. See __blkdev_issue_zeroout() for the valid values for ”…”�”}”(hj†ùh²hh³Nh´Nubj)�”}”(hŒ ``flags``”h]”hŒflags”…”�”}”(hjŽùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ùubhŒ.”…”�”}”(hj†ùh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒT/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:330: ./block/blk-lib.c”h´M"hj‚ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¦ùh´M"hj(øubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_trace_ioctl (C function)”Œc.blk_trace_ioctl”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOint blk_trace_ioctl (struct block_device *bdev, unsigned cmd, char __user *arg)”h]”j)�”}”(hŒNint blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÍùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÉùh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´M–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉùh²hh³jÛùh´M–ubj{)�”}”(hŒblk_trace_ioctl”h]”j�)�”}”(hŒblk_trace_ioctl”h]”hŒblk_trace_ioctl”…”�”}”(hjîùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêùubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÉùh²hh³jÛùh´M–ubjœ)�”}”(hŒ;(struct block_device *bdev, unsigned cmd, char __user *arg)”h]”(j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj úh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjúubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj(úh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%úubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j*úŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jðùsbŒc.blk_trace_ioctl”†”asbuh1hhjúubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjHúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjúubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjVúh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjúubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjcúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjúubj¢)�”}”(hŒ unsigned cmd”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj|úh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjxúubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjxúubj�)�”}”(hŒcmd”h]”hŒcmd”…”�”}”(hj˜úh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxúubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjúubj¢)�”}”(hŒchar __user *arg”h]”(j )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj±úh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­úubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿úh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­úubhŒ__user”…”�”}”(hj­úh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑúh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­úubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjßúh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj­úubj�)�”}”(hŒarg”h]”hŒarg”…”�”}”(hjìúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­úubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjúubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÉùh²hh³jÛùh´M–ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÅùh²hh³jÛùh´M–ubah}”(h]”jÀùah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÛùh´M–hjÂùh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)handle the ioctls associated with tracing”h]”hŒ)handle the ioctls associated with tracing”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´M–hjûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÂùh²hh³jÛùh´M–ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj.ûjæj.ûjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ”**Parameters** ``struct block_device *bdev`` the block device ``unsigned cmd`` the ioctl cmd ``char __user *arg`` the argument data, if any”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj8ûh]”hŒ Parameters”…”�”}”(hj:ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Mšhj2ûubj )�”}”(hhh]”(j)�”}”(hŒ/``struct block_device *bdev`` the block device ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hjWûh]”hŒstruct block_device *bdev”…”�”}”(hjYûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUûubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´M—hjQûubj2)�”}”(hhh]”hÝ)�”}”(hŒthe block device”h]”hŒthe block device”…”�”}”(hjpûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlûh´M—hjmûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlûh´M—hjNûubj)�”}”(hŒ``unsigned cmd`` the ioctl cmd ”h]”(j)�”}”(hŒ``unsigned cmd``”h]”j)�”}”(hj�ûh]”hŒ unsigned cmd”…”�”}”(hj’ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽûubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´M˜hjŠûubj2)�”}”(hhh]”hÝ)�”}”(hŒ the ioctl cmd”h]”hŒ the ioctl cmd”…”�”}”(hj©ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥ûh´M˜hj¦ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥ûh´M˜hjNûubj)�”}”(hŒ.``char __user *arg`` the argument data, if any”h]”(j)�”}”(hŒ``char __user *arg``”h]”j)�”}”(hjÉûh]”hŒchar __user *arg”…”�”}”(hjËûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇûubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MšhjÃûubj2)�”}”(hhh]”hÝ)�”}”(hŒthe argument data, if any”h]”hŒthe argument data, if any”…”�”}”(hjâûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´M™hjßûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÃûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞûh´MšhjNûubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj2ûubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_trace_shutdown (C function)”Œc.blk_trace_shutdown”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1void blk_trace_shutdown (struct request_queue *q)”h]”j)�”}”(hŒ0void blk_trace_shutdown(struct request_queue *q)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj#üh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjüh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÂubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2üh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjüh²hh³j1üh´MÂubj{)�”}”(hŒblk_trace_shutdown”h]”j�)�”}”(hŒblk_trace_shutdown”h]”hŒblk_trace_shutdown”…”�”}”(hjDüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@üubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjüh²hh³j1üh´MÂubjœ)�”}”(hŒ(struct request_queue *q)”h]”j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj`üh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj\üubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\üubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hj~üh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{üubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j€üŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jFüsbŒc.blk_trace_shutdown”†”asbuh1hhj\üubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\üubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¬üh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\üubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj¹üh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\üubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjXüubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjüh²hh³j1üh´MÂubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjüh²hh³j1üh´MÂubah}”(h]”jüah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j1üh´MÂhjüh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!stop and cleanup trace structures”h]”hŒ!stop and cleanup trace structures”…”�”}”(hjâüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÂhjßüh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjüh²hh³j1üh´MÂubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjúüjæjúüjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒZ**Parameters** ``struct request_queue *q`` the request queue associated with the device”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjýh]”hŒ Parameters”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÆhjþüubj )�”}”(hhh]”j)�”}”(hŒH``struct request_queue *q`` the request queue associated with the device”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hj#ýh]”hŒstruct request_queue *q”…”�”}”(hj%ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÈhjýubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the request queue associated with the device”h]”hŒ,the request queue associated with the device”…”�”}”(hj<ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÃhj9ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8ýh´MÈhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjþüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_add_trace_rq (C function)”Œc.blk_add_trace_rq”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒivoid blk_add_trace_rq (struct request *rq, blk_status_t error, unsigned int nr_bytes, u64 what, u64 cgid)”h]”j)�”}”(hŒhvoid blk_add_trace_rq(struct request *rq, blk_status_t error, unsigned int nr_bytes, u64 what, u64 cgid)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj}ýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjyýh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Mòubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyýh²hh³j‹ýh´Mòubj{)�”}”(hŒblk_add_trace_rq”h]”j�)�”}”(hŒblk_add_trace_rq”h]”hŒblk_add_trace_rq”…”�”}”(hjžýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšýubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjyýh²hh³j‹ýh´Mòubjœ)�”}”(hŒS(struct request *rq, blk_status_t error, unsigned int nr_bytes, u64 what, u64 cgid)”h]”(j¢)�”}”(hŒstruct request *rq”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjºýh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¶ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶ýubh)�”}”(hhh]”j�)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjØýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕýubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÚýŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j ýsbŒc.blk_add_trace_rq”†”asbuh1hhj¶ýubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøýh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶ýubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¶ýubj�)�”}”(hŒrq”h]”hŒrq”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶ýubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²ýubj¢)�”}”(hŒblk_status_t error”h]”(h)�”}”(hhh]”j�)�”}”(hŒ blk_status_t”h]”hŒ blk_status_t”…”�”}”(hj/þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j1þŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jôýŒc.blk_add_trace_rq”†”asbuh1hhj(þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(þubj�)�”}”(hŒerror”h]”hŒerror”…”�”}”(hj[þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²ýubj¢)�”}”(hŒunsigned int nr_bytes”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjtþh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjpþubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpþubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj�þh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjpþubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpþubj�)�”}”(hŒnr_bytes”h]”hŒnr_bytes”…”�”}”(hj¬þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjpþubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²ýubj¢)�”}”(hŒu64 what”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjÈþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅþubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÊþŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jôýŒc.blk_add_trace_rq”†”asbuh1hhjÁþubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁþubj�)�”}”(hŒwhat”h]”hŒwhat”…”�”}”(hjôþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁþubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²ýubj¢)�”}”(hŒu64 cgid”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ÿubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÿŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jôýŒc.blk_add_trace_rq”†”asbuh1hhj ÿubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj.ÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ÿubj�)�”}”(hŒcgid”h]”hŒcgid”…”�”}”(hj<ÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ÿubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²ýubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjyýh²hh³j‹ýh´Mòubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjuýh²hh³j‹ýh´Mòubah}”(h]”jpýah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‹ýh´Mòhjrýh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Add a trace for a request oriented action”h]”hŒ)Add a trace for a request oriented action”…”�”}”(hjfÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Mòhjcÿh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjrýh²hh³j‹ýh´Mòubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj~ÿjæj~ÿjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX7**Parameters** ``struct request *rq`` the source request ``blk_status_t error`` return status to log ``unsigned int nr_bytes`` number of completed bytes ``u64 what`` the action ``u64 cgid`` the cgroup info **Description** Records an action against a request. Will log the bio offset + size.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjˆÿh]”hŒ Parameters”…”�”}”(hjŠÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Möhj‚ÿubj )�”}”(hhh]”(j)�”}”(hŒ*``struct request *rq`` the source request ”h]”(j)�”}”(hŒ``struct request *rq``”h]”j)�”}”(hj§ÿh]”hŒstruct request *rq”…”�”}”(hj©ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Móhj¡ÿubj2)�”}”(hhh]”hÝ)�”}”(hŒthe source request”h]”hŒthe source request”…”�”}”(hjÀÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼ÿh´Móhj½ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼ÿh´Móhjžÿubj)�”}”(hŒ,``blk_status_t error`` return status to log ”h]”(j)�”}”(hŒ``blk_status_t error``”h]”j)�”}”(hjàÿh]”hŒblk_status_t error”…”�”}”(hjâÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MôhjÚÿubj2)�”}”(hhh]”hÝ)�”}”(hŒreturn status to log”h]”hŒreturn status to log”…”�”}”(hjùÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõÿh´Môhjöÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõÿh´Môhjžÿubj)�”}”(hŒ4``unsigned int nr_bytes`` number of completed bytes ”h]”(j)�”}”(hŒ``unsigned int nr_bytes``”h]”j)�”}”(hjh]”hŒunsigned int nr_bytes”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Mõhjubj2)�”}”(hhh]”hÝ)�”}”(hŒnumber of completed bytes”h]”hŒnumber of completed bytes”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.h´Mõhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.h´Mõhjžÿubj)�”}”(hŒ``u64 what`` the action ”h]”(j)�”}”(hŒ ``u64 what``”h]”j)�”}”(hjRh]”hŒu64 what”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MöhjLubj2)�”}”(hhh]”hÝ)�”}”(hŒ the action”h]”hŒ the action”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jgh´Möhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjLubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jgh´Möhjžÿubj)�”}”(hŒ``u64 cgid`` the cgroup info ”h]”(j)�”}”(hŒ ``u64 cgid``”h]”j)�”}”(hj‹h]”hŒu64 cgid”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´M÷hj…ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe cgroup info”h]”hŒthe cgroup info”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´M÷hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M÷hjžÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‚ÿubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÆh]”hŒ Description”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Mùhj‚ÿubj•)�”}”(hŒDRecords an action against a request. Will log the bio offset + size.”h]”hÝ)�”}”(hjÞh]”hŒDRecords an action against a request. Will log the bio offset + size.”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MùhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jíh´Mùhj‚ÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_add_trace_bio (C function)”Œc.blk_add_trace_bio”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒVvoid blk_add_trace_bio (struct request_queue *q, struct bio *bio, u64 what, int error)”h]”j)�”}”(hŒUvoid blk_add_trace_bio(struct request_queue *q, struct bio *bio, u64 what, int error)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MCubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³j"h´MCubj{)�”}”(hŒblk_add_trace_bio”h]”j�)�”}”(hŒblk_add_trace_bio”h]”hŒblk_add_trace_bio”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjh²hh³j"h´MCubjœ)�”}”(hŒ?(struct request_queue *q, struct bio *bio, u64 what, int error)”h]”(j¢)�”}”(hŒstruct request_queue *q”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjMubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjMubh)�”}”(hhh]”j�)�”}”(hŒ request_queue”h]”hŒ request_queue”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jqŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j7sbŒc.blk_add_trace_bio”†”asbuh1hhjMubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjMubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjMubj�)�”}”(hj(lh]”hŒq”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubj¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾ubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jâŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j‹Œc.blk_add_trace_bio”†”asbuh1hhj¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¾ubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubj¢)�”}”(hŒu64 what”h]”(h)�”}”(hhh]”j�)�”}”(hŒu64”h]”hŒu64”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j7Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j‹Œc.blk_add_trace_bio”†”asbuh1hhj.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.ubj�)�”}”(hŒwhat”h]”hŒwhat”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubj¢)�”}”(hŒ int error”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjvubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvubj�)�”}”(hŒerror”h]”hŒerror”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³j"h´MCubeh•}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj h²hh³j"h´MCubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j"h´MChj h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Add a trace for a bio oriented action”h]”hŒ%Add a trace for a bio oriented action”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MChj½h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj h²hh³j"h´MCubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjØjæjØjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒø**Parameters** ``struct request_queue *q`` queue the io is for ``struct bio *bio`` the source bio ``u64 what`` the action ``int error`` error, if any **Description** Records an action against a bio. Will log the bio offset + size.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjâh]”hŒ Parameters”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MGhjÜubj )�”}”(hhh]”(j)�”}”(hŒ0``struct request_queue *q`` queue the io is for ”h]”(j)�”}”(hŒ``struct request_queue *q``”h]”j)�”}”(hjh]”hŒstruct request_queue *q”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MDhjûubj2)�”}”(hhh]”hÝ)�”}”(hŒqueue the io is for”h]”hŒqueue the io is for”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´MDhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´MDhjøubj)�”}”(hŒ#``struct bio *bio`` the source bio ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hj:h]”hŒstruct bio *bio”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MEhj4ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe source bio”h]”hŒthe source bio”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jOh´MEhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jOh´MEhjøubj)�”}”(hŒ``u64 what`` the action ”h]”(j)�”}”(hŒ ``u64 what``”h]”j)�”}”(hjsh]”hŒu64 what”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MFhjmubj2)�”}”(hhh]”hÝ)�”}”(hŒ the action”h]”hŒ the action”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆh´MFhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆh´MFhjøubj)�”}”(hŒ``int error`` error, if any ”h]”(j)�”}”(hŒ ``int error``”h]”j)�”}”(hj¬h]”hŒ int error”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MGhj¦ubj2)�”}”(hhh]”hÝ)�”}”(hŒ error, if any”h]”hŒ error, if any”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁh´MGhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁh´MGhjøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjçh]”hŒ Description”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MIhjÜubj•)�”}”(hŒ@Records an action against a bio. Will log the bio offset + size.”h]”hÝ)�”}”(hjÿh]”hŒ@Records an action against a bio. Will log the bio offset + size.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MIhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jh´MIhjÜubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$blk_add_trace_bio_remap (C function)”Œc.blk_add_trace_bio_remap”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒVvoid blk_add_trace_bio_remap (void *ignore, struct bio *bio, dev_t dev, sector_t from)”h]”j)�”}”(hŒUvoid blk_add_trace_bio_remap(void *ignore, struct bio *bio, dev_t dev, sector_t from)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj1h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj1h²hh³jCh´MÏubj{)�”}”(hŒblk_add_trace_bio_remap”h]”j�)�”}”(hŒblk_add_trace_bio_remap”h]”hŒblk_add_trace_bio_remap”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj1h²hh³jCh´MÏubjœ)�”}”(hŒ9(void *ignore, struct bio *bio, dev_t dev, sector_t from)”h]”(j¢)�”}”(hŒ void *ignore”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjnubj�)�”}”(hŒignore”h]”hŒignore”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubj¢)�”}”(hŒstruct bio *bio”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°ubh)�”}”(hhh]”j�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÔŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jXsbŒc.blk_add_trace_bio_remap”†”asbuh1hhj°ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj°ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj°ubj�)�”}”(hŒbio”h]”hŒbio”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubj¢)�”}”(hŒ dev_t dev”h]”(h)�”}”(hhh]”j�)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j+Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jîŒc.blk_add_trace_bio_remap”†”asbuh1hhj"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj"ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubj¢)�”}”(hŒ sector_t from”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jsŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jîŒc.blk_add_trace_bio_remap”†”asbuh1hhjjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjubj�)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj1h²hh³jCh´MÏubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj-h²hh³jCh´MÏubah}”(h]”j(ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jCh´MÏhj*h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Add a trace for a bio-remap operation”h]”hŒ%Add a trace for a bio-remap operation”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÏhjÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj*h²hh³jCh´MÏubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjßjæjßjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX **Parameters** ``void *ignore`` trace callback data parameter (not used) ``struct bio *bio`` the source bio ``dev_t dev`` source device ``sector_t from`` source sector **Description** Called after a bio is remapped to a different device and/or sector.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjéh]”hŒ Parameters”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÓhjãubj )�”}”(hhh]”(j)�”}”(hŒ:``void *ignore`` trace callback data parameter (not used) ”h]”(j)�”}”(hŒ``void *ignore``”h]”j)�”}”(hjh]”hŒ void *ignore”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÐhjubj2)�”}”(hhh]”hÝ)�”}”(hŒ(trace callback data parameter (not used)”h]”hŒ(trace callback data parameter (not used)”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´MÐhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´MÐhjÿubj)�”}”(hŒ#``struct bio *bio`` the source bio ”h]”(j)�”}”(hŒ``struct bio *bio``”h]”j)�”}”(hjAh]”hŒstruct bio *bio”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÑhj;ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe source bio”h]”hŒthe source bio”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jVh´MÑhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jVh´MÑhjÿubj)�”}”(hŒ``dev_t dev`` source device ”h]”(j)�”}”(hŒ ``dev_t dev``”h]”j)�”}”(hjzh]”hŒ dev_t dev”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÒhjtubj2)�”}”(hhh]”hÝ)�”}”(hŒ source device”h]”hŒ source device”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�h´MÒhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´MÒhjÿubj)�”}”(hŒ ``sector_t from`` source sector ”h]”(j)�”}”(hŒ``sector_t from``”h]”j)�”}”(hj³h]”hŒ sector_t from”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÓhj­ubj2)�”}”(hhh]”hÝ)�”}”(hŒ source sector”h]”hŒ source sector”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÈh´MÓhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈh´MÓhjÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjãubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjîh]”hŒ Description”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÕhjãubhÝ)�”}”(hŒCCalled after a bio is remapped to a different device and/or sector.”h]”hŒCCalled after a bio is remapped to a different device and/or sector.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MÔhjãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#blk_add_trace_rq_remap (C function)”Œc.blk_add_trace_rq_remap”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒXvoid blk_add_trace_rq_remap (void *ignore, struct request *rq, dev_t dev, sector_t from)”h]”j)�”}”(hŒWvoid blk_add_trace_rq_remap(void *ignore, struct request *rq, dev_t dev, sector_t from)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj/h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Mñubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/h²hh³jAh´Mñubj{)�”}”(hŒblk_add_trace_rq_remap”h]”j�)�”}”(hŒblk_add_trace_rq_remap”h]”hŒblk_add_trace_rq_remap”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj/h²hh³jAh´Mñubjœ)�”}”(hŒ<(void *ignore, struct request *rq, dev_t dev, sector_t from)”h]”(j¢)�”}”(hŒ void *ignore”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjlubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjlubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjlubj�)�”}”(hŒignore”h]”hŒignore”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjhubj¢)�”}”(hŒstruct request *rq”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ubh)�”}”(hhh]”j�)�”}”(hŒrequest”h]”hŒrequest”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jVsbŒc.blk_add_trace_rq_remap”†”asbuh1hhj®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj®ubj�)�”}”(hŒrq”h]”hŒrq”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjhubj¢)�”}”(hŒ dev_t dev”h]”(h)�”}”(hhh]”j�)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j)Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jìŒc.blk_add_trace_rq_remap”†”asbuh1hhj ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjhubj¢)�”}”(hŒ sector_t from”h]”(h)�”}”(hhh]”j�)�”}”(hŒsector_t”h]”hŒsector_t”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jqŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jìŒc.blk_add_trace_rq_remap”†”asbuh1hhjhubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjhubj�)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjhubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj/h²hh³jAh´Mñubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj+h²hh³jAh´Mñubah}”(h]”j&ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jAh´Mñhj(h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Add a trace for a request-remap operation”h]”hŒ)Add a trace for a request-remap operation”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´MñhjÂh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj(h²hh³jAh´Mñubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÝjæjÝjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX **Parameters** ``void *ignore`` trace callback data parameter (not used) ``struct request *rq`` the source request ``dev_t dev`` target device ``sector_t from`` source sector **Description** Device mapper remaps request to other devices. Add a trace for that action.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjçh]”hŒ Parameters”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Mõhjáubj )�”}”(hhh]”(j)�”}”(hŒ:``void *ignore`` trace callback data parameter (not used) ”h]”(j)�”}”(hŒ``void *ignore``”h]”j)�”}”(hj h]”hŒ void *ignore”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Mòhj ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(trace callback data parameter (not used)”h]”hŒ(trace callback data parameter (not used)”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´Mòhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´Mòhjýubj)�”}”(hŒ*``struct request *rq`` the source request ”h]”(j)�”}”(hŒ``struct request *rq``”h]”j)�”}”(hj? h]”hŒstruct request *rq”…”�”}”(hjA h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj= ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Móhj9 ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe source request”h]”hŒthe source request”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jT h´MóhjU ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj9 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jT h´Móhjýubj)�”}”(hŒ``dev_t dev`` target device ”h]”(j)�”}”(hŒ ``dev_t dev``”h]”j)�”}”(hjx h]”hŒ dev_t dev”…”�”}”(hjz h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Môhjr ubj2)�”}”(hhh]”hÝ)�”}”(hŒ target device”h]”hŒ target device”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j� h´MôhjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjr ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j� h´Môhjýubj)�”}”(hŒ ``sector_t from`` source sector ”h]”(j)�”}”(hŒ``sector_t from``”h]”j)�”}”(hj± h]”hŒ sector_t from”…”�”}”(hj³ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´Mõhj« ubj2)�”}”(hhh]”hÝ)�”}”(hŒ source sector”h]”hŒ source sector”…”�”}”(hjÊ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÆ h´MõhjÇ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj« ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÆ h´Mõhjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjáubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjì h]”hŒ Description”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjê ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´M÷hjáubj•)�”}”(hŒKDevice mapper remaps request to other devices. Add a trace for that action.”h]”hÝ)�”}”(hŒKDevice mapper remaps request to other devices. Add a trace for that action.”h]”hŒKDevice mapper remaps request to other devices. Add a trace for that action.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:336: ./kernel/trace/blktrace.c”h´M÷hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j h´M÷hjáubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdisk_release (C function)”Œc.disk_release”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ&void disk_release (struct device *dev)”h]”j)�”}”(hŒ%void disk_release(struct device *dev)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj; h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj7 h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:339: ./block/genhd.c”h´Móubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7 h²hh³jI h´Móubj{)�”}”(hŒ disk_release”h]”j�)�”}”(hŒ disk_release”h]”hŒ disk_release”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjX ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj7 h²hh³jI h´Móubjœ)�”}”(hŒ(struct device *dev)”h]”j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjx h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjt ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj… h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjt ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j˜ Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j^ sbŒc.disk_release”†”asbuh1hhjt ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjt ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÄ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjt ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjt ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjp ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj7 h²hh³jI h´Móubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj3 h²hh³jI h´Móubah}”(h]”j. ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jI h´Móhj0 h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/releases all allocated resources of the gendisk”h]”hŒ/releases all allocated resources of the gendisk”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:339: ./block/genhd.c”h´Móhjø h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj0 h²hh³jI h´Móubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj jæj jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXõ**Parameters** ``struct device *dev`` the device representing this disk **Description** This function releases all allocated resources of the gendisk. Drivers which used device_add_disk() have a gendisk with a request_queue assigned. Since the request_queue sits on top of the gendisk for these drivers we also call blk_put_queue() for them, and we expect the request_queue refcount to reach 0 at this point, and so the request_queue will also be freed prior to the disk. **Context** can sleep”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:339: ./block/genhd.c”h´M÷hj ubj )�”}”(hhh]”j)�”}”(hŒ9``struct device *dev`` the device representing this disk ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj< h]”hŒstruct device *dev”…”�”}”(hj> h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj: ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:339: ./block/genhd.c”h´Môhj6 ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!the device representing this disk”h]”hŒ!the device representing this disk”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQ h´MôhjR ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQ h´Môhj3 ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjw h]”hŒ Description”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhju ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:339: ./block/genhd.c”h´Möhj ubhÝ)�”}”(hŒ>This function releases all allocated resources of the gendisk.”h]”hŒ>This function releases all allocated resources of the gendisk.”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:339: ./block/genhd.c”h´Mõhj ubhÝ)�”}”(hX@Drivers which used device_add_disk() have a gendisk with a request_queue assigned. Since the request_queue sits on top of the gendisk for these drivers we also call blk_put_queue() for them, and we expect the request_queue refcount to reach 0 at this point, and so the request_queue will also be freed prior to the disk.”h]”hX@Drivers which used device_add_disk() have a gendisk with a request_queue assigned. Since the request_queue sits on top of the gendisk for these drivers we also call blk_put_queue() for them, and we expect the request_queue refcount to reach 0 at this point, and so the request_queue will also be freed prior to the disk.”…”�”}”(hjœ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:339: ./block/genhd.c”h´M÷hj ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hj­ h]”hŒContext”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj« ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:339: ./block/genhd.c”h´Mýhj ubhÝ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:339: ./block/genhd.c”h´Mþhj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ bdev_count_inflight (C function)”Œc.bdev_count_inflight”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjî h²hh³j h´K›ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjî h²hh³j h´K›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjî h²hh³j h´K›ubj{)�”}”(hŒbdev_count_inflight”h]”j�)�”}”(hŒbdev_count_inflight”h]”hŒbdev_count_inflight”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+ ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjî h²hh³j h´K›ubjœ)�”}”(hŒ(struct block_device *part)”h]”j¢)�”}”(hŒstruct block_device *part”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjK h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjG ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjX h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjG ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hji h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjf ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jk Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j1 sbŒc.bdev_count_inflight”†”asbuh1hhjG ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjG ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj— h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjG ubj�)�”}”(hŒpart”h]”hŒpart”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjG ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjC ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjî h²hh³j h´K›ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjê h²hh³j h´K›ubah}”(h]”jå ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j h´K›hjç h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2get the number of inflight IOs for a block device.”h]”hŒ2get the number of inflight IOs for a block device.”…”�”}”(hjÎ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´K›hjË h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjç h²hh³j h´K›ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjæ jæjæ jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒï**Parameters** ``struct block_device *part`` the block device. **Description** Inflight here means started IO accounting, from bdev_start_io_acct() for bio-based block device, and from blk_account_io_start() for rq-based block device.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjð h]”hŒ Parameters”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjî ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´KŸhjê ubj )�”}”(hhh]”j)�”}”(hŒ0``struct block_device *part`` the block device. ”h]”(j)�”}”(hŒ``struct block_device *part``”h]”j)�”}”(hj h]”hŒstruct block_device *part”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´K�hj ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe block device.”h]”hŒthe block device.”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j$ h´K�hj% ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$ h´K�hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjê ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjJ h]”hŒ Description”…”�”}”(hjL h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjH ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´KŸhjê ubhÝ)�”}”(hŒ›Inflight here means started IO accounting, from bdev_start_io_acct() for bio-based block device, and from blk_account_io_start() for rq-based block device.”h]”hŒ›Inflight here means started IO accounting, from bdev_start_io_acct() for bio-based block device, and from blk_account_io_start() for rq-based block device.”…”�”}”(hj` h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Kžhjê ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__register_blkdev (C function)”Œc.__register_blkdev”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒWint __register_blkdev (unsigned int major, const char *name, void (*probe)(dev_t devt))”h]”j)�”}”(hŒVint __register_blkdev(unsigned int major, const char *name, void (*probe)(dev_t devt))”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‹ h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´KÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹ h²hh³j� h´KÑubj{)�”}”(hŒ__register_blkdev”h]”j�)�”}”(hŒ__register_blkdev”h]”hŒ__register_blkdev”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬ ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‹ h²hh³j� h´KÑubjœ)�”}”(hŒA(unsigned int major, const char *name, void (*probe)(dev_t devt))”h]”(j¢)�”}”(hŒunsigned int major”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÈ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈ ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjè h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÈ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈ ubj�)�”}”(hŒmajor”h]”hŒmajor”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÄ ubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÄ ubj¢)�”}”(hŒvoid (*probe)(dev_t devt)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjvubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjvubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjvubj�)�”}”(hŒprobe”h]”hŒprobe”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjvubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjvubh)�”}”(hhh]”j�)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÝŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j² sbŒc.__register_blkdev”†”asbuh1hhjvubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvubj�)�”}”(hŒdevt”h]”hŒdevt”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÄ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‹ h²hh³j� h´KÑubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‡ h²hh³j� h´KÑubah}”(h]”j‚ ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j� h´KÑhj„ h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒregister a new block device”h]”hŒregister a new block device”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´KÑhj=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj„ h²hh³j� h´KÑubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjXjæjXjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXR**Parameters** ``unsigned int major`` the requested major device number [1..BLKDEV_MAJOR_MAX-1]. If **major** = 0, try to allocate any unused major number. ``const char *name`` the name of the new block device as a zero terminated string ``void (*probe)(dev_t devt)`` pre-devtmpfs / pre-udev callback used to create disks when their pre-created device node is accessed. When a probe call uses add_disk() and it fails the driver must cleanup resources. This interface may soon be removed. **Description** The **name** must be unique within the system. The return value depends on the **major** input parameter: - if a major device number was requested in range [1..BLKDEV_MAJOR_MAX-1] then the function returns zero on success, or a negative error code - if any unused major number was requested with **major** = 0 parameter then the return value is the allocated major number in range [1..BLKDEV_MAJOR_MAX-1] or a negative error code otherwise See Documentation/admin-guide/devices.txt for the list of allocated major numbers. Use register_blkdev instead for any new code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjbh]”hŒ Parameters”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´KÕhj\ubj )�”}”(hhh]”(j)�”}”(hŒ�``unsigned int major`` the requested major device number [1..BLKDEV_MAJOR_MAX-1]. If **major** = 0, try to allocate any unused major number. ”h]”(j)�”}”(hŒ``unsigned int major``”h]”j)�”}”(hj�h]”hŒunsigned int major”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´KÔhj{ubj2)�”}”(hhh]”hÝ)�”}”(hŒuthe requested major device number [1..BLKDEV_MAJOR_MAX-1]. If **major** = 0, try to allocate any unused major number.”h]”(hŒ>the requested major device number [1..BLKDEV_MAJOR_MAX-1]. If ”…”�”}”(hjšh²hh³Nh´Nubjõ)�”}”(hŒ **major**”h]”hŒmajor”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjšubhŒ. = 0, try to allocate any unused major number.”…”�”}”(hjšh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´KÓhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–h´KÔhjxubj)�”}”(hŒR``const char *name`` the name of the new block device as a zero terminated string ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjÍh]”hŒconst char *name”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´KÕhjÇubj2)�”}”(hhh]”hÝ)�”}”(hŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+h²hh³j=h´MCubj{)�”}”(hŒadd_disk_fwnode”h]”j�)�”}”(hŒadd_disk_fwnode”h]”hŒadd_disk_fwnode”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj+h²hh³j=h´MCubjœ)�”}”(hŒr(struct device *parent, struct gendisk *disk, const struct attribute_group **groups, struct fwnode_handle *fwnode)”h]”(j¢)�”}”(hŒstruct device *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjhubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjhubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jRsbŒc.add_disk_fwnode”†”asbuh1hhjhubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjhubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjhubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjdubj¢)�”}”(hŒstruct gendisk *disk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÚubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚubh)�”}”(hhh]”j�)�”}”(hŒgendisk”h]”hŒgendisk”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjùubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jþŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¦Œc.add_disk_fwnode”†”asbuh1hhjÚubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÚubj�)�”}”(hŒdisk”h]”hŒdisk”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjdubj¢)�”}”(hŒ%const struct attribute_group **groups”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJubh)�”}”(hhh]”j�)�”}”(hŒattribute_group”h]”hŒattribute_group”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‰Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¦Œc.add_disk_fwnode”†”asbuh1hhjJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjJubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjJubj�)�”}”(hŒgroups”h]”hŒgroups”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjdubj¢)�”}”(hŒstruct fwnode_handle *fwnode”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâubh)�”}”(hhh]”j�)�”}”(hŒ fwnode_handle”h]”hŒ fwnode_handle”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¦Œc.add_disk_fwnode”†”asbuh1hhjâubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâubj�)�”}”(hŒfwnode”h]”hŒfwnode”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjdubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj+h²hh³j=h´MCubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj'h²hh³j=h´MCubah}”(h]”j"ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j=h´MChj$h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/add disk information to kernel list with fwnode”h]”hŒ/add disk information to kernel list with fwnode”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MChjdh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj$h²hh³j=h´MCubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXœ**Parameters** ``struct device *parent`` parent device for the disk ``struct gendisk *disk`` per-device partitioning information ``const struct attribute_group **groups`` Additional per-device sysfs groups ``struct fwnode_handle *fwnode`` attached disk fwnode **Description** This function registers the partitioning information in **disk** with the kernel. Also attach a fwnode to the disk device.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‰h]”hŒ Parameters”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MGhjƒubj )�”}”(hhh]”(j)�”}”(hŒ5``struct device *parent`` parent device for the disk ”h]”(j)�”}”(hŒ``struct device *parent``”h]”j)�”}”(hj¨h]”hŒstruct device *parent”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MDhj¢ubj2)�”}”(hhh]”hÝ)�”}”(hŒparent device for the disk”h]”hŒparent device for the disk”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j½h´MDhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½h´MDhjŸubj)�”}”(hŒ=``struct gendisk *disk`` per-device partitioning information ”h]”(j)�”}”(hŒ``struct gendisk *disk``”h]”j)�”}”(hjáh]”hŒstruct gendisk *disk”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MEhjÛubj2)�”}”(hhh]”hÝ)�”}”(hŒ#per-device partitioning information”h]”hŒ#per-device partitioning information”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jöh´MEhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jöh´MEhjŸubj)�”}”(hŒM``const struct attribute_group **groups`` Additional per-device sysfs groups ”h]”(j)�”}”(hŒ)``const struct attribute_group **groups``”h]”j)�”}”(hjh]”hŒ%const struct attribute_group **groups”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MFhjubj2)�”}”(hhh]”hÝ)�”}”(hŒ"Additional per-device sysfs groups”h]”hŒ"Additional per-device sysfs groups”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j/h´MFhj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j/h´MFhjŸubj)�”}”(hŒ6``struct fwnode_handle *fwnode`` attached disk fwnode ”h]”(j)�”}”(hŒ ``struct fwnode_handle *fwnode``”h]”j)�”}”(hjSh]”hŒstruct fwnode_handle *fwnode”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MGhjMubj2)�”}”(hhh]”hÝ)�”}”(hŒattached disk fwnode”h]”hŒattached disk fwnode”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jhh´MGhjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jhh´MGhjŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjƒubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŽh]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MIhjƒubhÝ)�”}”(hŒzThis function registers the partitioning information in **disk** with the kernel. Also attach a fwnode to the disk device.”h]”(hŒ8This function registers the partitioning information in ”…”�”}”(hj¤h²hh³Nh´Nubjõ)�”}”(hŒ**disk**”h]”hŒdisk”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤ubhŒ: with the kernel. Also attach a fwnode to the disk device.”…”�”}”(hj¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MHhjƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdevice_add_disk (C function)”Œc.device_add_disk”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhint device_add_disk (struct device *parent, struct gendisk *disk, const struct attribute_group **groups)”h]”j)�”}”(hŒgint device_add_disk(struct device *parent, struct gendisk *disk, const struct attribute_group **groups)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjáh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mkubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáh²hh³jóh´Mkubj{)�”}”(hŒdevice_add_disk”h]”j�)�”}”(hŒdevice_add_disk”h]”hŒdevice_add_disk”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjáh²hh³jóh´Mkubjœ)�”}”(hŒT(struct device *parent, struct gendisk *disk, const struct attribute_group **groups)”h]”(j¢)�”}”(hŒstruct device *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jBŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jsbŒc.device_add_disk”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒstruct gendisk *disk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubh)�”}”(hhh]”j�)�”}”(hŒgendisk”h]”hŒgendisk”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j´Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j\Œc.device_add_disk”†”asbuh1hhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ubj�)�”}”(hŒdisk”h]”hŒdisk”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubj¢)�”}”(hŒ%const struct attribute_group **groups”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒattribute_group”h]”hŒattribute_group”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j?Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j\Œc.device_add_disk”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒgroups”h]”hŒgroups”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjáh²hh³jóh´Mkubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÝh²hh³jóh´Mkubah}”(h]”jØah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jóh´MkhjÚh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#add disk information to kernel list”h]”hŒ#add disk information to kernel list”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mkhjªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÚh²hh³jóh´Mkubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÅjæjÅjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX:**Parameters** ``struct device *parent`` parent device for the disk ``struct gendisk *disk`` per-device partitioning information ``const struct attribute_group **groups`` Additional per-device sysfs groups **Description** This function registers the partitioning information in **disk** with the kernel.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÏh]”hŒ Parameters”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MohjÉubj )�”}”(hhh]”(j)�”}”(hŒ5``struct device *parent`` parent device for the disk ”h]”(j)�”}”(hŒ``struct device *parent``”h]”j)�”}”(hjîh]”hŒstruct device *parent”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mlhjèubj2)�”}”(hhh]”hÝ)�”}”(hŒparent device for the disk”h]”hŒparent device for the disk”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Mlhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mlhjåubj)�”}”(hŒ=``struct gendisk *disk`` per-device partitioning information ”h]”(j)�”}”(hŒ``struct gendisk *disk``”h]”j)�”}”(hj'h]”hŒstruct gendisk *disk”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mmhj!ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#per-device partitioning information”h]”hŒ#per-device partitioning information”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j<h´Mmhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j<h´Mmhjåubj)�”}”(hŒM``const struct attribute_group **groups`` Additional per-device sysfs groups ”h]”(j)�”}”(hŒ)``const struct attribute_group **groups``”h]”j)�”}”(hj`h]”hŒ%const struct attribute_group **groups”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MnhjZubj2)�”}”(hhh]”hÝ)�”}”(hŒ"Additional per-device sysfs groups”h]”hŒ"Additional per-device sysfs groups”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³juh´Mnhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³juh´Mnhjåubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÉubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj›h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MphjÉubhÝ)�”}”(hŒQThis function registers the partitioning information in **disk** with the kernel.”h]”(hŒ8This function registers the partitioning information in ”…”�”}”(hj±h²hh³Nh´Nubjõ)�”}”(hŒ**disk**”h]”hŒdisk”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±ubhŒ with the kernel.”…”�”}”(hj±h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MohjÉubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œblk_mark_disk_dead (C function)”Œc.blk_mark_disk_dead”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void blk_mark_disk_dead (struct gendisk *disk)”h]”j)�”}”(hŒ-void blk_mark_disk_dead(struct gendisk *disk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M«ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîh²hh³jh´M«ubj{)�”}”(hŒblk_mark_disk_dead”h]”j�)�”}”(hŒblk_mark_disk_dead”h]”hŒblk_mark_disk_dead”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjîh²hh³jh´M«ubjœ)�”}”(hŒ(struct gendisk *disk)”h]”j¢)�”}”(hŒstruct gendisk *disk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj/h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+ubh)�”}”(hhh]”j�)�”}”(hŒgendisk”h]”hŒgendisk”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jOŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jsbŒc.blk_mark_disk_dead”†”asbuh1hhj+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj+ubj�)�”}”(hŒdisk”h]”hŒdisk”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj'ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjîh²hh³jh´M«ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´•ˆuh1jjµj¶hjêh²hh³jh´M«ubah}”(h]”jåah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´M«hjçh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒmark a disk as dead”h]”hŒmark a disk as dead”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M«hj¯h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjçh²hh³jh´M«ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÊjæjÊjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒ©**Parameters** ``struct gendisk *disk`` disk to mark as dead **Description** Mark as disk as dead (e.g. surprise removed) and don't accept any new I/O to this disk.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÔh]”hŒ Parameters”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M¯hjÎubj )�”}”(hhh]”j)�”}”(hŒ.``struct gendisk *disk`` disk to mark as dead ”h]”(j)�”}”(hŒ``struct gendisk *disk``”h]”j)�”}”(hjóh]”hŒstruct gendisk *disk”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M¬hjíubj2)�”}”(hhh]”hÝ)�”}”(hŒdisk to mark as dead”h]”hŒdisk to mark as dead”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´M¬hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´M¬hjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÎubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj.h]”hŒ Description”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M®hjÎubhÝ)�”}”(hŒWMark as disk as dead (e.g. surprise removed) and don't accept any new I/O to this disk.”h]”hŒYMark as disk as dead (e.g. surprise removed) and don’t accept any new I/O to this disk.”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M­hjÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdel_gendisk (C function)”Œ c.del_gendisk”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'void del_gendisk (struct gendisk *disk)”h]”j)�”}”(hŒ&void del_gendisk(struct gendisk *disk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjoh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoh²hh³j�h´Mubj{)�”}”(hŒ del_gendisk”h]”j�)�”}”(hŒ del_gendisk”h]”hŒ del_gendisk”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjoh²hh³j�h´Mubjœ)�”}”(hŒ(struct gendisk *disk)”h]”j¢)�”}”(hŒstruct gendisk *disk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¬ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬ubh)�”}”(hhh]”j�)�”}”(hŒgendisk”h]”hŒgendisk”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÐŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j–sbŒ c.del_gendisk”†”asbuh1hhj¬ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¬ubj�)�”}”(hŒdisk”h]”hŒdisk”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjoh²hh³j�h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjkh²hh³j�h´Mubah}”(h]”jfah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�h´Mhjhh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒremove the gendisk”h]”hŒremove the gendisk”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mhj0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjhh²hh³j�h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjKjæjKjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX^**Parameters** ``struct gendisk *disk`` the struct gendisk to remove **Description** Removes the gendisk and all its associated resources. This deletes the partitions associated with the gendisk, and unregisters the associated request_queue. This is the counter to the respective device_add_disk() call. The final removal of the struct gendisk happens when its refcount reaches 0 with put_disk(), which should be called after del_gendisk(), if device_add_disk() was used. Drivers exist which depend on the release of the gendisk to be synchronous, it should not be deferred. **Context** can sleep”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjUh]”hŒ Parameters”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjSubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MhjOubj )�”}”(hhh]”j)�”}”(hŒ6``struct gendisk *disk`` the struct gendisk to remove ”h]”(j)�”}”(hŒ``struct gendisk *disk``”h]”j)�”}”(hjth]”hŒstruct gendisk *disk”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mhjnubj2)�”}”(hhh]”hÝ)�”}”(hŒthe struct gendisk to remove”h]”hŒthe struct gendisk to remove”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰h´MhjŠubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjnubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰h´Mhjkubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjOubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¯h]”hŒ Description”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MhjOubhÝ)�”}”(hŒœRemoves the gendisk and all its associated resources. This deletes the partitions associated with the gendisk, and unregisters the associated request_queue.”h]”hŒœRemoves the gendisk and all its associated resources. This deletes the partitions associated with the gendisk, and unregisters the associated request_queue.”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MhjOubhÝ)�”}”(hŒ=This is the counter to the respective device_add_disk() call.”h]”hŒ=This is the counter to the respective device_add_disk() call.”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M!hjOubhÝ)�”}”(hŒ§The final removal of the struct gendisk happens when its refcount reaches 0 with put_disk(), which should be called after del_gendisk(), if device_add_disk() was used.”h]”hŒ§The final removal of the struct gendisk happens when its refcount reaches 0 with put_disk(), which should be called after del_gendisk(), if device_add_disk() was used.”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M#hjOubhÝ)�”}”(hŒfDrivers exist which depend on the release of the gendisk to be synchronous, it should not be deferred.”h]”hŒfDrivers exist which depend on the release of the gendisk to be synchronous, it should not be deferred.”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M'hjOubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hjh]”hŒContext”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M*hjOubhÝ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M+hjOubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œinvalidate_disk (C function)”Œc.invalidate_disk”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+void invalidate_disk (struct gendisk *disk)”h]”j)�”}”(hŒ*void invalidate_disk(struct gendisk *disk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjDh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MCubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjDh²hh³jVh´MCubj{)�”}”(hŒinvalidate_disk”h]”j�)�”}”(hŒinvalidate_disk”h]”hŒinvalidate_disk”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjDh²hh³jVh´MCubjœ)�”}”(hŒ(struct gendisk *disk)”h]”j¢)�”}”(hŒstruct gendisk *disk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubh)�”}”(hhh]”j�)�”}”(hŒgendisk”h]”hŒgendisk”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¥Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jksbŒc.invalidate_disk”†”asbuh1hhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ubj�)�”}”(hŒdisk”h]”hŒdisk”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj}ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjDh²hh³jVh´MCubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj@h²hh³jVh´MCubah}”(h]”j;ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jVh´MChj=h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒinvalidate the disk”h]”hŒinvalidate the disk”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MChjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj=h²hh³jVh´MCubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj jæj jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX**Parameters** ``struct gendisk *disk`` the struct gendisk to invalidate **Description** A helper to invalidates the disk. It will clean the disk's associated buffer/page caches and reset its internal states so that the disk can be reused by the drivers. **Context** can sleep”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj*h]”hŒ Parameters”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MGhj$ubj )�”}”(hhh]”j)�”}”(hŒ:``struct gendisk *disk`` the struct gendisk to invalidate ”h]”(j)�”}”(hŒ``struct gendisk *disk``”h]”j)�”}”(hjIh]”hŒstruct gendisk *disk”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjGubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MDhjCubj2)�”}”(hhh]”hÝ)�”}”(hŒ the struct gendisk to invalidate”h]”hŒ the struct gendisk to invalidate”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j^h´MDhj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j^h´MDhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj$ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj„h]”hŒ Description”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MFhj$ubhÝ)�”}”(hŒ¥A helper to invalidates the disk. It will clean the disk's associated buffer/page caches and reset its internal states so that the disk can be reused by the drivers.”h]”hŒ§A helper to invalidates the disk. It will clean the disk’s associated buffer/page caches and reset its internal states so that the disk can be reused by the drivers.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MEhj$ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hj«h]”hŒContext”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MIhj$ubhÝ)�”}”(hŒ can sleep”h]”hŒ can sleep”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MJhj$ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œput_disk (C function)”Œ c.put_disk”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ$void put_disk (struct gendisk *disk)”h]”j)�”}”(hŒ#void put_disk(struct gendisk *disk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjìh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìh²hh³jþh´Mubj{)�”}”(hŒput_disk”h]”j�)�”}”(hŒput_disk”h]”hŒput_disk”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjìh²hh³jþh´Mubjœ)�”}”(hŒ(struct gendisk *disk)”h]”j¢)�”}”(hŒstruct gendisk *disk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)ubh)�”}”(hhh]”j�)�”}”(hŒgendisk”h]”hŒgendisk”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jMŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jsbŒ c.put_disk”†”asbuh1hhj)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj)ubj�)�”}”(hŒdisk”h]”hŒdisk”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjìh²hh³jþh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjèh²hh³jþh´Mubah}”(h]”jãah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jþh´Mhjåh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒdecrements the gendisk refcount”h]”hŒdecrements the gendisk refcount”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mhj­h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjåh²hh³jþh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÈjæjÈjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXÃ**Parameters** ``struct gendisk *disk`` the struct gendisk to decrement the refcount for **Description** This decrements the refcount for the struct gendisk. When this reaches 0 we'll have disk_release() called. **Note** for blk-mq disk put_disk must be called before freeing the tag_set when handling probe errors (that is before add_disk() is called). **Context** Any context, but the last reference must not be dropped from atomic context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÒh]”hŒ Parameters”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M hjÌubj )�”}”(hhh]”j)�”}”(hŒJ``struct gendisk *disk`` the struct gendisk to decrement the refcount for ”h]”(j)�”}”(hŒ``struct gendisk *disk``”h]”j)�”}”(hjñh]”hŒstruct gendisk *disk”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´Mhjëubj2)�”}”(hhh]”hÝ)�”}”(hŒ0the struct gendisk to decrement the refcount for”h]”hŒ0the struct gendisk to decrement the refcount for”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mhjèubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÌubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj,h]”hŒ Description”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M hjÌubhÝ)�”}”(hŒjThis decrements the refcount for the struct gendisk. When this reaches 0 we'll have disk_release() called.”h]”hŒlThis decrements the refcount for the struct gendisk. When this reaches 0 we’ll have disk_release() called.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MhjÌubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjSh]”hŒNote”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M hjÌubhÝ)�”}”(hŒ„for blk-mq disk put_disk must be called before freeing the tag_set when handling probe errors (that is before add_disk() is called).”h]”hŒ„for blk-mq disk put_disk must be called before freeing the tag_set when handling probe errors (that is before add_disk() is called).”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M hjÌubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hjzh]”hŒContext”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MhjÌubhÝ)�”}”(hŒLAny context, but the last reference must not be dropped from atomic context.”h]”hŒLAny context, but the last reference must not be dropped from atomic context.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´MhjÌubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œset_disk_ro (C function)”Œ c.set_disk_ro”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void set_disk_ro (struct gendisk *disk, bool read_only)”h]”j)�”}”(hŒ6void set_disk_ro(struct gendisk *disk, bool read_only)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj»h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»h²hh³jÍh´M$ubj{)�”}”(hŒ set_disk_ro”h]”j�)�”}”(hŒ set_disk_ro”h]”hŒ set_disk_ro”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj»h²hh³jÍh´M$ubjœ)�”}”(hŒ&(struct gendisk *disk, bool read_only)”h]”(j¢)�”}”(hŒstruct gendisk *disk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøubh)�”}”(hhh]”j�)�”}”(hŒgendisk”h]”hŒgendisk”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jâsbŒ c.set_disk_ro”†”asbuh1hhjøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjøubj�)�”}”(hŒdisk”h]”hŒdisk”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjôubj¢)�”}”(hŒbool read_only”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjubj�)�”}”(hŒ read_only”h]”hŒ read_only”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjôubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj»h²hh³jÍh´M$ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj·h²hh³jÍh´M$ubah}”(h]”j²ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÍh´M$hj´h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒset a gendisk read-only”h]”hŒset a gendisk read-only”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M$hj°h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj´h²hh³jÍh´M$ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjËjæjËjç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX‰**Parameters** ``struct gendisk *disk`` gendisk to operate on ``bool read_only`` ``true`` to set the disk read-only, ``false`` set the disk read/write **Description** This function is used to indicate whether a given disk device should have its read-only flag set. set_disk_ro() is typically used by device drivers to indicate whether the underlying physical device is write-protected.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÕh]”hŒ Parameters”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M(hjÏubj )�”}”(hhh]”(j)�”}”(hŒ/``struct gendisk *disk`` gendisk to operate on ”h]”(j)�”}”(hŒ``struct gendisk *disk``”h]”j)�”}”(hjôh]”hŒstruct gendisk *disk”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M%hjîubj2)�”}”(hhh]”hÝ)�”}”(hŒgendisk to operate on”h]”hŒgendisk to operate on”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´M%hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjîubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M%hjëubj)�”}”(hŒY``bool read_only`` ``true`` to set the disk read-only, ``false`` set the disk read/write ”h]”(j)�”}”(hŒ``bool read_only``”h]”j)�”}”(hj- h]”hŒbool read_only”…”�”}”(hj/ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M&hj' ubj2)�”}”(hhh]”hÝ)�”}”(hŒE``true`` to set the disk read-only, ``false`` set the disk read/write”h]”(j)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjF ubhŒ to set the disk read-only, ”…”�”}”(hjF h²hh³Nh´Nubj)�”}”(hŒ ``false``”h]”hŒfalse”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjF ubhŒ set the disk read/write”…”�”}”(hjF h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jB h´M&hjC ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj' ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jB h´M&hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÏubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjˆ h]”hŒ Description”…”�”}”(hjŠ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj† ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M(hjÏubhÝ)�”}”(hŒÚThis function is used to indicate whether a given disk device should have its read-only flag set. set_disk_ro() is typically used by device drivers to indicate whether the underlying physical device is write-protected.”h]”hŒÚThis function is used to indicate whether a given disk device should have its read-only flag set. set_disk_ro() is typically used by device drivers to indicate whether the underlying physical device is write-protected.”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:342: ./block/genhd.c”h´M'hjÏubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$bdev_validate_blocksize (C function)”Œc.bdev_validate_blocksize”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGint bdev_validate_blocksize (struct block_device *bdev, int block_size)”h]”j)�”}”(hŒFint bdev_validate_blocksize(struct block_device *bdev, int block_size)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÉ h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´K›ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉ h²hh³jÛ h´K›ubj{)�”}”(hŒbdev_validate_blocksize”h]”j�)�”}”(hŒbdev_validate_blocksize”h]”hŒbdev_validate_blocksize”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjê ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÉ h²hh³jÛ h´K›ubjœ)�”}”(hŒ+(struct block_device *bdev, int block_size)”h]”(j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj !h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj(!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%!ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j*!Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jð sbŒc.bdev_validate_blocksize”†”asbuh1hhj!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjV!h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!ubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjc!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!ubj¢)�”}”(hŒint block_size”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj|!h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjx!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjx!ubj�)�”}”(hŒ block_size”h]”hŒ block_size”…”�”}”(hj˜!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjx!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÉ h²hh³jÛ h´K›ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÅ h²hh³jÛ h´K›ubah}”(h]”jÀ ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÛ h´K›hj h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(check that this block size is acceptable”h]”hŒ(check that this block size is acceptable”…”�”}”(hjÂ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´K›hj¿!h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj h²hh³jÛ h´K›ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÚ!jæjÚ!jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXZ**Parameters** ``struct block_device *bdev`` blockdevice to check ``int block_size`` block size to check **Description** For block device users that do not use buffer heads or the block device page cache, make sure that this block size can be used with the device. **Return** On success zero is returned, negative error code on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjä!h]”hŒ Parameters”…”�”}”(hjæ!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâ!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´KŸhjÞ!ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct block_device *bdev`` blockdevice to check ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hj"h]”hŒstruct block_device *bdev”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Kœhjý!ubj2)�”}”(hhh]”hÝ)�”}”(hŒblockdevice to check”h]”hŒblockdevice to check”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j"h´Kœhj"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjý!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"h´Kœhjú!ubj)�”}”(hŒ'``int block_size`` block size to check ”h]”(j)�”}”(hŒ``int block_size``”h]”j)�”}”(hj<"h]”hŒint block_size”…”�”}”(hj>"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´K�hj6"ubj2)�”}”(hhh]”hÝ)�”}”(hŒblock size to check”h]”hŒblock size to check”…”�”}”(hjU"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQ"h´K�hjR"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQ"h´K�hjú!ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÞ!ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjw"h]”hŒ Description”…”�”}”(hjy"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhju"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´KŸhjÞ!ubhÝ)�”}”(hŒ�For block device users that do not use buffer heads or the block device page cache, make sure that this block size can be used with the device.”h]”hŒ�For block device users that do not use buffer heads or the block device page cache, make sure that this block size can be used with the device.”…”�”}”(hj�"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´KžhjÞ!ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjž"h]”hŒReturn”…”�”}”(hj "h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœ"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´K¡hjÞ!ubhÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjß"h²hh³jñ"h´Mubj{)�”}”(hŒ bdev_freeze”h]”j�)�”}”(hŒ bdev_freeze”h]”hŒ bdev_freeze”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjß"h²hh³jñ"h´Mubjœ)�”}”(hŒ(struct block_device *bdev)”h]”j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj #h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj>#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j@#Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j#sbŒ c.bdev_freeze”†”asbuh1hhj#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjl#h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj#ubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjy#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj#ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjß"h²hh³jñ"h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÛ"h²hh³jñ"h´Mubah}”(h]”jÖ"ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jñ"h´MhjØ"h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6lock a filesystem and force it into a consistent state”h]”hŒ6lock a filesystem and force it into a consistent state”…”�”}”(hj£#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mhj #h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjØ"h²hh³jñ"h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj»#jæj»#jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX]**Parameters** ``struct block_device *bdev`` blockdevice to lock **Description** If a superblock is found on this device, we take the s_umount semaphore on it to make sure nobody unmounts until the snapshot creation is done. The reference counter (bd_fsfreeze_count) guarantees that only the last unfreeze process can unfreeze the frozen filesystem actually when multiple freeze requests arrive simultaneously. It counts up in bdev_freeze() and count down in bdev_thaw(). When it becomes 0, thaw_bdev() will unfreeze actually. **Return** On success zero is returned, negative error code on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÅ#h]”hŒ Parameters”…”�”}”(hjÇ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M#hj¿#ubj )�”}”(hhh]”j)�”}”(hŒ2``struct block_device *bdev`` blockdevice to lock ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hjä#h]”hŒstruct block_device *bdev”…”�”}”(hjæ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M hjÞ#ubj2)�”}”(hhh]”hÝ)�”}”(hŒblockdevice to lock”h]”hŒblockdevice to lock”…”�”}”(hjý#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jù#h´M hjú#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÞ#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jù#h´M hjÛ#ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿#ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj$h]”hŒ Description”…”�”}”(hj!$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M"hj¿#ubhÝ)�”}”(hX½If a superblock is found on this device, we take the s_umount semaphore on it to make sure nobody unmounts until the snapshot creation is done. The reference counter (bd_fsfreeze_count) guarantees that only the last unfreeze process can unfreeze the frozen filesystem actually when multiple freeze requests arrive simultaneously. It counts up in bdev_freeze() and count down in bdev_thaw(). When it becomes 0, thaw_bdev() will unfreeze actually.”h]”hX½If a superblock is found on this device, we take the s_umount semaphore on it to make sure nobody unmounts until the snapshot creation is done. The reference counter (bd_fsfreeze_count) guarantees that only the last unfreeze process can unfreeze the frozen filesystem actually when multiple freeze requests arrive simultaneously. It counts up in bdev_freeze() and count down in bdev_thaw(). When it becomes 0, thaw_bdev() will unfreeze actually.”…”�”}”(hj5$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M!hj¿#ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjF$h]”hŒReturn”…”�”}”(hjH$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjD$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M)hj¿#ubhÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hj‡$h²hh³j™$h´MNubj{)�”}”(hŒ bdev_thaw”h]”j�)�”}”(hŒ bdev_thaw”h]”hŒ bdev_thaw”…”�”}”(hj¬$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨$ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‡$h²hh³j™$h´MNubjœ)�”}”(hŒ(struct block_device *bdev)”h]”j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÈ$h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÄ$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄ$ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjæ$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjã$ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jè$Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j®$sbŒ c.bdev_thaw”†”asbuh1hhjÄ$ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄ$ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÄ$ubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hj!%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄ$ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÀ$ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‡$h²hh³j™$h´MNubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjƒ$h²hh³j™$h´MNubah}”(h]”j~$ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j™$h´MNhj€$h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒunlock filesystem”h]”hŒunlock filesystem”…”�”}”(hjK%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MNhjH%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj€$h²hh³j™$h´MNubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjc%jæjc%jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒê**Parameters** ``struct block_device *bdev`` blockdevice to unlock **Description** Unlocks the filesystem and marks it writeable again after bdev_freeze(). **Return** On success zero is returned, negative error code on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjm%h]”hŒ Parameters”…”�”}”(hjo%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjk%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MRhjg%ubj )�”}”(hhh]”j)�”}”(hŒ4``struct block_device *bdev`` blockdevice to unlock ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hjŒ%h]”hŒstruct block_device *bdev”…”�”}”(hjŽ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MOhj†%ubj2)�”}”(hhh]”hÝ)�”}”(hŒblockdevice to unlock”h]”hŒblockdevice to unlock”…”�”}”(hj¥%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¡%h´MOhj¢%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj†%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡%h´MOhjƒ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjg%ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÇ%h]”hŒ Description”…”�”}”(hjÉ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅ%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MQhjg%ubhÝ)�”}”(hŒHUnlocks the filesystem and marks it writeable again after bdev_freeze().”h]”hŒHUnlocks the filesystem and marks it writeable again after bdev_freeze().”…”�”}”(hjÝ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MPhjg%ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjî%h]”hŒReturn”…”�”}”(hjð%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjì%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MRhjg%ubhÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hj/&h²hh³jA&h´Mxubj{)�”}”(hŒbdev_deny_freeze”h]”j�)�”}”(hŒbdev_deny_freeze”h]”hŒbdev_deny_freeze”…”�”}”(hjT&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjP&ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj/&h²hh³jA&h´Mxubjœ)�”}”(hŒ(struct block_device *bdev)”h]”j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjp&h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjl&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl&ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjŽ&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹&ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�&Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jV&sbŒc.bdev_deny_freeze”†”asbuh1hhjl&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl&ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¼&h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjl&ubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjÉ&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl&ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjh&ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj/&h²hh³jA&h´Mxubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj+&h²hh³jA&h´Mxubah}”(h]”j&&ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jA&h´Mxhj(&h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒmake a block device unfreezable”h]”hŒmake a block device unfreezable”…”�”}”(hjó&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mxhjð&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj(&h²hh³jA&h´Mxubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj 'jæj 'jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXB**Parameters** ``struct block_device *bdev`` block device **Description** Reserve **bdev** against bdev_freeze() the way deny_write_access() reserves a file against writers. bd_fsfreeze_count is sign-encoded: > 0 counts active freezes, < 0 counts deniers, so a deny succeeds only while no freeze is in progress. While held, bdev_freeze() returns -EBUSY. Pair with bdev_allow_freeze(). A filesystem removing, adding or replacing a member device denies freezes on it for the duration, so a claim a freeze walk might act on is never torn down behind the freezer's back. The deny is device-scoped, not (device, superblock)-scoped: a device shared by several superblocks is refused for all of them. No in-tree filesystem removes a shared claim from a live superblock. **Return** 0, or -EBUSY if the device is currently frozen.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj'h]”hŒ Parameters”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M|hj'ubj )�”}”(hhh]”j)�”}”(hŒ+``struct block_device *bdev`` block device ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hj4'h]”hŒstruct block_device *bdev”…”�”}”(hj6'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Myhj.'ubj2)�”}”(hhh]”hÝ)�”}”(hŒ block device”h]”hŒ block device”…”�”}”(hjM'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jI'h´MyhjJ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jI'h´Myhj+'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj'ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjo'h]”hŒ Description”…”�”}”(hjq'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M{hj'ubhÝ)�”}”(hX9Reserve **bdev** against bdev_freeze() the way deny_write_access() reserves a file against writers. bd_fsfreeze_count is sign-encoded: > 0 counts active freezes, < 0 counts deniers, so a deny succeeds only while no freeze is in progress. While held, bdev_freeze() returns -EBUSY. Pair with bdev_allow_freeze().”h]”(hŒReserve ”…”�”}”(hj…'h²hh³Nh´Nubjõ)�”}”(hŒ**bdev**”h]”hŒbdev”…”�”}”(hj�'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…'ubhX) against bdev_freeze() the way deny_write_access() reserves a file against writers. bd_fsfreeze_count is sign-encoded: > 0 counts active freezes, < 0 counts deniers, so a deny succeeds only while no freeze is in progress. While held, bdev_freeze() returns -EBUSY. Pair with bdev_allow_freeze().”…”�”}”(hj…'h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mzhj'ubhÝ)�”}”(hX{A filesystem removing, adding or replacing a member device denies freezes on it for the duration, so a claim a freeze walk might act on is never torn down behind the freezer's back. The deny is device-scoped, not (device, superblock)-scoped: a device shared by several superblocks is refused for all of them. No in-tree filesystem removes a shared claim from a live superblock.”h]”hX}A filesystem removing, adding or replacing a member device denies freezes on it for the duration, so a claim a freeze walk might act on is never torn down behind the freezer’s back. The deny is device-scoped, not (device, superblock)-scoped: a device shared by several superblocks is refused for all of them. No in-tree filesystem removes a shared claim from a live superblock.”…”�”}”(hj¦'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M€hj'ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj·'h]”hŒReturn”…”�”}”(hj¹'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M†hj'ubhÝ)�”}”(hŒ/0, or -EBUSY if the device is currently frozen.”h]”hŒ/0, or -EBUSY if the device is currently frozen.”…”�”}”(hjÍ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M‡hj'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbdev_allow_freeze (C function)”Œc.bdev_allow_freeze”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2void bdev_allow_freeze (struct block_device *bdev)”h]”j)�”}”(hŒ1void bdev_allow_freeze(struct block_device *bdev)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjü'h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjø'h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj (h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjø'h²hh³j (h´M�ubj{)�”}”(hŒbdev_allow_freeze”h]”j�)�”}”(hŒbdev_allow_freeze”h]”hŒbdev_allow_freeze”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjø'h²hh³j (h´M�ubjœ)�”}”(hŒ(struct block_device *bdev)”h]”j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj9(h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj5(ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjF(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5(ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjW(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjT(ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jY(Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j(sbŒc.bdev_allow_freeze”†”asbuh1hhj5(ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjw(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5(ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj…(h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj5(ubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hj’(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5(ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj1(ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjø'h²hh³j (h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjô'h²hh³j (h´M�ubah}”(h]”jï'ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j (h´M�hjñ'h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#allow freezing a block device again”h]”hŒ#allow freezing a block device again”…”�”}”(hj¼(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M�hj¹(h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjñ'h²hh³j (h´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÔ(jæjÔ(jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒk**Parameters** ``struct block_device *bdev`` block device **Description** Undo one bdev_deny_freeze().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÞ(h]”hŒ Parameters”…”�”}”(hjà(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÜ(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M”hjØ(ubj )�”}”(hhh]”j)�”}”(hŒ+``struct block_device *bdev`` block device ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hjý(h]”hŒstruct block_device *bdev”…”�”}”(hjÿ(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjû(ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M‘hj÷(ubj2)�”}”(hhh]”hÝ)�”}”(hŒ block device”h]”hŒ block device”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j)h´M‘hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj÷(ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)h´M‘hjô(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjØ(ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj8)h]”hŒ Description”…”�”}”(hj:)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M“hjØ(ubhÝ)�”}”(hŒUndo one bdev_deny_freeze().”h]”hŒUndo one bdev_deny_freeze().”…”�”}”(hjN)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M’hjØ(ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ bd_prepare_to_claim (C function)”Œc.bd_prepare_to_claim”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒdint bd_prepare_to_claim (struct block_device *bdev, void *holder, const struct blk_holder_ops *hops)”h]”j)�”}”(hŒcint bd_prepare_to_claim(struct block_device *bdev, void *holder, const struct blk_holder_ops *hops)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj})h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjy)h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjy)h²hh³j‹)h´Mgubj{)�”}”(hŒbd_prepare_to_claim”h]”j�)�”}”(hŒbd_prepare_to_claim”h]”hŒbd_prepare_to_claim”…”�”}”(hjž)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjš)ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjy)h²hh³j‹)h´Mgubjœ)�”}”(hŒL(struct block_device *bdev, void *holder, const struct blk_holder_ops *hops)”h]”(j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjº)h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¶)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶)ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hjØ)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕ)ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÚ)Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j )sbŒc.bd_prepare_to_claim”†”asbuh1hhj¶)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶)ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¶)ubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶)ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²)ubj¢)�”}”(hŒ void *holder”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj,*h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj(*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(*ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjH*h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj(*ubj�)�”}”(hŒholder”h]”hŒholder”…”�”}”(hjU*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²)ubj¢)�”}”(hŒ!const struct blk_holder_ops *hops”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjn*h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjj*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj*ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‰*h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjj*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj*ubh)�”}”(hhh]”j�)�”}”(hŒblk_holder_ops”h]”hŒblk_holder_ops”…”�”}”(hj§*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤*ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j©*Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jô)Œc.bd_prepare_to_claim”†”asbuh1hhjj*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj*ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÓ*h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjj*ubj�)�”}”(hŒhops”h]”hŒhops”…”�”}”(hjà*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjj*ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²)ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjy)h²hh³j‹)h´Mgubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hju)h²hh³j‹)h´Mgubah}”(h]”jp)ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‹)h´Mghjr)h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒclaim a block device”h]”hŒclaim a block device”…”�”}”(hj +h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mghj+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjr)h²hh³j‹)h´Mgubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj"+jæj"+jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXÆ**Parameters** ``struct block_device *bdev`` block device of interest ``void *holder`` holder trying to claim **bdev** ``const struct blk_holder_ops *hops`` holder ops. **Description** Claim **bdev**. This function fails if **bdev** is already claimed by another holder and waits if another claiming is in progress. return, the caller has ownership of bd_claiming and bd_holder[s]. **Return** 0 if **bdev** can be claimed, -EBUSY otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj,+h]”hŒ Parameters”…”�”}”(hj.+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*+ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mkhj&+ubj )�”}”(hhh]”(j)�”}”(hŒ7``struct block_device *bdev`` block device of interest ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hjK+h]”hŒstruct block_device *bdev”…”�”}”(hjM+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjI+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MhhjE+ubj2)�”}”(hhh]”hÝ)�”}”(hŒblock device of interest”h]”hŒblock device of interest”…”�”}”(hjd+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j`+h´Mhhja+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjE+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`+h´MhhjB+ubj)�”}”(hŒ1``void *holder`` holder trying to claim **bdev** ”h]”(j)�”}”(hŒ``void *holder``”h]”j)�”}”(hj„+h]”hŒ void *holder”…”�”}”(hj†+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mihj~+ubj2)�”}”(hhh]”hÝ)�”}”(hŒholder trying to claim **bdev**”h]”(hŒholder trying to claim ”…”�”}”(hj�+h²hh³Nh´Nubjõ)�”}”(hŒ**bdev**”h]”hŒbdev”…”�”}”(hj¥+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™+h´Mihjš+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™+h´MihjB+ubj)�”}”(hŒ2``const struct blk_holder_ops *hops`` holder ops. ”h]”(j)�”}”(hŒ%``const struct blk_holder_ops *hops``”h]”j)�”}”(hjË+h]”hŒ!const struct blk_holder_ops *hops”…”�”}”(hjÍ+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉ+ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MjhjÅ+ubj2)�”}”(hhh]”hÝ)�”}”(hŒ holder ops.”h]”hŒ holder ops.”…”�”}”(hjä+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jà+h´Mjhjá+ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅ+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jà+h´MjhjB+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj&+ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj,h]”hŒ Description”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mlhj&+ubhÝ)�”}”(hŒÅClaim **bdev**. This function fails if **bdev** is already claimed by another holder and waits if another claiming is in progress. return, the caller has ownership of bd_claiming and bd_holder[s].”h]”(hŒClaim ”…”�”}”(hj,h²hh³Nh´Nubjõ)�”}”(hŒ**bdev**”h]”hŒbdev”…”�”}”(hj$,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,ubhŒ. This function fails if ”…”�”}”(hj,h²hh³Nh´Nubjõ)�”}”(hŒ**bdev**”h]”hŒbdev”…”�”}”(hj6,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,ubhŒ• is already claimed by another holder and waits if another claiming is in progress. return, the caller has ownership of bd_claiming and bd_holder[s].”…”�”}”(hj,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mkhj&+ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjQ,h]”hŒReturn”…”�”}”(hjS,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjO,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mohj&+ubhÝ)�”}”(hŒ/0 if **bdev** can be claimed, -EBUSY otherwise.”h]”(hŒ0 if ”…”�”}”(hjg,h²hh³Nh´Nubjõ)�”}”(hŒ**bdev**”h]”hŒbdev”…”�”}”(hjo,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjg,ubhŒ" can be claimed, -EBUSY otherwise.”…”�”}”(hjg,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mphj&+ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbd_abort_claiming (C function)”Œc.bd_abort_claiming”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@void bd_abort_claiming (struct block_device *bdev, void *holder)”h]”j)�”}”(hŒ?void bd_abort_claiming(struct block_device *bdev, void *holder)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¨,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¤,h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¤,h²hh³j¶,h´M¾ubj{)�”}”(hŒbd_abort_claiming”h]”j�)�”}”(hŒbd_abort_claiming”h]”hŒbd_abort_claiming”…”�”}”(hjÉ,h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅ,ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¤,h²hh³j¶,h´M¾ubjœ)�”}”(hŒ)(struct block_device *bdev, void *holder)”h]”(j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjå,h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjá,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjá,ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”•jߌreftype”jY Œ reftarget”j-Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jË,sbŒc.bd_abort_claiming”†”asbuh1hhjá,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#-h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjá,ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj1-h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjá,ubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hj>-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjá,ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝ,ubj¢)�”}”(hŒ void *holder”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjW-h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjS-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje-h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjS-ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjs-h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjS-ubj�)�”}”(hŒholder”h]”hŒholder”…”�”}”(hj€-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjS-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÝ,ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¤,h²hh³j¶,h´M¾ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj ,h²hh³j¶,h´M¾ubah}”(h]”j›,ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¶,h´M¾hj�,h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ abort claiming of a block device”h]”hŒ abort claiming of a block device”…”�”}”(hjª-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M¾hj§-h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�,h²hh³j¶,h´M¾ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÂ-jæjÂ-jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXS**Parameters** ``struct block_device *bdev`` block device of interest ``void *holder`` holder that has claimed **bdev** **Description** Abort claiming of a block device when the exclusive open failed. This can be also used when exclusive open is not actually desired and we just needed to block other exclusive openers for a while.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÌ-h]”hŒ Parameters”…”�”}”(hjÎ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÂhjÆ-ubj )�”}”(hhh]”(j)�”}”(hŒ7``struct block_device *bdev`` block device of interest ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hjë-h]”hŒstruct block_device *bdev”…”�”}”(hjí-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M¿hjå-ubj2)�”}”(hhh]”hÝ)�”}”(hŒblock device of interest”h]”hŒblock device of interest”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.h´M¿hj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjå-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.h´M¿hjâ-ubj)�”}”(hŒ2``void *holder`` holder that has claimed **bdev** ”h]”(j)�”}”(hŒ``void *holder``”h]”j)�”}”(hj$.h]”hŒ void *holder”…”�”}”(hj&.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj".ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÀhj.ubj2)�”}”(hhh]”hÝ)�”}”(hŒ holder that has claimed **bdev**”h]”(hŒholder that has claimed ”…”�”}”(hj=.h²hh³Nh´Nubjõ)�”}”(hŒ**bdev**”h]”hŒbdev”…”�”}”(hjE.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj=.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j9.h´MÀhj:.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9.h´MÀhjâ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÆ-ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjm.h]”hŒ Description”…”�”}”(hjo.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjk.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÂhjÆ-ubhÝ)�”}”(hŒÃAbort claiming of a block device when the exclusive open failed. This can be also used when exclusive open is not actually desired and we just needed to block other exclusive openers for a while.”h]”hŒÃAbort claiming of a block device when the exclusive open failed. This can be also used when exclusive open is not actually desired and we just needed to block other exclusive openers for a while.”…”�”}”(hjƒ.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÁhjÆ-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbdev_yield_claim (C function)”Œc.bdev_yield_claim”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void bdev_yield_claim (struct file *bdev_file)”h]”j)�”}”(hŒ-void bdev_yield_claim(struct file *bdev_file)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj².h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj®.h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁ.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®.h²hh³jÀ.h´M®ubj{)�”}”(hŒbdev_yield_claim”h]”j�)�”}”(hŒbdev_yield_claim”h]”hŒbdev_yield_claim”…”�”}”(hjÓ.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏ.ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj®.h²hh³jÀ.h´M®ubjœ)�”}”(hŒ(struct file *bdev_file)”h]”j¢)�”}”(hŒstruct file *bdev_file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjï.h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjë.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjü.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjë.ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj /ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j/Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÕ.sbŒc.bdev_yield_claim”†”asbuh1hhjë.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-/h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjë.ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj;/h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjë.ubj�)�”}”(hŒ bdev_file”h]”hŒ bdev_file”…”�”}”(hjH/h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjë.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjç.ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj®.h²hh³jÀ.h´M®ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjª.h²hh³jÀ.h´M®ubah}”(h]”j¥.ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÀ.h´M®hj§.h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0give up the holder claim on an open block device”h]”hŒ0give up the holder claim on an open block device”…”�”}”(hjr/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M®hjo/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj§.h²hh³jÀ.h´M®ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŠ/jæjŠ/jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX?**Parameters** ``struct file *bdev_file`` open block device **Description** Yield the holder and any write access for **bdev_file** without closing it, so the caller can still act on the device - e.g. bdev_allow_freeze() it - before the final bdev_fput(). bdev_fput() yields too, so calling it afterwards is safe.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj”/h]”hŒ Parameters”…”�”}”(hj–/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj’/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M²hjŽ/ubj )�”}”(hhh]”j)�”}”(hŒ-``struct file *bdev_file`` open block device ”h]”(j)�”}”(hŒ``struct file *bdev_file``”h]”j)�”}”(hj³/h]”hŒstruct file *bdev_file”…”�”}”(hjµ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M¯hj­/ubj2)�”}”(hhh]”hÝ)�”}”(hŒopen block device”h]”hŒopen block device”…”�”}”(hjÌ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÈ/h´M¯hjÉ/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj­/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈ/h´M¯hjª/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŽ/ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjî/h]”hŒ Description”…”�”}”(hjð/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjì/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M±hjŽ/ubhÝ)�”}”(hŒîYield the holder and any write access for **bdev_file** without closing it, so the caller can still act on the device - e.g. bdev_allow_freeze() it - before the final bdev_fput(). bdev_fput() yields too, so calling it afterwards is safe.”h]”(hŒ*Yield the holder and any write access for ”…”�”}”(hj0h²hh³Nh´Nubjõ)�”}”(hŒ **bdev_file**”h]”hŒ bdev_file”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0ubhŒ· without closing it, so the caller can still act on the device - e.g. bdev_allow_freeze() it - before the final bdev_fput(). bdev_fput() yields too, so calling it afterwards is safe.”…”�”}”(hj0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´M°hjŽ/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbdev_fput (C function)”Œ c.bdev_fput”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'void bdev_fput (struct file *bdev_file)”h]”j)�”}”(hŒ&void bdev_fput(struct file *bdev_file)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjE0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjA0h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjA0h²hh³jS0h´MÏubj{)�”}”(hŒ bdev_fput”h]”j�)�”}”(hŒ bdev_fput”h]”hŒ bdev_fput”…”�”}”(hjf0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjb0ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjA0h²hh³jS0h´MÏubjœ)�”}”(hŒ(struct file *bdev_file)”h]”j¢)�”}”(hŒstruct file *bdev_file”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‚0h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj~0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~0ubh)�”}”(hhh]”j�)�”}”(hŒfile”h]”hŒfile”…”�”}”(hj 0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�0ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¢0Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jh0sbŒ c.bdev_fput”†”asbuh1hhj~0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~0ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÎ0h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj~0ubj�)�”}”(hŒ bdev_file”h]”hŒ bdev_file”…”�”}”(hjÛ0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~0ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjz0ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjA0h²hh³jS0h´MÏubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj=0h²hh³jS0h´MÏubah}”(h]”j80ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jS0h´MÏhj:0h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0yield claim to the block device and put the file”h]”hŒ0yield claim to the block device and put the file”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÏhj1h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj:0h²hh³jS0h´MÏubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj1jæj1jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hŒé**Parameters** ``struct file *bdev_file`` open block device **Description** Yield claim on the block device and put the file. Ensure that the block device can be reclaimed before the file is closed which is a deferred operation.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj'1h]”hŒ Parameters”…”�”}”(hj)1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÓhj!1ubj )�”}”(hhh]”j)�”}”(hŒ-``struct file *bdev_file`` open block device ”h]”(j)�”}”(hŒ``struct file *bdev_file``”h]”j)�”}”(hjF1h]”hŒstruct file *bdev_file”…”�”}”(hjH1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÐhj@1ubj2)�”}”(hhh]”hÝ)�”}”(hŒopen block device”h]”hŒopen block device”…”�”}”(hj_1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[1h´MÐhj\1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj@1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[1h´MÐhj=1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj!1ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�1h]”hŒ Description”…”�”}”(hjƒ1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÒhj!1ubhÝ)�”}”(hŒ˜Yield claim on the block device and put the file. Ensure that the block device can be reclaimed before the file is closed which is a deferred operation.”h]”hŒ˜Yield claim on the block device and put the file. Ensure that the block device can be reclaimed before the file is closed which is a deferred operation.”…”�”}”(hj—1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MÑhj!1ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlookup_bdev (C function)”Œ c.lookup_bdev”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2int lookup_bdev (const char *pathname, dev_t *dev)”h]”j)�”}”(hŒ1int lookup_bdev(const char *pathname, dev_t *dev)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÆ1h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÂ1h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Máubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂ1h²hh³jÔ1h´Máubj{)�”}”(hŒ lookup_bdev”h]”j�)�”}”(hŒ lookup_bdev”h]”hŒ lookup_bdev”…”�”}”(hjç1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjã1ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÂ1h²hh³jÔ1h´Máubjœ)�”}”(hŒ"(const char *pathname, dev_t *dev)”h]”(j¢)�”}”(hŒconst char *pathname”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÿ1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿ1ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÿ1ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿ1ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj:2h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÿ1ubj�)�”}”(hŒpathname”h]”hŒpathname”…”�”}”(hjG2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿ1ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjû1ubj¢)�”}”(hŒ dev_t *dev”h]”(h)�”}”(hhh]”j�)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hjc2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`2ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”je2Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jé1sbŒ c.lookup_bdev”†”asbuh1hhj\2ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\2ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‘2h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\2ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjž2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\2ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjû1ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÂ1h²hh³jÔ1h´Máubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¾1h²hh³jÔ1h´Máubah}”(h]”j¹1ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÔ1h´Máhj»1h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Look up a struct block_device by name.”h]”hŒ&Look up a struct block_device by name.”…”�”}”(hjÈ2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MáhjÅ2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj»1h²hh³jÔ1h´Máubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjà2jæjà2jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hXh**Parameters** ``const char *pathname`` Name of the block device in the filesystem. ``dev_t *dev`` Pointer to the block device's dev_t, if found. **Description** Lookup the block device's dev_t at **pathname** in the current namespace if possible and return it in **dev**. **Context** May sleep. **Return** 0 if succeeded, negative errno otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjê2h]”hŒ Parameters”…”�”}”(hjì2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjè2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Måhjä2ubj )�”}”(hhh]”(j)�”}”(hŒE``const char *pathname`` Name of the block device in the filesystem. ”h]”(j)�”}”(hŒ``const char *pathname``”h]”j)�”}”(hj 3h]”hŒconst char *pathname”…”�”}”(hj 3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mâhj3ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+Name of the block device in the filesystem.”h]”hŒ+Name of the block device in the filesystem.”…”�”}”(hj"3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3h´Mâhj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3h´Mâhj3ubj)�”}”(hŒ>``dev_t *dev`` Pointer to the block device's dev_t, if found. ”h]”(j)�”}”(hŒ``dev_t *dev``”h]”j)�”}”(hjB3h]”hŒ dev_t *dev”…”�”}”(hjD3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mãhj<3ubj2)�”}”(hhh]”hÝ)�”}”(hŒ.Pointer to the block device's dev_t, if found.”h]”hŒ0Pointer to the block device’s dev_t, if found.”…”�”}”(hj[3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jW3h´MãhjX3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj<3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jW3h´Mãhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjä2ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj}3h]”hŒ Description”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Måhjä2ubhÝ)�”}”(hŒnLookup the block device's dev_t at **pathname** in the current namespace if possible and return it in **dev**.”h]”(hŒ%Lookup the block device’s dev_t at ”…”�”}”(hj“3h²hh³Nh´Nubjõ)�”}”(hŒ **pathname**”h]”hŒpathname”…”�”}”(hj›3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“3ubhŒ7 in the current namespace if possible and return it in ”…”�”}”(hj“3h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj­3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“3ubhŒ.”…”�”}”(hj“3h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mähjä2ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hjÈ3h]”hŒContext”…”�”}”(hjÊ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÆ3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mçhjä2ubhÝ)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hjÞ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mèhjä2ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjï3h]”hŒReturn”…”�”}”(hjñ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjí3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mêhjä2ubhÝ)�”}”(hŒ)0 if succeeded, negative errno otherwise.”h]”hŒ)0 if succeeded, negative errno otherwise.”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Méhjä2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œbdev_mark_dead (C function)”Œc.bdev_mark_dead”hNt”auh1hýhjE‰h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ>void bdev_mark_dead (struct block_device *bdev, bool surprise)”h]”j)�”}”(hŒ=void bdev_mark_dead(struct block_device *bdev, bool surprise)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj44h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj04h²hh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj04h²hh³jB4h´Mubj{)�”}”(hŒbdev_mark_dead”h]”j�)�”}”(hŒbdev_mark_dead”h]”hŒbdev_mark_dead”…”�”}”(hjU4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQ4ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj04h²hh³jB4h´Mubjœ)�”}”(hŒ*(struct block_device *bdev, bool surprise)”h]”(j¢)�”}”(hŒstruct block_device *bdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjq4h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjm4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm4ubh)�”}”(hhh]”j�)�”}”(hŒ block_device”h]”hŒ block_device”…”�”}”(hj�4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ4ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‘4Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jW4sbŒc.bdev_mark_dead”†”asbuh1hhjm4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjm4ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj½4h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjm4ubj�)�”}”(hŒbdev”h]”hŒbdev”…”�”}”(hjÊ4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjm4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hji4ubj¢)�”}”(hŒ bool surprise”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjã4h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjß4ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjð4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjß4ubj�)�”}”(hŒsurprise”h]”hŒsurprise”…”�”}”(hjþ4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjß4ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hji4ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj04h²hh³jB4h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj,4h²hh³jB4h´Mubah}”(h]”j'4ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jB4h´Mhj)4h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒmark a block device as dead”h]”hŒmark a block device as dead”…”�”}”(hj(5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mhj%5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj)4h²hh³jB4h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj@5jæj@5jç‰jè‰jé‰uh1jh²hhjE‰h³Nh´Nubjë)�”}”(hX&**Parameters** ``struct block_device *bdev`` block device to operate on ``bool surprise`` indicate a surprise removal **Description** Tell the file system that this devices or media is dead. If **surprise** is set to ``true`` the device or media is already gone, if not we are preparing for an orderly removal. This calls into the file system, which then typicall syncs out all dirty data and writes back inodes and then invalidates any cached data in the inodes on the file system. In addition we also invalidate the block device mapping.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjJ5h]”hŒ Parameters”…”�”}”(hjL5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjH5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MhjD5ubj )�”}”(hhh]”(j)�”}”(hŒ9``struct block_device *bdev`` block device to operate on ”h]”(j)�”}”(hŒ``struct block_device *bdev``”h]”j)�”}”(hji5h]”hŒstruct block_device *bdev”…”�”}”(hjk5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjg5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mhjc5ubj2)�”}”(hhh]”hÝ)�”}”(hŒblock device to operate on”h]”hŒblock device to operate on”…”�”}”(hj‚5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j~5h´Mhj5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjc5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~5h´Mhj`5ubj)�”}”(hŒ.``bool surprise`` indicate a surprise removal ”h]”(j)�”}”(hŒ``bool surprise``”h]”j)�”}”(hj¢5h]”hŒ bool surprise”…”�”}”(hj¤5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj 5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´Mhjœ5ubj2)�”}”(hhh]”hÝ)�”}”(hŒindicate a surprise removal”h]”hŒindicate a surprise removal”…”�”}”(hj»5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·5h´Mhj¸5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·5h´Mhj`5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjD5ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÝ5h]”hŒ Description”…”�”}”(hjß5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MhjD5ubhÝ)�”}”(hŒ±Tell the file system that this devices or media is dead. If **surprise** is set to ``true`` the device or media is already gone, if not we are preparing for an orderly removal.”h]”(hŒ=Tell the file system that this devices or media is dead. If ”…”�”}”(hjó5h²hh³Nh´Nubjõ)�”}”(hŒ **surprise**”h]”hŒsurprise”…”�”}”(hjû5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjó5ubhŒ is set to ”…”�”}”(hjó5h²hh³Nh´Nubj)�”}”(hŒ``true``”h]”hŒtrue”…”�”}”(hj 6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjó5ubhŒU the device or media is already gone, if not we are preparing for an orderly removal.”…”�”}”(hjó5h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MhjD5ubhÝ)�”}”(hŒåThis calls into the file system, which then typicall syncs out all dirty data and writes back inodes and then invalidates any cached data in the inodes on the file system. In addition we also invalidate the block device mapping.”h]”hŒåThis calls into the file system, which then typicall syncs out all dirty data and writes back inodes and then invalidates any cached data in the inodes on the file system. In addition we also invalidate the block device mapping.”…”�”}”(hj&6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒQ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:345: ./block/bdev.c”h´MhjD5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjE‰h²hh³Nh´Nubeh}”(h]”Œ block-devices”ah ]”h"]”Œ block devices”ah$]”h&]”uh1hµhh·h²hh³hÊh´M4ubh¶)�”}”(hhh]”(h»)�”}”(hŒ Char devices”h]”hŒ Char devices”…”�”}”(hjG6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjD6h²hh³hÊh´M]ubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#register_chrdev_region (C function)”Œc.register_chrdev_region”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIint register_chrdev_region (dev_t from, unsigned count, const char *name)”h]”j)�”}”(hŒHint register_chrdev_region(dev_t from, unsigned count, const char *name)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjn6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjj6h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´K½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj6h²hh³j|6h´K½ubj{)�”}”(hŒregister_chrdev_region”h]”j�)�”}”(hŒregister_chrdev_region”h]”hŒregister_chrdev_region”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹6ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjj6h²hh³j|6h´K½ubjœ)�”}”(hŒ.(dev_t from, unsigned count, const char *name)”h]”(j¢)�”}”(hŒ dev_t from”h]”(h)�”}”(hhh]”j�)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hj®6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«6ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j°6Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‘6sbŒc.register_chrdev_region”†”asbuh1hhj§6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎ6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§6ubj�)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hjÜ6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£6ubj¢)�”}”(hŒunsigned count”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjõ6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñ6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñ6ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjñ6ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£6ubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj*7h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj&7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj77h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&7ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjE7h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj&7ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&7ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hja7h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj&7ubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hjn7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&7ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£6ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjj6h²hh³j|6h´K½ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjf6h²hh³j|6h´K½ubah}”(h]”ja6ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j|6h´K½hjc6h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"register a range of device numbers”h]”hŒ"register a range of device numbers”…”�”}”(hj˜7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´K½hj•7h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjc6h²hh³j|6h´K½ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj°7jæj°7jç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hXJ**Parameters** ``dev_t from`` the first in the desired range of device numbers; must include the major number. ``unsigned count`` the number of consecutive device numbers required ``const char *name`` the name of the device or driver. **Description** Return value is zero on success, a negative error code on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjº7h]”hŒ Parameters”…”�”}”(hj¼7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¸7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KÁhj´7ubj )�”}”(hhh]”(j)�”}”(hŒ```dev_t from`` the first in the desired range of device numbers; must include the major number. ”h]”(j)�”}”(hŒ``dev_t from``”h]”j)�”}”(hjÙ7h]”hŒ dev_t from”…”�”}”(hjÛ7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×7ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´K¿hjÓ7ubj2)�”}”(hhh]”hÝ)�”}”(hŒPthe first in the desired range of device numbers; must include the major number.”h]”hŒPthe first in the desired range of device numbers; must include the major number.”…”�”}”(hjò7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´K¾hjï7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jî7h´K¿hjÐ7ubj)�”}”(hŒE``unsigned count`` the number of consecutive device numbers required ”h]”(j)�”}”(hŒ``unsigned count``”h]”j)�”}”(hj8h]”hŒunsigned count”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KÀhj 8ubj2)�”}”(hhh]”hÝ)�”}”(hŒ1the number of consecutive device numbers required”h]”hŒ1the number of consecutive device numbers required”…”�”}”(hj,8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(8h´KÀhj)8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj 8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(8h´KÀhjÐ7ubj)�”}”(hŒ7``const char *name`` the name of the device or driver. ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjL8h]”hŒconst char *name”…”�”}”(hjN8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KÁhjF8ubj2)�”}”(hhh]”hÝ)�”}”(hŒ!the name of the device or driver.”h]”hŒ!the name of the device or driver.”…”�”}”(hje8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ja8h´KÁhjb8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjF8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ja8h´KÁhjÐ7ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj´7ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‡8h]”hŒ Description”…”�”}”(hj‰8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KÃhj´7ubhÝ)�”}”(hŒBReturn value is zero on success, a negative error code on failure.”h]”hŒBReturn value is zero on success, a negative error code on failure.”…”�”}”(hj�8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KÂhj´7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ alloc_chrdev_region (C function)”Œc.alloc_chrdev_region”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒZint alloc_chrdev_region (dev_t *dev, unsigned baseminor, unsigned count, const char *name)”h]”j)�”}”(hŒYint alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÌ8h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÈ8h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kßubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÈ8h²hh³jÚ8h´Kßubj{)�”}”(hŒalloc_chrdev_region”h]”j�)�”}”(hŒalloc_chrdev_region”h]”hŒalloc_chrdev_region”…”�”}”(hjí8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjé8ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÈ8h²hh³jÚ8h´Kßubjœ)�”}”(hŒB(dev_t *dev, unsigned baseminor, unsigned count, const char *name)”h]”(j¢)�”}”(hŒ dev_t *dev”h]”(h)�”}”(hhh]”j�)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hj 9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj 9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j9Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jï8sbŒc.alloc_chrdev_region”†”asbuh1hhj9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj:9h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj9ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjG9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj9ubj¢)�”}”(hŒunsigned baseminor”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj`9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj\9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\9ubj�)�”}”(hŒ baseminor”h]”hŒ baseminor”…”�”}”(hj|9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj9ubj¢)�”}”(hŒunsigned count”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj•9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘9ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hj±9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj9ubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÊ9h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÆ9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆ9ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjå9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÆ9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆ9ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÆ9ubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆ9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj9ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÈ8h²hh³jÚ8h´Kßubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÄ8h²hh³jÚ8h´Kßubah}”(h]”j¿8ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÚ8h´KßhjÁ8h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'register a range of char device numbers”h]”hŒ'register a range of char device numbers”…”�”}”(hj8:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kßhj5:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÁ8h²hh³jÚ8h´Kßubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjP:jæjP:jç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hXá**Parameters** ``dev_t *dev`` output parameter for first assigned number ``unsigned baseminor`` first of the requested range of minor numbers ``unsigned count`` the number of minor numbers required ``const char *name`` the name of the associated device or driver **Description** Allocates a range of char device numbers. The major number will be chosen dynamically, and returned (along with the first minor number) in **dev**. Returns zero or a negative error code.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjZ:h]”hŒ Parameters”…”�”}”(hj\:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjX:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KãhjT:ubj )�”}”(hhh]”(j)�”}”(hŒ:``dev_t *dev`` output parameter for first assigned number ”h]”(j)�”}”(hŒ``dev_t *dev``”h]”j)�”}”(hjy:h]”hŒ dev_t *dev”…”�”}”(hj{:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjw:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kàhjs:ubj2)�”}”(hhh]”hÝ)�”}”(hŒ*output parameter for first assigned number”h]”hŒ*output parameter for first assigned number”…”�”}”(hj’:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŽ:h´Kàhj�:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjs:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŽ:h´Kàhjp:ubj)�”}”(hŒE``unsigned baseminor`` first of the requested range of minor numbers ”h]”(j)�”}”(hŒ``unsigned baseminor``”h]”j)�”}”(hj²:h]”hŒunsigned baseminor”…”�”}”(hj´:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Káhj¬:ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-first of the requested range of minor numbers”h]”hŒ-first of the requested range of minor numbers”…”�”}”(hjË:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇ:h´KáhjÈ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇ:h´Káhjp:ubj)�”}”(hŒ8``unsigned count`` the number of minor numbers required ”h]”(j)�”}”(hŒ``unsigned count``”h]”j)�”}”(hjë:h]”hŒunsigned count”…”�”}”(hjí:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kâhjå:ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the number of minor numbers required”h]”hŒ$the number of minor numbers required”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;h´Kâhj;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjå:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;h´Kâhjp:ubj)�”}”(hŒA``const char *name`` the name of the associated device or driver ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hj$;h]”hŒconst char *name”…”�”}”(hj&;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj";ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kãhj;ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+the name of the associated device or driver”h]”hŒ+the name of the associated device or driver”…”�”}”(hj=;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j9;h´Kãhj:;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9;h´Kãhjp:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjT:ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj_;h]”hŒ Description”…”�”}”(hja;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj];ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KåhjT:ubhÝ)�”}”(hŒ¼Allocates a range of char device numbers. The major number will be chosen dynamically, and returned (along with the first minor number) in **dev**. Returns zero or a negative error code.”h]”(hŒŒAllocates a range of char device numbers. The major number will be chosen dynamically, and returned (along with the first minor number) in ”…”�”}”(hju;h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj};h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhju;ubhŒ). Returns zero or a negative error code.”…”�”}”(hju;h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KähjT:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ__register_chrdev (C function)”Œc.__register_chrdev”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒŒint __register_chrdev (unsigned int major, unsigned int baseminor, unsigned int count, const char *name, const struct file_operations *fops)”h]”j)�”}”(hŒ‹int __register_chrdev(unsigned int major, unsigned int baseminor, unsigned int count, const char *name, const struct file_operations *fops)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¶;h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj²;h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kõubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj²;h²hh³jÄ;h´Kõubj{)�”}”(hŒ__register_chrdev”h]”j�)�”}”(hŒ__register_chrdev”h]”hŒ__register_chrdev”…”�”}”(hj×;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓ;ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj²;h²hh³jÄ;h´Kõubjœ)�”}”(hŒv(unsigned int major, unsigned int baseminor, unsigned int count, const char *name, const struct file_operations *fops)”h]”(j¢)�”}”(hŒunsigned int major”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjó;h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjï;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjï;ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjï;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjï;ubj�)�”}”(hŒmajor”h]”hŒmajor”…”�”}”(hj+<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjï;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjë;ubj¢)�”}”(hŒunsigned int baseminor”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjD<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@<ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj`<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj@<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@<ubj�)�”}”(hŒ baseminor”h]”hŒ baseminor”…”�”}”(hj|<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjë;ubj¢)�”}”(hŒunsigned int count”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj•<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘<ubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj±<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘<ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÍ<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjë;ubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjæ<h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjâ<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâ<ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjâ<ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâ<ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjâ<ubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj*=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâ<ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjë;ubj¢)�”}”(hŒ"const struct file_operations *fops”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjC=h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj?=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjP=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?=ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj^=h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj?=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjk=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?=ubh)�”}”(hhh]”j�)�”}”(hŒfile_operations”h]”hŒfile_operations”…”�”}”(hj|=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjy=ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j~=Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÙ;sbŒc.__register_chrdev”†”asbuh1hhj?=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?=ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjª=h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj?=ubj�)�”}”(hŒfops”h]”hŒfops”…”�”}”(hj·=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?=ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjë;ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj²;h²hh³jÄ;h´Kõubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj®;h²hh³jÄ;h´Kõubah}”(h]”j©;ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÄ;h´Kõhj«;h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6create and register a cdev occupying a range of minors”h]”hŒ6create and register a cdev occupying a range of minors”…”�”}”(hjá=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KõhjÞ=h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj«;h²hh³jÄ;h´Kõubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjù=jæjù=jç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hXm**Parameters** ``unsigned int major`` major device number or 0 for dynamic allocation ``unsigned int baseminor`` first of the requested range of minor numbers ``unsigned int count`` the number of minor numbers required ``const char *name`` name of this range of devices ``const struct file_operations *fops`` file operations associated with this devices **Description** If **major** == 0 this functions will dynamically allocate a major and return its number. If **major** > 0 this function will attempt to reserve a device with the given major number and will return zero on success. Returns a -ve errno on failure. The name of this device has nothing to do with the name of the device in /dev. It only helps to keep track of the different owners of devices. If your module name has only one type of devices it's ok to use e.g. the name of the module here.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj>h]”hŒ Parameters”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kùhjý=ubj )�”}”(hhh]”(j)�”}”(hŒG``unsigned int major`` major device number or 0 for dynamic allocation ”h]”(j)�”}”(hŒ``unsigned int major``”h]”j)�”}”(hj">h]”hŒunsigned int major”…”�”}”(hj$>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj >ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Köhj>ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/major device number or 0 for dynamic allocation”h]”hŒ/major device number or 0 for dynamic allocation”…”�”}”(hj;>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j7>h´Köhj8>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7>h´Köhj>ubj)�”}”(hŒI``unsigned int baseminor`` first of the requested range of minor numbers ”h]”(j)�”}”(hŒ``unsigned int baseminor``”h]”j)�”}”(hj[>h]”hŒunsigned int baseminor”…”�”}”(hj]>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjY>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´K÷hjU>ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-first of the requested range of minor numbers”h]”hŒ-first of the requested range of minor numbers”…”�”}”(hjt>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jp>h´K÷hjq>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjU>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jp>h´K÷hj>ubj)�”}”(hŒ<``unsigned int count`` the number of minor numbers required ”h]”(j)�”}”(hŒ``unsigned int count``”h]”j)�”}”(hj”>h]”hŒunsigned int count”…”�”}”(hj–>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KøhjŽ>ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the number of minor numbers required”h]”hŒ$the number of minor numbers required”…”�”}”(hj­>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©>h´Køhjª>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŽ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©>h´Køhj>ubj)�”}”(hŒ3``const char *name`` name of this range of devices ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjÍ>h]”hŒconst char *name”…”�”}”(hjÏ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjË>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´KùhjÇ>ubj2)�”}”(hhh]”hÝ)�”}”(hŒname of this range of devices”h]”hŒname of this range of devices”…”�”}”(hjæ>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jâ>h´Kùhjã>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÇ>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jâ>h´Kùhj>ubj)�”}”(hŒT``const struct file_operations *fops`` file operations associated with this devices ”h]”(j)�”}”(hŒ&``const struct file_operations *fops``”h]”j)�”}”(hj?h]”hŒ"const struct file_operations *fops”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kúhj?ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,file operations associated with this devices”h]”hŒ,file operations associated with this devices”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j?h´Kúhj?ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj?ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j?h´Kúhj>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjý=ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjA?h]”hŒ Description”…”�”}”(hjC?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj??ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kühjý=ubhÝ)�”}”(hŒYIf **major** == 0 this functions will dynamically allocate a major and return its number.”h]”(hŒIf ”…”�”}”(hjW?h²hh³Nh´Nubjõ)�”}”(hŒ **major**”h]”hŒmajor”…”�”}”(hj_?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjW?ubhŒM == 0 this functions will dynamically allocate a major and return its number.”…”�”}”(hjW?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kûhjý=ubhÝ)�”}”(hŒ|If **major** > 0 this function will attempt to reserve a device with the given major number and will return zero on success.”h]”(hŒIf ”…”�”}”(hjx?h²hh³Nh´Nubjõ)�”}”(hŒ **major**”h]”hŒmajor”…”�”}”(hj€?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx?ubhŒp > 0 this function will attempt to reserve a device with the given major number and will return zero on success.”…”�”}”(hjx?h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Kþhjý=ubhÝ)�”}”(hŒReturns a -ve errno on failure.”h]”hŒReturns a -ve errno on failure.”…”�”}”(hj™?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Mhjý=ubhÝ)�”}”(hŒðThe name of this device has nothing to do with the name of the device in /dev. It only helps to keep track of the different owners of devices. If your module name has only one type of devices it's ok to use e.g. the name of the module here.”h]”hŒòThe name of this device has nothing to do with the name of the device in /dev. It only helps to keep track of the different owners of devices. If your module name has only one type of devices it’s ok to use e.g. the name of the module here.”…”�”}”(hj¨?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Mhjý=ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%unregister_chrdev_region (C function)”Œc.unregister_chrdev_region”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:void unregister_chrdev_region (dev_t from, unsigned count)”h]”j)�”}”(hŒ9void unregister_chrdev_region(dev_t from, unsigned count)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj×?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÓ?h²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÓ?h²hh³jå?h´M,ubj{)�”}”(hŒunregister_chrdev_region”h]”j�)�”}”(hŒunregister_chrdev_region”h]”hŒunregister_chrdev_region”…”�”}”(hjø?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô?ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÓ?h²hh³jå?h´M,ubjœ)�”}”(hŒ(dev_t from, unsigned count)”h]”(j¢)�”}”(hŒ dev_t from”h]”(h)�”}”(hhh]”j�)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j@Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jú?sbŒc.unregister_chrdev_region”†”asbuh1hhj@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj@ubj�)�”}”(hŒfrom”h]”hŒfrom”…”�”}”(hjE@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj @ubj¢)�”}”(hŒunsigned count”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj^@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZ@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ@ubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjz@h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ@ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj @ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÓ?h²hh³jå?h´M,ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÏ?h²hh³jå?h´M,ubah}”(h]”jÊ?ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jå?h´M,hjÌ?h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$unregister a range of device numbers”h]”hŒ$unregister a range of device numbers”…”�”}”(hj¤@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M,hj¡@h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÌ?h²hh³jå?h´M,ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¼@jæj¼@jç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hXW**Parameters** ``dev_t from`` the first in the range of numbers to unregister ``unsigned count`` the number of device numbers to unregister **Description** This function will unregister a range of **count** device numbers, starting with **from**. The caller should normally be the one who allocated those numbers in the first place...”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÆ@h]”hŒ Parameters”…”�”}”(hjÈ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÄ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M0hjÀ@ubj )�”}”(hhh]”(j)�”}”(hŒ?``dev_t from`` the first in the range of numbers to unregister ”h]”(j)�”}”(hŒ``dev_t from``”h]”j)�”}”(hjå@h]”hŒ dev_t from”…”�”}”(hjç@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjã@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M-hjß@ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/the first in the range of numbers to unregister”h]”hŒ/the first in the range of numbers to unregister”…”�”}”(hjþ@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jú@h´M-hjû@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjß@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jú@h´M-hjÜ@ubj)�”}”(hŒ>``unsigned count`` the number of device numbers to unregister ”h]”(j)�”}”(hŒ``unsigned count``”h]”j)�”}”(hjAh]”hŒunsigned count”…”�”}”(hj Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjAubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M.hjAubj2)�”}”(hhh]”hÝ)�”}”(hŒ*the number of device numbers to unregister”h]”hŒ*the number of device numbers to unregister”…”�”}”(hj7Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3Ah´M.hj4Aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjAubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3Ah´M.hjÜ@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÀ@ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjYAh]”hŒ Description”…”�”}”(hj[Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjWAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M0hjÀ@ubhÝ)�”}”(hŒ³This function will unregister a range of **count** device numbers, starting with **from**. The caller should normally be the one who allocated those numbers in the first place...”h]”(hŒ)This function will unregister a range of ”…”�”}”(hjoAh²hh³Nh´Nubjõ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjwAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjoAubhŒ device numbers, starting with ”…”�”}”(hjoAh²hh³Nh´Nubjõ)�”}”(hŒ**from**”h]”hŒfrom”…”�”}”(hj‰Ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjoAubhŒZ. The caller should normally be the one who allocated those numbers in the first place...”…”�”}”(hjoAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M/hjÀ@ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ __unregister_chrdev (C function)”Œc.__unregister_chrdev”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒkvoid __unregister_chrdev (unsigned int major, unsigned int baseminor, unsigned int count, const char *name)”h]”j)�”}”(hŒjvoid __unregister_chrdev(unsigned int major, unsigned int baseminor, unsigned int count, const char *name)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÂAh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¾Ah²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑAh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾Ah²hh³jÐAh´MBubj{)�”}”(hŒ__unregister_chrdev”h]”j�)�”}”(hŒ__unregister_chrdev”h]”hŒ__unregister_chrdev”…”�”}”(hjãAh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjßAubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¾Ah²hh³jÐAh´MBubjœ)�”}”(hŒR(unsigned int major, unsigned int baseminor, unsigned int count, const char *name)”h]”(j¢)�”}”(hŒunsigned int major”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÿAh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjûAubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjûAubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjûAubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjûAubj�)�”}”(hŒmajor”h]”hŒmajor”…”�”}”(hj7Bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjûAubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷Aubj¢)�”}”(hŒunsigned int baseminor”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjPBh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjLBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjLBubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjlBh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjLBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjLBubj�)�”}”(hŒ baseminor”h]”hŒ baseminor”…”�”}”(hjˆBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷Aubj¢)�”}”(hŒunsigned int count”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¡Bh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�Bubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Bubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj½Bh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�Bubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËBh²hh³Nh´Nubah}”(h]”h ]”j>ah"•ù]”h$]”h&]”uh1j1hj�Bubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjÙBh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷Aubj¢)�”}”(hŒconst char *name”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjòBh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjîBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿBh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîBubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj Ch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîBubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj)Ch²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjîBubj�)�”}”(hŒname”h]”hŒname”…”�”}”(hj6Ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjîBubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj÷Aubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¾Ah²hh³jÐAh´MBubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjºAh²hh³jÐAh´MBubah}”(h]”jµAah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÐAh´MBhj·Ah²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒunregister and destroy a cdev”h]”hŒunregister and destroy a cdev”…”�”}”(hj`Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MBhj]Ch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj·Ah²hh³jÐAh´MBubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjxCjæjxCjç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hX±**Parameters** ``unsigned int major`` major device number ``unsigned int baseminor`` first of the range of minor numbers ``unsigned int count`` the number of minor numbers this cdev is occupying ``const char *name`` name of this range of devices **Description** Unregister and destroy the cdev occupying the region described by **major**, **baseminor** and **count**. This function undoes what __register_chrdev() did.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‚Ch]”hŒ Parameters”…”�”}”(hj„Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€Cubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MFhj|Cubj )�”}”(hhh]”(j)�”}”(hŒ+``unsigned int major`` major device number ”h]”(j)�”}”(hŒ``unsigned int major``”h]”j)�”}”(hj¡Ch]”hŒunsigned int major”…”�”}”(hj£Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸCubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MChj›Cubj2)�”}”(hhh]”hÝ)�”}”(hŒmajor device number”h]”hŒmajor device number”…”�”}”(hjºCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶Ch´MChj·Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶Ch´MChj˜Cubj)�”}”(hŒ?``unsigned int baseminor`` first of the range of minor numbers ”h]”(j)�”}”(hŒ``unsigned int baseminor``”h]”j)�”}”(hjÚCh]”hŒunsigned int baseminor”…”�”}”(hjÜCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØCubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MDhjÔCubj2)�”}”(hhh]”hÝ)�”}”(hŒ#first of the range of minor numbers”h]”hŒ#first of the range of minor numbers”…”�”}”(hjóCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïCh´MDhjðCubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïCh´MDhj˜Cubj)�”}”(hŒJ``unsigned int count`` the number of minor numbers this cdev is occupying ”h]”(j)�”}”(hŒ``unsigned int count``”h]”j)�”}”(hjDh]”hŒunsigned int count”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MEhj Dubj2)�”}”(hhh]”hÝ)�”}”(hŒ2the number of minor numbers this cdev is occupying”h]”hŒ2the number of minor numbers this cdev is occupying”…”�”}”(hj,Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(Dh´MEhj)Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Dubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(Dh´MEhj˜Cubj)�”}”(hŒ3``const char *name`` name of this range of devices ”h]”(j)�”}”(hŒ``const char *name``”h]”j)�”}”(hjLDh]”hŒconst char *name”…”�”}”(hjNDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJDubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MFhjFDubj2)�”}”(hhh]”hÝ)�”}”(hŒname of this range of devices”h]”hŒname of this range of devices”…”�”}”(hjeDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jaDh´MFhjbDubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjFDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jaDh´MFhj˜Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj|CubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‡Dh]”hŒ Description”…”�”}”(hj‰Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MHhj|CubhÝ)�”}”(hŒ�Unregister and destroy the cdev occupying the region described by **major**, **baseminor** and **count**. This function undoes what __register_chrdev() did.”h]”(hŒBUnregister and destroy the cdev occupying the region described by ”…”�”}”(hj�Dh²hh³Nh´Nubjõ)�”}”(hŒ **major**”h]”hŒmajor”…”�”}”(hj¥Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�DubhŒ, ”…”�”}”(hj�Dh²hh³Nh´Nubjõ)�”}”(hŒ **baseminor**”h]”hŒ baseminor”…”�”}”(hj·Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�DubhŒ and ”…”�”}”(hj�Dh²hh³Nh´Nubjõ)�”}”(hŒ **count**”h]”hŒcount”…”�”}”(hjÉDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�DubhŒ5. This function undoes what __register_chrdev() did.”…”�”}”(hj�Dh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MGhj|Cubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcdev_add (C function)”Œ c.cdev_add”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int cdev_add (struct cdev *p, dev_t dev, unsigned count)”h]”j)�”}”(hŒ7int cdev_add(struct cdev *p, dev_t dev, unsigned count)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþDh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþDh²hh³jEh´MÓubj{)�”}”(hŒcdev_add”h]”j�)�”}”(hŒcdev_add”h]”hŒcdev_add”…”�”}”(hj#Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjEubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjþDh²hh³jEh´MÓubjœ)�”}”(hŒ+(struct cdev *p, dev_t dev, unsigned count)”h]”(j¢)�”}”(hŒstruct cdev *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj?Eh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;Eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;Eubh)�”}”(hhh]”j�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hj]Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZEubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_EŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j%EsbŒ c.cdev_add”†”asbuh1hhj;Eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;Eubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹Eh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;Eubj�)�”}”(hjïh]”hŒp”…”�”}”(hj˜Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;Eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7Eubj¢)�”}”(hŒ dev_t dev”h]”(h)�”}”(hhh]”j�)�”}”(hŒdev_t”h]”hŒdev_t”…”�”}”(hj³Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°Eubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jµEŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jyEŒ c.cdev_add”†”asbuh1hhj¬Eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÑEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¬Eubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjßEh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬Eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7Eubj¢)�”}”(hŒunsigned count”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjøEh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjôEubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôEubj�)�”}”(hŒcount”h]”hŒcount”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôEubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7Eubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjþDh²hh³jEh´MÓubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjúDh²hh³jEh´MÓubah}”(h]”jõDah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jEh´MÓhj÷Dh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒadd a char device to the system”h]”hŒadd a char device to the system”…”�”}”(hj>Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MÓhj;Fh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj÷Dh²hh³jEh´MÓubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjVFjæjVFjç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hX�**Parameters** ``struct cdev *p`` the cdev structure for the device ``dev_t dev`` the first device number for which this device is responsible ``unsigned count`` the number of consecutive minor numbers corresponding to this device **Description** cdev_add() adds the device represented by **p** to the system, making it live immediately. A negative error code is returned on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj`Fh]”hŒ Parameters”…”�”}”(hjbFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^Fubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M×hjZFubj )�”}”(hhh]”(j)�”}”(hŒ5``struct cdev *p`` the cdev structure for the device ”h]”(j)�”}”(hŒ``struct cdev *p``”h]”j)�”}”(hjFh]”hŒstruct cdev *p”…”�”}”(hj�Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MÔhjyFubj2)�”}”(hhh]”hÝ)�”}”(hŒ!the cdev structure for the device”h]”hŒ!the cdev structure for the device”…”�”}”(hj˜Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”Fh´MÔhj•Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjyFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”Fh´MÔhjvFubj)�”}”(hŒK``dev_t dev`` the first device number for which this device is responsible ”h]”(j)�”}”(hŒ ``dev_t dev``”h]”j)�”}”(hj¸Fh]”hŒ dev_t dev”…”�”}”(hjºFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¶Fubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MÕhj²Fubj2)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hj€Gh²hh³j’Gh´Møubj{)�”}”(hŒcdev_set_parent”h]”j�)�”}”(hŒcdev_set_parent”h]”hŒcdev_set_parent”…”�”}”(hj¥Gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡Gubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj€Gh²hh³j’Gh´Møubjœ)�”}”(hŒ&(struct cdev *p, struct kobject *kobj)”h]”(j¢)�”}”(hŒstruct cdev *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÁGh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj½Gubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½Gubh)�”}”(hhh]”j�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjßGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jáGŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j§GsbŒc.cdev_set_parent”†”asbuh1hhj½Gubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿGh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½Gubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj½Gubj�)�”}”(hjïh]”hŒp”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½Gubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¹Gubj¢)�”}”(hŒstruct kobject *kobj”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj2Hh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.Hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.Hubh)�”}”(hhh]”j�)�”}”(hŒkobject”h]”hŒkobject”…”�”}”(hjPHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jRHŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jûGŒc.cdev_set_parent”†”asbuh1hhj.Hubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.Hubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj|Hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj.Hubj�)�”}”(hŒkobj”h]”hŒkobj”…”�”}”(hj‰Hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.Hubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¹Gubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj€Gh²hh³j’Gh´Møubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj|Gh²hh³j’Gh´Møubah}”(h]”jwGah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j’Gh´MøhjyGh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(set the parent kobject for a char device”h]”hŒ(set the parent kobject for a char device”…”�”}”(hj³Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Møhj°Hh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjyGh²hh³j’Gh´Møubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjËHjæjËHjç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hX***Parameters** ``struct cdev *p`` the cdev structure ``struct kobject *kobj`` the kobject to take a reference to **Description** cdev_set_parent() sets a parent kobject which will be referenced appropriately so the parent is not freed before the cdev. This should be called before cdev_add.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÕHh]”hŒ Parameters”…”�”}”(hj×Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓHubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MühjÏHubj )�”}”(hhh]”(j)�”}”(hŒ&``struct cdev *p`` the cdev structure ”h]”(j)�”}”(hŒ``struct cdev *p``”h]”j)�”}”(hjôHh]”hŒstruct cdev *p”…”�”}”(hjöHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòHubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MùhjîHubj2)�”}”(hhh]”hÝ)�”}”(hŒthe cdev structure”h]”hŒthe cdev structure”…”�”}”(hj Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Ih´Mùhj Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjîHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Ih´MùhjëHubj)�”}”(hŒ<``struct kobject *kobj`` the kobject to take a reference to ”h]”(j)�”}”(hŒ``struct kobject *kobj``”h]”j)�”}”(hj-Ih]”hŒstruct kobject *kobj”…”�”}”(hj/Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Múhj'Iubj2)�”}”(hhh]”hÝ)�”}”(hŒ"the kobject to take a reference to”h]”hŒ"the kobject to take a reference to”…”�”}”(hjFIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jBIh´MúhjCIubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj'Iubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jBIh´MúhjëHubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÏHubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjhIh]”hŒ Description”…”�”}”(hjjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MühjÏHubhÝ)�”}”(hŒ¡cdev_set_parent() sets a parent kobject which will be referenced appropriately so the parent is not freed before the cdev. This should be called before cdev_add.”h]”hŒ¡cdev_set_parent() sets a parent kobject which will be referenced appropriately so the parent is not freed before the cdev. This should be called before cdev_add.”…”�”}”(hj~Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MûhjÏHubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcdev_device_add (C function)”Œc.cdev_device_add”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;int cdev_device_add (struct cdev *cdev, struct device *dev)”h]”j)�”}”(hŒ:int cdev_device_add(struct cdev *cdev, struct device *dev)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj­Ih²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj©Ih²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼Ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©Ih²hh³j»Ih´Mubj{)�”}”(hŒcdev_device_add”h]”j�)�”}”(hŒcdev_device_add”h]”hŒcdev_device_add”…”�”}”(hjÎIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊIubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj©Ih²hh³j»Ih´Mubjœ)�”}”(hŒ'(struct cdev *cdev, struct device *dev)”h]”(j¢)�”}”(hŒstruct cdev *cdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjêIh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjæIubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷Ih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæIubh)�”}”(hhh]”j�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j JŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÐIsbŒc.cdev_device_add”†”asbuh1hhjæIubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(Jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæIubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj6Jh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjæIubj�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjCJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæIubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjâIubj¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj\Jh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjXJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjiJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXJubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjzJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjwJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j|JŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j$JŒc.cdev_device_add”†”asbuh1hhjXJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜Jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjXJubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¦Jh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjXJubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj³Jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjXJubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjâIubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj©Ih²hh³j»Ih´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¥Ih²hh³j»Ih´Mubah}”(h]”j Iah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j»Ih´Mhj¢Ih²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ?add a char device and it's corresponding struct device, linkink”h]”hŒAadd a char device and it’s corresponding struct device, linkink”…”�”}”(hjÝJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MhjÚJh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¢Ih²hh³j»Ih´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjõJjæjõJjç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hXÍ**Parameters** ``struct cdev *cdev`` the cdev structure ``struct device *dev`` the device structure **Description** cdev_device_add() adds the char device represented by **cdev** to the system, just as cdev_add does. It then adds **dev** to the system using device_add The dev_t for the char device will be taken from the struct device which needs to be initialized first. This helper function correctly takes a reference to the parent device so the parent will not get released until all references to the cdev are released. This helper uses dev->devt for the device number. If it is not set it will not add the cdev and it will be equivalent to device_add. This function should be used whenever the struct cdev and the struct device are members of the same structure whose lifetime is managed by the struct device. **NOTE** Callers must assume that userspace was able to open the cdev and can call cdev fops callbacks at any time, even if this function fails.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÿJh]”hŒ Parameters”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjýJubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M hjùJubj )�”}”(hhh]”(j)�”}”(hŒ)``struct cdev *cdev`` the cdev structure ”h]”(j)�”}”(hŒ``struct cdev *cdev``”h]”j)�”}”(hjKh]”hŒstruct cdev *cdev”…”�”}”(hj Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M hjKubj2)�”}”(hhh]”hÝ)�”}”(hŒthe cdev structure”h]”hŒthe cdev structure”…”�”}”(hj7Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3Kh´M hj4Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3Kh´M hjKubj)�”}”(hŒ,``struct device *dev`` the device structure ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjWKh]”hŒstruct device *dev”…”�”}”(hjYKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjUKubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M hjQKubj2)�”}”(hhh]”hÝ)�”}”(hŒthe device structure”h]”hŒthe device structure”…”�”}”(hjpKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlKh´M hjmKubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQKubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlKh´M hjKubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjùJubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj’Kh]”hŒ Description”…”�”}”(hj”Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M hjùJubhÝ)�”}”(hX™cdev_device_add() adds the char device represented by **cdev** to the system, just as cdev_add does. It then adds **dev** to the system using device_add The dev_t for the char device will be taken from the struct device which needs to be initialized first. This helper function correctly takes a reference to the parent device so the parent will not get released until all references to the cdev are released.”h]”(hŒ6cdev_device_add() adds the char device represented by ”…”�”}”(hj¨Kh²hh³Nh´Nubjõ)�”}”(hŒ**cdev**”h]”hŒcdev”…”�”}”(hj°Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¨KubhŒ4 to the system, just as cdev_add does. It then adds ”…”�”}”(hj¨Kh²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjÂKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¨KubhX  to the system using device_add The dev_t for the char device will be taken from the struct device which needs to be initialized first. This helper function correctly takes a reference to the parent device so the parent will not get released until all references to the cdev are released.”…”�”}”(hj¨Kh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M hjùJubhÝ)�”}”(hŒ„This helper uses dev->devt for the device number. If it is not set it will not add the cdev and it will be equivalent to device_add.”h]”hŒ„This helper uses dev->devt for the device number. If it is not set it will not add the cdev and it will be equivalent to device_add.”…”�”}”(hjÛKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MhjùJubhÝ)�”}”(hŒ�This function should be used whenever the struct cdev and the struct device are members of the same structure whose lifetime is managed by the struct device.”h]”hŒ�This function should be used whenever the struct cdev and the struct device are members of the same structure whose lifetime is managed by the struct device.”…”�”}”(hjêKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MhjùJubhÝ)�”}”(hŒ**NOTE**”h]”jõ)�”}”(hjûKh]”hŒNOTE”…”�”}”(hjýKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjùKubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MhjùJubhÝ)�”}”(hŒ‡Callers must assume that userspace was able to open the cdev and can call cdev fops callbacks at any time, even if this function fails.”h]”hŒ‡Callers must assume that userspace was able to open the cdev and can call cdev fops callbacks at any time, even if this function fails.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MhjùJubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcdev_device_del (C function)”Œc.cdev_device_del”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjah"]”h$]”h&]”uh1j1hjyLubh)�”}”(hhh]”j�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hj›Lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜Lubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�LŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jcLsbŒc.cdev_device_del”†”asbuh1hhjyLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyLubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÉLh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjyLubj�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjÖLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuLubj¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjïLh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjëLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëLubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj Mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jMŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j·LŒc.cdev_device_del”†”asbuh1hhjëLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+Mh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëLubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj9Mh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjëLubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjFMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëLubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuLubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjdevt is not set it will not remove the cdev and will be equivalent to device_del. **NOTE** This guarantees that associated sysfs callbacks are not running or runnable, however any cdevs already open will remain and their fops will still be callable even after this function returns.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj’Mh]”hŒ Parameters”…”�”}”(hj”Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M5hjŒMubj )�”}”(hhh]”(j)�”}”(hŒ)``struct cdev *cdev`` the cdev structure ”h]”(j)�”}”(hŒ``struct cdev *cdev``”h]”j)�”}”(hj±Mh]”hŒstruct cdev *cdev”…”�”}”(hj³Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M2hj«Mubj2)�”}”(hhh]”hÝ)�”}”(hŒthe cdev structure”h]”hŒthe cdev structure”…”�”}”(hjÊMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÆMh´M2hjÇMubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj«Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÆMh´M2hj¨Mubj)�”}”(hŒ,``struct device *dev`` the device structure ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjêMh]”hŒstruct device *dev”…”�”}”(hjìMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjèMubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M3hjäMubj2)�”}”(hhh]”hÝ)�”}”(hŒthe device structure”h]”hŒthe device structure”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÿMh´M3hjNubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjäMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÿMh´M3hj¨Mubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjŒMubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj%Nh]”hŒ Description”…”�”}”(hj'Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M5hjŒMubhÝ)�”}”(hŒ{cdev_device_del() is a helper function to call cdev_del and device_del. It should be used whenever cdev_device_add is used.”h]”hŒ{cdev_device_del() is a helper function to call cdev_del and device_del. It should be used whenever cdev_device_add is used.”…”�”}”(hj;Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M4hjŒMubhÝ)�”}”(hŒYIf dev->devt is not set it will not remove the cdev and will be equivalent to device_del.”h]”hŒYIf dev->devt is not set it will not remove the cdev and will be equivalent to device_del.”…”�”}”(hjJNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M7hjŒMubhÝ)�”}”(hŒ**NOTE**”h]”jõ)�”}”(hj[Nh]”hŒNOTE”…”�”}”(hj]Nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjYNubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M:hjŒMubhÝ)�”}”(hŒ¿This guarantees that associated sysfs callbacks are not running or runnable, however any cdevs already open will remain and their fops will still be callable even after this function returns.”h]”hŒ¿This guarantees that associated sysfs callbacks are not running or runnable, however any cdevs already open will remain and their fops will still be callable even after this function returns.”…”�”}”(hjqNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M;hjŒMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcdev_del (C function)”Œ c.cdev_del”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid cdev_del (struct cdev *p)”h]”j)�”}”(hŒvoid cdev_del(struct cdev *p)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj Nh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjœNh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MLubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯Nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœNh²hh³j®Nh´MLubj{)�”}”(hŒcdev_del”h]”j�)�”}”(hŒcdev_del”h]”hŒcdev_del”…”�”}”(hjÁNh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½Nubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjœNh²hh³j®Nh´MLubjœ)�”}”(hŒ(struct cdev *p)”h]”j¢)�”}”(hŒstruct cdev *p”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÝNh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÙNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêNh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙNubh)�”}”(hhh]”j�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjûNh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjøNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jýNŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÃNsbŒ c.cdev_del”†”asbuh1hhjÙNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙNubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj)Oh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÙNubj�)�”}”(hjïh]”hŒp”…”�”}”(hj6Oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕNubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjœNh²hh³j®Nh´MLubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj˜Nh²hh³j®Nh´MLubah}”(h]”j“Nah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j®Nh´MLhj•Nh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒremove a cdev from the system”h]”hŒremove a cdev from the system”…”�”}”(hj_Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MLhj\Oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj•Nh²hh³j®Nh´MLubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjwOjæjwOjç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hXg**Parameters** ``struct cdev *p`` the cdev structure to be removed **Description** cdev_del() removes **p** from the system, possibly freeing the structure itself. **NOTE** This guarantees that cdev device will no longer be able to be opened, however any cdevs already open will remain and their fops will still be callable even after cdev_del returns.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�Oh]”hŒ Parameters”…”�”}”(hjƒOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MPhj{Oubj )�”}”(hhh]”j)�”}”(hŒ4``struct cdev *p`` the cdev structure to be removed ”h]”(j)�”}”(hŒ``struct cdev *p``”h]”j)�”}”(hj Oh]”hŒstruct cdev *p”…”�”}”(hj¢Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžOubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MMhjšOubj2)�”}”(hhh]”hÝ)�”}”(hŒ the cdev structure to be removed”h]”hŒ the cdev structure to be removed”…”�”}”(hj¹Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµOh´MMhj¶Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjšOubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµOh´MMhj—Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj{OubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÛOh]”hŒ Description”…”�”}”(hjÝOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙOubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MOhj{OubhÝ)�”}”(hŒPcdev_del() removes **p** from the system, possibly freeing the structure itself.”h]”(hŒcdev_del() removes ”…”�”}”(hjñOh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjùOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjñOubhŒ8 from the system, possibly freeing the structure itself.”…”�”}”(hjñOh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MNhj{OubhÝ)�”}”(hŒ**NOTE**”h]”jõ)�”}”(hjPh]”hŒNOTE”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MQhj{OubhÝ)�”}”(hŒ³This guarantees that cdev device will no longer be able to be opened, however any cdevs already open will remain and their fops will still be callable even after cdev_del returns.”h]”hŒ³This guarantees that cdev device will no longer be able to be opened, however any cdevs already open will remain and their fops will still be callable even after cdev_del returns.”…”�”}”(hj*Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MRhj{Oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcdev_alloc (C function)”Œ c.cdev_alloc”hNt”auh1hýhjD6h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒstruct cdev * cdev_alloc (void)”h]”j)�”}”(hŒstruct cdev *cdev_alloc(void)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjYPh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjUPh²hh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´Myubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUPh²hh³jfPh´Myubh)�”}”(hhh]”j�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjxPh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuPubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jzPŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ cdev_alloc”sbŒ c.cdev_alloc”†”asbuh1hhjUPh²hh³jfPh´Myubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Ph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUPh²hh³jfPh´Myubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj§Ph²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjUPh²hh³jfPh´Myubj{)�”}”(hŒ cdev_alloc”h]”j�)�”}”(hj–Ph]”hŒ cdev_alloc”…”�”}”(hj¸Ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´Pubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjUPh²hh³jfPh´Myubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÓPh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÏPubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjËPubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjUPh²hh³jfPh´Myubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjQPh²hh³jfPh´Myubah}”(h]”jLPah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jfPh´MyhjNPh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒallocate a cdev structure”h]”hŒallocate a cdev structure”…”�”}”(hjýPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MyhjúPh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjNPh²hh³jfPh´Myubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjQjæjQjç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hŒu**Parameters** ``void`` no arguments **Description** Allocates and returns a cdev structure, or NULL on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjQh]”hŒ Parameters”…”�”}”(hj!Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjQubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M}hjQubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj>Qh]”hŒvoid”…”�”}”(hj@Qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjah"]”h$]”h&]”uh1j1hjºQh²hh³jÌQh´Mˆubj{)�”}”(hŒ cdev_init”h]”j�)�”}”(hŒ cdev_init”h]”hŒ cdev_init”…”�”}”(hjßQh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛQubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjºQh²hh³jÌQh´Mˆubjœ)�”}”(hŒ7(struct cdev *cdev, const struct file_operations *fops)”h]”(j¢)�”}”(hŒstruct cdev *cdev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjûQh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj÷Qubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷Qubh)�”}”(hhh]”j�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jRŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jáQsbŒ c.cdev_init”†”asbuh1hhj÷Qubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷Qubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjGRh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷Qubj�)�”}”(hŒcdev”h]”hŒcdev”…”�”}”(hjTRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷Qubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóQubj¢)�”}”(hŒ"const struct file_operations *fops”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjmRh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjiRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjiRubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjˆRh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjiRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•Rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjiRubh)�”}”(hhh]”j�)�”}”(hŒfile_operations”h]”hŒfile_operations”…”�”}”(hj¦Rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£Rubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¨RŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j5RŒ c.cdev_init”†”asbuh1hhjiRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄRh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjiRubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÒRh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjiRubj�)�”}”(hŒfops”h]”hŒfops”…”�”}”(hjßRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiRubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjóQubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjºQh²hh³jÌQh´Mˆubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¶Qh²hh³jÌQh´Mˆubah}”(h]”j±Qah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÌQh´Mˆhj³Qh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒinitialize a cdev structure”h]”hŒinitialize a cdev structure”…”�”}”(hj Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MˆhjSh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj³Qh²hh³jÌQh´Mˆubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj!Sjæj!Sjç‰jè‰jé‰uh1jh²hhjD6h³Nh´Nubjë)�”}”(hX**Parameters** ``struct cdev *cdev`` the structure to initialize ``const struct file_operations *fops`` the file_operations for this device **Description** Initializes **cdev**, remembering **fops**, making it ready to add to the system with cdev_add().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj+Sh]”hŒ Parameters”…”�”}”(hj-Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)Subah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MŒhj%Subj )�”}”(hhh]”(j)�”}”(hŒ2``struct cdev *cdev`` the structure to initialize ”h]”(j)�”}”(hŒ``struct cdev *cdev``”h]”j)�”}”(hjJSh]”hŒstruct cdev *cdev”…”�”}”(hjLSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHSubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M‰hjDSubj2)�”}”(hhh]”hÝ)�”}”(hŒthe structure to initialize”h]”hŒthe structure to initialize”…”�”}”(hjcSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j_Sh´M‰hj`Subah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjDSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j_Sh´M‰hjASubj)�”}”(hŒK``const struct file_operations *fops`` the file_operations for this device ”h]”(j)�”}”(hŒ&``const struct file_operations *fops``”h]”j)�”}”(hjƒSh]”hŒ"const struct file_operations *fops”…”�”}”(hj…Sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MŠhj}Subj2)�”}”(hhh]”hÝ)�”}”(hŒ#the file_operations for this device”h]”hŒ#the file_operations for this device”…”�”}”(hjœSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j˜Sh´MŠhj™Subah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj}Subeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˜Sh´MŠhjASubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj%SubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¾Sh]”hŒ Description”…”�”}”(hjÀSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼Subah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´MŒhj%SubhÝ)�”}”(hŒaInitializes **cdev**, remembering **fops**, making it ready to add to the system with cdev_add().”h]”(hŒ Initializes ”…”�”}”(hjÔSh²hh³Nh´Nubjõ)�”}”(hŒ**cdev**”h]”hŒcdev”…”�”}”(hjÜSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔSubhŒ, remembering ”…”�”}”(hjÔSh²hh³Nh´Nubjõ)�”}”(hŒ**fops**”h]”hŒfops”…”�”}”(hjîSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔSubhŒ7, making it ready to add to the system with cdev_add().”…”�”}”(hjÔSh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒR/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:351: ./fs/char_dev.c”h´M‹hj%Subeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjD6h²hh³Nh´Nubeh}”(h]”Œ char-devices”ah ]”h"]”Œ char devices”ah$]”h&]”uh1hµhh·h²hh³hÊh´M]ubh¶)�”}”(hhh]”(h»)�”}”(hŒClock Framework”h]”hŒClock Framework”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhjTh²hh³hÊh´McubhÝ)�”}”(hXgThe clock framework defines programming interfaces to support software management of the system clock tree. This framework is widely used with System-On-Chip (SOC) platforms to support power management and various devices which may need custom clock rates. Note that these "clocks" don't relate to timekeeping or real time clocks (RTCs), each of which have separate frameworks. These :c:type:`struct clk ` instances may be used to manage for example a 96 MHz signal that is used to shift bits into and out of peripherals or busses, or otherwise trigger synchronous state machine transitions in system hardware.”h]”(hX†The clock framework defines programming interfaces to support software management of the system clock tree. This framework is widely used with System-On-Chip (SOC) platforms to support power management and various devices which may need custom clock rates. Note that these “clocksâ€� don’t relate to timekeeping or real time clocks (RTCs), each of which have separate frameworks. These ”…”�”}”(hj'Th²hh³Nh´Nubh)�”}”(hŒ:c:type:`struct clk `”h]”j)�”}”(hj1Th]”hŒ struct clk”…”�”}”(hj3Th²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhj/Tubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œclk”uh1hh³hÊh´Mehj'TubhŒÍ instances may be used to manage for example a 96 MHz signal that is used to shift bits into and out of peripherals or busses, or otherwise trigger synchronous state machine transitions in system hardware.”…”�”}”(hj'Th²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´MehjTh²hubhÝ)�”}”(hX_Power management is supported by explicit software clock gating: unused clocks are disabled, so the system doesn't waste power changing the state of transistors that aren't in active use. On some systems this may be backed by hardware clock gating, where clocks are gated without being disabled in software. Sections of chips that are powered but not clocked may be able to retain their last state. This low power state is often called a *retention mode*. This mode still incurs leakage currents, especially with finer circuit geometries, but for CMOS circuits power is mostly used by clocked state changes.”h]”(hXºPower management is supported by explicit software clock gating: unused clocks are disabled, so the system doesn’t waste power changing the state of transistors that aren’t in active use. On some systems this may be backed by hardware clock gating, where clocks are gated without being disabled in software. Sections of chips that are powered but not clocked may be able to retain their last state. This low power state is often called a ”…”�”}”(hjXTh²hh³Nh´Nubjp‡)�”}”(hŒ*retention mode*”h]”hŒretention mode”…”�”}”(hj`Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hjXTubhŒ™. This mode still incurs leakage currents, especially with finer circuit geometries, but for CMOS circuits power is mostly used by clocked state changes.”…”�”}”(hjXTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´MohjTh²hubhÝ)�”}”(hXPower-aware drivers only enable their clocks when the device they manage is in active use. Also, system sleep states often differ according to which clock domains are active: while a "standby" state may allow wakeup from several active domains, a "mem" (suspend-to-RAM) state may require a more wholesale shutdown of clocks derived from higher speed PLLs and oscillators, limiting the number of possible wakeup event sources. A driver's suspend method may need to be aware of system-specific clock constraints on the target sleep state.”h]”hX"Power-aware drivers only enable their clocks when the device they manage is in active use. Also, system sleep states often differ according to which clock domains are active: while a “standbyâ€� state may allow wakeup from several active domains, a “memâ€� (suspend-to-RAM) state may require a more wholesale shutdown of clocks derived from higher speed PLLs and oscillators, limiting the number of possible wakeup event sources. A driver’s suspend method may need to be aware of system-specific clock constraints on the target sleep state.”…”�”}”(hjxTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´MyhjTh²hubhÝ)�”}”(hŒÏSome platforms support programmable clock generators. These can be used by external chips of various kinds, such as other CPUs, multimedia codecs, and devices with strict requirements for interface clocking.”h]”hŒÏSome platforms support programmable clock generators. These can be used by external chips of various kinds, such as other CPUs, multimedia codecs, and devices with strict requirements for interface clocking.”…”�”}”(hj†Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³hÊh´M‚hjTh²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_notifier (C struct)”Œc.clk_notifier”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ clk_notifier”h]”j)�”}”(hŒstruct clk_notifier”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj­Th²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj©Th²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»Th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©Th²hh³jºTh´Kubj{)�”}”(hŒ clk_notifier”h]”j�)�”}”(hj§Th]”hŒ clk_notifier”…”�”}”(hjÍTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉTubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj©Th²hh³jºTh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¥Th²hh³jºTh´Kubah}”(h]”j Tah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jºTh´Khj¢Th²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒassociate a clk with a notifier”h]”hŒassociate a clk with a notifier”…”�”}”(hjïTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K,hjìTh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¢Th²hh³jºTh´Kubeh}”(h]”h ]”(jߌstruct”eh"]”h$]”h&]”jäjßjåjUjæjUjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX[**Definition**:: struct clk_notifier { struct clk *clk; struct srcu_notifier_head notifier_head; struct list_head node; }; **Members** ``clk`` struct clk * to associate the notifier with ``notifier_head`` a blocking_notifier_head for this clk ``node`` linked list pointers”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jõ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjUubhŒ:”…”�”}”(hjUh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K0hj Uubj‘H)�”}”(hŒŸstruct clk_notifier { struct clk *clk; struct srcu_notifier_head notifier_head; struct list_head node; };”h]”hŒŸstruct clk_notifier { struct clk *clk; struct srcu_notifier_head notifier_head; struct list_head node; };”…”�”}”hj,Usbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K2hj UubhÝ)�”}”(hŒ **Members**”h]”jõ)�”}”(hj=Uh]”hŒMembers”…”�”}”(hj?Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;Uubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K8hj Uubj )�”}”(hhh]”(j)�”}”(hŒ4``clk`` struct clk * to associate the notifier with ”h]”(j)�”}”(hŒ``clk``”h]”j)�”}”(hj\Uh]”hŒclk”…”�”}”(hj^Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZUubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K.hjVUubj2)�”}”(hhh]”hÝ)�”}”(hŒ+struct clk * to associate the notifier with”h]”hŒ+struct clk * to associate the notifier with”…”�”}”(hjuUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jqUh´K.hjrUubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjVUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqUh´K.hjSUubj)�”}”(hŒ8``notifier_head`` a blocking_notifier_head for this clk ”h]”(j)�”}”(hŒ``notifier_head``”h]”j)�”}”(hj•Uh]”hŒ notifier_head”…”�”}”(hj—Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“Uubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K/hj�Uubj2)�”}”(hhh]”hÝ)�”}”(hŒ%a blocking_notifier_head for this clk”h]”hŒ%a blocking_notifier_head for this clk”…”�”}”(hj®Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jªUh´K/hj«Uubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Uubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªUh´K/hjSUubj)�”}”(hŒ``node`` linked list pointers”h]”(j)�”}”(hŒ``node``”h]”j)�”}”(hjÎUh]”hŒnode”…”�”}”(hjÐUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌUubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K/hjÈUubj2)�”}”(hhh]”hÝ)�”}”(hŒlinked list pointers”h]”hŒlinked list pointers”…”�”}”(hjçUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K0hjäUubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈUubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãUh´K/hjSUubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj Uubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´NubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjVh]”hŒ Description”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K3hjTh²hubhÝ)�”}”(hŒßA list of struct clk_notifier is maintained by the notifier code. An entry is created whenever code registers the first notifier on a particular **clk**. Future notifiers on that **clk** are added to the **notifier_head**.”h]”(hŒ‘A list of struct clk_notifier is maintained by the notifier code. An entry is created whenever code registers the first notifier on a particular ”…”�”}”(hj'Vh²hh³Nh´Nubjõ)�”}”(hŒ**clk**”h]”hŒclk”…”�”}”(hj/Vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'VubhŒ. Future notifiers on that ”…”�”}”(hj'Vh²hh³Nh´Nubjõ)�”}”(hŒ**clk**”h]”hŒclk”…”�”}”(hjAVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'VubhŒ are added to the ”…”�”}”(hj'Vh²hh³Nh´Nubjõ)�”}”(hŒ**notifier_head**”h]”hŒ notifier_head”…”�”}”(hjSVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'VubhŒ.”…”�”}”(hj'Vh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K0hjTh²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_notifier_data (C struct)”Œc.clk_notifier_data”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒclk_notifier_data”h]”j)�”}”(hŒstruct clk_notifier_data”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj…Vh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�Vh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K8ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Vh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Vh²hh³j’Vh´K8ubj{)�”}”(hŒclk_notifier_data”h]”j�)�”}”(hjVh]”hŒclk_notifier_data”…”�”}”(hj¥Vh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡Vubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�Vh²hh³j’Vh´K8ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj}Vh²hh³j’Vh´K8ubah}”(h]”jxVah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j’Vh´K8hjzVh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*rate data to pass to the notifier callback”h]”hŒ*rate data to pass to the notifier callback”…”�”}”(hjÇVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K=hjÄVh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjzVh²hh³j’Vh´K8ubeh}”(h]”h ]”(jߌstruct”eh"]”h$]”h&]”jäjßjåjßVjæjßVjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX)**Definition**:: struct clk_notifier_data { struct clk *clk; unsigned long old_rate; unsigned long new_rate; }; **Members** ``clk`` struct clk * being changed ``old_rate`` previous rate of this clk ``new_rate`` new rate of this clk”•h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jõ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjëVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjçVubhŒ:”…”�”}”(hjçVh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KAhjãVubj‘H)�”}”(hŒ‹struct clk_notifier_data { struct clk *clk; unsigned long old_rate; unsigned long new_rate; };”h]”hŒ‹struct clk_notifier_data { struct clk *clk; unsigned long old_rate; unsigned long new_rate; };”…”�”}”hjWsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KChjãVubhÝ)�”}”(hŒ **Members**”h]”jõ)�”}”(hjWh]”hŒMembers”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KIhjãVubj )�”}”(hhh]”(j)�”}”(hŒ#``clk`` struct clk * being changed ”h]”(j)�”}”(hŒ``clk``”h]”j)�”}”(hj4Wh]”hŒclk”…”�”}”(hj6Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K?hj.Wubj2)�”}”(hhh]”hÝ)�”}”(hŒstruct clk * being changed”h]”hŒstruct clk * being changed”…”�”}”(hjMWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jIWh´K?hjJWubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIWh´K?hj+Wubj)�”}”(hŒ'``old_rate`` previous rate of this clk ”h]”(j)�”}”(hŒ ``old_rate``”h]”j)�”}”(hjmWh]”hŒold_rate”…”�”}”(hjoWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkWubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K@hjgWubj2)�”}”(hhh]”hÝ)�”}”(hŒprevious rate of this clk”h]”hŒprevious rate of this clk”…”�”}”(hj†Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚Wh´K@hjƒWubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjgWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚Wh´K@hj+Wubj)�”}”(hŒ!``new_rate`` new rate of this clk”h]”(j)�”}”(hŒ ``new_rate``”h]”j)�”}”(hj¦Wh]”hŒnew_rate”…”�”}”(hj¨Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K@hj Wubj2)�”}”(hhh]”hÝ)�”}”(hŒnew rate of this clk”h]”hŒnew rate of this clk”…”�”}”(hj¿Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KAhj¼Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»Wh´K@hj+Wubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjãVubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´NubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjéWh]”hŒ Description”…”�”}”(hjëWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjçWubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KDhjTh²hubhÝ)�”}”(hŒÿFor a pre-notifier, old_rate is the clk's rate before this rate change, and new_rate is what the rate will be in the future. For a post-notifier, old_rate and new_rate are both set to the clk's current rate (this was done to optimize the implementation).”h]”hXFor a pre-notifier, old_rate is the clk’s rate before this rate change, and new_rate is what the rate will be in the future. For a post-notifier, old_rate and new_rate are both set to the clk’s current rate (this was done to optimize the implementation).”…”�”}”(hjÿWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KAhjTh²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_bulk_data (C struct)”Œc.clk_bulk_data”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ clk_bulk_data”h]”j)�”}”(hŒstruct clk_bulk_data”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj'Xh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj#Xh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KIubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#Xh²hh³j4Xh´KIubj{)�”}”(hŒ clk_bulk_data”h]”j�)�”}”(hj!Xh]”hŒ clk_bulk_data”…”�”}”(hjGXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCXubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj#Xh²hh³j4Xh´KIubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjXh²hh³j4Xh´KIubah}”(h]”jXah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j4Xh´KIhjXh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"Data used for bulk clk operations.”h]”hŒ"Data used for bulk clk operations.”…”�”}”(hjiXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KNhjfXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjXh²hh³j4Xh´KIubeh}”(h]”h ]”(jߌstruct”eh"]”h$]”h&]”jäjßjåj�Xjæj�Xjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒÕ**Definition**:: struct clk_bulk_data { const char *id; struct clk *clk; }; **Members** ``id`` clock consumer ID ``clk`` struct clk * to store the associated clock”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jõ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hj�Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‰XubhŒ:”…”�”}”(hj‰Xh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KRhj…Xubj‘H)�”}”(hŒ\struct clk_bulk_data { const char *id; struct clk *clk; };”h]”hŒ\struct clk_bulk_data { const char *id; struct clk *clk; };”…”�”}”hj¦Xsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KThj…XubhÝ)�”}”(hŒ **Members**”h]”jõ)�”}”(hj·Xh]”hŒMembers”…”�”}”(hj¹Xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµXubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KYhj…Xubj )�”}”(hhh]”(j)�”}”(hŒ``id`` clock consumer ID ”h]”(j)�”}”(hŒ``id``”h]”j)�”}”(hjÖXh]”hŒid”…”�”}”(hjØXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔXubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KQhjÐXubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hjïXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jëXh´KQhjìXubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÐXubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jëXh´KQhjÍXubj)�”}”(hŒ2``clk`` struct clk * to store the associated clock”h]”(j)�”}”(hŒ``clk``”h]”j)�”}”(hjYh]”hŒclk”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KQhj Yubj2)�”}”(hhh]”hÝ)�”}”(hŒ*struct clk * to store the associated clock”h]”hŒ*struct clk * to store the associated clock”…”�”}”(hj(Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KRhj%Yubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$Yh´KQhjÍXubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj…Xubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´NubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjRYh]”hŒ Description”…”�”}”(hjTYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KUhjTh²hubhÝ)�”}”(hŒ©The CLK APIs provide a series of clk_bulk_() API calls as a convenience to consumers which require multiple clks. This structure is used to manage data for these calls.”h]”hŒ©The CLK APIs provide a series of clk_bulk_() API calls as a convenience to consumers which require multiple clks. This structure is used to manage data for these calls.”…”�”}”(hjhYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KRhjTh²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"clk_notifier_register (C function)”Œc.clk_notifier_register”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFint clk_notifier_register (struct clk *clk, struct notifier_block *nb)”h]”j)�”}”(hŒEint clk_notifier_register(struct clk *clk, struct notifier_block *nb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj�Yh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŒYh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K_ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŸYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŒYh²hh³jžYh´K_ubj{)�”}”(hŒclk_notifier_register”h]”j�)�”}”(hŒclk_notifier_register”h]”hŒclk_notifier_register”…”�”}”(hj±Yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­Yubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŒYh²hh³jžYh´K_ubjœ)�”}”(hŒ,(struct clk *clk, struct notifier_block *nb)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÍYh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÉYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚYh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉYubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjëYh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèYubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jíYŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j³YsbŒc.clk_notifier_register”†”asbuh1hhjÉYubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉYubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÉYubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj&Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉYubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÅYubj¢)�”}”(hŒstruct notifier_block *nb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj?Zh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;Zubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLZh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;Zubh)�”}”(hhh]”j�)�”}”(hŒnotifier_block”h]”hŒnotifier_block”…”�”}”(hj]Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_ZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jZŒc.clk_notifier_register”†”asbuh1hhj;Zubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;Zubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‰Zh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;Zubj�)�”}”(hŒnb”h]”hŒnb”…”�”}”(hj–Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;Zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÅYubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjŒYh²hh³jžYh´K_ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjˆYh²hh³jžYh´K_ubah}”(h]”jƒYah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jžYh´K_hj…Yh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.register a clock rate-change notifier callback”h]”hŒ.register a clock rate-change notifier callback”…”�”}”(hjÀZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K_hj½Zh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj…Yh²hh³jžYh´K_ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjØZjæjØZjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXF**Parameters** ``struct clk *clk`` clock whose rate we are interested in ``struct notifier_block *nb`` notifier block with callback function pointer **Description** ProTip: debugging across notifier chains can be frustrating. Make sure that your notifier callback function prints a nice big warning in case of failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjâZh]”hŒ Parameters”…”�”}”(hjäZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàZubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KchjÜZubj )�”}”(hhh]”(j)�”}”(hŒ:``struct clk *clk`` clock whose rate we are interested in ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj[h]”hŒstruct clk *clk”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿZubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K`hjûZubj2)�”}”(hhh]”hÝ)�”}”(hŒ%clock whose rate we are interested in”h]”hŒ%clock whose rate we are interested in”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[h´K`hj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûZubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[h´K`hjøZubj)�”}”(hŒL``struct notifier_block *nb`` notifier block with callback function pointer ”h]”(j)�”}”(hŒ``struct notifier_block *nb``”h]”j)�”}”(hj:[h]”hŒstruct notifier_block *nb”…”�”}”(hj<[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kahj4[ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-notifier block with callback function pointer”h]”hŒ-notifier block with callback function pointer”…”�”}”(hjS[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jO[h´KahjP[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jO[h´KahjøZubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜZubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hju[h]”hŒ Description”…”�”}”(hjw[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjs[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KchjÜZubhÝ)�”}”(hŒ™ProTip: debugging across notifier chains can be frustrating. Make sure that your notifier callback function prints a nice big warning in case of failure.”h]”hŒ™ProTip: debugging across notifier chains can be frustrating. Make sure that your notifier callback function prints a nice big warning in case of failure.”…”�”}”(hj‹[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KbhjÜZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$clk_notifier_unregister (C function)”Œc.clk_notifier_unregister”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHint clk_notifier_unregister (struct clk *clk, struct notifier_block *nb)”h]”j)�”}”(hŒGint clk_notifier_unregister(struct clk *clk, struct notifier_block *nb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjº[h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶[h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶[h²hh³jÈ[h´Kjubj{)�”}”(hŒclk_notifier_unregister”h]”j�)�”}”(hŒclk_notifier_unregister”h]”hŒclk_notifier_unregister”…”�”}”(hjÛ[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×[ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¶[h²hh³jÈ[h´Kjubjœ)�”}”(hŒ,(struct clk *clk, struct notifier_block *nb)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj÷[h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjó[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjó[ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j\Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÝ[sbŒc.clk_notifier_unregister”†”asbuh1hhjó[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjó[ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjC\h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjó[ubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjP\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjó[ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjï[ubj¢)�”}”(hŒstruct notifier_block *nb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hji\h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hje\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje\ubh)�”}”(hhh]”j�)�”}”(hŒnotifier_block”h]”hŒnotifier_block”…”�”}”(hj‡\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‰\Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j1\Œc.clk_notifier_unregister”†”asbuh1hhje\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje\ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj³\h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhje\ubj�)�”}”(hŒnb”h]”hŒnb”…”�”}”(hjÀ\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hje\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjï[ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¶[h²hh³jÈ[h´Kjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj²[h²hh³jÈ[h´Kjubah}”(h]”j­[ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÈ[h´Kjhj¯[h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0unregister a clock rate-change notifier callback”h]”hŒ0unregister a clock rate-change notifier callback”…”�”}”(hjê\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kjhjç\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¯[h²hh³jÈ[h´Kjubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj]jæj]jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒ **Parameters** ``struct clk *clk`` clock whose rate we are no longer interested in ``struct notifier_block *nb`` notifier block which will be unregistered”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj ]h]”hŒ Parameters”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Knhj]ubj )�”}”(hhh]”(j)�”}”(hŒD``struct clk *clk`` clock whose rate we are no longer interested in ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj+]h]”hŒstruct clk *clk”…”�”}”(hj-]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kkhj%]ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/clock whose rate we are no longer interested in”h]”hŒ/clock whose rate we are no longer interested in”…”�”}”(hjD]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@]h´KkhjA]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@]h´Kkhj"]ubj)�”}”(hŒG``struct notifier_block *nb`` notifier block which will be unregistered”h]”(j)�”}”(hŒ``struct notifier_block *nb``”h]”j)�”}”(hjd]h]”hŒstruct notifier_block *nb”…”�”}”(hjf]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kmhj^]ubj2)�”}”(hhh]”hÝ)�”}”(hŒ)notifier block which will be unregistered”h]”hŒ)notifier block which will be unregistered”…”�”}”(hj}]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Klhjz]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jy]h´Kmhj"]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj]ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'devm_clk_notifier_register (C function)”Œc.devm_clk_notifier_register”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ_int devm_clk_notifier_register (struct device *dev, struct clk *clk, struct notifier_block *nb)”h]”j)�”}”(hŒ^int devm_clk_notifier_register(struct device *dev, struct clk *clk, struct notifier_block *nb)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¾]h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjº]h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjº]h²hh³jÌ]h´Kqubj{)�”}”(hŒdevm_clk_notifier_register”h]”j�)�”}”(hŒdevm_clk_notifier_register”h]”hŒdevm_clk_notifier_register”…”�”}”(hjß]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ]ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjº]h²hh³jÌ]h´Kqubjœ)�”}”(hŒ@(struct device *dev, struct clk *clk, struct notifier_block *nb)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjû]h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj÷]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷]ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j^Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY já]sbŒc.devm_clk_notifier_register”†”asbuh1hhj÷]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷]ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjG^h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷]ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjT^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷]ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjó]ubj¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjm^h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hji^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hji^ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj‹^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆ^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�^Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j5^Œc.devm_clk_notifier_register”†”asbuh1hhji^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hji^ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj·^h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhji^ubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjÄ^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hji^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjó]ubj¢)�”}”(hŒstruct notifier_block *nb”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÝ^h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÙ^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjê^h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙ^ubh)�”}”(hhh]”j�)�”}”(hŒnotifier_block”h]”hŒnotifier_block”…”�”}”(hjû^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjø^ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jý^Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j5^Œc.devm_clk_notifier_register”†”asbuh1hhjÙ^ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÙ^ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj'_h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÙ^ubj�)�”}”(hŒnb”h]”hŒnb”…”�”}”(hj4_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙ^ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjó]ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjº]h²hh³jÌ]h´Kqubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¶]h²hh³jÌ]h´Kqubah}”(h]”j±]ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÌ]h´Kqhj³]h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0register a managed rate-change notifier callback”h]”hŒ0register a managed rate-change notifier callback”…”�”}”(hj^_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kqhj[_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj³]h²hh³jÌ]h´Kqubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjv_jæjv_jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX **Parameters** ``struct device *dev`` device for clock "consumer" ``struct clk *clk`` clock whose rate we are interested in ``struct notifier_block *nb`` notifier block with callback function pointer **Description** Returns 0 on success, -EERROR otherwise”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj€_h]”hŒ Parameters”…”�”}”(hj‚_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kuhjz_ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjŸ_h]”hŒstruct device *dev”…”�”}”(hj¡_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Krhj™_ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj¸_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j´_h´Krhjµ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´_h´Krhj–_ubj)�”}”(hŒ:``struct clk *clk`` clock whose rate we are interested in ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjØ_h]”hŒstruct clk *clk”…”�”}”(hjÚ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KshjÒ_ubj2)�”}”(hhh]”hÝ)�”}”(hŒ%clock whose rate we are interested in”h]”hŒ%clock whose rate we are interested in”…”�”}”(hjñ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jí_h´Kshjî_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÒ_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jí_h´Kshj–_ubj)�”}”(hŒL``struct notifier_block *nb`` notifier block with callback function pointer ”h]”(j)�”}”(hŒ``struct notifier_block *nb``”h]”j)�”}”(hj`h]”hŒstruct notifier_block *nb”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kthj `ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-notifier block with callback function pointer”h]”hŒ-notifier block with callback function pointer”…”�”}”(hj*`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j&`h´Kthj'`ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj `ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&`h´Kthj–_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjz_ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjL`h]”hŒ Description”…”�”}”(hjN`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJ`ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kvhjz_ubhÝ)�”}”(hŒ'Returns 0 on success, -EERROR otherwise”h]”hŒ'Returns 0 on success, -EERROR otherwise”…”�”}”(hjb`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kuhjz_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_get_accuracy (C function)”Œc.clk_get_accuracy”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'long clk_get_accuracy (struct clk *clk)”h]”j)�”}”(hŒ&long clk_get_accuracy(struct clk *clk)”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‘`h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�`h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj `h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�`h²hh³jŸ`h´K|ubj{)�”}”(hŒclk_get_accuracy”h]”j�)�”}”(hŒclk_get_accuracy”h]”hŒclk_get_accuracy”…”�”}”(hj²`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®`ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�`h²hh³jŸ`h´K|ubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÎ`h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÊ`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÛ`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊ`ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjì`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjé`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jî`Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j´`sbŒc.clk_get_accuracy”†”asbuh1hhjÊ`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊ`ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÊ`ubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj'ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊ`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÆ`ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�`h²hh³jŸ`h´K|ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‰`h²hh³jŸ`h´K|ubah}”(h]”j„`ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŸ`h´K|hj†`h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒHobtain the clock accuracy in ppb (parts per billion) for a clock source.”h]”hŒHobtain the clock accuracy in ppb (parts per billion) for a clock source.”…”�”}”(hjQah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K|hjNah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj†`h²hh³jŸ`h´K|ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjiajæjiajç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒ•**Parameters** ``struct clk *clk`` clock source **Description** This gets the clock source accuracy expressed in ppb. A perfect clock returns 0.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjsah]”hŒ Parameters”…”�”}”(hjuah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjqaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K€hjmaubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj’ah]”hŒstruct clk *clk”…”�”}”(hj”ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K~hjŒaubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj«ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j§ah´K~hj¨aubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŒaubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§ah´K~hj‰aubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjmaubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÍah]”hŒ Description”…”�”}”(hjÏah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjËaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K€hjmaubhÝ)�”}”(hŒPThis gets the clock source accuracy expressed in ppb. A perfect clock returns 0.”h]”hŒPThis gets the clock source accuracy expressed in ppb. A perfect clock returns 0.”…”�”}”(hjãah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Khjmaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_set_phase (C function)”Œc.clk_set_phase”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ0int clk_set_phase (struct clk *clk, int degrees)”h]”j)�”}”(hŒ/int clk_set_phase(struct clk *clk, int degrees)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjbh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjbh²hh³j bh´K†ubj{)�”}”(hŒ clk_set_phase”h]”j�)�”}”(hŒ clk_set_phase”h]”hŒ clk_set_phase”…”�”}”(hj3bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/bubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjbh²hh³j bh´K†ubjœ)�”}”(hŒ(struct clk *clk, int degrees)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjObh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjKbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKbubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjmbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jobŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j5bsbŒc.clk_set_phase”†”asbuh1hhjKbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKbubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj›bh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjKbubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj¨bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKbubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjGbubj¢)�”}”(hŒ int degrees”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÁbh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj½bubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏbh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½bubj�)�”}”(hŒdegrees”h]”hŒdegrees”…”�”}”(hjÝbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½bubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjGbubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjbh²hh³j bh´K†ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj bh²hh³j bh´K†ubah}”(h]”jbah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j bh´K†hjbh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(adjust the phase shift of a clock signal”h]”hŒ(adjust the phase shift of a clock signal”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K†hjch²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjbh²hh³j bh´K†ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjcjæjcjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒì**Parameters** ``struct clk *clk`` clock signal source ``int degrees`` number of degrees the signal is shifted **Description** Shifts the phase of a clock signal by the specified degrees. Returns 0 on success, -EERROR otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj)ch]”hŒ Parameters”…”�”}”(hj+ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'cubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KŠhj#cubj )�”}”(hhh]”(j)�”}”(hŒ(``struct clk *clk`` clock signal source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjHch]”hŒstruct clk *clk”…”�”}”(hjJch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFcubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K‡hjBcubj2)�”}”(hhh]”hÝ)�”}”(hŒclock signal source”h]”hŒclock signal source”…”�”}”(hjach²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j]ch´K‡hj^cubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjBcubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]ch´K‡hj?cubj)�”}”(hŒ8``int degrees`` number of degrees the signal is shifted ”h]”(j)�”}”(hŒ``int degrees``”h]”j)�”}”(hj�ch]”hŒ int degrees”…”�”}”(hjƒch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjcubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kˆhj{cubj2)�”}”(hhh]”hÝ)�”}”(hŒ'number of degrees the signal is shifted”h]”hŒ'number of degrees the signal is shifted”…”�”}”(hjšch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–ch´Kˆhj—cubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–ch´Kˆhj?cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj#cubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¼ch]”hŒ Description”…”�”}”(hj¾ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjºcubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KŠhj#cubhÝ)�”}”(hŒeShifts the phase of a clock signal by the specified degrees. Returns 0 on success, -EERROR otherwise.”h]”hŒeShifts the phase of a clock signal by the specified degrees. Returns 0 on success, -EERROR otherwise.”…”�”}”(hjÒch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K‰hj#cubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_get_phase (C function)”Œc.clk_get_phase”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ#int clk_get_phase (struct clk *clk)”h]”j)�”}”(hŒ"int clk_get_phase(struct clk *clk)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjých²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjých²hh³jdh´K�ubj{)�”}”(hŒ clk_get_phase”h]”j�)�”}”(hŒ clk_get_phase”h]”hŒ clk_get_phase”…”�”}”(hj"dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjdubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjých²hh³jdh´K�ubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj>dh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj:dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjKdh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:dubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj\dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYdubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j^dŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j$dsbŒc.clk_get_phase”†”asbuh1hhj:dubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|dh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:dubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŠdh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj:dubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj—dh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:dubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj6dubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjých²hh³jdh´K�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjùch²hh³jdh´K�ubah}”(h]”jôcah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jdh´K�hjöch²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(return the phase shift of a clock signal”h]”hŒ(return the phase shift of a clock signal”…”�”}”(hjÁdh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K�hj¾dh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjöch²hh³jdh´K�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÙdjæjÙdjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒš**Parameters** ``struct clk *clk`` clock signal source **Description** Returns the phase shift of a clock node in degrees, otherwise returns -EERROR.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjãdh]”hŒ Parameters”…”�”}”(hjådh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjádubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K”hjÝdubj )�”}”(hhh]”j)�”}”(hŒ(``struct clk *clk`` clock signal source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjeh]”hŒstruct clk *clk”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K‘hjüdubj2)�”}”(hhh]”hÝ)�”}”(hŒclock signal source”h]”hŒclock signal source”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jeh´K‘hjeubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjüdubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jeh´K‘hjùdubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÝdubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj=eh]”hŒ Description”…”�”}”(hj?eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;eubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K“hjÝdubhÝ)�”}”(hŒNReturns the phase shift of a clock node in degrees, otherwise returns -EERROR.”h]”hŒNReturns the phase shift of a clock node in degrees, otherwise returns -EERROR.”…”�”}”(hjSeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K’hjÝdubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_set_duty_cycle (C function)”Œc.clk_set_duty_cycle”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒLint clk_set_duty_cycle (struct clk *clk, unsigned int num, unsigned int den)”h]”j)�”}”(hŒKint clk_set_duty_cycle(struct clk *clk, unsigned int num, unsigned int den)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj‚eh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~eh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~eh²hh³j�eh´K™ubj{)�”}”(hŒclk_set_duty_cycle”h]”j�)�”}”(hŒclk_set_duty_cycle”h]”hŒclk_set_duty_cycle”…”�”}”(hj£eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŸeubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj~eh²hh³j�eh´K™ubjœ)�”}”(hŒ5(struct clk *clk, unsigned int num, unsigned int den)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¿eh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj»eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»eubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjÝeh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÚeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jßeŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¥esbŒc.clk_set_duty_cycle”†”asbuh1hhj»eubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj»eubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj fh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj»eubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»eubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj·eubj¢)�”}”(hŒunsigned int num”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj1fh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj-fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-fubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjMfh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj-fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-fubj�)�”}”(hŒnum”h]”hŒnum”…”�”}”(hjifh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj·eubj¢)�”}”(hŒunsigned int den”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‚fh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~fubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjžfh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~fubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~fubj�)�”}”(hŒden”h]”hŒden”…”�”}”(hjºfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~fubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj·eubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj~eh²hh³j�eh´K™ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjzeh²hh³j�eh´K™ubah}”(h]”jueah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�eh´K™hjweh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-adjust the duty cycle ratio of a clock signal”h]”hŒ-adjust the duty cycle ratio of a clock signal”…”�”}”(hjäfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K™hjáfh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjweh²hh³j�eh´K™ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjüfjæjüfjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXF**Parameters** ``struct clk *clk`` clock signal source ``unsigned int num`` numerator of the duty cycle ratio to be applied ``unsigned int den`` denominator of the duty cycle ratio to be applied **Description** Adjust the duty cycle of a clock signal by the specified ratio. Returns 0 on success, -EERROR otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjgh]”hŒ Parameters”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K�hjgubj )�”}”(hhh]”(j)�”}”(hŒ(``struct clk *clk`` clock signal source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj%gh]”hŒstruct clk *clk”…”�”}”(hj'gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#gubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kšhjgubj2)�”}”(hhh]”hÝ)�”}”(hŒclock signal source”h]”hŒclock signal source”…”�”}”(hj>gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:gh´Kšhj;gubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:gh´Kšhjgubj)�”}”(hŒE``unsigned int num`` numerator of the duty cycle ratio to be applied ”h]”(j)�”}”(hŒ``unsigned int num``”h]”j)�”}”(hj^gh]”hŒunsigned int num”…”�”}”(hj`gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\gubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K›hjXgubj2)�”}”(hhh]”hÝ)�”}”(hŒ/numerator of the duty cycle ratio to be applied”h]”hŒ/numerator of the duty cycle ratio to be applied”…”�”}”(hjwgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jsgh´K›hjtgubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjXgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jsgh´K›hjgubj)�”}”(hŒG``unsigned int den`` denominator of the duty cycle ratio to be applied ”h]”(j)�”}”(hŒ``unsigned int den``”h]”j)�”}”(hj—gh]”hŒunsigned int den”…”�”}”(hj™gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•gubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kœhj‘gubj2)�”}”(hhh]”hÝ)�”}”(hŒ1denominator of the duty cycle ratio to be applied”h]”hŒ1denominator of the duty cycle ratio to be applied”…”�”}”(hj°gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¬gh´Kœhj­gubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‘gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬gh´Kœhjgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjgubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÒgh]”hŒ Description”…”�”}”(hjÔgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÐgubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KžhjgubhÝ)�”}”(hŒhAdjust the duty cycle of a clock signal by the specified ratio. Returns 0 on success, -EERROR otherwise.”h]”hŒhAdjust the duty cycle of a clock signal by the specified ratio. Returns 0 on success, -EERROR otherwise.”…”�”}”(hjègh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K�hjgubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&clk_get_scaled_duty_cycle (C function)”Œc.clk_get_scaled_duty_cycle”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCint clk_get_scaled_duty_cycle (struct clk *clk, unsigned int scale)”h]”j)�”}”(hŒBint clk_get_scaled_duty_cycle(struct clk *clk, unsigned int scale)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjhh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¤ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjhh²hh³j%hh´K¤ubj{)�”}”(hŒclk_get_scaled_duty_cycle”h]”j�)�”}”(hŒclk_get_scaled_duty_cycle”h]”hŒclk_get_scaled_duty_cycle”…”�”}”(hj8hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4hubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjhh²hh³j%hh´K¤ubjœ)�”}”(hŒ%(struct clk *clk, unsigned int scale)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjThh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjPhubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjahh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPhubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjrhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjohubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jthŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j:hsbŒc.clk_get_scaled_duty_cycle”†”asbuh1hhjPhubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPhubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjPhubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj­hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjPhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjLhubj¢)�”}”(hŒunsigned int scale”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÆhh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÂhubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔhh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂhubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjâhh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÂhubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjðhh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂhubj�)�”}”(hŒscale”h]”hŒscale”…”�”}”(hjþhh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂhubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjLhubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjhh²hh³j%hh´K¤ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjhh²hh³j%hh´K¤ubah}”(h]”j hah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j%hh´K¤hj hh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-return the duty cycle ratio of a clock signal”h]”hŒ-return the duty cycle ratio of a clock signal”…”�”}”(hj(ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¤hj%ih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj hh²hh³j%hh´K¤ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj@ijæj@ijç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX**Parameters** ``struct clk *clk`` clock signal source ``unsigned int scale`` scaling factor to be applied to represent the ratio as an integer **Description** Returns the duty cycle ratio multiplied by the scale provided, otherwise returns -EERROR.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjJih]”hŒ Parameters”…”�”}”(hjLih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjHiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¨hjDiubj )�”}”(hhh]”(j)�”}”(hŒ(``struct clk *clk`` clock signal source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjiih]”hŒstruct clk *clk”…”�”}”(hjkih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjgiubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¥hjciubj2)�”}”(hhh]”hÝ)�”}”(hŒclock signal source”h]”hŒclock signal source”…”�”}”(hj‚ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j~ih´K¥hjiubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjciubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~ih´K¥hj`iubj)�”}”(hŒY``unsigned int scale`` scaling factor to be applied to represent the ratio as an integer ”h]”(j)�”}”(hŒ``unsigned int scale``”h]”j)�”}”(hj¢ih]”hŒunsigned int scale”…”�”}”(hj¤ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¦hjœiubj2)�”}”(hhh]”hÝ)�”}”(hŒAscaling factor to be applied to represent the ratio as an integer”h]”hŒAscaling factor to be applied to represent the ratio as an integer”…”�”}”(hj»ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·ih´K¦hj¸iubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·ih´K¦hj`iubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjDiubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÝih]”hŒ Description”…”�”}”(hjßih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¨hjDiubhÝ)�”}”(hŒYReturns the duty cycle ratio multiplied by the scale provided, otherwise returns -EERROR.”h]”hŒYReturns the duty cycle ratio multiplied by the scale provided, otherwise returns -EERROR.”…”�”}”(hjóih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K§hjDiubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_is_match (C function)”Œc.clk_is_match”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjjh²hh³j/jh´K®ubj{)�”}”(hŒ clk_is_match”h]”j�)�”}”(hŒ clk_is_match”h]”hŒ clk_is_match”…”�”}”(hjBjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>jubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjjh²hh³j/jh´K®ubjœ)�”}”(hŒ*(const struct clk *p, const struct clk *q)”h]”(j¢)�”}”(hŒconst struct clk *p”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj^jh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZjubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjyjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZjubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj—jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”jubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j™jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jDjsbŒc.clk_is_match”†”asbuh1hhjZjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÅjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZjubj�)�”}”(hjïh]”hŒp”…”�”}”(hjÒjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVjubj¢)�”}”(hŒconst struct clk *q”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjêjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjæjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæjubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjæjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæjubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj#kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj kubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j%kŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j³jŒc.clk_is_match”†”asbuh1hhjæjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjAkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjOkh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjæjubj�)�”}”(hj(lh]”hŒq”…”�”}”(hj\kh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjjh²hh³j/jh´K®ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjjh²hh³j/jh´K®ubah}”(h]”jjah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j/jh´K®hjjh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3check if two clk's point to the same hardware clock”h]”hŒ5check if two clk’s point to the same hardware clock”…”�”}”(hj…kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K®hj‚kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjjh²hh³j/jh´K®ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�kjæj�kjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX”**Parameters** ``const struct clk *p`` clk compared against q ``const struct clk *q`` clk compared against p **Description** Returns true if the two struct clk pointers both point to the same hardware clock node. Put differently, returns true if **p** and **q** share the same :c:type:`struct clk_core ` object. Returns false otherwise. Note that two NULL clks are treated as matching.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj§kh]”hŒ Parameters”…”�”}”(hj©kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K²hj¡kubj )�”}”(hhh]”(j)�”}”(hŒ/``const struct clk *p`` clk compared against q ”h]”(j)�”}”(hŒ``const struct clk *p``”h]”j)�”}”(hjÆkh]”hŒconst struct clk *p”…”�”}”(hjÈkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄkubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¯hjÀkubj2)�”}”(hhh]”hÝ)�”}”(hŒclk compared against q”h]”hŒclk compared against q”…”�”}”(hjßkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÛkh´K¯hjÜkubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÀkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛkh´K¯hj½kubj)�”}”(hŒ/``const struct clk *q`` clk compared against p ”h]”(j)�”}”(hŒ``const struct clk *q``”h]”j)�”}”(hjÿkh]”hŒconst struct clk *q”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýkubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K°hjùkubj2)�”}”(hhh]”hÝ)�”}”(hŒclk compared against p”h]”hŒclk compared against p”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlh´K°hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùkubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jlh´K°hj½kubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡kubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj:lh]”hŒ Description”…”�”}”(hj` object.”h]”(hŒyReturns true if the two struct clk pointers both point to the same hardware clock node. Put differently, returns true if ”…”�”}”(hjPlh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hjXlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPlubhŒ and ”…”�”}”(hjPlh²hh³Nh´Nubjõ)�”}”(hŒ**q**”h]”hŒq”…”�”}”(hjjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPlubhŒ share the same ”…”�”}”(hjPlh²hh³Nh´Nubh)�”}”(hŒ$:c:type:`struct clk_core `”h]”j)�”}”(hj~lh]”hŒstruct clk_core”…”�”}”(hj€lh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhj|lubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œclk_core”uh1hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K±hjPlubhŒ object.”…”�”}”(hjPlh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›lh´K±hj¡kubhÝ)�”}”(hŒIReturns false otherwise. Note that two NULL clks are treated as matching.”h]”hŒIReturns false otherwise. Note that two NULL clks are treated as matching.”…”�”}”(hj¦lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kµhj¡kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#clk_rate_exclusive_get (C function)”Œc.clk_rate_exclusive_get”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,int clk_rate_exclusive_get (struct clk *clk)”h]”j)�”}”(hŒ+int clk_rate_exclusive_get(struct clk *clk)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÕlh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÑlh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjälh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÑlh²hh³jãlh´K»ubj{)�”}”(hŒclk_rate_exclusive_get”h]”j�)�”}”(hŒclk_rate_exclusive_get”h]”hŒclk_rate_exclusive_get”…”�”}”(hjölh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòlubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÑlh²hh³jãlh´K»ubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj0mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-mubah•<}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j2mŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jølsbŒc.clk_rate_exclusive_get”†”asbuh1hhjmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPmh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjmubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj^mh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjmubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjkmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj mubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÑlh²hh³jãlh´K»ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÍlh²hh³jãlh´K»ubah}”(h]”jÈlah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jãlh´K»hjÊlh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3get exclusivity over the rate control of a producer”h]”hŒ3get exclusivity over the rate control of a producer”…”�”}”(hj•mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K»hj’mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÊlh²hh³jãlh´K»ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj­mjæj­mjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX**Parameters** ``struct clk *clk`` clock source **Description** This function allows drivers to get exclusive control over the rate of a provider. It prevents any other consumer to execute, even indirectly, opereation which could alter the rate of the provider or cause glitches If exlusivity is claimed more than once on clock, even by the same driver, the rate effectively gets locked as exclusivity can't be preempted. Must not be called from within atomic context. Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj·mh]”hŒ Parameters”…”�”}”(hj¹mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjµmubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¿hj±mubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjÖmh]”hŒstruct clk *clk”…”�”}”(hjØmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÔmubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K½hjÐmubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjïmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jëmh´K½hjìmubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÐmubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jëmh´K½hjÍmubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj±mubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjnh]”hŒ Description”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjnubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¿hj±mubhÝ)�”}”(hŒÖThis function allows drivers to get exclusive control over the rate of a provider. It prevents any other consumer to execute, even indirectly, opereation which could alter the rate of the provider or cause glitches”h]”hŒÖThis function allows drivers to get exclusive control over the rate of a provider. It prevents any other consumer to execute, even indirectly, opereation which could alter the rate of the provider or cause glitches”…”�”}”(hj'nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´K¾hj±mubhÝ)�”}”(hŒŽIf exlusivity is claimed more than once on clock, even by the same driver, the rate effectively gets locked as exclusivity can't be preempted.”h]”hŒ�If exlusivity is claimed more than once on clock, even by the same driver, the rate effectively gets locked as exclusivity can’t be preempted.”…”�”}”(hj6nh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÂhj±mubhÝ)�”}”(hŒ.Must not be called from within atomic context.”h]”hŒ.Must not be called from within atomic context.”…”�”}”(hjEnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÅhj±mubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hjTnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÇhj±mubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(devm_clk_rate_exclusive_get (C function)”Œc.devm_clk_rate_exclusive_get”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEint devm_clk_rate_exclusive_get (struct device *dev, struct clk *clk)”h]”j)�”}”(hŒDint devm_clk_rate_exclusive_get(struct device *dev, struct clk *clk)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjƒnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjnh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjnh²hh³j‘nh´KÍubj{)�”}”(hŒdevm_clk_rate_exclusive_get”h]”j�)�”}”(hŒdevm_clk_rate_exclusive_get”h]”hŒdevm_clk_rate_exclusive_get”…”�”}”(hj¤nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj nubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjnh²hh³j‘nh´KÍubjœ)�”}”(hŒ%(struct device *dev, struct clk *clk)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÀnh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¼nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼nubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÞnh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛnubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jànŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¦nsbŒc.devm_clk_rate_exclusive_get”†”asbuh1hhj¼nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼nubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj oh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¼nubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼nubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¸nubj¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj2oh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.oubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjPoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMoubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jRoŒmodname”NŒ classname”Nj] j` )�”}”jc ]”júnŒc.devm_clk_rate_exclusive_get”†”asbuh1hhj.oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnoh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.oubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj|oh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj.oubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj‰oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¸nubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjnh²hh³j‘nh´KÍubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj{nh²hh³j‘nh´KÍubah}”(h]”jvnah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‘nh´KÍhjxnh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&devm variant of clk_rate_exclusive_get”h]”hŒ&devm variant of clk_rate_exclusive_get”…”�”}”(hj³oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÍhj°oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjxnh²hh³j‘nh´KÍubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjËojæjËojç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX-**Parameters** ``struct device *dev`` device the exclusivity is bound to ``struct clk *clk`` clock source **Description** Calls clk_rate_exclusive_get() on **clk** and registers a devm cleanup handler on **dev** to call clk_rate_exclusive_put(). Must not be called from within atomic context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÕoh]”hŒ Parameters”…”�”}”(hj×oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓoubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÑhjÏoubj )�”}”(hhh]”(j)�”}”(hŒ:``struct device *dev`` device the exclusivity is bound to ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjôoh]”hŒstruct device *dev”…”�”}”(hjöoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjòoubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÎhjîoubj2)�”}”(hhh]”hÝ)�”}”(hŒ"device the exclusivity is bound to”h]”hŒ"device the exclusivity is bound to”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ph´KÎhj pubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjîoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ph´KÎhjëoubj)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj-ph]”hŒstruct clk *clk”…”�”}”(hj/ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+pubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÏhj'pubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjFph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jBph´KÏhjCpubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj'pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jBph´KÏhjëoubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÏoubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjhph]”hŒ Description”…”�”}”(hjjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfpubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÑhjÏoubhÝ)�”}”(hŒ{Calls clk_rate_exclusive_get() on **clk** and registers a devm cleanup handler on **dev** to call clk_rate_exclusive_put().”h]”(hŒ"Calls clk_rate_exclusive_get() on ”…”�”}”(hj~ph²hh³Nh´Nubjõ)�”}”(hŒ**clk**”h]”hŒclk”…”�”}”(hj†ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~pubhŒ) and registers a devm cleanup handler on ”…”�”}”(hj~ph²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj˜ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~pubhŒ" to call clk_rate_exclusive_put().”…”�”}”(hj~ph²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÐhjÏoubhÝ)�”}”(hŒ.Must not be called from within atomic context.”h]”hŒ.Must not be called from within atomic context.”…”�”}”(hj±ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÓhjÏoubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#clk_rate_exclusive_put (C function)”Œc.clk_rate_exclusive_put”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-void clk_rate_exclusive_put (struct clk *clk)”h]”j)�”}”(hŒ,void clk_rate_exclusive_put(struct clk *clk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjàph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÜph²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjïph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜph²hh³jîph´KÙubj{)�”}”(hŒclk_rate_exclusive_put”h]”j�)�”}”(hŒclk_rate_exclusive_put”h]”hŒclk_rate_exclusive_put”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýpubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÜph²hh³jîph´KÙubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*qh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj;qh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j=qŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jqsbŒc.clk_rate_exclusive_put”†”asbuh1hhjqubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[qh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjqubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjiqh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjqubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjvqh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjqubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÜph²hh³jîph´KÙubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjØph²hh³jîph´KÙubah}”(h]”jÓpah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jîph´KÙhjÕph²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7release exclusivity over the rate control of a producer”h]”hŒ7release exclusivity over the rate control of a producer”…”�”}”(hj qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÙhj�qh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÕph²hh³jîph´KÙubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¸qjæj¸qjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX@**Parameters** ``struct clk *clk`` clock source **Description** This function allows drivers to release the exclusivity it previously got from clk_rate_exclusive_get() The caller must balance the number of clk_rate_exclusive_get() and clk_rate_exclusive_put() calls. Must not be called from within atomic context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÂqh]”hŒ Parameters”…”�”}”(hjÄqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÀqubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÝhj¼qubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjáqh]”hŒstruct clk *clk”…”�”}”(hjãqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßqubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÛhjÛqubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjúqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jöqh´KÛhj÷qubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÛqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jöqh´KÛhjØqubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¼qubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjrh]”hŒ Description”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjrubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÝhj¼qubhÝ)�”}”(hŒgThis function allows drivers to release the exclusivity it previously got from clk_rate_exclusive_get()”h]”hŒgThis function allows drivers to release the exclusivity it previously got from clk_rate_exclusive_get()”…”�”}”(hj2rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KÜhj¼qubhÝ)�”}”(hŒbThe caller must balance the number of clk_rate_exclusive_get() and clk_rate_exclusive_put() calls.”h]”hŒbThe caller must balance the number of clk_rate_exclusive_get() and clk_rate_exclusive_put() calls.”…”�”}”(hjArh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kßhj¼qubhÝ)�”}”(hŒ.Must not be called from within atomic context.”h]”hŒ.Must not be called from within atomic context.”…”�”}”(hjPrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kâhj¼qubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_save_context (C function)”Œc.clk_save_context”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒint clk_save_context (void)”h]”j)�”}”(hŒint clk_save_context(void)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj{rh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kèubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽrh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj{rh²hh³j�rh´Kèubj{)�”}”(hŒclk_save_context”h]”j�)�”}”(hŒclk_save_context”h]”hŒclk_save_context”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjœrubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj{rh²hh³j�rh´Kèubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¼rh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¸rubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj´rubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj{rh²hh³j�rh´Kèubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjwrh²hh³j�rh´Kèubah}”(h]”jrrah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�rh´Kèhjtrh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒsave clock context for poweroff”h]”hŒsave clock context for poweroff”…”�”}”(hjærh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kèhjãrh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjtrh²hh³j�rh´Kèubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjþrjæjþrjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒç**Parameters** ``void`` no arguments **Description** Saves the context of the clock register for powerstates in which the contents of the registers will be lost. Occurs deep within the suspend code so locking is not necessary.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjsh]”hŒ Parameters”…”�”}”(hj sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kìhjsubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj'sh]”hŒvoid”…”�”}”(hj)sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Khj!subj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj@sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jah"]”h$]”h&]”uh1j1hj£sh²hh³jµsh´Kñubj{)�”}”(hŒclk_restore_context”h]”j�)�”}”(hŒclk_restore_context”h]”hŒclk_restore_context”…”�”}”(hjÈsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄsubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj£sh²hh³jµsh´Kñubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjäsh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjàsubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÜsubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj£sh²hh³jµsh´Kñubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŸsh²hh³jµsh´Kñubah}”(h]”jšsah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jµsh´Kñhjœsh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$restore clock context after poweroff”h]”hŒ$restore clock context after poweroff”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kñhj th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjœsh²hh³jµsh´Kñubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj&tjæj&tjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒž**Parameters** ``void`` no arguments **Description** This occurs with all clocks enabled. Occurs deep within the resume code so locking is not necessary.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj0th]”hŒ Parameters”…”�”}”(hj2th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.tubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kõhj*tubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjOth]”hŒvoid”…”�”}”(hjQth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjMtubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´KhjItubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjhth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jdth´Khjetubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjItubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jdth´KhjFtubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj*tubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŠth]”hŒ Description”…”�”}”(hjŒth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆtubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Khj*tubhÝ)�”}”(hŒdThis occurs with all clocks enabled. Occurs deep within the resume code so locking is not necessary.”h]”hŒdThis occurs with all clocks enabled. Occurs deep within the resume code so locking is not necessary.”…”�”}”(hj th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Kòhj*tubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_prepare (C function)”Œ c.clk_prepare”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ!int clk_prepare (struct clk *clk)”h]”j)�”}”(hŒ int clk_prepare(struct clk *clk)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÏth²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjËth²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞth²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjËth²hh³jÝth´MDubj{)�”}”(hŒ clk_prepare”h]”j�)�”}”(hŒ clk_prepare”h]”hŒ clk_prepare”…”�”}”(hjðth²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìtubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjËth²hh³jÝth´MDubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj uh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjuubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj*uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'uubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j,uŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jòtsbŒ c.clk_prepare”†”asbuh1hhjuubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjXuh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjuubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjeuh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjËth²hh³jÝth´MDubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÇth²hh³jÝth´MDubah}”(h]”jÂtah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÝth´MDhjÄth²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒprepare a clock source”h]”hŒprepare a clock source”…”�”}”(hj�uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MDhjŒuh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÄth²hh³jÝth´MDubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj§ujæj§ujç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒœ**Parameters** ``struct clk *clk`` clock source **Description** This prepares the clock source for use. Must not be called from within atomic context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj±uh]”hŒ Parameters”…”�”}”(hj³uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¯uubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MHhj«uubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjÐuh]”hŒstruct clk *clk”…”�”}”(hjÒuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÎuubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MEhjÊuubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjéuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jåuh´MEhjæuubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÊuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jåuh´MEhjÇuubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj«uubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj vh]”hŒ Description”…”�”}”(hj vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj vubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MGhj«uubhÝ)�”}”(hŒ'This prepares the clock source for use.”h]”hŒ'This prepares the clock source for use.”…”�”}”(hj!vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MFhj«uubhÝ)�”}”(hŒ.Must not be called from within atomic context.”h]”hŒ.Must not be called from within atomic context.”…”�”}”(hj0vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MHhj«uubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_unprepare (C function)”Œc.clk_unprepare”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ$void clk_unprepare (struct clk *clk)”h]”j)�”}”(hŒ#void clk_unprepare(struct clk *clk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj_vh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj[vh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj[vh²hh³jmvh´MNubj{)�”}”(hŒ clk_unprepare”h]”j�)�”}”(hŒ clk_unprepare”h]”hŒ clk_unprepare”…”�”}”(hj€vh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|vubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj[vh²hh³jmvh´MNubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjœvh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj˜vubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©vh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˜vubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjºvh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¼vŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‚vsbŒc.clk_unprepare”†”asbuh1hhj˜vubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˜vubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjèvh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj˜vubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjõvh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj”vubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj[vh²hh³jmvh´MNubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjWvh²hh³jmvh´MNubah}”(h]”jRvah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jmvh´MNhjTvh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"undo preparation of a clock source”h]”hŒ"undo preparation of a clock source”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MNhjwh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjTvh²hh³jmvh´MNubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj7wjæj7wjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒá**Parameters** ``struct clk *clk`` clock source **Description** This undoes a previously prepared clock. The caller must balance the number of prepare and unprepare calls. Must not be called from within atomic context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjAwh]”hŒ Parameters”…”�”}”(hjCwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj?wubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MRhj;wubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj`wh]”hŒstruct clk *clk”…”�”}”(hjbwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj^wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MOhjZwubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjywh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³juwh´MOhjvwubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjZwubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³juwh´MOhjWwubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj;wubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj›wh]”hŒ Description”…”�”}”(hj�wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj™wubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MQhj;wubhÝ)�”}”(hŒlThis undoes a previously prepared clock. The caller must balance the number of prepare and unprepare calls.”h]”hŒlThis undoes a previously prepared clock. The caller must balance the number of prepare and unprepare calls.”…”�”}”(hj±wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MPhj;wubhÝ)�”}”(hŒ.Must not be called from within atomic context.”h]”hŒ.Must not be called from within atomic context.”…”�”}”(hjÀwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MShj;wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)clk_is_enabled_when_prepared (C function)”Œc.clk_is_enabled_when_prepared”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3bool clk_is_enabled_when_prepared (struct clk *clk)”h]”j)�”}”(hŒ2bool clk_is_enabled_when_prepared(struct clk *clk)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjïwh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjëwh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M]ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjýwh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëwh²hh³jüwh´M]ubj{)�”}”(hŒclk_is_enabled_when_prepared”h]”j�)�”}”(hŒclk_is_enabled_when_prepared”h]”hŒclk_is_enabled_when_prepared”…”�”}”(hjxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj xubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjëwh²hh³jüwh´M]ubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj+xh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj'xubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'xubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjIxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jKxŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jxsbŒc.clk_is_enabled_when_prepared”†”asbuh1hhj'xubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjixh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'xubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjwxh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj'xubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj„xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'xubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj#xubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjëwh²hh³jüwh´M]ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjçwh²hh³jüwh´M]ubah}”(h]”jâwah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jüwh´M]hjäwh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.indicate if preparing a clock also enables it.”h]”hŒ.indicate if preparing a clock also enables it.”…”�”}”(hj®xh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M]hj«xh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjäwh²hh³jüwh´M]ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÆxjæjÆxjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXø**Parameters** ``struct clk *clk`` clock source **Description** Returns true if clk_prepare() implicitly enables the clock, effectively making clk_enable()/clk_disable() no-ops, false otherwise. This is of interest mainly to the power management code where actually disabling the clock also requires unpreparing it to have any material effect. Regardless of the value returned here, the caller must always invoke clk_enable() or clk_prepare_enable() and counterparts for usage counts to be right.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÐxh]”hŒ Parameters”…”�”}”(hjÒxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÎxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MahjÊxubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjïxh]”hŒstruct clk *clk”…”�”}”(hjñxh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjíxubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M^hjéxubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jyh´M^hjyubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjéxubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jyh´M^hjæxubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÊxubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj*yh]”hŒ Description”…”�”}”(hj,yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(yubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M`hjÊxubhÝ)�”}”(hŒ‚Returns true if clk_prepare() implicitly enables the clock, effectively making clk_enable()/clk_disable() no-ops, false otherwise.”h]”hŒ‚Returns true if clk_prepare() implicitly enables the clock, effectively making clk_enable()/clk_disable() no-ops, false otherwise.”…”�”}”(hj@yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M_hjÊxubhÝ)�”}”(hŒ”This is of interest mainly to the power management code where actually disabling the clock also requires unpreparing it to have any material effect.”h]”hŒ”This is of interest mainly to the power management code where actually disabling the clock also requires unpreparing it to have any material effect.”…”�”}”(hjOyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MbhjÊxubhÝ)�”}”(hŒ™Regardless of the value returned here, the caller must always invoke clk_enable() or clk_prepare_enable() and counterparts for usage counts to be right.”h]”hŒ™Regardless of the value returned here, the caller must always invoke clk_enable() or clk_prepare_enable() and counterparts for usage counts to be right.”…”�”}”(hj^yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MfhjÊxubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_get (C function)”Œ c.clk_get”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9struct clk * clk_get (struct device *dev, const char *id)”h]”j)�”}”(hŒ7struct clk *clk_get(struct device *dev, const char *id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�yh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‰yh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰yh²hh³jšyh´M�ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj¬yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©yubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j®yŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œclk_get”sbŒ c.clk_get”†”asbuh1hhj‰yh²hh³jšyh´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍyh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰yh²hh³jšyh´M�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÛyh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‰yh²hh³jšyh´M�ubj{)�”}”(hŒclk_get”h]”j�)�”}”(hjÊyh]”hŒclk_get”…”�”}”(hjìyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèyubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‰yh²hh³jšyh´M�ubjœ)�”}”(hŒ$(struct device *dev, const char *id)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjzubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj%zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j'zŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÈyŒ c.clk_get”†”asbuh1hhjzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjzubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjQzh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjzubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj^zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjzubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÿyubj¢)�”}”(hŒconst char *id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjwzh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjszubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjszubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj’zh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjszubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjszubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj®zh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjszubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hj»zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjszubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÿyubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‰yh²hh³jšyh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj…yh²hh³jšyh´M�ubah}”(h]”j€yah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jšyh´M�hj‚yh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2lookup and obtain a reference to a clock producer.”h]”hŒ2lookup and obtain a reference to a clock producer.”…”�”}”(hjåzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M�hjâzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‚yh²hh³jšyh´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjýzjæjýzjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX;**Parameters** ``struct device *dev`` device for clock "consumer" ``const char *id`` clock consumer ID **Description** Returns a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. (IOW, **id** may be identical strings, but clk_get may return different clock producers depending on **dev**.) Drivers must assume that the clock source is not enabled. clk_get should not be called from within interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj{h]”hŒ Parameters”…”�”}”(hj {h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M‘hj{ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj&{h]”hŒstruct device *dev”…”�”}”(hj({h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj${ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MŽhj {ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj?{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;{h´MŽhj<{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj {ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;{h´MŽhj{ubj)�”}”(hŒ%``const char *id`` clock consumer ID ”h]”(j)�”}”(hŒ``const char *id``”h]”j)�”}”(hj_{h]”hŒconst char *id”…”�”}”(hja{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M�hjY{ubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hjx{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jt{h´M�hju{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjY{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jt{h´M�hj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj{ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjš{h]”hŒ Description”…”�”}”(hjœ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜{ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M‘hj{ubhÝ)�”}”(hXDReturns a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. (IOW, **id** may be identical strings, but clk_get may return different clock producers depending on **dev**.)”h]”(hŒ�Returns a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hj°{h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj¸{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°{ubhŒ and ”…”�”}”(hj°{h²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hjÊ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°{ubhŒI to determine the clock consumer, and thereby the clock producer. (IOW, ”…”�”}”(hj°{h²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hjÜ{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°{ubhŒY may be identical strings, but clk_get may return different clock producers depending on ”…”�”}”(hj°{h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjî{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°{ubhŒ.)”…”�”}”(hj°{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M�hj{ubhÝ)�”}”(hŒ9Drivers must assume that the clock source is not enabled.”h]”hŒ9Drivers must assume that the clock source is not enabled.”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M–hj{ubhÝ)�”}”(hŒ;clk_get should not be called from within interrupt context.”h]”hŒ;clk_get should not be called from within interrupt context.”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M˜hj{ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_bulk_get (C function)”Œc.clk_bulk_get”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOint clk_bulk_get (struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”j)�”}”(hŒNint clk_bulk_get(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjE|h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjA|h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mžubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjA|h²hh³jS|h´Mžubj{)�”}”(hŒ clk_bulk_get”h]”j�)�”}”(hŒ clk_bulk_get”h]”hŒ clk_bulk_get”…”�”}”(hjf|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjb|ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjA|h²hh³jS|h´Mžubjœ)�”}”(hŒ>(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‚|h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj~|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~|ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj |h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�|ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¢|Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jh|sbŒc.clk_bulk_get”†”asbuh1hhj~|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀ|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~|ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÎ|h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj~|ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÛ|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjz|ubj¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjô|h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjð|ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjð|ubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjð|ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjz|ubj¢)�”}”(hŒstruct clk_bulk_data *clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj)}h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj%}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%}ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hjG}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjD}ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jI}Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j¼|Œc.clk_bulk_get”†”asbuh1hhj%}ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%}ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjs}h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj%}ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hj€}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%}ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjz|ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjA|h²hh³jS|h´Mžubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj=|h²hh³jS|h´Mžubah}”(h]”j8|ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jS|h´Mžhj:|h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ;lookup and obtain a number of references to clock producer.”h]”hŒ;lookup and obtain a number of references to clock producer.”…”�”}”(hjª}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mžhj§}h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj:|h²hh³jS|h´Mžubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÂ}jæjÂ}jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXO**Parameters** ``struct device *dev`` device for clock "consumer" ``int num_clks`` the number of clk_bulk_data ``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer **Description** This helper function allows drivers to get several clk consumers in one operation. If any of the clk cannot be acquired then any clks that were obtained will be freed before returning to the caller. Returns 0 if all clocks specified in clk_bulk_data table are obtained successfully, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **clk_bulk_data.id** to determine the clock consumer, and thereby the clock producer. The clock returned is stored in each **clk_bulk_data.clk** field. Drivers must assume that the clock source is not enabled. clk_bulk_get should not be called from within interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÌ}h]”hŒ Parameters”…”�”}”(hjÎ}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊ}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¢hjÆ}ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjë}h]”hŒstruct device *dev”…”�”}”(hjí}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjé}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MŸhjå}ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j~h´MŸhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjå}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~h´MŸhjâ}ubj)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hj$~h]”hŒ int num_clks”…”�”}”(hj&~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M hj~ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hj=~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j9~h´M hj:~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9~h´M hjâ}ubj)�”}”(hŒC``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data *clks``”h]”j)�”}”(hj]~h]”hŒstruct clk_bulk_data *clks”…”�”}”(hj_~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¡hjW~ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the clk_bulk_data table of consumer”h]”hŒ#the clk_bulk_data table of consumer”…”�”}”(hjv~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jr~h´M¡hjs~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjW~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jr~h´M¡hjâ}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÆ}ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj˜~h]”hŒ Description”…”�”}”(hjš~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj–~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M£hjÆ}ubhÝ)�”}”(hŒÆThis helper function allows drivers to get several clk consumers in one operation. If any of the clk cannot be acquired then any clks that were obtained will be freed before returning to the caller.”h]”hŒÆThis helper function allows drivers to get several clk consumers in one operation. If any of the clk cannot be acquired then any clks that were obtained will be freed before returning to the caller.”…”�”}”(hj®~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¢hjÆ}ubhÝ)�”}”(hX=Returns 0 if all clocks specified in clk_bulk_data table are obtained successfully, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **clk_bulk_data.id** to determine the clock consumer, and thereby the clock producer. The clock returned is stored in each **clk_bulk_data.clk** field.”h]”(hŒšReturns 0 if all clocks specified in clk_bulk_data table are obtained successfully, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hj½~h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjÅ~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½~ubhŒ and ”…”�”}”(hj½~h²hh³Nh´Nubjõ)�”}”(hŒ**clk_bulk_data.id**”h]”hŒclk_bulk_data.id”…”�”}”(hj×~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½~ubhŒg to determine the clock consumer, and thereby the clock producer. The clock returned is stored in each ”…”�”}”(hj½~h²hh³Nh´Nubjõ)�”}”(hŒ**clk_bulk_data.clk**”h]”hŒclk_bulk_data.clk”…”�”}”(hjé~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½~ubhŒ field.”…”�”}”(hj½~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¦hjÆ}ubhÝ)�”}”(hŒ9Drivers must assume that the clock source is not enabled.”h]”hŒ9Drivers must assume that the clock source is not enabled.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¬hjÆ}ubhÝ)�”}”(hŒ@clk_bulk_get should not be called from within interrupt context.”h]”hŒ@clk_bulk_get should not be called from within interrupt context.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M®hjÆ}ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_bulk_get_all (C function)”Œc.clk_bulk_get_all”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFint clk_bulk_get_all (struct device *dev, struct clk_bulk_data **clks)”h]”j)�”}”(hŒEint clk_bulk_get_all(struct device *dev, struct clk_bulk_data **clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj<h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M´ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj<h²hh³jNh´M´ubj{)�”}”(hŒclk_bulk_get_all”h]”j�)�”}”(hŒclk_bulk_get_all”h]”hŒclk_bulk_get_all”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj]ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj<h²hh³jNh´M´ubjœ)�”}”(hŒ1(struct device *dev, struct clk_bulk_data **clks)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jcsbŒc.clk_bulk_get_all”†”asbuh1hhjyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjyubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuubj¢)�”}”(hŒstruct clk_bulk_data **clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hj €h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj €ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j€Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j·Œc.clk_bulk_get_all”†”asbuh1hhjëubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj9€h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjëubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjF€h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjëubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hjS€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjuubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj<h²hh³jNh´M´ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj8h²hh³jNh´M´ubah}”(h]”j3ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jNh´M´hj5h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ=lookup and obtain all available references to clock producer.”h]”hŒ=lookup and obtain all available references to clock producer.”…”�”}”(hj}€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M´hjz€h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj5h²hh³jNh´M´ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj•€jæj•€jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX½**Parameters** ``struct device *dev`` device for clock "consumer" ``struct clk_bulk_data **clks`` pointer to the clk_bulk_data table of consumer **Description** This helper function allows drivers to get all clk consumers in one operation. If any of the clk cannot be acquired then any clks that were obtained will be freed before returning to the caller. Returns a positive value for the number of clocks obtained while the clock references are stored in the clk_bulk_data table in **clks** field. Returns 0 if there're none and a negative value if something failed. Drivers must assume that the clock source is not enabled. clk_bulk_get should not be called from within interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŸ€h]”hŒ Parameters”…”�”}”(hj¡€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�€ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¸hj™€ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj¾€h]”hŒstruct device *dev”…”�”}”(hjÀ€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¶hj¸€ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj×€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÓ€h´M¶hjÔ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓ€h´M¶hjµ€ubj)�”}”(hŒO``struct clk_bulk_data **clks`` pointer to the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data **clks``”h]”j)�”}”(hj÷€h]”hŒstruct clk_bulk_data **clks”…”�”}”(hjù€h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõ€ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M·hjñ€ubj2)�”}”(hhh]”hÝ)�”}”(hŒ.pointer to the clk_bulk_data table of consumer”h]”hŒ.pointer to the clk_bulk_data table of consumer”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j �h´M·hj �ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjñ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j �h´M·hjµ€ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj™€ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj2�h]”hŒ Description”…”�”}”(hj4�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¹hj™€ubhÝ)�”}”(hŒÂThis helper function allows drivers to get all clk consumers in one operation. If any of the clk cannot be acquired then any clks that were obtained will be freed before returning to the caller.”h]”hŒÂThis helper function allows drivers to get all clk consumers in one operation. If any of the clk cannot be acquired then any clks that were obtained will be freed before returning to the caller.”…”�”}”(hjH�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¸hj™€ubhÝ)�”}”(hŒÓReturns a positive value for the number of clocks obtained while the clock references are stored in the clk_bulk_data table in **clks** field. Returns 0 if there're none and a negative value if something failed.”h]”(hŒReturns a positive value for the number of clocks obtained while the clock references are stored in the clk_bulk_data table in ”…”�”}”(hjW�h²hh³Nh´Nubjõ)�”}”(hŒ**clks**”h]”hŒclks”…”�”}”(hj_�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjW�ubhŒN field. Returns 0 if there’re none and a negative value if something failed.”…”�”}”(hjW�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¼hj™€ubhÝ)�”}”(hŒ9Drivers must assume that the clock source is not enabled.”h]”hŒ9Drivers must assume that the clock source is not enabled.”…”�”}”(hjx�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÀhj™€ubhÝ)�”}”(hŒ@clk_bulk_get should not be called from within interrupt context.”h]”hŒ@clk_bulk_get should not be called from within interrupt context.”…”�”•}”(hj‡�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÂhj™€ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"clk_bulk_get_optional (C function)”Œc.clk_bulk_get_optional”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒXint clk_bulk_get_optional (struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”j)�”}”(hŒWint clk_bulk_get_optional(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¶�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj²�h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÉubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj²�h²hh³jÄ�h´MÉubj{)�”}”(hŒclk_bulk_get_optional”h]”j�)�”}”(hŒclk_bulk_get_optional”h]”hŒclk_bulk_get_optional”…”�”}”(hj×�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓ�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj²�h²hh³jÄ�h´MÉubjœ)�”}”(hŒ>(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjó�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjï�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjï�ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‚Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÙ�sbŒc.clk_bulk_get_optional”†”asbuh1hhjï�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjï�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj?‚h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjï�ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjL‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjï�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjë�ubj¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hje‚h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhja‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hja‚ubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hj�‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hja‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjë�ubj¢)�”}”(hŒstruct clk_bulk_data *clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjš‚h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj–‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–‚ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hj¸‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµ‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jº‚Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j-‚Œc.clk_bulk_get_optional”†”asbuh1hhj–‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖ‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj–‚ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjä‚h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj–‚ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hjñ‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjë�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj²�h²hh³jÄ�h´MÉubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj®�h²hh³jÄ�h´MÉubah}”(h]”j©�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÄ�h´MÉhj«�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ:lookup and obtain a number of references to clock producer”h]”hŒ:lookup and obtain a number of references to clock producer”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÉhjƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj«�h²hh³jÄ�h´MÉubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj3ƒjæj3ƒjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX¢**Parameters** ``struct device *dev`` device for clock "consumer" ``int num_clks`` the number of clk_bulk_data ``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer **Description** Behaves the same as clk_bulk_get() except where there is no clock producer. In this case, instead of returning -ENOENT, the function returns 0 and NULL for a clk for which a clock producer could not be determined.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj=ƒh]”hŒ Parameters”…”�”}”(hj?ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj;ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÍhj7ƒubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj\ƒh]”hŒstruct device *dev”…”�”}”(hj^ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÊhjVƒubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hjuƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jqƒh´MÊhjrƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjVƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqƒh´MÊhjSƒubj)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hj•ƒh]”hŒ int num_clks”…”�”}”(hj—ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MËhj�ƒubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hj®ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jªƒh´MËhj«ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªƒh´MËhjSƒubj)�”}”(hŒC``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data *clks``”h]”j)�”}”(hj΃h]”hŒstruct clk_bulk_data *clks”…”�”}”(hjЃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj̃ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÌhjȃubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the clk_bulk_data table of consumer”h]”hŒ#the clk_bulk_data table of consumer”…”�”}”(hjçƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jãƒh´MÌhjäƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjȃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jãƒh´MÌhjSƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj7ƒubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj „h]”hŒ Description”…”�”}”(hj „h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÎhj7ƒubhÝ)�”}”(hŒÕBehaves the same as clk_bulk_get() except where there is no clock producer. In this case, instead of returning -ENOENT, the function returns 0 and NULL for a clk for which a clock producer could not be determined.”h]”hŒÕBehaves the same as clk_bulk_get() except where there is no clock producer. In this case, instead of returning -ENOENT, the function returns 0 and NULL for a clk for which a clock producer could not be determined.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÍhj7ƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdevm_clk_bulk_get (C function)”Œc.devm_clk_bulk_get”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒTint devm_clk_bulk_get (struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”j)�”}”(hŒSint devm_clk_bulk_get(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjN„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjJ„h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjJ„h²hh³j\„h´MÕubj{)�”}”(hŒdevm_clk_bulk_get”h]”j�)�”}”(hŒdevm_clk_bulk_get”h]”hŒdevm_clk_bulk_get”…”�”}”(hjo„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjk„ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjJ„h²hh³j\„h´MÕubjœ)�”}”(hŒ>(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‹„h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡„ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj©„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j«„Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jq„sbŒc.devm_clk_bulk_get”†”asbuh1hhj‡„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉ„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡„ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjׄh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‡„ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjä„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒ„ubj¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjý„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjù„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj …h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjù„ubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjù„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒ„ubj¢)�”}”(hŒstruct clk_bulk_data *clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj2…h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.…ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hjP…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjM…ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jR…Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÅ„Œc.devm_clk_bulk_get”†”asbuh1hhj.…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjn…h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.…ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj|…h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj.…ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hj‰…h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.…ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjƒ„ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjJ„h²hh³j\„h´MÕubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjF„h²hh³j\„h´MÕubah}”(h]”jA„ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j\„h´MÕhjC„h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"managed get multiple clk consumers”h]”hŒ"managed get multiple clk consumers”…”�”}”(hj³…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÕhj°…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjC„h²hh³j\„h´MÕubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjË…jæjË…jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX›**Parameters** ``struct device *dev`` device for clock "consumer" ``int num_clks`` the number of clk_bulk_data ``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer **Description** Return 0 on success, an errno on failure. This helper function allows drivers to get several clk consumers in one operation with management, the clks will automatically be freed when the device is unbound.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÕ…h]”hŒ Parameters”…”�”}”(hj×…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÓ…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÙhjÏ…ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjô…h]”hŒstruct device *dev”…”�”}”(hjö…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjò…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÖhjî…ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj †h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j †h´MÖhj †ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjî…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j †h´MÖhjë…ubj)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hj-†h]”hŒ int num_clks”…”�”}”(hj/†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M×hj'†ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hjF†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jB†h´M×hjC†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj'†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jB†h´M×hjë…ubj)�”}”(hŒC``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data *clks``”h]”j)�”}”(hjf†h]”hŒstruct clk_bulk_data *clks”…”�”}”(hjh†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MØhj`†ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the clk_bulk_data table of consumer”h]”hŒ#the clk_bulk_data table of consumer”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{†h´MØhj|†ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`†ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{†h´MØhjë…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÏ…ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¡†h]”hŒ Description”…”�”}”(hj£†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸ†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÚhjÏ…ubhÝ)�”}”(hŒ)Return 0 on success, an errno on failure.”h]”hŒ)Return 0 on success, an errno on failure.”…”�”}”(hj·†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÙhjÏ…ubhÝ)�”}”(hŒ£This helper function allows drivers to get several clk consumers in one operation with management, the clks will automatically be freed when the device is unbound.”h]”hŒ£This helper function allows drivers to get several clk consumers in one operation with management, the clks will automatically be freed when the device is unbound.”…”�”}”(hjƆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÛhjÏ…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'devm_clk_bulk_get_optional (C function)”Œc.devm_clk_bulk_get_optional”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ]int devm_clk_bulk_get_optional (struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”j)�”}”(hŒ\int devm_clk_bulk_get_optional(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjõ†h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñ†h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñ†h²hh³j‡h´Mãubj{)�”}”(hŒdevm_clk_bulk_get_optional”h]”j�)�”}”(hŒdevm_clk_bulk_get_optional”h]”hŒdevm_clk_bulk_get_optional”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjñ†h²hh³j‡h´Mãubjœ)�”}”(hŒ>(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj2‡h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj.‡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.‡ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjP‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjM‡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jR‡Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‡sbŒc.devm_clk_bulk_get_optional”†”asbuh1hhj.‡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj.‡ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj~‡h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj.‡ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj‹‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.‡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*‡ubj¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¤‡h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj ‡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj ‡ubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hjÀ‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ‡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*‡ubj¢)�”}”(hŒstruct clk_bulk_data *clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÙ‡h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÕ‡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕ‡ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hj÷‡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô‡ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jù‡Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jl‡Œc.devm_clk_bulk_get_optional”†”asbuh1hhjÕ‡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕ‡ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj#ˆh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÕ‡ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hj0ˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕ‡ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*‡ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjñ†h²hh³j‡h´Mãubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjí†h²hh³j‡h´Mãubah}”(h]”jè†ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‡h´Mãhjê†h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-managed get multiple optional consumer clocks”h]”hŒ-managed get multiple optional consumer clocks”…”�”}”(hjZˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MãhjWˆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjê†h²hh³j‡h´Mãubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjrˆjæjrˆjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX´**Parameters** ``struct device *dev`` device for clock "consumer" ``int num_clks`` the number of clk_bulk_data ``struct clk_bulk_data *clks`` pointer to the clk_bulk_data table of consumer **Description** Behaves the same as devm_clk_bulk_get() except where there is no clock producer. In this case, instead of returning -ENOENT, the function returns NULL for given clk. It is assumed all clocks in clk_bulk_data are optional. Returns 0 if all clocks specified in clk_bulk_data table are obtained successfully or for any clk there was no clk provider available, otherwise returns valid IS_ERR() condition containing errno. The implementation uses **dev** and **clk_bulk_data.id** to determine the clock consumer, and thereby the clock producer. The clock returned is stored in each **clk_bulk_data.clk** field. Drivers must assume that the clock source is not enabled. clk_bulk_get should not be called from within interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj|ˆh]”hŒ Parameters”…”�”}”(hj~ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjzˆubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mçhjvˆubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj›ˆh]”hŒstruct device *dev”…”�”}”(hj�ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mähj•ˆubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj´ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j°ˆh´Mähj±ˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj•ˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j°ˆh´Mähj’ˆubj)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hjÔˆh]”hŒ int num_clks”…”�”}”(hjÖˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MåhjΈubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hjíˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jéˆh´Måhjêˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjΈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jéˆh´Måhj’ˆubj)�”}”(hŒN``struct clk_bulk_data *clks`` pointer to the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data *clks``”h]”j)�”}”(hj ‰h]”hŒstruct clk_bulk_data *clks”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mæhj‰ubj2)�”}”(hhh]”hÝ)�”}”(hŒ.pointer to the clk_bulk_data table of consumer”h]”hŒ.pointer to the clk_bulk_data table of consumer”…”�”}”(hj&‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j"‰h´Mæhj#‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"‰h´Mæhj’ˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjvˆubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjH‰h]”hŒ Description”…”�”}”(hjJ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjF‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MèhjvˆubhÝ)�”}”(hŒÞBehaves the same as devm_clk_bulk_get() except where there is no clock producer. In this case, instead of returning -ENOENT, the function returns NULL for given clk. It is assumed all clocks in clk_bulk_data are optional.”h]”hŒÞBehaves the same as devm_clk_bulk_get() except where there is no clock producer. In this case, instead of returning -ENOENT, the function returns NULL for given clk. It is assumed all clocks in clk_bulk_data are optional.”…”�”}”(hj^‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MçhjvˆubhÝ)�”}”(hXReturns 0 if all clocks specified in clk_bulk_data table are obtained successfully or for any clk there was no clk provider available, otherwise returns valid IS_ERR() condition containing errno. The implementation uses **dev** and **clk_bulk_data.id** to determine the clock consumer, and thereby the clock producer. The clock returned is stored in each **clk_bulk_data.clk** field.”h]”(hŒÜReturns 0 if all clocks specified in clk_bulk_data table are obtained successfully or for any clk there was no clk provider available, otherwise returns valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hjm‰h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hju‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm‰ubhŒ and ”…”�”}”(hjm‰h²hh³Nh´Nubjõ)�”}”(hŒ**clk_bulk_data.id**”h]”hŒclk_bulk_data.id”…”�”}”(hj‡‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm‰ubhŒg to determine the clock consumer, and thereby the clock producer. The clock returned is stored in each ”…”�”}”(hjm‰h²hh³Nh´Nubjõ)�”}”(hŒ**clk_bulk_data.clk**”h]”hŒclk_bulk_data.clk”…”�”}”(hj™‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm‰ubhŒ field.”…”�”}”(hjm‰h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MëhjvˆubhÝ)�”}”(hŒ9Drivers must assume that the clock source is not enabled.”h]”hŒ9Drivers must assume that the clock source is not enabled.”…”�”}”(hj²‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MòhjvˆubhÝ)�”}”(hŒ@clk_bulk_get should not be called from within interrupt context.”h]”hŒ@clk_bulk_get should not be called from within interrupt context.”…”�”}”(hjÁ‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Môhjvˆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%devm_clk_bulk_get_enable (C function)”Œc.devm_clk_bulk_get_enable”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ[int devm_clk_bulk_get_enable (struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”j)�”}”(hŒZint devm_clk_bulk_get_enable(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjð‰h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjì‰h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Múubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ‰h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjì‰h²hh³jþ‰h´Múubj{)�”}”(hŒdevm_clk_bulk_get_enable”h]”j�)�”}”(hŒdevm_clk_bulk_get_enable”h]”hŒdevm_clk_bulk_get_enable”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Šubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjì‰h²hh³jþ‰h´Múubjœ)�”}”(hŒ>(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj-Šh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)Šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Šh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)Šubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjKŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jMŠŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŠsbŒc.devm_clk_bulk_get_enable”†”asbuh1hhj)Šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)Šubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjyŠh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj)Šubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj†Šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%Šubj¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjŸŠh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›Šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­Šh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›Šubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hj»Šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%Šubj¢)�”}”(hŒstruct clk_bulk_data *clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÔŠh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjЊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjЊubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hjòŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jôŠŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jgŠŒc.devm_clk_bulk_get_enable”†”asbuh1hhjЊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjЊubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjЊubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hj+‹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjЊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%Šubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjì‰h²hh³jþ‰h´Múubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjè‰h²hh³jþ‰h´Múubah}”(h]”jã‰ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jþ‰h´Múhjå‰h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Get and enable bulk clocks (managed)”h]”hŒ$Get and enable bulk clocks (managed)”…”�”}”(hjU‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MúhjR‹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjå‰h²hh³jþ‰h´Múubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjm‹jæjm‹jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXF**Parameters** ``struct device *dev`` device for clock "consumer" ``int num_clks`` the number of clk_bulk_data ``struct clk_bulk_data *clks`` pointer to the clk_bulk_data table of consumer **Description** Behaves the same as devm_clk_bulk_get() but also prepares and enables the clocks in one operation with management. The clks will automatically be disabled, unprepared and freed when the device is unbound. **Return** 0 if all clocks specified in clk_bulk_data table are obtained and enabled successfully. Otherwise returns valid IS_ERR() condition containing errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjw‹h]”hŒ Parameters”…”�”}”(hjy‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhju‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mþhjq‹ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj–‹h]”hŒstruct device *dev”…”�”}”(hj˜‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mûhj�‹ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj¯‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j«‹h´Mûhj¬‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j«‹h´Mûhj�‹ubj)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hjÏ‹h]”hŒ int num_clks”…”�”}”(hjÑ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MühjÉ‹ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hjè‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jä‹h´Mühjå‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÉ‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jä‹h´Mühj�‹ubj)�”}”(hŒN``struct clk_bulk_data *clks`` pointer to the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data *clks``”h]”j)�”}”(hjŒh]”hŒstruct clk_bulk_data *clks”…”�”}”(hj Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MýhjŒubj2)�”}”(hhh]”hÝ)�”}”(hŒ.pointer to the clk_bulk_data table of consumer”h]”hŒ.pointer to the clk_bulk_data table of consumer”…”�”}”(hj!Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŒh´MýhjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŒh´Mýhj�‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjq‹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjCŒh]”hŒ Description”…”�”}”(hjEŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjAŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mÿhjq‹ubhÝ)�”}”(hŒÌBehaves the same as devm_clk_bulk_get() but also prepares and enables the clocks in one operation with management. The clks will automatically be disabled, unprepared and freed when the device is unbound.”h]”hŒÌBehaves the same as devm_clk_bulk_get() but also prepares and enables the clocks in one operation with management. The clks will automatically be disabled, unprepared and freed when the device is unbound.”…”�”}”(hjYŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mþhjq‹ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjjŒh]”hŒReturn”…”�”}”(hjlŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhŒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhjq‹ubhÝ)�”}”(hŒ”0 if all clocks specified in clk_bulk_data table are obtained and enabled successfully. Otherwise returns valid IS_ERR() condition containing errno.”h]”hŒ”0 if all clocks specified in clk_bulk_data table are obtained and enabled successfully. Otherwise returns valid IS_ERR() condition containing errno.”…”�”}”(hj€Œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhjq‹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ.devm_clk_bulk_get_optional_enable (C function)”Œ#c.devm_clk_bulk_get_optional_enable”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒdint devm_clk_bulk_get_optional_enable (struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”j)�”}”(hŒcint devm_clk_bulk_get_optional_enable(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¯Œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj«Œh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Œh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«Œh²hh³j½Œh´M ubj{)�”}”(hŒ!devm_clk_bulk_get_optional_enable”h]”j�)�”}”(hŒ!devm_clk_bulk_get_optional_enable”h]”hŒ!devm_clk_bulk_get_optional_enable”…”�”}”(hjÐŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌŒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj«Œh²hh³j½Œh´M ubjœ)�”}”(hŒ>(struct device *dev, int num_clks, struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjìŒh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjèŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèŒubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j �Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÒŒsbŒ#c.devm_clk_bulk_get_optional_enable”†”asbuh1hhjèŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèŒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj8�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjèŒubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjE�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäŒubj¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj^�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjl�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZ�ubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hjz�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäŒubj¢)�”}”(hŒstruct clk_bulk_data *clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj“�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj��ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj��ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hj±�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j³�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j&�Œ#c.devm_clk_bulk_get_optional_enable”†”asbuh1hhj��ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj��ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÝ�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj��ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hjê�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj��ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäŒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj«Œh²hh³j½Œh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj§Œh²hh³j½Œh´M ubah}”(h]”j¢Œah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j½Œh´M hj¤Œh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Get and enable optional bulk clocks (managed)”h]”hŒ-Get and enable optional bulk clocks (managed)”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M hjŽh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¤Œh²hh³j½Œh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj,Žjæj,Žjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXƒ**Parameters** ``struct device *dev`` device for clock "consumer" ``int num_clks`` the number of clk_bulk_data ``struct clk_bulk_data *clks`` pointer to the clk_bulk_data table of consumer **Description** Behaves the same as devm_clk_bulk_get_optional() but also prepares and enables the clocks in one operation with management. The clks will automatically be disabled, unprepared and freed when the device is unbound. **Return** 0 if all clocks specified in clk_bulk_data table are obtained and enabled successfully, or for any clk there was no clk provider available. Otherwise returns valid IS_ERR() condition containing errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj6Žh]”hŒ Parameters”…”�”}”(hj8Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj4Žubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj0Žubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjUŽh]”hŒstruct device *dev”…”�”}”(hjWŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjSŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M hjOŽubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hjnŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jjŽh´M hjkŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjOŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jjŽh´M hjLŽubj)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hjŽŽh]”hŒ int num_clks”…”�”}”(hj�Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŒŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M hjˆŽubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hj§Žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j£Žh´M hj¤Žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjˆŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j£Žh´M hjLŽubj)�”}”(hŒN``struct clk_bulk_data *clks`` pointer to the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data *clks``”h]”j)�”}”(hjÇŽh]”hŒstruct clk_bulk_data *clks”…”�”}”(hjÉŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅŽubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M hjÁŽubj2)�”}”(hhh]”hÝ)�”}”(hŒ.pointer to the clk_bulk_data table of consumer”h]”hŒ.pointer to the clk_bulk_data table of consumer”…”�”}”(hjàŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÜŽh´M hjÝŽubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÁŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÜŽh´M hjLŽubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj0ŽubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�h]”hŒ Description”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj0ŽubhÝ)�”}”(hŒÕBehaves the same as devm_clk_bulk_get_optional() but also prepares and enables the clocks in one operation with management. The clks will automatically be disabled, unprepared and freed when the device is unbound.”h]”hŒÕBehaves the same as devm_clk_bulk_get_optional() but also prepares and enables the clocks in one operation with management. The clks will automatically be disabled, unprepared and freed when the device is unbound.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj0ŽubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj)�h]”hŒReturn”…”�”}”(hj+�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj0ŽubhÝ)�”}”(hŒÈ0 if all clocks specified in clk_bulk_data table are obtained and enabled successfully, or for any clk there was no clk provider available. Otherwise returns valid IS_ERR() condition containing errno.”h]”hŒÈ0 if all clocks specified in clk_bulk_data table are obtained and enabled successfully, or for any clk there was no clk provider available. Otherwise returns valid IS_ERR() condition containing errno.”…”�”}”(hj?�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj0Žubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"devm_clk_bulk_get_all (C function)”Œc.devm_clk_bulk_get_all”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒKint devm_clk_bulk_get_all (struct device *dev, struct clk_bulk_data **clks)”h]”j)�”}”(hŒJint devm_clk_bulk_get_all(struct device *dev, struct clk_bulk_data **clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjn�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjj�h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj�h²hh³j|�h´Mubj{)�”}”(hŒdevm_clk_bulk_get_all”h]”j�)�”}”(hŒdevm_clk_bulk_get_all”h]”hŒdevm_clk_bulk_get_all”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjj�h²hh³j|�h´Mubjœ)�”}”(hŒ1(struct device *dev, struct clk_bulk_data **clks)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj«�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj§�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§�ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjÉ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jË�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‘�sbŒc.devm_clk_bulk_get_all”†”asbuh1hhj§�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj÷�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj§�ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£�ubj¢)�”}”(hŒstruct clk_bulk_data **clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hj;�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j=�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jå�Œc.devm_clk_bulk_get_all”†”asbuh1hhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjt�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjj�h²hh³j|�h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjf�h²hh³j|�h´Mubah}”(h]”ja�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j|�h´Mhjc�h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"managed get multiple clk consumers”h]”hŒ"managed get multiple clk consumers”…”�”}”(hj«�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj¨�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjc�h²hh³j|�h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÃ�jæjÃ�jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX!**Parameters** ``struct device *dev`` device for clock "consumer" ``struct clk_bulk_data **clks`` pointer to the clk_bulk_data table of consumer **Description** Returns a positive value for the number of clocks obtained while the clock references are stored in the clk_bulk_data table in **clks** field. Returns 0 if there're none and a negative value if something failed. This helper function allows drivers to get several clk consumers in one operation with management, the clks will automatically be freed when the device is unbound.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÍ�h]”hŒ Parameters”…”�”}”(hjÏ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjË�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MhjÇ�ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjì�h]”hŒstruct device *dev”…”�”}”(hjî�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjê�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhjæ�ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‘h´Mhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæ�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‘h´Mhjã�ubj)�”}”(hŒO``struct clk_bulk_data **clks`` pointer to the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data **clks``”h]”j)�”}”(hj%‘h]”hŒstruct clk_bulk_data **clks”…”�”}”(hj'‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj‘ubj2)�”}”(hhh]”hÝ)�”}”(hŒ.pointer to the clk_bulk_data table of consumer”h]”hŒ.pointer to the clk_bulk_data table of consumer”…”�”}”(hj>‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:‘h´Mhj;‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:‘h´Mhjã�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÇ�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj`‘h]”hŒ Description”…”�”}”(hjb‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MhjÇ�ubhÝ)�”}”(hŒÓReturns a positive value for the number of clocks obtained while the clock references are stored in the clk_bulk_data table in **clks** field. Returns 0 if there're none and a negative value if something failed.”h]”(hŒReturns a positive value for the number of clocks obtained while the clock references are stored in the clk_bulk_data table in ”…”�”}”(hjv‘h²hh³Nh´Nubjõ)�”}”(hŒ**clks**”h]”hŒclks”…”�”}”(hj~‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjv‘ubhŒN field. Returns 0 if there’re none and a negative value if something failed.”…”�”}”(hjv‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MhjÇ�ubhÝ)�”}”(hŒ£This helper function allows drivers to get several clk consumers in one operation with management, the clks will automatically be freed when the device is unbound.”h]”hŒ£This helper function allows drivers to get several clk consumers in one operation with management, the clks will automatically be freed when the device is unbound.”…”�”}”(hj—‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M!hjÇ�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*devm_clk_bulk_get_all_enabled (C function)”Œc.devm_clk_bulk_get_all_enabled”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒSint devm_clk_bulk_get_all_enabled (struct device *dev, struct clk_bulk_data **clks)”h]”j)�”}”(hŒRint devm_clk_bulk_get_all_enabled(struct device *dev, struct clk_bulk_data **clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÆ‘h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ‘h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘h²hh³jÔ‘h´M+ubj{)�”}”(hŒdevm_clk_bulk_get_all_enabled”h]”j�)�”}”(hŒdevm_clk_bulk_get_all_enabled”h]”hŒdevm_clk_bulk_get_all_enabled”…”�”}”(hjç‘h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjã‘ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‘h²hh³jÔ‘h´M+ubjœ)�”}”(hŒ1(struct device *dev, struct clk_bulk_data **clks)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÿ‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿ‘ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj!’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j#’Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jé‘sbŒc.devm_clk_bulk_get_all_enabled”†”asbuh1hhjÿ‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿ‘ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjO’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÿ‘ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj\’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿ‘ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjû‘ubj¢)�”}”(hŒstruct clk_bulk_data **clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hju’h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjq’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‚’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjq’ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hj“’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j•’Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j=’Œc.devm_clk_bulk_get_all_enabled”†”asbuh1hhjq’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjq’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¿’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjq’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÌ’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjq’ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hjÙ’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjq’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjû‘ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‘h²hh³jÔ‘h´M+ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¾‘h²hh³jÔ‘h´M+ubah}”(h]”j¹‘ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÔ‘h´M+hj»‘h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3Get and enable all clocks of the consumer (managed)”h]”hŒ3Get and enable all clocks of the consumer (managed)”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M+hj“h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj»‘h²hh³jÔ‘h´M+ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj“jæj“jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXD**Parameters** ``struct device *dev`` device for clock "consumer" ``struct clk_bulk_data **clks`` pointer to the clk_bulk_data table of consumer **Description** Returns a positive value for the number of clocks obtained while the clock references are stored in the clk_bulk_data table in **clks** field. Returns 0 if there're none and a negative value if something failed. This helper function allows drivers to get all clocks of the consumer and enables them in one operation with management. The clks will automatically be disabled and freed when the device is unbound.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj%“h]”hŒ Parameters”…”�”}”(hj'“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj#“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M/hj“ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjD“h]”hŒstruct device *dev”…”�”}”(hjF“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjB“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M,hj>“ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj]“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jY“h´M,hjZ“ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj>“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jY“h´M,hj;“ubj)�”}”(hŒO``struct clk_bulk_data **clks`` pointer to the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data **clks``”h]”j)�”}”(hj}“h]”hŒstruct clk_bulk_data **clks”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj{“ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M-hjw“ubj2)�”}”(hhh]”hÝ)�”}”(hŒ.pointer to the clk_bulk_data table of consumer”h]”hŒ.pointer to the clk_bulk_data table of consumer”…”�”}”(hj–“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j’“h´M-hj““ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjw“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j’“h´M-hj;“ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj“ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¸“h]”hŒ Description”…”�”}”(hjº“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M/hj“ubhÝ)�”}”(hŒÓReturns a positive value for the number of clocks obtained while the clock references are stored in the clk_bulk_data table in **clks** field. Returns 0 if there're none and a negative value if something failed.”h]”(hŒReturns a positive value for the number of clocks obtained while the clock references are stored in the clk_bulk_data table in ”…”�”}”(hjΓh²hh³Nh´Nubjõ)�”}”(hŒ**clks**”h]”hŒclks”…”�”}”(hjÖ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjΓubhŒN field. Returns 0 if there’re none and a negative value if something failed.”…”�”}”(hjΓh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M.hj“ubhÝ)�”}”(hŒÆThis helper function allows drivers to get all clocks of the consumer and enables them in one operation with management. The clks will automatically be disabled and freed when the device is unbound.”h]”hŒÆThis helper function allows drivers to get all clocks of the consumer and enables them in one operation with management. The clks will automatically be disabled and freed when the device is unbound.”…”�”}”(hjï“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M2hj“ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdevm_clk_get (C function)”Œc.devm_clk_get”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ>struct clk * devm_clk_get (struct device *dev, const char *id)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hj”h²hh³j+”h´M=ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj=”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j?”Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ devm_clk_get”sbŒc.devm_clk_get”†”asbuh1hhj”h²hh³j+”h´M=ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”h²hh³j+”h´M=ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjl”h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj”h²hh³j+”h´M=ubj{)�”}”(hŒ devm_clk_get”h]”j�)�”}”(hj[”h]”hŒ devm_clk_get”…”�”}”(hj}”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjy”ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj”h²hh³j+”h´M=ubjœ)�”}”(hŒ$(struct device *dev, const char *id)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj˜”h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj””ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj””ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj¶”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¸”Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jY”Œc.devm_clk_get”†”asbuh1hhj””ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ”h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj””ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjâ”h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj””ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjï”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj””ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�”ubj¢)�”}”(hŒconst char *id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj•ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj#•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj1•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj•ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj?•h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj•ubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hjL•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�”ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj”h²hh³j+”h´M=ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj”h²hh³j+”h´M=ubah}”(h]”j”ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j+”h´M=hj”h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ:lookup and obtain a managed reference to a clock producer.”h]”hŒ:lookup and obtain a managed reference to a clock producer.”…”�”}”(hjv•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M=hjs•h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”h²hh³j+”h´M=ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŽ•jæjŽ•jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX|**Parameters** ``struct device *dev`` device for clock "consumer" ``const char *id`` clock consumer ID **Context** May sleep. **Return** a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. (IOW, **id** may be identical strings, but clk_get may return different clock producers depending on **dev**.) **Description** Drivers must assume that the clock source is neither prepared nor enabled. The clock will automatically be freed when the device is unbound from the bus.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj˜•h]”hŒ Parameters”…”�”}”(hjš•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj–•ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MAhj’•ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj·•h]”hŒstruct device *dev”…”�”}”(hj¹•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M>hj±•ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hjЕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌ•h´M>hjÍ•ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌ•h´M>hj®•ubj)�”}”(hŒ%``const char *id`` clock consumer ID ”h]”(j)�”}”(hŒ``const char *id``”h]”j)�”}”(hjð•h]”hŒconst char *id”…”�”}”(hjò•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjî•ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M?hjê•ubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hj –h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j–h´M?hj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjê•ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j–h´M?hj®•ubeh}”(h]”h ]”h"]”h$]”•h&]”uh1j hj’•ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hj+–h]”hŒContext”…”�”}”(hj-–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MAhj’•ubhÝ)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hjA–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MAhj’•ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjR–h]”hŒReturn”…”�”}”(hjT–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjP–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MChj’•ubhÝ)�”}”(hX<a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. (IOW, **id** may be identical strings, but clk_get may return different clock producers depending on **dev**.)”h]”(hŒya struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hjh–h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjp–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjh–ubhŒ and ”…”�”}”(hjh–h²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hj‚–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjh–ubhŒI to determine the clock consumer, and thereby the clock producer. (IOW, ”…”�”}”(hjh–h²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hj”–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjh–ubhŒY may be identical strings, but clk_get may return different clock producers depending on ”…”�”}”(hjh–h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj¦–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjh–ubhŒ.)”…”�”}”(hjh–h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MChj’•ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÁ–h]”hŒ Description”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¿–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MIhj’•ubhÝ)�”}”(hŒJDrivers must assume that the clock source is neither prepared nor enabled.”h]”hŒJDrivers must assume that the clock source is neither prepared nor enabled.”…”�”}”(hj×–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MHhj’•ubhÝ)�”}”(hŒNThe clock will automatically be freed when the device is unbound from the bus.”h]”hŒNThe clock will automatically be freed when the device is unbound from the bus.”…”�”}”(hjæ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MKhj’•ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"devm_clk_get_prepared (C function)”Œc.devm_clk_get_prepared”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGstruct clk * devm_clk_get_prepared (struct device *dev, const char *id)”h]”j)�”}”(hŒEstruct clk *devm_clk_get_prepared(struct device *dev, const char *id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj—h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—h²hh³j"—h´MRubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj4—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j6—Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œdevm_clk_get_prepared”sbŒc.devm_clk_get_prepared”†”asbuh1hhj—h²hh³j"—h´MRubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj—h²hh³j"—h´MRubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjc—h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj—h²hh³j"—h´MRubj{)�”}”(hŒdevm_clk_get_prepared”h]”j�)�”}”(hjR—h]”hŒdevm_clk_get_prepared”…”�”}”(hjt—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjp—ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—h²hh³j"—h´MRubjœ)�”}”(hŒ$(struct device *dev, const char *id)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�—h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‹—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœ—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹—ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj­—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjª—ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¯—Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jP—Œc.devm_clk_get_prepared”†”asbuh1hhj‹—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjË—h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹—ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÙ—h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‹—ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjæ—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‡—ubj¢)�”}”(hŒconst char *id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÿ—h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjû—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjû—ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjû—ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(˜h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjû—ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj6˜h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjû—ubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hjC˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjû—ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‡—ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj—h²hh³j"—h´MRubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj —h²hh³j"—h´MRubah}”(h]”j—ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j"—h´MRhj —h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒdevm_clk_get() + clk_prepare()”h]”hŒdevm_clk_get() + clk_prepare()”…”�”}”(hjm˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MRhjj˜h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj —h²hh³j"—h´MRubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj…˜jæj…˜jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX¤**Parameters** ``struct device *dev`` device for clock "consumer" ``const char *id`` clock consumer ID **Context** May sleep. **Return** a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. (IOW, **id** may be identical strings, but clk_get may return different clock producers depending on **dev**.) **Description** The returned clk (if valid) is prepared. Drivers must however assume that the clock is not enabled. The clock will automatically be unprepared and freed when the device is unbound from the bus.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�˜h]”hŒ Parameters”…”�”}”(hj‘˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MVhj‰˜ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj®˜h]”hŒstruct device *dev”…”�”}”(hj°˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MShj¨˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hjǘh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØh´MShjĘubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¨˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØh´MShj¥˜ubj)�”}”(hŒ%``const char *id`` clock consumer ID ”h]”(j)�”}”(hŒ``const char *id``”h]”j)�”}”(hjç˜h]”hŒconst char *id”…”�”}”(hjé˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MThjá˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jü˜h´MThjý˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjá˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jü˜h´MThj¥˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‰˜ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hj"™h]”hŒContext”…”�”}”(hj$™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MVhj‰˜ubhÝ)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj8™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MVhj‰˜ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjI™h]”hŒReturn”…”�”}”(hjK™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjG™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MXhj‰˜ubhÝ)�”}”(hX<a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. (IOW, **id** may be identical strings, but clk_get may return different clock producers depending on **dev**.)”h]”(hŒya struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hj_™h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjg™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_™ubhŒ and ”…”�”}”(hj_™h²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hjy™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_™ubhŒI to determine the clock consumer, and thereby the clock producer. (IOW, ”…”�”}”(hj_™h²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hj‹™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_™ubhŒY may be identical strings, but clk_get may return different clock producers depending on ”…”�”}”(hj_™h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj�™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj_™ubhŒ.)”…”�”}”(hj_™h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MXhj‰˜ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¸™h]”hŒ Description”…”�”}”(hjº™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M^hj‰˜ubhÝ)�”}”(hŒcThe returned clk (if valid) is prepared. Drivers must however assume that the clock is not enabled.”h]”hŒcThe returned clk (if valid) is prepared. Drivers must however assume that the clock is not enabled.”…”�”}”(hjΙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M]hj‰˜ubhÝ)�”}”(hŒ]The clock will automatically be unprepared and freed when the device is unbound from the bus.”h]”hŒ]The clock will automatically be unprepared and freed when the device is unbound from the bus.”…”�”}”(hjÝ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M`hj‰˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!devm_clk_get_enabled (C function)”Œc.devm_clk_get_enabled”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFstruct clk * devm_clk_get_enabled (struct device *dev, const char *id)”h]”j)�”}”(hŒDstruct clk *devm_clk_get_enabled(struct device *dev, const char *id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj šh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjšh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšh²hh³jšh´Mgubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj+šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj(šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j-šŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œdevm_clk_get_enabled”sbŒc.devm_clk_get_enabled”†”asbuh1hhjšh²hh³jšh´Mgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšh²hh³jšh´Mgubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjZšh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjšh²hh³jšh´Mgubj{)�”}”(hŒdevm_clk_get_enabled”h]”j�)�”}”(hjIšh]”hŒdevm_clk_get_enabled”…”�”}”(hjkšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjgšubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjšh²hh³jšh´Mgubjœ)�”}”(hŒ$(struct device *dev, const char *id)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj†šh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‚šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“šh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚šubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj¤šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡šubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¦šŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jGšŒc.devm_clk_get_enabled”†”asbuh1hhj‚šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚šubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjКh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‚šubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÝšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj~šubj¢)�”}”(hŒconst char *id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjöšh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjòšubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòšubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjòšubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjòšubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj-›h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjòšubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hj:›h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòšubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj~šubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjšh²hh³jšh´Mgubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjšh²hh³jšh´Mgubah}”(h]”jÿ™ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jšh´Mghjšh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%devm_clk_get() + clk_prepare_enable()”h]”hŒ%devm_clk_get() + clk_prepare_enable()”…”�”}”(hjd›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mghja›h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjšh²hh³jšh´Mgubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj|›jæj|›jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX**Parameters** ``struct device *dev`` device for clock "consumer" ``const char *id`` clock consumer ID **Context** May sleep. **Return** a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. (IOW, **id** may be identical strings, but clk_get may return different clock producers depending on **dev**.) **Description** The returned clk (if valid) is prepared and enabled. The clock will automatically be disabled, unprepared and freed when the device is unbound from the bus.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj†›h]”hŒ Parameters”…”�”}”(hjˆ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj„›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mkhj€›ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hj¥›h]”hŒstruct device *dev”…”�”}”(hj§›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MhhjŸ›ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj¾›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jº›h´Mhhj»›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŸ›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jº›h´Mhhjœ›ubj)�”}”(hŒ%``const char *id`` clock consumer ID ”h]”(j)�”}”(hŒ``const char *id``”h]”j)�”}”(hjÞ›h]”hŒconst char *id”…”�”}”(hjà›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MihjØ›ubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hj÷›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jó›h´Mihjô›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØ›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jó›h´Mihjœ›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj€›ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hjœh]”hŒContext”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mkhj€›ubhÝ)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj/œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mkhj€›ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj@œh]”hŒReturn”…”�”}”(hjBœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mmhj€›ubhÝ)�”}”(hX<a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. (IOW, **id** may be identical strings, but clk_get may return different clock producers depending on **dev**.)”h]”(hŒya struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hjVœh²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj^œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVœubhŒ and ”…”�”}”(hjVœh²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hjpœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVœubhŒI to determine the clock consumer, and thereby the clock producer. (IOW, ”…”�”}”(hjVœh²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hj‚œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVœubhŒY may be identical strings, but clk_get may return different clock producers depending on ”…”�”}”(hjVœh²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj”œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVœubhŒ.)”…”�”}”(hjVœh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mmhj€›ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¯œh]”hŒ Description”…”�”}”(hj±œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mshj€›ubhÝ)�”}”(hŒ4The returned clk (if valid) is prepared and enabled.”h]”hŒ4The returned clk (if valid) is prepared and enabled.”…”�”}”(hjÅœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mrhj€›ubhÝ)�”}”(hŒgThe clock will automatically be disabled, unprepared and freed when the device is unbound from the bus.”h]”hŒgThe clock will automatically be disabled, unprepared and freed when the device is unbound from the bus.”…”�”}”(hjÔœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mthj€›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"devm_clk_get_optional (C function)”Œc.devm_clk_get_optional”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGstruct clk * devm_clk_get_optional (struct device *dev, const char *id)”h]”j)�”}”(hŒEstruct clk *devm_clk_get_optional(struct device *dev, const char *id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÿœh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M{ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿœh²hh³j�h´M{ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj"�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j$�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œdevm_clk_get_optional”sbŒc.devm_clk_get_optional”†”asbuh1hhjÿœh²hh³j�h´M{ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjC�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿœh²hh³j�h´M{ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjQ�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÿœh²hh³j�h´M{ubj{)�”}”(hŒdevm_clk_get_optional”h]”j�)�”}”(hj@�h]”hŒdevm_clk_get_optional”…”�”}”(hjb�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj^�ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÿœh²hh³j�h´M{ubjœ)�”}”(hŒ$(struct device *dev, const char *id)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj}�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjy�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjy�ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj›�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j��Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j>�Œc.devm_clk_get_optional”†”asbuh1hhjy�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjy�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÇ�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjy�ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjÔ�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjy�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hju�ubj¢)�”}”(hŒconst char *id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjí�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjé�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjú�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjé�ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjé�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjé�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$žh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjé�ubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hj1žh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjé�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hju�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÿœh²hh³j�h´M{ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjûœh²hh³j�h´M{ubah}”(h]”jöœah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�h´M{hjøœh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒDlookup and obtain a managed reference to an optional clock producer.”h]”hŒDlookup and obtain a managed reference to an optional clock producer.”…”�”}”(hj[žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M{hjXžh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjøœh²hh³j�h´M{ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjsžjæjsžjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX‹**Parameters** ``struct device *dev`` device for clock "consumer" ``const char *id`` clock consumer ID **Context** May sleep. **Return** a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That's the only difference compared to devm_clk_get(). **Description** Drivers must assume that the clock source is neither prepared nor enabled. The clock will automatically be freed when the device is unbound from the bus.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj}žh]”hŒ Parameters”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj{žubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhjwžubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjœžh]”hŒstruct device *dev”…”�”}”(hjžžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjšžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M}hj–žubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hjµžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j±žh´M}hj²žubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj–žubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j±žh´M}hj“žubj)�”}”(hŒ%``const char *id`` clock consumer ID ”h]”(j)�”}”(hŒ``const char *id``”h]”j)�”}”(hjÕžh]”hŒconst char *id”…”�”}”(hjמh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M~hjÏžubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hjîžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jêžh´M~hjëžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêžh´M~hj“žubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjwžubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hjŸh]”hŒContext”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M€hjwžubhÝ)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj&Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M€hjwžubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj7Ÿh]”hŒReturn”…”�”}”(hj9Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M‚hjwžubhÝ)�”}”(hXKa struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That's the only difference compared to devm_clk_get().”h]”(hŒya struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hjMŸh²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjUŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMŸubhŒ and ”…”�”}”(hjMŸh²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hjgŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMŸubhŒÂ to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That’s the only difference compared to devm_clk_get().”…”�”}”(hjMŸh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M‚hjwžubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‚Ÿh]”hŒ Description”…”�”}”(hj„Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M‰hjwžubhÝ)�”}”(hŒJDrivers must assume that the clock source is neither prepared nor enabled.”h]”hŒJDrivers must assume that the clock source is neither prepared nor enabled.”…”�”}”(hj˜Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MˆhjwžubhÝ)�”}”(hŒNThe clock will automatically be freed when the device is unbound from the bus.”h]”hŒNThe clock will automatically be freed when the device is unbound from the bus.”…”�”}”(hj§Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M‹hjwžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ+devm_clk_get_optional_prepared (C function)”Œ c.devm_clk_get_optional_prepared”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPstruct clk * devm_clk_get_optional_prepared (struct device *dev, const char *id)”h]”j)�”}”(hŒNstruct clk *devm_clk_get_optional_prepared(struct device *dev, const char *id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÖŸh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÒŸh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjäŸh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒŸh²hh³jãŸh´M’ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjõŸh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjòŸubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j÷ŸŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œdevm_clk_get_optional_prepared”sbŒ c.devm_clk_get_optional_prepared”†”asbuh1hhjÒŸh²hh³jãŸh´M’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒŸh²hh³jãŸh´M’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÒŸh²hh³jãŸh´M’ubj{)�”}”(hŒdevm_clk_get_optional_prepared”h]”j�)�”}”(hj h]”hŒdevm_clk_get_optional_prepared”…”�”}”(hj5 h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1 ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÒŸh²hh³jãŸh´M’ubjœ)�”}”(hŒ$(struct device *dev, const char *id)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjP h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjL ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjL ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjn h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjk ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jp Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j Œ c.devm_clk_get_optional_prepared”†”asbuh1hhjL ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjL ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjL ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjL ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjH ubj¢)�”}”(hŒconst char *id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÀ h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¼ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼ ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjÛ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¼ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼ ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj÷ h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¼ ubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼ ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjH ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÒŸh²hh³jãŸh´M’ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjΟh²hh³jãŸh´M’ubah}”(h]”jÉŸah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jãŸh´M’hjËŸh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'devm_clk_get_optional() + clk_prepare()”h]”hŒ'devm_clk_get_optional() + clk_prepare()”…”�”}”(hj.¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M’hj+¡h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjËŸh²hh³jãŸh´M’ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjF¡jæjF¡jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX¼**Parameters** ``struct device *dev`` device for clock "consumer" ``const char *id`` clock consumer ID **Context** May sleep. **Return** a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That's the only difference compared to devm_clk_get_prepared(). **Description** The returned clk (if valid) is prepared. Drivers must however assume that the clock is not enabled. The clock will automatically be unprepared and freed when the device is unbound from the bus.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjP¡h]”hŒ Parameters”…”�”}”(hjR¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjN¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M–hjJ¡ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjo¡h]”hŒstruct device *dev”…”�”}”(hjq¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjm¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M“hji¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hjˆ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j„¡h´M“hj…¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hji¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j„¡h´M“hjf¡ubj)�”}”(hŒ%``const char *id`` clock consumer ID ”h]”(j)�”}”(hŒ``const char *id``”h]”j)�”}”(hj¨¡h]”hŒconst char *id”…”�”}”(hjª¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¦¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M”hj¢¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hjÁ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j½¡h´M”hj¾¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¢¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j½¡h´M”hjf¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjJ¡ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hjã¡h]”hŒContext”…”�”}”(hjå¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjá¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M–hjJ¡ubhÝ)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hjù¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M–hjJ¡ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj ¢h]”hŒReturn”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M˜hjJ¡ubhÝ)�”}”(hXTa struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That's the only difference compared to devm_clk_get_prepared().”h]”(hŒya struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hj ¢h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hj(¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ¢ubhŒ and ”…”�”}”(hj ¢h²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hj:¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ¢ubhŒË to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That’s the only difference compared to devm_clk_get_prepared().”…”�”}”(hj ¢h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M˜hjJ¡ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjU¢h]”hŒ Description”…”�”}”(hjW¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjS¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MŸhjJ¡ubhÝ)�”}”(hŒcThe returned clk (if valid) is prepared. Drivers must however assume that the clock is not enabled.”h]”hŒcThe returned clk (if valid) is prepared. Drivers must however assume that the clock is not enabled.”…”�”}”(hjk¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MžhjJ¡ubhÝ)�”}”(hŒ]The clock will automatically be unprepared and freed when the device is unbound from the bus.”h]”hŒ]The clock will automatically be unprepared and freed when the device is unbound from the bus.”…”�”}”(hjz¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¡hjJ¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*devm_clk_get_optional_enabled (C function)”Œc.devm_clk_get_optional_enabled”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOstruct clk * devm_clk_get_optional_enabled (struct device *dev, const char *id)”h]”j)�”}”(hŒMstruct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj©¢h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¥¢h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥¢h²hh³j¶¢h´M¨ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjÈ¢h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÅ¢ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÊ¢Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œdevm_clk_get_optional_enabled”sbŒc.devm_clk_get_optional_enabled”†”asbuh1hhj¥¢h²hh³j¶¢h´M¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé¢h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¥¢h²hh³j¶¢h´M¨ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj÷¢h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¥¢h²hh³j¶¢h´M¨ubj{)�”}”(hŒdevm_clk_get_optional_enabled”h]”j�)�”}”(hjæ¢h]”hŒdevm_clk_get_optional_enabled”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¥¢h²hh³j¶¢h´M¨ubjœ)�”}”(hŒ$(struct device *dev, const char *id)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj#£h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjA£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>£ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jC£Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j䢌c.devm_clk_get_optional_enabled”†”asbuh1hhj£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj£ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjm£h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj£ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjz£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£ubj¢)�”}”(hŒconst char *id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj“£h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj £h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�£ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj®£h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼£h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�£ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÊ£h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�£ubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hj×£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�£ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¥¢h²hh³j¶¢h´M¨ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¡¢h²hh³j¶¢h´M¨ubah}”(h]”jœ¢ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¶¢h´M¨hjž¢h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.devm_clk_get_optional() + clk_prepare_enable()”h]”hŒ.devm_clk_get_optional() + clk_prepare_enable()”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¨hjþ£h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjž¢h²hh³j¶¢h´M¨ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¤jæj¤jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX–**Parameters** ``struct device *dev`` device for clock "consumer" ``const char *id`` clock consumer ID **Context** May sleep. **Return** a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That's the only difference compared to devm_clk_get_enabled(). **Description** The returned clk (if valid) is prepared and enabled. The clock will automatically be disabled, unprepared and freed when the device is unbound from the bus.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj#¤h]”hŒ Parameters”…”�”}”(hj%¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¬hj¤ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjB¤h]”hŒstruct device *dev”…”�”}”(hjD¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mªhj<¤ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj[¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jW¤h´MªhjX¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj<¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jW¤h´Mªhj9¤ubj)�”}”(hŒ%``const char *id`` clock consumer ID ”h]”(j)�”}”(hŒ``const char *id``”h]”j)�”}”(hj{¤h]”hŒconst char *id”…”�”}”(hj}¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjy¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M«hju¤ubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hj”¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�¤h´M«hj‘¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hju¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�¤h´M«hj9¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¤ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hj¶¤h]”hŒContext”…”�”}”(hj¸¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj´¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M­hj¤ubhÝ)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj̤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M­hj¤ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjݤh]”hŒReturn”…”�”}”(hjߤh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¯hj¤ubhÝ)�”}”(hXSa struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That's the only difference compared to devm_clk_get_enabled().”h]”(hŒya struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hjó¤h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjû¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjó¤ubhŒ and ”…”�”}”(hjó¤h²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hj ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjó¤ubhŒÊ to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That’s the only difference compared to devm_clk_get_enabled().”…”�”}”(hjó¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¯hj¤ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj(¥h]”hŒ Description”…”�”}”(hj*¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj&¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¶hj¤ubhÝ)�”}”(hŒ4The returned clk (if valid) is prepared and enabled.”h]”hŒ4The returned clk (if valid) is prepared and enabled.”…”�”}”(hj>¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mµhj¤ubhÝ)�”}”(hŒgThe clock will automatically be disabled, unprepared and freed when the device is unbound from the bus.”h]”hŒgThe clock will automatically be disabled, unprepared and freed when the device is unbound from the bus.”…”�”}”(hjM¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M·hj¤ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ4devm_clk_get_optional_enabled_with_rate (C function)”Œ)c.devm_clk_get_optional_enabled_with_rate”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒmstruct clk * devm_clk_get_optional_enabled_with_rate (struct device *dev, const char *id, unsigned long rate)”h]”j)�”}”(hŒkstruct clk *devm_clk_get_optional_enabled_with_rate(struct device *dev, const char *id, unsigned long rate)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj|¥h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjx¥h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠ¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjx¥h²hh³j‰¥h´M¾ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj›¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜¥ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�¥Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ'devm_clk_get_optional_enabled_with_rate”sbŒ)c.devm_clk_get_optional_enabled_with_rate”†”asbuh1hhjx¥h²hh³j‰¥h´M¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjx¥h²hh³j‰¥h´M¾ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÊ¥h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjx¥h²hh³j‰¥h´M¾ubj{)�”}”(hŒ'devm_clk_get_optional_enabled_with_rate”h]”j�)�”}”(hj¹¥h]”hŒ'devm_clk_get_optional_enabled_with_rate”…”�”}”(hjÛ¥h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×¥ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjx¥h²hh³j‰¥h´M¾ubjœ)�”}”(hŒ8(struct device *dev, const char *id, unsigned long rate)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjö¥h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjò¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò¥ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¦Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j·¥Œ)c.devm_clk_get_optional_enabled_with_rate”†”asbuh1hhjò¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjò¥ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj@¦h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjò¥ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjM¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjò¥ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî¥ubj¢)�”}”(hŒconst char *id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjf¦h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjb¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjs¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjb¦ubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj�¦h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjb¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjb¦ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�¦h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjb¦ubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hjª¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjb¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî¥ubj¢)�”}”(hŒunsigned long rate”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjѦh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿¦ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjߦh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¿¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿¦ubj�)�”}”(hŒrate”h]”hŒrate”…”�”}”(hjû¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjî¥ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjx¥h²hh³j‰¥h´M¾ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjt¥h²hh³j‰¥h´M¾ubah}”(h]”jo¥ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‰¥h´M¾hjq¥h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ?devm_clk_get_optional() + clk_set_rate() + clk_prepare_enable()”h]”hŒ?devm_clk_get_optional() + clk_set_rate() + clk_prepare_enable()”…”�”}”(hj%§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¾hj"§h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjq¥h²hh³j‰¥h´M¾ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj=§jæj=§jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXÐ**Parameters** ``struct device *dev`` device for clock "consumer" ``const char *id`` clock consumer ID ``unsigned long rate`` new clock rate **Context** May sleep. **Return** a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That's the only difference compared to devm_clk_get_enabled(). **Description** The returned clk (if valid) is prepared and enabled and rate was set. The clock will automatically be disabled, unprepared and freed when the device is unbound from the bus.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjG§h]”hŒ Parameters”…”�”}”(hjI§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjE§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÂhjA§ubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjf§h]”hŒstruct device *dev”…”�”}”(hjh§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÁhj`§ubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hj§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{§h´MÁhj|§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{§h´MÁhj]§ubj)�”}”(hŒ%``const char *id`` clock consumer ID ”h]”(j)�”}”(hŒ``const char *id``”h]”j)�”}”(hjŸ§h]”hŒconst char *id”…”�”}”(hj¡§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÂhj™§ubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hj¸§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j´§h´MÂhjµ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´§h´MÂhj]§ubj)�”}”(hŒ&``unsigned long rate`` new clock rate ”h]”(j)�”}”(hŒ``unsigned long rate``”h]”j)�”}”(hjاh]”hŒunsigned long rate”…”�”}”(hjÚ§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÃhjÒ§ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew clock rate”h]”hŒnew clock rate”…”�”}”(hjñ§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jí§h´MÃhjî§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÒ§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jí§h´MÃhj]§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjA§ubhÝ)�”}”(hŒ **Context**”h]”jõ)�”}”(hj¨h]”hŒContext”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÅhjA§ubhÝ)�”}”(hŒ May sleep.”h]”hŒ May sleep.”…”�”}”(hj)¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÅhjA§ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj:¨h]”hŒReturn”…”�”}”(hj<¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÇhjA§ubhÝ)�”}”(hXSa struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev** and **id** to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That's the only difference compared to devm_clk_get_enabled().”h]”(hŒya struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hjP¨h²hh³Nh´Nubjõ)�”}”(hŒ**dev**”h]”hŒdev”…”�”}”(hjX¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjP¨ubhŒ and ”…”�”}”(hjP¨h²hh³Nh´Nubjõ)�”}”(hŒ**id**”h]”hŒid”…”�”}”(hjj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjP¨ubhŒÊ to determine the clock consumer, and thereby the clock producer. If no such clk is found, it returns NULL which serves as a dummy clk. That’s the only difference compared to devm_clk_get_enabled().”…”�”}”(hjP¨h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÇhjA§ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj…¨h]”hŒ Description”…”�”}”(hj‡¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒ¨ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÎhjA§ubhÝ)�”}”(hŒEThe returned clk (if valid) is prepared and enabled and rate was set.”h]”hŒEThe returned clk (if valid) is prepared and enabled and rate was set.”…”�”}”(hj›¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÍhjA§ubhÝ)�”}”(hŒgThe clock will automatically be disabled, unprepared and freed when the device is unbound from the bus.”h]”hŒgThe clock will automatically be disabled, unprepared and freed when the device is unbound from the bus.”…”�”}”(hjª¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÏhjA§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$devm_get_clk_from_child (C function)”Œc.devm_get_clk_from_child”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒestruct clk * devm_get_clk_from_child (struct device *dev, struct device_node *np, const char *con_id)”h]”j)�”}”(hŒcstruct clk *devm_get_clk_from_child(struct device *dev, struct device_node *np, const char *con_id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÙ¨h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÕ¨h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕ¨h²hh³jæ¨h´MØubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjø¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõ¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jú¨Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œdevm_get_clk_from_child”sbŒc.devm_get_clk_from_child”†”asbuh1hhjÕ¨h²hh³jæ¨h´MØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕ¨h²hh³jæ¨h´MØubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj'©h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÕ¨h²hh³jæ¨h´MØubj{)�”}”(hŒdevm_get_clk_from_child”h]”j�)�”}”(hj©h]”hŒdevm_get_clk_from_child”…”�”}”(hj8©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4©ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÕ¨h²hh³jæ¨h´MØubjœ)�”}”(hŒ@(struct device *dev, struct device_node *np, const char *con_id)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjS©h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjO©ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjO©ubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjq©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjn©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”js©Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j©Œc.devm_get_clk_from_child”†”asbuh1hhjO©ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjO©ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�©h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjO©ubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjª©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjO©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjK©ubj¢)�”}”(hŒstruct device_node *np”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¿©ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjЩh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿©ubh)�”}”(hhh]”j�)�”}”(hŒ device_node”h]”hŒ device_node”…”�”}”(hjá©h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞ©ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j㩌modname”NŒ classname”Nj] j` )�”}”jc ]”j©Œc.devm_get_clk_from_child”†”asbuh1hhj¿©ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ©h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¿©ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ªh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¿©ubj�)�”}”(hŒnp”h]”hŒnp”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿©ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjK©ubj¢)�”}”(hŒconst char *con_id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj3ªh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj/ªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/ªubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hjNªh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj/ªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/ªubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjjªh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj/ªubj�)�”}”(hŒcon_id”h]”hŒcon_id”…”�”}”(hjwªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/ªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjK©ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÕ¨h²hh³jæ¨h´MØubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjѨh²hh³jæ¨h´MØubah}”(h]”j̨ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jæ¨h´MØhjΨh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒJlookup and obtain a managed reference to a clock producer from child node.”h]”hŒJlookup and obtain a managed reference to a clock producer from child node.”…”�”}”(hj¡ªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MØhjžªh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjΨh²hh³jæ¨h´MØubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¹ªjæj¹ªjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX£**Parameters** ``struct device *dev`` device for clock "consumer" ``struct device_node *np`` pointer to clock consumer node ``const char *con_id`` clock consumer ID **Description** This function parses the clocks, and uses them to look up the struct clk from the registered list of clock providers by using **np** and **con_id** The clock will automatically be freed when the device is unbound from the bus.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjêh]”•#hŒ Parameters”…”�”}”(hjŪh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁªubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÜhj½ªubj )�”}”(hhh]”(j)�”}”(hŒ3``struct device *dev`` device for clock "consumer" ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjâªh]”hŒstruct device *dev”…”�”}”(hjäªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjàªubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÚhjܪubj2)�”}”(hhh]”hÝ)�”}”(hŒdevice for clock "consumer"”h]”hŒdevice for clock “consumerâ€�”…”�”}”(hjûªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j÷ªh´MÚhjøªubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjܪubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j÷ªh´MÚhjÙªubj)�”}”(hŒ:``struct device_node *np`` pointer to clock consumer node ”h]”(j)�”}”(hŒ``struct device_node *np``”h]”j)�”}”(hj«h]”hŒstruct device_node *np”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÛhj«ubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to clock consumer node”h]”hŒpointer to clock consumer node”…”�”}”(hj4«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0«h´MÛhj1«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0«h´MÛhjÙªubj)�”}”(hŒ)``const char *con_id`` clock consumer ID ”h]”(j)�”}”(hŒ``const char *con_id``”h]”j)�”}”(hjT«h]”hŒconst char *con_id”…”�”}”(hjV«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjR«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÜhjN«ubj2)�”}”(hhh]”hÝ)�”}”(hŒclock consumer ID”h]”hŒclock consumer ID”…”�”}”(hjm«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ji«h´MÜhjj«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjN«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ji«h´MÜhjÙªubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj½ªubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�«h]”hŒ Description”…”�”}”(hj‘«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÞhj½ªubhÝ)�”}”(hŒ“This function parses the clocks, and uses them to look up the struct clk from the registered list of clock providers by using **np** and **con_id**”h]”(hŒ~This function parses the clocks, and uses them to look up the struct clk from the registered list of clock providers by using ”…”�”}”(hj¥«h²hh³Nh´Nubjõ)�”}”(hŒ**np**”h]”hŒnp”…”�”}”(hj­«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥«ubhŒ and ”…”�”}”(hj¥«h²hh³Nh´Nubjõ)�”}”(hŒ **con_id**”h]”hŒcon_id”…”�”}”(hj¿«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÝhj½ªubhÝ)�”}”(hŒNThe clock will automatically be freed when the device is unbound from the bus.”h]”hŒNThe clock will automatically be freed when the device is unbound from the bus.”…”�”}”(hjÔ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Máhj½ªubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_enable (C function)”Œ c.clk_enable”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ int clk_enable (struct clk *clk)”h]”j)�”}”(hŒint clk_enable(struct clk *clk)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÿ«h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Méubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿ«h²hh³j¬h´Méubj{)�”}”(hŒ clk_enable”h]”j�)�”}”(hŒ clk_enable”h]”hŒ clk_enable”…”�”}”(hj$¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ¬ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÿ«h²hh³j¬h´Méubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj@¬h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj<¬ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM¬h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj<¬ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj^¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[¬ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j`¬Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j&¬sbŒ c.clk_enable”†”asbuh1hhj<¬ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~¬h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj<¬ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŒ¬h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj<¬ubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj™¬h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj8¬ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÿ«h²hh³j¬h´Méubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjû«h²hh³j¬h´Méubah}”(h]”jö«ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¬h´Méhjø«h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ:inform the system when the clock source should be running.”h]”hŒ:inform the system when the clock source should be running.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MéhjÀ¬h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjø«h²hh³j¬h´Méubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÛ¬jæjÛ¬jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒ×**Parameters** ``struct clk *clk`` clock source **Description** If the clock can not be enabled/disabled, this should return success. May be called from atomic contexts. Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjå¬h]”hŒ Parameters”…”�”}”(hjç¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Míhj߬ubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj­h]”hŒstruct clk *clk”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mêhjþ¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j­h´Mêhj­ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjþ¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­h´Mêhjû¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj߬ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj?­h]”hŒ Description”…”�”}”(hjA­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj=­ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mìhj߬ubhÝ)�”}”(hŒEIf the clock can not be enabled/disabled, this should return success.”h]”hŒEIf the clock can not be enabled/disabled, this should return success.”…”�”}”(hjU­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mëhj߬ubhÝ)�”}”(hŒ#May be called from atomic contexts.”h]”hŒ#May be called from atomic contexts.”…”�”}”(hjd­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Míhj߬ubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hjs­h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mïhj߬ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_bulk_enable (C function)”Œc.clk_bulk_enable”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDint clk_bulk_enable (int num_clks, const struct clk_bulk_data *clks)”h]”j)�”}”(hŒCint clk_bulk_enable(int num_clks, const struct clk_bulk_data *clks)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¢­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjž­h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mõubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjž­h²hh³j°­h´Mõubj{)�”}”(hŒclk_bulk_enable”h]”j�)�”}”(hŒclk_bulk_enable”h]”hŒclk_bulk_enable”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿­ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjž­h²hh³j°­h´Mõubjœ)�”}”(hŒ0(int num_clks, const struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjß­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÛ­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjí­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ­ubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hjû­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×­ubj¢)�”}”(hŒ const struct clk_bulk_data *clks”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj/®h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj<®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hjM®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJ®ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jO®Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÅ­sbŒc.clk_bulk_enable”†”asbuh1hhj®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm®h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj{®h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj®ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hjˆ®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×­ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjž­h²hh³j°­h´Mõubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjš­h²hh³j°­h´Mõubah}”(h]”j•­ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j°­h´Mõhj—­h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9inform the system when the set of clks should be running.”h]”hŒ9inform the system when the set of clks should be running.”…”�”}”(hj²®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mõhj¯®h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj—­h²hh³j°­h´Mõubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÊ®jæjÊ®jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒè**Parameters** ``int num_clks`` the number of clk_bulk_data ``const struct clk_bulk_data *clks`` the clk_bulk_data table of consumer **Description** May be called from atomic contexts. Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÔ®h]”hŒ Parameters”…”�”}”(hjÖ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÒ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mùhjήubj )�”}”(hhh]”(j)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hjó®h]”hŒ int num_clks”…”�”}”(hjõ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjñ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Möhjí®ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hj ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¯h´Möhj ¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjí®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¯h´Möhjê®ubj)�”}”(hŒI``const struct clk_bulk_data *clks`` the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ$``const struct clk_bulk_data *clks``”h]”j)�”}”(hj,¯h]”hŒ const struct clk_bulk_data *clks”…”�”}”(hj.¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj*¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M÷hj&¯ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the clk_bulk_data table of consumer”h]”hŒ#the clk_bulk_data table of consumer”…”�”}”(hjE¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jA¯h´M÷hjB¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj&¯ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jA¯h´M÷hjê®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjήubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjg¯h]”hŒ Description”…”�”}”(hji¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhje¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MùhjήubhÝ)�”}”(hŒ#May be called from atomic contexts.”h]”hŒ#May be called from atomic contexts.”…”�”}”(hj}¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MøhjήubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hjŒ¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Múhjήubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_disable (C function)”Œ c.clk_disable”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ"void clk_disable (struct clk *clk)”h]”j)�”}”(hŒ!void clk_disable(struct clk *clk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj»¯h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj·¯h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjʯh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj·¯h²hh³jɯh´Mubj{)�”}”(hŒ clk_disable”h]”j�)�”}”(hŒ clk_disable”h]”hŒ clk_disable”…”�”}”(hjܯh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjدubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj·¯h²hh³jɯh´Mubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjø¯h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjô¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô¯ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj°ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j°Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÞ¯sbŒ c.clk_disable”†”asbuh1hhjô¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjô¯ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjD°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjô¯ubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjQ°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjô¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjð¯ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj·¯h²hh³jɯh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj³¯h²hh³jɯh´Mubah}”(h]”j®¯ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jɯh´Mhj°¯h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ>inform the system when the clock source is no longer required.”h]”hŒ>inform the system when the clock source is no longer required.”…”�”}”(hj{°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhjx°h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj°¯h²hh³jɯh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj“°jæj“°jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXŠ**Parameters** ``struct clk *clk`` clock source **Description** Inform the system that a clock source is no longer required by a driver and may be shut down. May be called from atomic contexts. Implementation detail: if the clock source is shared between multiple drivers, clk_enable() calls must be balanced by the same number of clk_disable() calls for the clock source to be disabled.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�°h]”hŒ Parameters”…”�”}”(hjŸ°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj›°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj—°ubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj¼°h]”hŒstruct clk *clk”…”�”}”(hj¾°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjº°ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj¶°ubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjÕ°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jѰh´MhjÒ°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¶°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jѰh´Mhj³°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj—°ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj÷°h]”hŒ Description”…”�”}”(hjù°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõ°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj—°ubhÝ)�”}”(hŒ]Inform the system that a clock source is no longer required by a driver and may be shut down.”h]”hŒ]Inform the system that a clock source is no longer required by a driver and may be shut down.”…”�”}”(hj ±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj—°ubhÝ)�”}”(hŒ#May be called from atomic contexts.”h]”hŒ#May be called from atomic contexts.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj—°ubhÝ)�”}”(hŒÁImplementation detail: if the clock source is shared between multiple drivers, clk_enable() calls must be balanced by the same number of clk_disable() calls for the clock source to be disabled.”h]”hŒÁImplementation detail: if the clock source is shared between multiple drivers, clk_enable() calls must be balanced by the same number of clk_disable() calls for the clock source to be disabled.”…”�”}”(hj+±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj—°ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_bulk_disable (C function)”Œc.clk_bulk_disable”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFvoid clk_bulk_disable (int num_clks, const struct clk_bulk_data *clks)”h]”j)�”}”(hŒEvoid clk_bulk_disable(int num_clks, const struct clk_bulk_data *clks)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjZ±h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjV±h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hji±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjV±h²hh³jh±h´Mubj{)�”}”(hŒclk_bulk_disable”h]”j�)�”}”(hŒclk_bulk_disable”h]”hŒclk_bulk_disable”…”�”}”(hj{±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjw±ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjV±h²hh³jh±h´Mubjœ)�”}”(hŒ0(int num_clks, const struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj—±h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj“±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“±ubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hj³±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�±ubj¢)�”}”(hŒ const struct clk_bulk_data *clks”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj̱h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjȱubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙ±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjȱubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjç±h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjȱubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjô±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjȱubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j²Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j}±sbŒc.clk_bulk_disable”†”asbuh1hhjȱubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj%²h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjȱubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj3²h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjȱubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hj@²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjȱubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�±ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjV±h²hh³jh±h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjR±h²hh³jh±h´Mubah}”(h]”jM±ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh±h´MhjO±h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ=inform the system when the set of clks is no longer required.”h]”hŒ=inform the system when the set of clks is no longer required.”…”�”}”(hjj²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhjg²h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjO±h²hh³jh±h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‚²jæj‚²jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXê**Parameters** ``int num_clks`` the number of clk_bulk_data ``const struct clk_bulk_data *clks`` the clk_bulk_data table of consumer **Description** Inform the system that a set of clks is no longer required by a driver and may be shut down. May be called from atomic contexts. Implementation detail: if the set of clks is shared between multiple drivers, clk_bulk_enable() calls must be balanced by the same number of clk_bulk_disable() calls for the clock source to be disabled.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŒ²h]”hŒ Parameters”…”�”}”(hj޲h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjвubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj†²ubj )�”}”(hhh]”(j)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hj«²h]”hŒ int num_clks”…”�”}”(hj­²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj©²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj¥²ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hjIJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÀ²h´MhjÁ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¥²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÀ²h´Mhj¢²ubj)�”}”(hŒI``const struct clk_bulk_data *clks`` the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ$``const struct clk_bulk_data *clks``”h]”j)�”}”(hjä²h]”hŒ const struct clk_bulk_data *clks”…”�”}”(hjæ²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MhjÞ²ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the clk_bulk_data table of consumer”h]”hŒ#the clk_bulk_data table of consumer”…”�”}”(hjý²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jù²h´Mhjú²ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÞ²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jù²h´Mhj¢²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj†²ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj³h]”hŒ Description”…”�”}”(hj!³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj†²ubhÝ)�”}”(hŒ\Inform the system that a set of clks is no longer required by a driver and may be shut down.”h]”hŒ\Inform the system that a set of clks is no longer required by a driver and may be shut down.”…”�”}”(hj5³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj†²ubhÝ)�”}”(hŒ#May be called from atomic contexts.”h]”hŒ#May be called from atomic contexts.”…”�”}”(hjD³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj†²ubhÝ)�”}”(hŒÊImplementation detail: if the set of clks is shared between multiple drivers, clk_bulk_enable() calls must be balanced by the same number of clk_bulk_disable() calls for the clock source to be disabled.”h]”hŒÊImplementation detail: if the set of clks is shared between multiple drivers, clk_bulk_enable() calls must be balanced by the same number of clk_bulk_disable() calls for the clock source to be disabled.”…”�”}”(hjS³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mhj†²ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_get_rate (C function)”Œc.clk_get_rate”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,unsigned long clk_get_rate (struct clk *clk)”h]”j)�”}”(hŒ+unsigned long clk_get_rate(struct clk *clk)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj‚³h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~³h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‘³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~³h²hh³j�³h´M#ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŸ³h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~³h²hh³j�³h´M#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj~³h²hh³j�³h´M#ubj{)�”}”(hŒ clk_get_rate”h]”j�)�”}”(hŒ clk_get_rate”h]”hŒ clk_get_rate”…”�”}”(hj¿³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»³ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj~³h²hh³j�³h´M#ubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÛ³h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj׳ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjè³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj׳ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjù³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjö³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jû³Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÁ³sbŒc.clk_get_rate”†”asbuh1hhj׳ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj׳ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj'´h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj׳ubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj4´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj׳ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓ³ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj~³h²hh³j�³h´M#ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjz³h²hh³j�³h´M#ubah}”(h]”ju³ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j�³h´M#hjw³h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒtobtain the current clock rate (in Hz) for a clock source. This is only valid once the clock source has been enabled.”h]”hŒtobtain the current clock rate (in Hz) for a clock source. This is only valid once the clock source has been enabled.”…”�”}”(hj^´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M#hj[´h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjw³h²hh³j�³h´M#ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjv´jæjv´jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒ2**Parameters** ``struct clk *clk`` clock source”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj€´h]”hŒ Parameters”…”�”}”(hj‚´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M'hjz´ubj )�”}”(hhh]”j)�”}”(hŒ ``struct clk *clk`` clock source”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjŸ´h]”hŒstruct clk *clk”…”�”}”(hj¡´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M)hj™´ubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj¸´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M%hjµ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´´h´M)hj–´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjz´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_put (C function)”Œ c.clk_put”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid clk_put (struct clk *clk)”h]”j)�”}”(hŒvoid clk_put(struct clk *clk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjù´h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjõ´h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M*ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõ´h²hh³jµh´M*ubj{)�”}”(hŒclk_put”h]”j�)�”}”(hŒclk_put”h]”hŒclk_put”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjõ´h²hh³jµh´M*ubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj6µh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj2µubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCµh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2µubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjTµh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQµubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jVµŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jµsbŒ c.clk_put”†”asbuh1hhj2µubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtµh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2µubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‚µh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj2µubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj�µh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2µubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj.µubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjõ´h²hh³jµh´M*ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjñ´h²hh³jµh´M*ubah}”(h]”jì´ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jµh´M*hjî´h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"free" the clock source”h]”hŒ“freeâ€� the clock source”…”�”}”(hj¹µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M*hj¶µh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjî´h²hh³jµh´M*ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjѵjæjѵjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX**Parameters** ``struct clk *clk`` clock source **Note** drivers must ensure that all clk_enable calls made on this clock source are balanced by clk_disable calls prior to calling this function. clk_put should not be called from within interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÛµh]”hŒ Parameters”…”�”}”(hjݵh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙµubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M.hjÕµubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjúµh]”hŒstruct clk *clk”…”�”}”(hjüµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M+hjôµubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶h´M+hj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjôµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶h´M+hjñµubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÕµubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj5¶h]”hŒNote”…”�”}”(hj7¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj3¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M-hjÕµubhÝ)�”}”(hŒ‰drivers must ensure that all clk_enable calls made on this clock source are balanced by clk_disable calls prior to calling this function.”h]”hŒ‰drivers must ensure that all clk_enable calls made on this clock source are balanced by clk_disable calls prior to calling this function.”…”�”}”(hjK¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M-hjÕµubhÝ)�”}”(hŒ;clk_put should not be called from within interrupt context.”h]”hŒ;clk_put should not be called from within interrupt context.”…”�”}”(hjZ¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M1hjÕµubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_bulk_put (C function)”Œc.clk_bulk_put”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hj…¶h²hh³j—¶h´M6ubj{)�”}”(hŒ clk_bulk_put”h]”j�)�”}”(hŒ clk_bulk_put”h]”hŒ clk_bulk_put”…”�”}”(hjª¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦¶ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj…¶h²hh³j—¶h´M6ubjœ)�”}”(hŒ*(int num_clks, struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjƶh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶ubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hjâ¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¾¶ubj¢)�”}”(hŒstruct clk_bulk_data *clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjû¶h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj÷¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷¶ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j·Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¬¶sbŒc.clk_bulk_put”†”asbuh1hhj÷¶ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9·h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷¶ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjG·h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷¶ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hjT·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷¶ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¾¶ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj…¶h²hh³j—¶h´M6ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�¶h²hh³j—¶h´M6ubah}”(h]”j|¶ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j—¶h´M6hj~¶h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"free" the clock source”h]”hŒ“freeâ€� the clock source”…”�”}”(hj~·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M6hj{·h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj~¶h²hh³j—¶h´M6ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj–·jæj–·jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXe**Parameters** ``int num_clks`` the number of clk_bulk_data ``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer **Note** drivers must ensure that all clk_bulk_enable calls made on this clock source are balanced by clk_bulk_disable calls prior to calling this function. clk_bulk_put should not be called from within interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj ·h]”hŒ Parameters”…”�”}”(hj¢·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjž·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M:hjš·ubj )�”}”(hhh]”(j)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hj¿·h]”hŒ int num_clks”…”�”}”(hjÁ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M7hj¹·ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hjØ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔ·h´M7hjÕ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔ·h´M7hj¶·ubj)�”}”(hŒC``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data *clks``”h]”j)�”}”(hjø·h]”hŒstruct clk_bulk_data *clks”…”�”}”(hjú·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjö·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M8hjò·ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the clk_bulk_data table of consumer”h]”hŒ#the clk_bulk_data table of consumer”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ¸h´M8hj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjò·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ¸h´M8hj¶·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjš·ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj3¸h]”hŒNote”…”�”}”(hj5¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M:hjš·ubhÝ)�”}”(hŒ“drivers must ensure that all clk_bulk_enable calls made on this clock source are balanced by clk_bulk_disable calls prior to calling this function.”h]”hŒ“drivers must ensure that all clk_bulk_enable calls made on this clock source are balanced by clk_bulk_disable calls prior to calling this function.”…”�”}”(hjI¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M:hjš·ubhÝ)�”}”(hŒ@clk_bulk_put should not be called from within interrupt context.”h]”hŒ@clk_bulk_put should not be called from within interrupt context.”…”�”}”(hjX¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M>hjš·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_bulk_put_all (C function)”Œc.clk_bulk_put_all”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@void clk_bulk_put_all (int num_clks, struct clk_bulk_data *clks)”h]”j)�”}”(hŒ?void clk_bulk_put_all(int num_clks, struct clk_bulk_data *clks)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‡¸h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjƒ¸h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MCubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ¸h²hh³j•¸h´MCubj{)�”}”(hŒclk_bulk_put_all”h]”j�)�”}”(hŒclk_bulk_put_all”h]”hŒclk_bulk_put_all”…”�”}”(hj¨¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¤¸ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjƒ¸h²hh³j•¸h´MCubjœ)�”}”(hŒ*(int num_clks, struct clk_bulk_data *clks)”h]”(j¢)�”}”(hŒ int num_clks”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjĸh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÀ¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÒ¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÀ¸ubj�)�”}”(hŒnum_clks”h]”hŒnum_clks”…”�”}”(hjà¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀ¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¼¸ubj¢)�”}”(hŒstruct clk_bulk_data *clks”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjù¸h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjõ¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõ¸ubh)�”}”(hhh]”j�)�”}”(hŒ clk_bulk_data”h]”hŒ clk_bulk_data”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¹Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jª¸sbŒc.clk_bulk_put_all”†”asbuh1hhjõ¸ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj7¹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõ¸ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjE¹h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjõ¸ubj�)�”}”(hŒclks”h]”hŒclks”…”�”}”(hjR¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõ¸ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¼¸ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjƒ¸h²hh³j•¸h´MCubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¸h²hh³j•¸h´MCubah}”(h]”jz¸ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j•¸h´MChj|¸h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"free" all the clock source”h]”hŒ“freeâ€� all the clock source”…”�”}”(hj|¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MChjy¹h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj|¸h²hh³j•¸h´MCubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj”¹jæj”¹jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXi**Parameters** ``int num_clks`` the number of clk_bulk_data ``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer **Note** drivers must ensure that all clk_bulk_enable calls made on this clock source are balanced by clk_bulk_disable calls prior to calling this function. clk_bulk_put_all should not be called from within interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjž¹h]”hŒ Parameters”…”�”}”(hj ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœ¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MGhj˜¹ubj )�”}”(hhh]”(j)�”}”(hŒ-``int num_clks`` the number of clk_bulk_data ”h]”(j)�”}”(hŒ``int num_clks``”h]”j)�”}”(hj½¹h]”hŒ int num_clks”…”�”}”(hj¿¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MDhj·¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe number of clk_bulk_data”h]”hŒthe number of clk_bulk_data”…”�”}”(hjÖ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒ¹h´MDhjÓ¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒ¹h´MDhj´¹ubj)�”}”(hŒC``struct clk_bulk_data *clks`` the clk_bulk_data table of consumer ”h]”(j)�”}”(hŒ``struct clk_bulk_data *clks``”h]”j)�”}”(hjö¹h]”hŒstruct clk_bulk_data *clks”…”�”}”(hjø¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjô¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MEhjð¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the clk_bulk_data table of consumer”h]”hŒ#the clk_bulk_data table of consumer”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ºh´MEhj ºubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjð¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ºh´MEhj´¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj˜¹ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj1ºh]”hŒNote”…”�”}”(hj3ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/ºubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MGhj˜¹ubhÝ)�”}”(hŒ“drivers must ensure that all clk_bulk_enable calls made on this clock source are balanced by clk_bulk_disable calls prior to calling this function.”h]”hŒ“drivers must ensure that all clk_bulk_enable calls made on this clock source are balanced by clk_bulk_disable calls prior to calling this function.”…”�”}”(hjGºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MGhj˜¹ubhÝ)�”}”(hŒDclk_bulk_put_all should not be called from within interrupt context.”h]”hŒDclk_bulk_put_all should not be called from within interrupt context.”…”�”}”(hjVºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MKhj˜¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œdevm_clk_put (C function)”Œc.devm_clk_put”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void devm_clk_put (struct device *dev, struct clk *clk)”h]”j)�”}”(hŒ6void devm_clk_put(struct device *dev, struct clk *clk)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj…ºh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�ºh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MPubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”ºh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ºh²hh³j“ºh´MPubj{)�”}”(hŒ devm_clk_put”h]”j�)�”}”(hŒ devm_clk_put”h]”hŒ devm_clk_put”…”�”}”(hj¦ºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢ºubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�ºh²hh³j“ºh´MPubjœ)�”}”(hŒ%(struct device *dev, struct clk *clk)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¾ºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjϺh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾ºubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hjàºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjݺubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j⺌modname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¨ºsbŒc.devm_clk_put”†”asbuh1hhj¾ºubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾ºubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¾ºubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾ºubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjººubj¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj4»h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj0»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0»ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjR»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjO»ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jT»Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jüºŒc.devm_clk_put”†”asbuh1hhj0»ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjp»h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0»ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj~»h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj0»ubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj‹»h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0»ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjººubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�ºh²hh³j“ºh´MPubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj}ºh²hh³j“ºh´MPubah}”(h]”jxºah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j“ºh´MPhjzºh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ"free" a managed clock source”h]”hŒ!“freeâ€� a managed clock source”…”�”}”(hjµ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MPhj²»h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjzºh²hh³j“ºh´MPubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÍ»jæjÍ»jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX\**Parameters** ``struct device *dev`` device used to acquire the clock ``struct clk *clk`` clock source acquired with devm_clk_get() **Note** drivers must ensure that all clk_enable calls made on this clock source are balanced by clk_disable calls prior to calling this function. clk_put should not be called from within interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj×»h]”hŒ Parameters”…”�”}”(hjÙ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÕ»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MThjÑ»ubj )�”}”(hhh]”(j)�”}”(hŒ8``struct device *dev`` device used to acquire the clock ”h]”(j)�”}”(hŒ``struct device *dev``”h]”j)�”}”(hjö»h]”hŒstruct device *dev”…”�”}”(hjø»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjô»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MQhjð»ubj2)�”}”(hhh]”hÝ)�”}”(hŒ device used to acquire the clock”h]”hŒ device used to acquire the clock”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ¼h´MQhj ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjð»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ¼h´MQhjí»ubj)�”}”(hŒ>``struct clk *clk`` clock source acquired with devm_clk_get() ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj/¼h]”hŒstruct clk *clk”…”�”}”(hj1¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MRhj)¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒ)clock source acquired with devm_clk_get()”h]”hŒ)clock source acquired with devm_clk_get()”…”�”}”(hjH¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jD¼h´MRhjE¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj)¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jD¼h´MRhjí»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÑ»ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjj¼h]”hŒNote”…”�”}”(hjl¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjh¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MThjÑ»ubhÝ)�”}”(hŒ‰drivers must ensure that all clk_enable calls made on this clock source are balanced by clk_disable calls prior to calling this function.”h]”hŒ‰drivers must ensure that all clk_enable calls made on this clock source are balanced by clk_disable calls prior to calling this function.”…”�”}”(hj€¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MThjÑ»ubhÝ)�”}”(hŒ;clk_put should not be called from within interrupt context.”h]”hŒ;clk_put should not be called from within interrupt context.”…”�”}”(hj�¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MXhjÑ»ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_round_rate (C function)”Œc.clk_round_rate”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9long clk_round_rate (struct clk *clk, unsigned long rate)”h]”j)�”}”(hŒ8long clk_round_rate(struct clk *clk, unsigned long rate)”h]”(j )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¾¼h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjº¼h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjͼh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjº¼h²hh³j̼h´Mbubj{)�”}”(hŒclk_round_rate”h]”j�)�”}”(hŒclk_round_rate”h]”hŒclk_round_rate”…”�”}”(hjß¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ¼ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjº¼h²hh³j̼h´Mbubjœ)�”}”(hŒ%(struct clk *clk, unsigned long rate)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjû¼h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj÷¼ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷¼ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j½Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY já¼sbŒc.clk_round_rate”†”asbuh1hhj÷¼ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷¼ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjG½h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷¼ubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjT½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷¼ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjó¼ubj¢)�”}”(hŒunsigned long rate”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjm½h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhji½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hji½ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj‰½h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhji½ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj—½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hji½ubj�)�”}”(hŒrate”h]”hŒrate”…”�”}”(hj¥½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hji½ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjó¼ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjº¼h²hh³j̼h´Mbubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¶¼h²hh³j̼h´Mbubah}”(h]”j±¼ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j̼h´Mbhj³¼h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3adjust a rate to the exact rate a clock can provide”h]”hŒ3adjust a rate to the exact rate a clock can provide”…”�”}”(hjϽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mbhj̽h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj³¼h²hh³j̼h´Mbubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjç½jæjç½jç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX**Parameters** ``struct clk *clk`` clock source ``unsigned long rate`` desired clock rate in Hz **Description** This answers the question "if I were to pass **rate** to clk_set_rate(), what clock rate would I end up with?" without changing the hardware in any way. In other words: rate = clk_round_rate(clk, r); and: clk_set_rate(clk, r); rate = clk_get_rate(clk); are equivalent except the former does not modify the clock hardware in any way. Returns rounded clock rate in Hz, or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjñ½h]”hŒ Parameters”…”�”}”(hjó½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjï½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mfhjë½ubj )�”}”(hhh]”(j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj¾h]”hŒstruct clk *clk”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mchj ¾ubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj)¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j%¾h´Mchj&¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j%¾h´Mchj¾ubj)�”}”(hŒ0``unsigned long rate`` desired clock rate in Hz ”h]”(j)�”}”(hŒ``unsigned long rate``”h]”j)�”}”(hjI¾h]”hŒunsigned long rate”…”�”}”(hjK¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MdhjC¾ubj2)�”}”(hhh]”hÝ)�”}”(hŒdesired clock rate in Hz”h]”hŒdesired clock rate in Hz”…”�”}”(hjb¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j^¾h´Mdhj_¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjC¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j^¾h´Mdhj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjë½ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj„¾h]”hŒ Description”…”�”}”(hj†¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mfhjë½ubhÝ)�”}”(hŒ©This answers the question "if I were to pass **rate** to clk_set_rate(), what clock rate would I end up with?" without changing the hardware in any way. In other words:”h]”(hŒ/This answers the question “if I were to pass ”…”�”}”(hjš¾h²hh³Nh´Nubjõ)�”}”(hŒ**rate**”h]”hŒrate”…”�”}”(hj¢¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjš¾ubhŒv to clk_set_rate(), what clock rate would I end up with?â€� without changing the hardware in any way. In other words:”…”�”}”(hjš¾h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mehjë½ubj•)�”}”(hŒrate = clk_round_rate(clk, r); ”h]”hÝ)�”}”(hŒrate = clk_round_rate(clk, r);”h]”hŒrate = clk_round_rate(clk, r);”…”�”}”(hj¿¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mihj»¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j;h´Mihjë½ubhÝ)�”}”(hŒand:”h]”hŒand:”…”�”}”(hjÔ¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mkhjë½ubj•)�”}”(hŒ0clk_set_rate(clk, r); rate = clk_get_rate(clk); ”h]”hÝ)�”}”(hŒ/clk_set_rate(clk, r); rate = clk_get_rate(clk);”h]”hŒ/clk_set_rate(clk, r); rate = clk_get_rate(clk);”…”�”}”(hjç¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mmhjã¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jõ¾h´Mmhjë½ubhÝ)�”}”(hŒOare equivalent except the former does not modify the clock hardware in any way.”h]”hŒOare equivalent except the former does not modify the clock hardware in any way.”…”�”}”(hjü¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mphjë½ubhÝ)�”}”(hŒ4Returns rounded clock rate in Hz, or negative errno.”h]”hŒ4Returns rounded clock rate in Hz, or negative errno.”…”�”}”(hj ¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mshjë½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_set_rate (C function)”Œc.clk_set_rate”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6int clk_set_rate (struct clk *clk, unsigned long rate)”h]”j)�”}”(hŒ5int clk_set_rate(struct clk *clk, unsigned long rate)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj:¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6¿h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Myubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6¿h²hh³jH¿h´Myubj{)�”}”(hŒ clk_set_rate”h]”j�)�”}”(hŒ clk_set_rate”h]”hŒ clk_set_rate”…”�”}”(hj[¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjW¿ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj6¿h²hh³jH¿h´Myubjœ)�”}”(hŒ%(struct clk *clk, unsigned long rate)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjw¿h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjs¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjs¿ubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj•¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j—¿Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j]¿sbŒc.clk_set_rate”†”asbuh1hhjs¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµ¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjs¿ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjs¿ubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjпh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjs¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjo¿ubj¢)�”}”(hŒunsigned long rate”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjé¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjå¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjå¿ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjå¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjå¿ubj�)�”}”(hŒrate”h]”hŒrate”…”�”}”(hj!Àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjå¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjo¿ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj6¿h²hh³jH¿h´Myubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj2¿h²hh³jH¿h´Myubah}”(h]”j-¿ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jH¿h´Myhj/¿h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%set the clock rate for a clock source”•h]”hŒ%set the clock rate for a clock source”…”�”}”(hjKÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MyhjHÀh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj/¿h²hh³jH¿h´Myubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjcÀjæjcÀjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX"**Parameters** ``struct clk *clk`` clock source ``unsigned long rate`` desired clock rate in Hz **Description** Updating the rate starts at the top-most affected clock and then walks the tree down to the bottom-most clock that needs updating. Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjmÀh]”hŒ Parameters”…”�”}”(hjoÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjkÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M}hjgÀubj )�”}”(hhh]”(j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjŒÀh]”hŒstruct clk *clk”…”�”}”(hjŽÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mzhj†Àubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj¥Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¡Àh´Mzhj¢Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj†Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡Àh´MzhjƒÀubj)�”}”(hŒ0``unsigned long rate`` desired clock rate in Hz ”h]”(j)�”}”(hŒ``unsigned long rate``”h]”j)�”}”(hjÅÀh]”hŒunsigned long rate”…”�”}”(hjÇÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M{hj¿Àubj2)�”}”(hhh]”hÝ)�”}”(hŒdesired clock rate in Hz”h]”hŒdesired clock rate in Hz”…”�”}”(hjÞÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÚÀh´M{hjÛÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿Àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚÀh´M{hjƒÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjgÀubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÁh]”hŒ Description”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M}hjgÀubhÝ)�”}”(hŒ‚Updating the rate starts at the top-most affected clock and then walks the tree down to the bottom-most clock that needs updating.”h]”hŒ‚Updating the rate starts at the top-most affected clock and then walks the tree down to the bottom-most clock that needs updating.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M|hjgÀubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hj%Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MhjgÀubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#clk_set_rate_exclusive (C function)”Œc.clk_set_rate_exclusive”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@int clk_set_rate_exclusive (struct clk *clk, unsigned long rate)”h]”j)�”}”(hŒ?int clk_set_rate_exclusive(struct clk *clk, unsigned long rate)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjTÁh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjPÁh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M…ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcÁh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjPÁh²hh³jbÁh´M…ubj{)�”}”(hŒclk_set_rate_exclusive”h]”j�)�”}”(hŒclk_set_rate_exclusive”h]”hŒclk_set_rate_exclusive”…”�”}”(hjuÁh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqÁubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjPÁh²hh³jbÁh´M…ubjœ)�”}”(hŒ%(struct clk *clk, unsigned long rate)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‘Áh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�Áubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjžÁh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Áubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj¯Áh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬Áubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j±ÁŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jwÁsbŒc.clk_set_rate_exclusive”†”asbuh1hhj�Áubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏÁh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�Áubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÝÁh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�Áubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjêÁh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Áubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‰Áubj¢)�”}”(hŒunsigned long rate”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÿÁubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿÁubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÿÁubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-Âh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿÁubj�)�”}”(hŒrate”h]”hŒrate”…”�”}”(hj;Âh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿÁubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‰Áubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjPÁh²hh³jbÁh´M…ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjLÁh²hh³jbÁh´M…ubah}”(h]”jGÁah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jbÁh´M…hjIÁh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ:set the clock rate and claim exclusivity over clock source”h]”hŒ:set the clock rate and claim exclusivity over clock source”…”�”}”(hjeÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M…hjbÂh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjIÁh²hh³jbÁh´M…ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj}Âjæj}Âjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXÀ**Parameters** ``struct clk *clk`` clock source ``unsigned long rate`` desired clock rate in Hz **Description** This helper function allows drivers to atomically set the rate of a producer and claim exclusivity over the rate control of the producer. It is essentially a combination of clk_set_rate() and clk_rate_exclusite_get(). Caller must balance this call with a call to clk_rate_exclusive_put() Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‡Âh]”hŒ Parameters”…”�”}”(hj‰Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…Âubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M‰hj�Âubj )�”}”(hhh]”(j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj¦Âh]”hŒstruct clk *clk”…”�”}”(hj¨Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¤Âubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M‡hj Âubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj¿Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j»Âh´M‡hj¼Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Âubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j»Âh´M‡hj�Âubj)�”}”(hŒ0``unsigned long rate`` desired clock rate in Hz ”h]”(j)�”}”(hŒ``unsigned long rate``”h]”j)�”}”(hjßÂh]”hŒunsigned long rate”…”�”}”(hjáÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MˆhjÙÂubj2)�”}”(hhh]”hÝ)�”}”(hŒdesired clock rate in Hz”h]”hŒdesired clock rate in Hz”…”�”}”(hjøÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jôÂh´MˆhjõÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÙÂubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jôÂh´Mˆhj�Âubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ÂubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÃh]”hŒ Description”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MŠhj�ÂubhÝ)�”}”(hŒ‰This helper function allows drivers to atomically set the rate of a producer and claim exclusivity over the rate control of the producer.”h]”hŒ‰This helper function allows drivers to atomically set the rate of a producer and claim exclusivity over the rate control of the producer.”…”�”}”(hj0Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M‰hj�ÂubhÝ)�”}”(hŒ•It is essentially a combination of clk_set_rate() and clk_rate_exclusite_get(). Caller must balance this call with a call to clk_rate_exclusive_put()”h]”hŒ•It is essentially a combination of clk_set_rate() and clk_rate_exclusite_get(). Caller must balance this call with a call to clk_rate_exclusive_put()”…”�”}”(hj?Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MŒhj�ÂubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hjNÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M�hj�Âubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_has_parent (C function)”Œc.clk_has_parent”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEbool clk_has_parent (const struct clk *clk, const struct clk *parent)”h]”j)�”}”(hŒDbool clk_has_parent(const struct clk *clk, const struct clk *parent)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj}Ãh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjyÃh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M–ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‹Ãh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjyÃh²hh³jŠÃh´M–ubj{)�”}”(hŒclk_has_parent”h]”j�)�”}”(hŒclk_has_parent”h]”hŒclk_has_parent”…”�”}”(hj�Ãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™Ãubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjyÃh²hh³jŠÃh´M–ubjœ)�”}”(hŒ1(const struct clk *clk, const struct clk *parent)”h]”(j¢)�”}”(hŒconst struct clk *clk”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj¹Ãh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjµÃubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµÃubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÔÃh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjµÃubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjáÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµÃubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjòÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjïÃubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jôÃŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŸÃsbŒc.clk_has_parent”†”asbuh1hhjµÃubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjµÃubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Äh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjµÃubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj-Äh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµÃubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj±Ãubj¢)�”}”(hŒconst struct clk *parent”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjFÄh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjBÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSÄh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBÄubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjaÄh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjBÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjnÄh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBÄubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj|Äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�ÄŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÄŒc.clk_has_parent”†”asbuh1hhjBÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Äh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjBÄubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj«Äh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjBÄubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hj¸Äh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjBÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj±Ãubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjyÃh²hh³jŠÃh´M–ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjuÃh²hh³jŠÃh´M–ubah}”(h]”jpÃah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŠÃh´M–hjrÃh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1check if a clock is a possible parent for another”h]”hŒ1check if a clock is a possible parent for another”…”�”}”(hjâÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M–hjßÄh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjrÃh²hh³jŠÃh´M–ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjúÄjæjúÄjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hXU**Parameters** ``const struct clk *clk`` clock source ``const struct clk *parent`` parent clock source **Description** This function can be used in drivers that need to check that a clock can be the parent of another without actually changing the parent. Returns true if **parent** is a possible parent for **clk**, false otherwise.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÅh]”hŒ Parameters”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MšhjþÄubj )�”}”(hhh]”(j)�”}”(hŒ'``const struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``const struct clk *clk``”h]”j)�”}”(hj#Åh]”hŒconst struct clk *clk”…”�”}”(hj%Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!Åubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M—hjÅubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj<Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j8Åh´M—hj9Åubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8Åh´M—hjÅubj)�”}”(hŒ1``const struct clk *parent`` parent clock source ”h]”(j)�”}”(hŒ``const struct clk *parent``”h]”j)�”}”(hj\Åh]”hŒconst struct clk *parent”…”�”}”(hj^Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZÅubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M˜hjVÅubj2)�”}”(hhh]”hÝ)�”}”(hŒparent clock source”h]”hŒparent clock source”…”�”}”(hjuÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jqÅh´M˜hjrÅubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjVÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jqÅh´M˜hjÅubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjþÄubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj—Åh]”hŒ Description”…”�”}”(hj™Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj•Åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MšhjþÄubhÝ)�”}”(hŒ‡This function can be used in drivers that need to check that a clock can be the parent of another without actually changing the parent.”h]”hŒ‡This function can be used in drivers that need to check that a clock can be the parent of another without actually changing the parent.”…”�”}”(hj­Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M™hjþÄubhÝ)�”}”(hŒMReturns true if **parent** is a possible parent for **clk**, false otherwise.”h]”(hŒReturns true if ”…”�”}”(hj¼Åh²hh³Nh´Nubjõ)�”}”(hŒ **parent**”h]”hŒparent”…”�”}”(hjÄÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼ÅubhŒ is a possible parent for ”…”�”}”(hj¼Åh²hh³Nh´Nubjõ)�”}”(hŒ**clk**”h]”hŒclk”…”�”}”(hjÖÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼ÅubhŒ, false otherwise.”…”�”}”(hj¼Åh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MœhjþÄubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_set_rate_range (C function)”Œc.clk_set_rate_range”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNint clk_set_rate_range (struct clk *clk, unsigned long min, unsigned long max)”h]”j)�”}”(hŒMint clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Æh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¢ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Æh²hh³jÆh´M¢ubj{)�”}”(hŒclk_set_rate_range”h]”j�)�”}”(hŒclk_set_rate_range”h]”hŒclk_set_rate_range”…”�”}”(hj0Æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj,Æubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Æh²hh³jÆh´M¢ubjœ)�”}”(hŒ7(struct clk *clk, unsigned long min, unsigned long max)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjLÆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjHÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjYÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHÆubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjjÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjgÆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jlÆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j2ÆsbŒc.clk_set_rate_range”†”asbuh1hhjHÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjHÆubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj˜Æh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjHÆubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj¥Æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDÆubj¢)�”}”(hŒunsigned long min”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¾Æh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjºÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºÆubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÚÆh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjºÆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjºÆubj�)�”}”(hŒmin”h]”hŒmin”…”�”}”(hjöÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºÆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDÆubj¢)�”}”(hŒunsigned long max”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Çubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Çubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj+Çh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Çubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9Çh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Çubj�)�”}”(hŒmax”h]”hŒmax”…”�”}”(hjGÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Çubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjDÆubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Æh²hh³jÆh´M¢ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÆh²hh³jÆh´M¢ubah}”(h]”jÆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÆh´M¢hjÆh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#set a rate range for a clock source”h]”hŒ#set a rate range for a clock source”…”�”}”(hjqÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¢hjnÇh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÆh²hh³jÆh´M¢ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‰Çjæj‰Çjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒõ**Parameters** ``struct clk *clk`` clock source ``unsigned long min`` desired minimum clock rate in Hz, inclusive ``unsigned long max`` desired maximum clock rate in Hz, inclusive **Description** Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj“Çh]”hŒ Parameters”…”�”}”(hj•Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‘Çubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¦hj�Çubj )�”}”(hhh]”(j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj²Çh]”hŒstruct clk *clk”…”�”}”(hj´Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj°Çubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M£hj¬Çubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjËÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇÇh´M£hjÈÇubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¬Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇÇh´M£hj©Çubj)�”}”(hŒB``unsigned long min`` desired minimum clock rate in Hz, inclusive ”h]”(j)�”}”(hŒ``unsigned long min``”h]”j)�”}”(hjëÇh]”hŒunsigned long min”…”�”}”(hjíÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¤hjåÇubj2)�”}”(hhh]”hÝ)�”}”(hŒ+desired minimum clock rate in Hz, inclusive”h]”hŒ+desired minimum clock rate in Hz, inclusive”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÈh´M¤hjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjåÇubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈh´M¤hj©Çubj)�”}”(hŒB``unsigned long max`` desired maximum clock rate in Hz, inclusive ”h]”(j)�”}”(hŒ``unsigned long max``”h]”j)�”}”(hj$Èh]”hŒunsigned long max”…”�”}”(hj&Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"Èubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¥hjÈubj2)�”}”(hhh]”hÝ)�”}”(hŒ+desired maximum clock rate in Hz, inclusive”h]”hŒ+desired maximum clock rate in Hz, inclusive”…”�”}”(hj=Èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j9Èh´M¥hj:Èubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9Èh´M¥hj©Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj�ÇubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj_Èh]”hŒ Description”…”�”}”(hjaÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj]Èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M§hj�ÇubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hjuÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¦hj�Çubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_set_min_rate (C function)”Œc.clk_set_min_rate”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:int clk_set_min_rate (struct clk *clk, unsigned long rate)”h]”j)�”}”(hŒ9int clk_set_min_rate(struct clk *clk, unsigned long rate)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¤Èh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Èh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¬ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Èh²hh³j²Èh´M¬ubj{)�”}”(hŒclk_set_min_rate”h]”j�)�”}”(hŒclk_set_min_rate”h]”hŒclk_set_min_rate”…”�”}”(hjÅÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁÈubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Èh²hh³j²Èh´M¬ubjœ)�”}”(hŒ%(struct clk *clk, unsigned long rate)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjáÈh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÝÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîÈh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝÈubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjÿÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjüÈubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÉŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÇÈsbŒc.clk_set_min_rate”†”asbuh1hhjÝÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝÈubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj-Éh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÝÈubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj:Éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙÈubj¢)�”}”(hŒunsigned long rate”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjSÉh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjOÉubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjaÉh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOÉubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjoÉh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjOÉubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}Éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOÉubj�)�”}”(hŒrate”h]”hŒrate”…”�”}”(hj‹Éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOÉubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙÈubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Èh²hh³j²Èh´M¬ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjœÈh²hh³j²Èh´M¬ubah}”(h]”j—Èah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²Èh´M¬hj™Èh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+set a minimum clock rate for a clock source”h]”hŒ+set a minimum clock rate for a clock source”…”�”}”(hjµÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¬hj²Éh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj™Èh²hh³j²Èh´M¬ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÍÉjæjÍÉjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒ±**Parameters** ``struct clk *clk`` clock source ``unsigned long rate`` desired minimum clock rate in Hz, inclusive **Description** Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj×Éh]”hŒ Parameters”…”�”}”(hjÙÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÕÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M°hjÑÉubj )�”}”(hhh]”(j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjöÉh]”hŒstruct clk *clk”…”�”}”(hjøÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M­hjðÉubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Êh´M­hj Êubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Êh´M­hjíÉubj)�”}”(hŒC``unsigned long rate`` desired minimum clock rate in Hz, inclusive ”h]”(j)�”}”(hŒ``unsigned long rate``”h]”j)�”}”(hj/Êh]”hŒunsigned long rate”…”�”}”(hj1Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-Êubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M®hj)Êubj2)�”}”(hhh]”hÝ)�”}”(hŒ+desired minimum clock rate in Hz, inclusive”h]”hŒ+desired minimum clock rate in Hz, inclusive”…”�”}”(hjHÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jDÊh´M®hjEÊubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj)Êubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jDÊh´M®hjíÉubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÑÉubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjjÊh]”hŒ Description”…”�”}”(hjlÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhÊubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M°hjÑÉubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hj€Êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¯hjÑÉubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_set_max_rate (C function)”Œc.clk_set_max_rate”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:int clk_set_max_rate (struct clk *clk, unsigned long rate)”h]”j)�”}”(hŒ9int clk_set_max_rate(struct clk *clk, unsigned long rate)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj¯Êh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj«Êh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¾Êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj«Êh²hh³j½Êh´Mµubj{)�”}”(hŒclk_set_max_rate”h]”j�)�”}”(hŒclk_set_max_rate”h]”hŒclk_set_max_rate”…”�”}”(hjÐÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌÊubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj«Êh²hh³j½Êh´Mµubjœ)�”}”(hŒ%(struct clk *clk, unsigned long rate)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjìÊh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjèÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèÊubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj Ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j ËŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÒÊsbŒc.clk_set_max_rate”†”asbuh1hhjèÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Ëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèÊubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj8Ëh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjèÊubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjEËh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäÊubj¢)�”}”(hŒunsigned long rate”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj^Ëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjlËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZËubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjzËh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjZËubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆËh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZËubj�)�”}”(hŒrate”h]”hŒrate”…”�”}”(hj–Ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZËubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjäÊubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj«Êh²hh³j½Êh´Mµubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj§Êh²hh³j½Êh´Mµubah}”(h]”j¢Êah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j½Êh´Mµhj¤Êh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+set a maximum clock rate for a clock source”h]”hŒ+set a maximum clock rate for a clock source”…”�”}”(hjÀËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´Mµhj½Ëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¤Êh²hh³j½Êh´Mµubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjØËjæjØËjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒ±**Parameters** ``struct clk *clk`` clock source ``unsigned long rate`` desired maximum clock rate in Hz, inclusive **Description** Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjâËh]”hŒ Parameters”…”�”}”(hjäËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¹hjÜËubj )�”}”(hhh]”(j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hjÌh]”hŒstruct clk *clk”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÿËubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¶hjûËubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌh´M¶hjÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌh´M¶hjøËubj)�”}”(hŒC``unsigned long rate`` desired maximum clock rate in Hz, inclusive ”h]”(j)�”}”(hŒ``unsigned long rate``”h]”j)�”}”(hj:Ìh]”hŒunsigned long rate”…”�”}”(hj<Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj8Ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M·hj4Ìubj2)�”}”(hhh]”hÝ)�”}”(hŒ+desired maximum clock rate in Hz, inclusive”h]”hŒ+desired maximum clock rate in Hz, inclusive”…”�”}”(hjSÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jOÌh´M·hjPÌubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4Ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jOÌh´M·hjøËubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÜËubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjuÌh]”hŒ Description”…”�”}”(hjwÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsÌubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¹hjÜËubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hj‹Ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¸hjÜËubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_set_parent (C function)”Œc.clk_set_parent”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8int clk_set_parent (struct clk *clk, struct clk *parent)”h]”j)�”}”(hŒ7int clk_set_parent(struct clk *clk, struct clk *parent)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjºÌh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¶Ìh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶Ìh²hh³jÈÌh´M¾ubj{)�”}”(hŒclk_set_parent”h]”j�)�”}”(hŒclk_set_parent”h]”hŒclk_set_parent”…”�”}”(hjÛÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×Ìubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¶Ìh²hh³jÈÌh´M¾ubjœ)�”}”(hŒ%(struct clk *clk, struct clk *parent)”h]”(j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj÷Ìh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjóÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóÌubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÍŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÝÌsbŒc.clk_set_parent”†”asbuh1hhjóÌubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóÌubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjCÍh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjóÌubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjPÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóÌubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjïÌubj¢)�”}”(hŒstruct clk *parent”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjiÍh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjeÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvÍh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeÍubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj‡Íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„Íubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‰ÍŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j1ÍŒc.clk_set_parent”†”asbuh1hhjeÍubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥Íh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeÍubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj³Íh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjeÍubj�)�”}”(hŒparent”h]”hŒparent”…”�”}”(hjÀÍh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeÍubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjïÌubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¶Ìh²hh³jÈÌh´M¾ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj²Ìh²hh³jÈÌh´M¾ubah}”(h]”j­Ìah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÈÌh´M¾hj¯Ìh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*set the parent clock source for this clock”h]”hŒ*set the parent clock source for this clock”…”�”}”(hjêÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¾hjçÍh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¯Ìh²hh³jÈÌh´M¾ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÎjæjÎjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒ™**Parameters** ``struct clk *clk`` clock source ``struct clk *parent`` parent clock source **Description** Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj Îh]”hŒ Parameters”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÂhjÎubj )�”}”(hhh]”(j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj+Îh]”hŒstruct clk *clk”…”�”}”(hj-Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)Îubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´M¿hj%Îubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hjDÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j@Îh´M¿hjAÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj%Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j@Îh´M¿hj"Îubj)�”}”(hŒ+``struct clk *parent`` parent clock source ”h]”(j)�”}”(hŒ``struct clk *parent``”h]”j)�”}”(hjdÎh]”hŒstruct clk *parent”…”�”}”(hjfÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjbÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÀhj^Îubj2)�”}”(hhh]”hÝ)�”}”(hŒparent clock source”h]”hŒparent clock source”…”�”}”(hj}Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jyÎh´MÀhjzÎubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jyÎh´MÀhj"Îubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÎubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŸÎh]”hŒ Description”…”�”}”(hj¡Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�Îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÂhjÎubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hjµÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÁhjÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_get_parent (C function)”Œc.clk_get_parent”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-struct clk * clk_get_parent (struct clk *clk)”h]”j)�”}”(hŒ+struct clk *clk_get_parent(struct clk *clk)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjäÎh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjàÎh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÇubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòÎh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàÎh²hh³jñÎh´MÇubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÏŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œclk_get_parent”sbŒc.clk_get_parent”†”asbuh1hhjàÎh²hh³jñÎh´MÇubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Ïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjàÎh²hh³jñÎh´MÇubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj2Ïh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjàÎh²hh³jñÎh´MÇubj{)�”}”(hŒclk_get_parent”h]”j�)�”}”(hj!Ïh]”hŒclk_get_parent”…”�”}”(hjCÏh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?Ïubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjàÎh²hh³jñÎh´MÇubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj^Ïh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZÏubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj|Ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyÏubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j~ÏŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÏŒc.clk_get_parent”†”asbuh1hhjZÏubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjšÏh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZÏubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¨Ïh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZÏubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjµÏh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZÏubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVÏubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjàÎh²hh³jñÎh´MÇubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÜÎh²hh³jñÎh´MÇubah}”(h]”j×Îah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jñÎh´MÇhjÙÎh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*get the parent clock source for this clock”h]”hŒ*get the parent clock source for this clock”…”�”}”(hjßÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÇhjÜÏh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÙÎh²hh³jñÎh´MÇubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj÷Ïjæj÷Ïjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒ•**Parameters** ``struct clk *clk`` clock source **Description** Returns struct clk corresponding to parent clock source, or NULL if clk is NULL.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÐh]”hŒ Parameters”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿÏubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MËhjûÏubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj Ðh]”hŒstruct clk *clk”…”�”}”(hj"Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÈhjÐubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj9Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j5Ðh´MÈhj6Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j5Ðh´MÈhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjûÏubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj[Ðh]”hŒ Description”…”�”}”(hj]Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjYÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÊhjûÏubhÝ)�”}”(hŒPReturns struct clk corresponding to parent clock source, or NULL if clk is NULL.”h]”hŒPReturns struct clk corresponding to parent clock source, or NULL if clk is NULL.”…”�”}”(hjqÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÉhjûÏubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_get_sys (C function)”Œ c.clk_get_sys”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒAstruct clk * clk_get_sys (const char *dev_id, const char *con_id)”h]”j)�”}”(hŒ?struct clk *clk_get_sys(const char *dev_id, const char *con_id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj Ðh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjœÐh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®Ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœÐh²hh³j­Ðh´MÐubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj¿Ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼Ðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÁÐŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œ clk_get_sys”sbŒ c.clk_get_sys”†”asbuh1hhjœÐh²hh³j­Ðh´MÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàÐh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjœÐh²hh³j­Ðh´MÐubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjîÐh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjœÐh²hh³j­Ðh´MÐubj{)�”}”(hŒ clk_get_sys”h]”j�)�”}”(hjÝÐh]”hŒ clk_get_sys”…”�”}”(hjÿÐh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjûÐubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjœÐh²hh³j­Ðh´MÐubjœ)�”}”(hŒ((const char *dev_id, const char *con_id)”h]”(j¢)�”}”(hŒconst char *dev_id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj'Ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÑubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj5Ñh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCÑh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÑubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjQÑh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÑubj�)�”}”(hŒdev_id”h]”hŒdev_id”…”�”}”(hj^Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÑubj¢)�”}”(hŒconst char *con_id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjwÑh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjsÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„Ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjsÑubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj’Ñh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjsÑubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjsÑubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj®Ñh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjsÑubj�)�”}”(hŒcon_id”h]”hŒcon_id”…”�”}”(hj»Ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjsÑubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÑubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjœÐh²hh³j­Ðh´MÐubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj˜Ðh²hh³j­Ðh´MÐubah}”(h]”j“Ðah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­Ðh´MÐhj•Ðh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&get a clock based upon the device name”h]”hŒ&get a clock based upon the device name”…”�”}”(hjåÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÐhjâÑh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj•Ðh²hh³j­Ðh´MÐubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjýÑjæjýÑjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hX4**Parameters** ``const char *dev_id`` device name ``const char *con_id`` connection ID **Description** Returns a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev_id** and **con_id** to determine the clock consumer, and thereby the clock producer. In contrast to clk_get() this function takes the device name instead of the device itself for identification. Drivers must assume that the clock source is not enabled. clk_get_sys should not be called from within interrupt context.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÒh]”hŒ Parameters”…”�”}”(hj Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÔhjÒubj )�”}”(hhh]”(j)�”}”(hŒ#``const char *dev_id`` device name ”h]”(j)�”}”(hŒ``const char *dev_id``”h]”j)�”}”(hj&Òh]”hŒconst char *dev_id”…”�”}”(hj(Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$Òubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÑhj Òubj2)�”}”(hhh]”hÝ)�”}”(hŒ device name”h]”hŒ device name”…”�”}”(hj?Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j;Òh´MÑhj<Òubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Òubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j;Òh´MÑhjÒubj)�”}”(hŒ%``const char *con_id`` connection ID ”h]”(j)�”}”(hŒ``const char *con_id``”h]”j)�”}”(hj_Òh]”hŒconst char *con_id”…”�”}”(hjaÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]Òubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÒhjYÒubj2)�”}”(hhh]”hÝ)�”}”(hŒ connection ID”h]”hŒ connection ID”…”�”}”(hjxÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jtÒh´MÒhjuÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjYÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jtÒh´MÒhjÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÒubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjšÒh]”hŒ Description”…”�”}”(hjœÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜Òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÔhjÒubhÝ)�”}”(hXIReturns a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses **dev_id** and **con_id** to determine the clock consumer, and thereby the clock producer. In contrast to clk_get() this function takes the device name instead of the device itself for identification.”h]”(hŒ�Returns a struct clk corresponding to the clock producer, or valid IS_ERR() condition containing errno. The implementation uses ”…”�”}”(hj°Òh²hh³Nh´Nubjõ)�”}”(hŒ **dev_id**”h]”hŒdev_id”…”�”}”(hj¸Òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°ÒubhŒ and ”…”�”}”(hj°Òh²hh³Nh´Nubjõ)�”}”(hŒ **con_id**”h]”hŒcon_id”…”�”}”(hjÊÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°ÒubhŒ¯ to determine the clock consumer, and thereby the clock producer. In contrast to clk_get() this function takes the device name instead of the device itself for identification.”…”�”}”(hj°Òh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÓhjÒubhÝ)�”}”(hŒ9Drivers must assume that the clock source is not enabled.”h]”hŒ9Drivers must assume that the clock source is not enabled.”…”�”}”(hjãÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÙhjÒubhÝ)�”}”(hŒ?clk_get_sys should not be called from within interrupt context.”h]”hŒ?clk_get_sys should not be called from within interrupt context.”…”�”}”(hjòÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÛhjÒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_drop_range (C function)”Œc.clk_drop_range”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ$int clk_drop_range (struct clk *clk)”h]”j)�”}”(hŒ#int clk_drop_range(struct clk *clk)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj!Óh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÓh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÐubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0Óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÓh²hh³j/Óh´MÐubj{)�”}”(hŒclk_drop_range”h]”j�)�”}”(hŒclk_drop_range”h]”hŒclk_drop_range”…”�”}”(hjBÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>Óubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÓh²hh³j/Óh´MÐubjœ)�”}”(hŒ(struct clk *clk)”h]”j¢)�”}”(hŒstruct clk *clk”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj^Óh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZÓubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj|Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j~ÓŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jDÓsbŒc.clk_drop_range”†”asbuh1hhjZÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZÓubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjªÓh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZÓubj�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hj·Óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZÓubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVÓubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÓh²hh³j/Óh´MÐubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÓh²hh³j/Óh´MÐubah}”(h]”jÓah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j/Óh´MÐhjÓh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!Reset any range set on that clock”h]”hŒ!Reset any range set on that clock”…”�”}”(hjáÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÐhjÞÓh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÓh²hh³j/Óh´MÐubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjùÓjæjùÓjç‰jè‰jé‰uh1jh²hhjTh³Nh´Nubjë)�”}”(hŒk**Parameters** ``struct clk *clk`` clock source **Description** Returns success (0) or negative errno.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÔh]”hŒ Parameters”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÔhjýÓubj )�”}”(hhh]”j)�”}”(hŒ!``struct clk *clk`` clock source ”h]”(j)�”}”(hŒ``struct clk *clk``”h]”j)�”}”(hj"Ôh]”hŒstruct clk *clk”…”�”}”(hj$Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÑhjÔubj2)�”}”(hhh]”hÝ)�”}”(hŒ clock source”h]”hŒ clock source”…”�”}”(hj;Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j7Ôh´MÑhj8Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7Ôh´MÑhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjýÓubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj]Ôh]”hŒ Description”…”�”}”(hj_Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj[Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÓhjýÓubhÝ)�”}”(hŒ&Returns success (0) or negative errno.”h]”hŒ&Returns success (0) or negative errno.”…”�”}”(hjsÔh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÒhjýÓubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjTh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œclk_get_optional (C function)”Œc.clk_get_optional”hNt”auh1hýhjTh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBstruct clk * clk_get_optional (struct device *dev, const char *id)”h]”j)�”}”(hŒ@struct clk *clk_get_optional(struct device *dev, const char *id)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¢Ôh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjžÔh²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:390: ./include/linux/clk.h”h´MÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°Ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžÔh²hh³j¯Ôh´MÛubh)�”}”(hhh]”j�)�”}”(hŒclk”h]”hŒclk”…”�”}”(hjÁÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾Ôubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÃÔŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œclk_get_optional”sbŒc.clk_get_optional”†”asbuh1hhjžÔh²hh³j¯Ôh´MÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžÔh²hh³j¯Ôh´MÛubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjðÔh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjžÔh²hh³j¯Ôh´MÛubj{)�”}”(hŒclk_get_optional”h]”j�)�”}”(hjßÔh]”hŒclk_get_optional”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýÔubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjžÔh²hh³j¯Ôh´MÛubjœ)�”}”(hŒ$(struct device *dev, const char *id)”h]”(j¢)�”}”(hŒstruct device *dev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Õh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕubh)�”}”(hhh]”j�)�”}”(hŒdevice”h]”hŒdevice”…”�”}”(hj:Õh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj7Õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j<ÕŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÝÔŒc.clk_get_optional”†”asbuh1hhjÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjfÕh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÕubj�)�”}”(hŒdev”h]”hŒdev”…”�”}”(hjsÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕubj¢)�”}”(hŒconst char *id”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hjŒÕh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjˆÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™Õh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆÕubj )�”}”(hŒchar”h]”hŒchar”…”�”}”(hj§Õh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjˆÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆÕubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÃÕh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjˆÕubj�)�”}”(hŒid”h]”hŒid”…”�”}”(hjÐÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÕubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjžÔh²hh³j¯Ôh´MÛubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjšÔh²hh³j¯Ôh´MÛubah}”(h]”j•Ôah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¯Ôh´MÛhj—Ôh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hj×h²hh³j+×h´KIubj{)�”}”(hŒsame_state_synchronize_rcu”h]”j�)�”}”(hŒsame_state_synchronize_rcu”h]”hŒsame_state_synchronize_rcu”…”�”}”(hj>×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj:×ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj×h²hh³j+×h´KIubjœ)�”}”(hŒ2(unsigned long oldstate1, unsigned long oldstate2)”h]”(j¢)�”}”(hŒunsigned long oldstate1”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjZ×h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjV×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjV×ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjv×h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjV×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj„×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjV×ubj�)�”}”(hŒ oldstate1”h]”hŒ oldstate1”…”�”}”(hj’×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjV×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjR×ubj¢)�”}”(hŒunsigned long oldstate2”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj«×h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj§×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§×ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÇ×h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj§×ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÕ×h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§×ubj�)�”}”(hŒ oldstate2”h]”hŒ oldstate2”…”�”}”(hjã×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§×ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjR×ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj×h²hh³j+×h´KIubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj×h²hh³j+×h´KIubah}”(h]”j×ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j+×h´KIhj×h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Are two old-state values identical?”h]”hŒ#Are two old-state values identical?”…”�”}”(hj Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KIhj Øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj×h²hh³j+×h´KIubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj%Øjæj%Øjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``unsigned long oldstate1`` First old-state value. ``unsigned long oldstate2`` Second old-state value. **Description** The two old-state values must have been obtained from either get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or get_completed_synchronize_rcu(). Returns **true** if the two values are identical and **false** otherwise. This allows structures whose lifetimes are tracked by old-state values to push these values to a list header, allowing those structures to be slightly smaller.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj/Øh]”hŒ Parameters”…”�”}”(hj1Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-Øubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KMhj)Øubj )�”}”(hhh]”(j)�”}”(hŒ3``unsigned long oldstate1`` First old-state value. ”h]”(j)�”}”(hŒ``unsigned long oldstate1``”h]”j)�”}”(hjNØh]”hŒunsigned long oldstate1”…”�”}”(hjPØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLØubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KJhjHØubj2)�”}”(hhh]”hÝ)�”}”(hŒFirst old-state value.”h]”hŒFirst old-state value.”…”�”}”(hjgØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jcØh´KJhjdØubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjHØubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jcØh´KJhjEØubj)�”}”(hŒ4``unsigned long oldstate2`` Second old-state value. ”h]”(j)�”}”(hŒ``unsigned long oldstate2``”h]”j)�”}”(hj‡Øh]”hŒunsigned long oldstate2”…”�”}”(hj‰Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…Øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KKhj�Øubj2)�”}”(hhh]”hÝ)�”}”(hŒSecond old-state value.”h]”hŒSecond old-state value.”…”�”}”(hj Øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœØh´KKhj�Øubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Øubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœØh´KKhjEØubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj)ØubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÂØh]”hŒ Description”…”�”}”(hjÄØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÀØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KMhj)ØubhÝ)�”}”(hX‡The two old-state values must have been obtained from either get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or get_completed_synchronize_rcu(). Returns **true** if the two values are identical and **false** otherwise. This allows structures whose lifetimes are tracked by old-state values to push these values to a list header, allowing those structures to be slightly smaller.”h]”(hŒ¥The two old-state values must have been obtained from either get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or get_completed_synchronize_rcu(). Returns ”…”�”}”(hjØØh²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hjàØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØØubhŒ% if the two values are identical and ”…”�”}”(hjØØh²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hjòØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØØubhŒ¬ otherwise. This allows structures whose lifetimes are tracked by old-state values to push these values to a list header, allowing those structures to be slightly smaller.”…”�”}”(hjØØh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KLhj)Øubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&cond_resched_tasks_rcu_qs (C function)”Œc.cond_resched_tasks_rcu_qs”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%void cond_resched_tasks_rcu_qs (void)”h]”j)�”}”(hŒ$void cond_resched_tasks_rcu_qs(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj+Ùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj'Ùh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KÚubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'Ùh²hh³j9Ùh´KÚubj{)�”}”(hŒcond_resched_tasks_rcu_qs”h]”j�)�”}”(hŒcond_resched_tasks_rcu_qs”h]”hŒcond_resched_tasks_rcu_qs”…”�”}”(hjLÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjHÙubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj'Ùh²hh³j9Ùh´KÚubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjhÙh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdÙubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj`Ùubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj'Ùh²hh³j9Ùh´KÚubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj#Ùh²hh³j9Ùh´KÚubah}”(h]”jÙah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j9Ùh´KÚhj Ùh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ(Report potential quiescent states to RCU”h]”hŒ(Report potential quiescent states to RCU”…”�”}”(hj’Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KÚhj�Ùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj Ùh²hh³j9Ùh´KÚubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjªÙjæjªÙjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``void`` no arguments **Description** This function resembles cond_resched(), except that it is defined to report potential quiescent states to RCU-tasks even if the cond_resched() machinery were to be shut off, as some advocate for PREEMPTION kernels.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj´Ùh]”hŒ Parameters”…”�”}”(hj¶Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KÞhj®Ùubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjÓÙh]”hŒvoid”…”�”}”(hjÕÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KhjÍÙubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjìÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèÙh´KhjéÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍÙubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèÙh´KhjÊÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj®ÙubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÚh]”hŒ Description”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Khj®ÙubhÝ)�”}”(hŒÖThis function resembles cond_resched(), except that it is defined to report potential quiescent states to RCU-tasks even if the cond_resched() machinery were to be shut off, as some advocate for PREEMPTION kernels.”h]”hŒÖThis function resembles cond_resched(), except that it is defined to report potential quiescent states to RCU-tasks even if the cond_resched() machinery were to be shut off, as some advocate for PREEMPTION kernels.”…”�”}”(hj$Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KÛhj®Ùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!rcu_softirq_qs_periodic (C macro)”Œc.rcu_softirq_qs_periodic”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_softirq_qs_periodic”h]”j)�”}”(hŒrcu_softirq_qs_periodic”h]”j{)�”}”(hŒrcu_softirq_qs_periodic”h]”j�)�”}”(hjMÚh]”hŒrcu_softirq_qs_periodic”…”�”}”(hjWÚh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSÚubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjOÚh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Kçubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjKÚh²hh³jjÚh´Kçubah}”(h]”jFÚah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jjÚh´KçhjHÚh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjHÚh²hh³jjÚh´Kçubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjƒÚjæjƒÚjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ$``rcu_softirq_qs_periodic (old_ts)``”h]”j)�”}”(hj‰Úh]”hŒ rcu_softirq_qs_periodic (old_ts)”…”�”}”(hj‹Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡Úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KéhjôÖh²hubj•)�”}”(hŒ*Report RCU and RCU-Tasks quiescent states ”h]”hÝ)�”}”(hŒ)Report RCU and RCU-Tasks quiescent states”h]”hŒ)Report RCU and RCU-Tasks quiescent states”…”�”}”(hj£Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KçhjŸÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j±Úh´KçhjôÖh²hubjë)�”}”(hX°**Parameters** ``old_ts`` jiffies at start of processing. **Description** This helper is for long-running softirq handlers, such as NAPI threads in networking. The caller should initialize the variable passed in as **old_ts** at the beginning of the softirq handler. When invoked frequently, this macro will invoke rcu_softirq_qs() every 100 milliseconds thereafter, which will provide both RCU and RCU-Tasks quiescent states. Note that this macro modifies its old_ts argument. Because regions of code that have disabled softirq act as RCU read-side critical sections, this macro should be invoked with softirq (and preemption) enabled. The macro is not needed when CONFIG_PREEMPT_RT is defined. RT kernels would have more chance to invoke schedule() calls and provide necessary quiescent states. As a contrast, calling cond_resched() only won't achieve the same effect because cond_resched() does not provide RCU-Tasks quiescent states.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¾Úh]”hŒ Parameters”…”�”}”(hjÀÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼Úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Këhj¸Úubj )�”}”(hhh]”j)�”}”(hŒ+``old_ts`` jiffies at start of processing. ”h]”(j)�”}”(hŒ ``old_ts``”h]”j)�”}”(hjÝÚh]”hŒold_ts”…”�”}”(hjßÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÛÚubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Kèhj×Úubj2)�”}”(hhh]”hÝ)�”}”(hŒjiffies at start of processing.”h]”hŒjiffies at start of processing.”…”�”}”(hjöÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jòÚh´KèhjóÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj×Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jòÚh´KèhjÔÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¸ÚubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÛh]”hŒ Description”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Kêhj¸ÚubhÝ)�”}”(hX“This helper is for long-running softirq handlers, such as NAPI threads in networking. The caller should initialize the variable passed in as **old_ts** at the beginning of the softirq handler. When invoked frequently, this macro will invoke rcu_softirq_qs() every 100 milliseconds thereafter, which will provide both RCU and RCU-Tasks quiescent states. Note that this macro modifies its old_ts argument.”h]”(hŒ�This helper is for long-running softirq handlers, such as NAPI threads in networking. The caller should initialize the variable passed in as ”…”�”}”(hj.Ûh²hh³Nh´Nubjõ)�”}”(hŒ **old_ts**”h]”hŒold_ts”…”�”}”(hj6Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.ÛubhŒü at the beginning of the softirq handler. When invoked frequently, this macro will invoke rcu_softirq_qs() every 100 milliseconds thereafter, which will provide both RCU and RCU-Tasks quiescent states. Note that this macro modifies its old_ts argument.”…”�”}”(hj.Ûh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Kéhj¸ÚubhÝ)�”}”(hŒžBecause regions of code that have disabled softirq act as RCU read-side critical sections, this macro should be invoked with softirq (and preemption) enabled.”h]”hŒžBecause regions of code that have disabled softirq act as RCU read-side critical sections, this macro should be invoked with softirq (and preemption) enabled.”…”�”}”(hjOÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Kðhj¸ÚubhÝ)�”}”(hX,The macro is not needed when CONFIG_PREEMPT_RT is defined. RT kernels would have more chance to invoke schedule() calls and provide necessary quiescent states. As a contrast, calling cond_resched() only won't achieve the same effect because cond_resched() does not provide RCU-Tasks quiescent states.”h]”hX.The macro is not needed when CONFIG_PREEMPT_RT is defined. RT kernels would have more chance to invoke schedule() calls and provide necessary quiescent states. As a contrast, calling cond_resched() only won’t achieve the same effect because cond_resched() does not provide RCU-Tasks quiescent states.”…”�”}”(hj^Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Kôhj¸Úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒRCU_LOCKDEP_WARN (C macro)”Œc.RCU_LOCKDEP_WARN”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRCU_LOCKDEP_WARN”h]”j)�”}”(hŒRCU_LOCKDEP_WARN”h]”j{)�”}”(hŒRCU_LOCKDEP_WARN”h]”j�)�”}”(hj‡Ûh]”hŒRCU_LOCKDEP_WARN”…”�”}”(hj‘Ûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Ûubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‰Ûh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mlubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj…Ûh²hh³j¤Ûh´Mlubah}”(h]”j€Ûah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¤Ûh´Mlhj‚Ûh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‚Ûh²hh³j¤Ûh´Mlubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj½Ûjæj½Ûjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``RCU_LOCKDEP_WARN (c, s)``”h]”j)�”}”(hjÃÛh]”hŒRCU_LOCKDEP_WARN (c, s)”…”�”}”(hjÅÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁÛubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MnhjôÖh²hubj•)�”}”(hŒ1emit lockdep splat if specified condition is met ”h]”hÝ)�”}”(hŒ0emit lockdep splat if specified condition is met”h]”hŒ0emit lockdep splat if specified condition is met”…”�”}”(hjÝÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MlhjÙÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jëÛh´MlhjôÖh²hubjë)�”}”(hX©**Parameters** ``c`` condition to check ``s`` informative message **Description** This checks debug_lockdep_rcu_enabled() before checking (c) to prevent early boot splats due to lockdep not yet being initialized, and rechecks it after checking (c) to prevent false-positive splats due to races with lockdep being disabled. See commit 3066820034b5dd ("rcu: Reject RCU_LOCKDEP_WARN() false positives") for more detail.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjøÛh]”hŒ Parameters”…”�”}”(hjúÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjöÛubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MphjòÛubj )�”}”(hhh]”(j)�”}”(hŒ``c`` condition to check ”h]”(j)�”}”(hŒ``c``”h]”j)�”}”(hjÜh]”hŒc”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MmhjÜubj2)�”}”(hhh]”hÝ)�”}”(hŒcondition to check”h]”hŒcondition to check”…”�”}”(hj0Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,Üh´Mmhj-Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,Üh´MmhjÜubj)�”}”(hŒ``s`` informative message ”h]”(j)�”}”(hŒ``s``”h]”j)�”}”(hjPÜh]”hŒs”…”�”}”(hjRÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MnhjJÜubj2)�”}”(hhh]”hÝ)�”}”(hŒinformative message”h]”hŒinformative message”…”�”}”(hjiÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jeÜh´MnhjfÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jeÜh´MnhjÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjòÛubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‹Üh]”hŒ Description”…”�”}”(hj�Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‰Üubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MphjòÛubhÝ)�”}”(hXOThis checks debug_lockdep_rcu_enabled() before checking (c) to prevent early boot splats due to lockdep not yet being initialized, and rechecks it after checking (c) to prevent false-positive splats due to races with lockdep being disabled. See commit 3066820034b5dd ("rcu: Reject RCU_LOCKDEP_WARN() false positives") for more detail.”h]”hXSThis checks debug_lockdep_rcu_enabled() before checking (c) to prevent early boot splats due to lockdep not yet being initialized, and rechecks it after checking (c) to prevent false-positive splats due to races with lockdep being disabled. See commit 3066820034b5dd (“rcu: Reject RCU_LOCKDEP_WARN() false positivesâ€�) for more detail.”…”�”}”(hj¡Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MohjòÛubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)lockdep_assert_in_rcu_read_lock (C macro)”Œ!c.lockdep_assert_in_rcu_read_lock”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlockdep_assert_in_rcu_read_lock”h]”j)�”}”(hŒlockdep_assert_in_rcu_read_lock”h]”j{)�”}”(hŒlockdep_assert_in_rcu_read_lock”h]”j�)�”}”(hjÊÜh]”hŒlockdep_assert_in_rcu_read_lock”…”�”}”(hjÔÜh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÐÜubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÌÜh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MŸubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÈÜh²hh³jçÜh´MŸubah}”(h]”jÃÜah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jçÜh´MŸhjÅÜh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÅÜh²hh³jçÜh´MŸubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÝjæjÝjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ&``lockdep_assert_in_rcu_read_lock ()``”h]”j)�”}”(hjÝh]”hŒ"lockdep_assert_in_rcu_read_lock ()”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¡hjôÖh²hubj•)�”}”(hŒ… WARN if not protected by rcu_read_lock() **Description** Splats if lockdep is enabled and there is no rcu_read_lock() in effect. ”h]”(j•)�”}”(hŒ)WARN if not protected by rcu_read_lock() ”h]”hÝ)�”}”(hŒ(WARN if not protected by rcu_read_lock()”h]”hŒ(WARN if not protected by rcu_read_lock()”…”�”}”(hj$Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MŸhj Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j2Ýh´MŸhjÝubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj;Ýh]”hŒ Description”…”�”}”(hj=Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj9Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¡hjÝubhÝ)�”}”(hŒGSplats if lockdep is enabled and there is no rcu_read_lock() in effect.”h]”hŒGSplats if lockdep is enabled and there is no rcu_read_lock() in effect.”…”�”}”(hjQÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hjÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j2Ýh´MŸhjôÖh²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,lockdep_assert_in_rcu_read_lock_bh (C macro)”Œ$c.lockdep_assert_in_rcu_read_lock_bh”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ"lockdep_assert_in_rcu_read_lock_bh”h]”j)�”}”(hŒ"lockdep_assert_in_rcu_read_lock_bh”h]”j{)�”}”(hŒ"lockdep_assert_in_rcu_read_lock_bh”h]”j�)�”}”(hjyÝh]”hŒ"lockdep_assert_in_rcu_read_lock_bh”…”�”}”(hjƒÝh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj{Ýh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M§ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjwÝh²hh³j–Ýh´M§ubah}”(h]”jrÝah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j–Ýh´M§hjtÝh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjtÝh²hh³j–Ýh´M§ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj¯Ýjæj¯Ýjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ)``lockdep_assert_in_rcu_read_lock_bh ()``”h]”j)�”}”(hjµÝh]”hŒ%lockdep_assert_in_rcu_read_lock_bh ()”…”�”}”(hj·Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M©hjôÖh²hubj•)�”}”(hŒû WARN if not protected by rcu_read_lock_bh() **Description** Splats if lockdep is enabled and there is no rcu_read_lock_bh() in effect. Note that local_bh_disable() and friends do not suffice here, instead an actual rcu_read_lock_bh() is required. ”h]”(j•)�”}”(hŒ,WARN if not protected by rcu_read_lock_bh() ”h]”hÝ)�”}”(hŒ+WARN if not protected by rcu_read_lock_bh()”h]”hŒ+WARN if not protected by rcu_read_lock_bh()”…”�”}”(hjÓÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M§hjÏÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jáÝh´M§hjËÝubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjêÝh]”hŒ Description”…”�”}”(hjìÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjèÝubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M©hjËÝubhÝ)�”}”(hŒºSplats if lockdep is enabled and there is no rcu_read_lock_bh() in effect. Note that local_bh_disable() and friends do not suffice here, instead an actual rcu_read_lock_bh() is required.”h]”hŒºSplats if lockdep is enabled and there is no rcu_read_lock_bh() in effect. Note that local_bh_disable() and friends do not suffice here, instead an actual rcu_read_lock_bh() is required.”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¨hjËÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jáÝh´M§hjôÖh²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ/lockdep_assert_in_rcu_read_lock_sched (C macro)”Œ'c.lockdep_assert_in_rcu_read_lock_sched”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%lockdep_assert_in_rcu_read_lock_sched”h]”j)�”}”(hŒ%lockdep_assert_in_rcu_read_lock_sched”h]”j{)�”}”(hŒ%lockdep_assert_in_rcu_read_lock_sched”h]”j�)�”}”(hj(Þh]”hŒ%lockdep_assert_in_rcu_read_lock_sched”…”�”}”(hj2Þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.Þubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj*Þh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M±ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj&Þh²hh³jEÞh´M±ubah}”(h]”j!Þah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jEÞh´M±hj#Þh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj#Þh²hh³jEÞh´M±ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj^Þjæj^Þjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ,``lockdep_assert_in_rcu_read_lock_sched ()``”h]”j)�”}”(hjdÞh]”hŒ(lockdep_assert_in_rcu_read_lock_sched ()”…”�”}”(hjfÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjbÞubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M³hjôÖh²hubj•)�”}”(hX WARN if not protected by rcu_read_lock_sched() **Description** Splats if lockdep is enabled and there is no rcu_read_lock_sched() in effect. Note that preempt_disable() and friends do not suffice here, instead an actual rcu_read_lock_sched() is required. ”h]”(j•)�”}”(hŒ/WARN if not protected by rcu_read_lock_sched() ”h]”hÝ)�”}”(hŒ.WARN if not protected by rcu_read_lock_sched()”h]”hŒ.WARN if not protected by rcu_read_lock_sched()”…”�”}”(hj‚Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M±hj~Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j�Þh´M±hjzÞubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj™Þh]”hŒ Description”…”�”}”(hj›Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—Þubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M³hjzÞubhÝ)�”}”(hŒÀSplats if lockdep is enabled and there is no rcu_read_lock_sched() in effect. Note that preempt_disable() and friends do not suffice here, instead an actual rcu_read_lock_sched() is required.”h]”hŒÀSplats if lockdep is enabled and there is no rcu_read_lock_sched() in effect. Note that preempt_disable() and friends do not suffice here, instead an actual rcu_read_lock_sched() is required.”…”�”}”(hj¯Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M²hjzÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j�Þh´M±hjôÖh²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&lockdep_assert_in_rcu_reader (C macro)”Œc.lockdep_assert_in_rcu_reader”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlockdep_assert_in_rcu_reader”h]”j)�”}”(hŒlockdep_assert_in_rcu_reader”h]”j{)�”}”(hŒlockdep_assert_in_rcu_reader”h]”j�)�”}”(hj×Þh]”hŒlockdep_assert_in_rcu_reader”…”�”}”(hjáÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝÞubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÙÞh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M»ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÕÞh²hh³jôÞh´M»ubah}”(h]”jÐÞah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jôÞh´M»hjÒÞh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÒÞh²hh³jôÞh´M»ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj ßjæj ßjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ#``lockdep_assert_in_rcu_reader ()``”h]”j)�”}”(hjßh]”hŒlockdep_assert_in_rcu_reader ()”…”�”}”(hjßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M½hjôÖh²hubj•)�”}”(hXæ WARN if not within some type of RCU reader **Description** Splats if lockdep is enabled and there is no RCU reader of any type in effect. Note that regions of code protected by things like preempt_disable, local_bh_disable(), and local_irq_disable() all qualify as RCU readers. Note that this will never trigger in PREEMPT_NONE or PREEMPT_VOLUNTARY kernels that are not also built with PREEMPT_COUNT. But if you have lockdep enabled, you might as well also enable PREEMPT_COUNT. ”h]”(j•)�”}”(hŒ+WARN if not within some type of RCU reader ”h]”hÝ)�”}”(hŒ*WARN if not within some type of RCU reader”h]”hŒ*WARN if not within some type of RCU reader”…”�”}”(hj1ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M»hj-ßubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j?ßh´M»hj)ßubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjHßh]”hŒ Description”…”�”}”(hjJßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjFßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M½hj)ßubhÝ)�”}”(hŒÛSplats if lockdep is enabled and there is no RCU reader of any type in effect. Note that regions of code protected by things like preempt_disable, local_bh_disable(), and local_irq_disable() all qualify as RCU readers.”h]”hŒÛSplats if lockdep is enabled and there is no RCU reader of any type in effect. Note that regions of code protected by things like preempt_disable, local_bh_disable(), and local_irq_disable() all qualify as RCU readers.”…”�”}”(hj^ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¼hj)ßubhÝ)�”}”(hŒÉNote that this will never trigger in PREEMPT_NONE or PREEMPT_VOLUNTARY kernels that are not also built with PREEMPT_COUNT. But if you have lockdep enabled, you might as well also enable PREEMPT_COUNT.”h]”hŒÉNote that this will never trigger in PREEMPT_NONE or PREEMPT_VOLUNTARY kernels that are not also built with PREEMPT_COUNT. But if you have lockdep enabled, you might as well also enable PREEMPT_COUNT.”…”�”}”(hjmßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÁhj)ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j?ßh´M»hjôÖh²hubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œunrcu_pointer (C macro)”Œc.unrcu_pointer”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ unrcu_pointer”h]”j)�”}”(hŒ unrcu_pointer”h]”j{)�”}”(hŒ unrcu_pointer”h]”j�)�”}”(hj•ßh]”hŒ unrcu_pointer”…”�”}”(hjŸßh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›ßubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—ßh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mîubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj“ßh²hh³j²ßh´Mîubah}”(h]”jŽßah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²ßh´Mîhj�ßh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�ßh²hh³j²ßh´Mîubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjËßjæjËßjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``unrcu_pointer (p)``”h]”j)�”}”(hjÑßh]”hŒunrcu_pointer (p)”…”�”}”(hjÓßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MðhjôÖh²hubj•)�”}”(hŒ*mark a pointer as not being RCU protected ”h]”hÝ)�”}”(hŒ)mark a pointer as not being RCU protected”h]”hŒ)mark a pointer as not being RCU protected”…”�”}”(hjëßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mîhjçßubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jùßh´MîhjôÖh²hubjë)�”}”(hŒÑ**Parameters** ``p`` pointer needing to lose its __rcu property **Description** Converts **p** from an __rcu pointer to a __kernel pointer. This allows an __rcu pointer to be used with xchg() and friends.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjàh]”hŒ Parameters”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mòhjàubj )�”}”(hhh]”j)�”}”(hŒ1``p`` pointer needing to lose its __rcu property ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj%àh]”hŒp”…”�”}”(hj'àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#àubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mïhjàubj2)�”}”(hhh]”hÝ)�”}”(hŒ*pointer needing to lose its __rcu property”h]”hŒ*pointer needing to lose its __rcu property”…”�”}”(hj>àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:àh´Mïhj;àubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:àh´Mïhjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjàubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj`àh]”hŒ Description”…”�”}”(hjbàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^àubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MñhjàubhÝ)�”}”(hŒ|Converts **p** from an __rcu pointer to a __kernel pointer. This allows an __rcu pointer to be used with xchg() and friends.”h]”(hŒ Converts ”…”�”}”(hjvàh²hh³Nh´Nubjõ)�”}”(hŒ**p**”h]”hŒp”…”�”}”(hj~àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjvàubhŒn from an __rcu pointer to a __kernel pointer. This allows an __rcu pointer to be used with xchg() and friends.”…”�”}”(hjvàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mðhjàubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒRCU_INITIALIZER (C macro)”Œc.RCU_INITIALIZER”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRCU_INITIALIZER”h]”j)�”}”(hŒRCU_INITIALIZER”h]”j{)�”}”(hŒRCU_INITIALIZER”h]”j�)�”}”(hj±àh]”hŒRCU_INITIALIZER”…”�”}”(hj»àh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj·àubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj³àh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¯àh²hh³jÎàh´Mubah}”(h]”jªàah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÎàh´Mhj¬àh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¬àh²hh³jÎàh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjçàjæjçàjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``RCU_INITIALIZER (v)``”h]”j)�”}”(hjíàh]”hŒRCU_INITIALIZER (v)”…”�”}”(hjïàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëàubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjôÖh²hubj•)�”}”(hŒ7statically initialize an RCU-protected global variable ”h]”hÝ)�”}”(hŒ6statically initialize an RCU-protected global variable”h]”hŒ6statically initialize an RCU-protected global variable”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjáubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jáh´MhjôÖh²hubjë)�”}”(hŒ@**Parameters** ``v`` The value to statically initialize with.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj"áh]”hŒ Parameters”…”�”}”(hj$áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjáubj )�”}”(hhh]”j)�”}”(hŒ.``v`` The value to statically initialize with.”h]”(j)�”}”(hŒ``v``”h]”j)�”}”(hjAáh]”hŒv”…”�”}”(hjCáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhj;áubj2)�”}”(hhh]”hÝ)�”}”(hŒ(The value to statically initialize with.”h]”hŒ(The value to statically initialize with.”…”�”}”(hjZáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjWáubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj;áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jVáh´Mhj8áubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjáubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_assign_pointer (C macro)”Œc.rcu_assign_pointer”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_assign_pointer”h]”j)�”}”(hŒrcu_assign_pointer”h]”j{)�”}”(hŒrcu_assign_pointer”h]”j�)�”}”(hj•áh]”hŒrcu_assign_pointer”…”�”}”(hjŸáh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›áubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—áh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj“áh²hh³j²áh´Mubah}”(h]”jŽáah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²áh´Mhj�áh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�áh²hh³j²áh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjËájæjËájç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``rcu_assign_pointer (p, v)``”h]”j)�”}”(hjÑáh]”hŒrcu_assign_pointer (p, v)”…”�”}”(hjÓáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏáubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjôÖh²hubj•)�”}”(hŒ assign to RCU-protected pointer ”h]”hÝ)�”}”(hŒassign to RCU-protected pointer”h]”hŒassign to RCU-protected pointer”…”�”}”(hjëáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjçáubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jùáh´MhjôÖh²hubjë)�”}”(hX‡**Parameters** ``p`` pointer to assign to ``v`` value to assign (publish) **Description** Assigns the specified value to the specified RCU-protected pointer, ensuring that any concurrent RCU readers will see any prior initialization. Inserts memory barriers on architectures that require them (which is most of them), and also prevents the compiler from reordering the code that initializes the structure after the pointer assignment. More importantly, this call documents which pointers will be dereferenced by RCU read-side code. In some special cases, you may use RCU_INIT_POINTER() instead of rcu_assign_pointer(). RCU_INIT_POINTER() is a bit faster due to the fact that it does not constrain either the CPU or the compiler. That said, using RCU_INIT_POINTER() when you should have used rcu_assign_pointer() is a very bad thing that results in impossible-to-diagnose memory corruption. So please be careful. See the RCU_INIT_POINTER() comment header for details. Note that rcu_assign_pointer() evaluates each of its arguments only once, appearances notwithstanding. One of the "extra" evaluations is in typeof() and the other visible only to sparse (__CHECKER__), neither of which actually execute the argument. As with most cpp macros, this execute-arguments-only-once property is important, so please be careful when making changes to rcu_assign_pointer() and the other macros that it invokes.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjâh]”hŒ Parameters”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjâubj )�”}”(hhh]”(j)�”}”(hŒ``p`` pointer to assign to ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj%âh]”hŒp”…”�”}”(hj'âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#âubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjâubj2)�”}”(hhh]”hÝ)�”}”(hŒpointer to assign to”h]”hŒpointer to assign to”…”�”}”(hj>âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:âh´Mhj;âubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:âh´Mhjâubj)�”}”(hŒ ``v`` value to assign (publish) ”h]”(j)�”}”(hŒ``v``”h]”j)�”}”(hj^âh]”hŒv”…”�”}”(hj`âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\âubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjXâubj2)�”}”(hhh]”hÝ)�”}”(hŒvalue to assign (publish)”h]”hŒvalue to assign (publish)”…”�”}”(hjwâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jsâh´Mhjtâubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjXâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jsâh´Mhjâubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjâubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj™âh]”hŒ Description”…”�”}”(hj›âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj—âubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjâubhÝ)�”}”(hŒ�Assigns the specified value to the specified RCU-protected pointer, ensuring that any concurrent RCU readers will see any prior initialization.”h]”hŒ�Assigns the specified value to the specified RCU-protected pointer, ensuring that any concurrent RCU readers will see any prior initialization.”…”�”}”(hj¯âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjâubhÝ)�”}”(hX*Inserts memory barriers on architectures that require them (which is most of them), and also prevents the compiler from reordering the code that initializes the structure after the pointer assignment. More importantly, this call documents which pointers will be dereferenced by RCU read-side code.”h]”hX*Inserts memory barriers on architectures that require them (which is most of them), and also prevents the compiler from reordering the code that initializes the structure after the pointer assignment. More importantly, this call documents which pointers will be dereferenced by RCU read-side code.”…”�”}”(hj¾âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hjâubhÝ)�”}”(hX´In some special cases, you may use RCU_INIT_POINTER() instead of rcu_assign_pointer(). RCU_INIT_POINTER() is a bit faster due to the fact that it does not constrain either the CPU or the compiler. That said, using RCU_INIT_POINTER() when you should have used rcu_assign_pointer() is a very bad thing that results in impossible-to-diagnose memory corruption. So please be careful. See the RCU_INIT_POINTER() comment header for details.”h]”hX´In some special cases, you may use RCU_INIT_POINTER() instead of rcu_assign_pointer(). RCU_INIT_POINTER() is a bit faster due to the fact that it does not constrain either the CPU or the compiler. That said, using RCU_INIT_POINTER() when you should have used rcu_assign_pointer() is a very bad thing that results in impossible-to-diagnose memory corruption. So please be careful. See the RCU_INIT_POINTER() comment header for details.”…”�”}”(hjÍâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M&hjâubhÝ)�”}”(hX²Note that rcu_assign_pointer() evaluates each of its arguments only once, appearances notwithstanding. One of the "extra" evaluations is in typeof() and the other visible only to sparse (__CHECKER__), neither of which actually execute the argument. As with most cpp macros, this execute-arguments-only-once property is important, so please be careful when making changes to rcu_assign_pointer() and the other macros that it invokes.”h]”hX¶Note that rcu_assign_pointer() evaluates each of its arguments only once, appearances notwithstanding. One of the “extraâ€� evaluations is in typeof() and the other visible only to sparse (__CHECKER__), neither of which actually execute the argument. As with most cpp macros, this execute-arguments-only-once property is important, so please be careful when making changes to rcu_assign_pointer() and the other macros that it invokes.”…”�”}”(hjÜâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M.hjâubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_replace_pointer (C macro)”Œc.rcu_replace_pointer”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_replace_pointer”h]”j)�”}”(hŒrcu_replace_pointer”h]”j{)�”}”(hŒrcu_replace_pointer”h]”j�)�”}”(hjãh]”hŒrcu_replace_pointer”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ãubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjãh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MCubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjãh²hh³j"ãh´MCubah}”(h]”jþâah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j"ãh´MChjãh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjãh²hh³j"ãh´MCubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj;ãjæj;ãjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ)``rcu_replace_pointer (rcu_ptr, ptr, c)``”h]”j)�”}”(hjAãh]”hŒ%rcu_replace_pointer (rcu_ptr, ptr, c)”…”�”}”(hjCãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?ãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MEhjôÖh²hubj•)�”}”(hŒ0replace an RCU pointer, returning its old value ”h]”hÝ)�”}”(hŒ/replace an RCU pointer, returning its old value”h]”hŒ/replace an RCU pointer, returning its old value”…”�”}”(hj[ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MChjWãubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jiãh´MChjôÖh²hubjë)�”}”(hXÆ**Parameters** ``rcu_ptr`` RCU pointer, whose old value is returned ``ptr`` regular pointer ``c`` the lockdep conditions under which the dereference will take place **Description** Perform a replacement, where **rcu_ptr** is an RCU-annotated pointer and **c** is the lockdep argument that is passed to the rcu_dereference_protected() call used to read that pointer. The old value of **rcu_ptr** is returned, and **rcu_ptr** is set to **ptr**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjvãh]”hŒ Parameters”…”�”}”(hjxãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtãubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MGhjpãubj )�”}”(hhh]”(j)�”}”(hŒ5``rcu_ptr`` RCU pointer, whose old value is returned ”h]”(j)�”}”(hŒ ``rcu_ptr``”h]”j)�”}”(hj•ãh]”hŒrcu_ptr”…”�”}”(hj—ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj“ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MDhj�ãubj2)�”}”(hhh]”hÝ)�”}”(hŒ(RCU pointer, whose old value is returned”h]”hŒ(RCU pointer, whose old value is returned”…”�”}”(hj®ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jªãh´MDhj«ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jªãh´MDhjŒãubj)�”}”(hŒ``ptr`` regular pointer ”h]”(j)�”}”(hŒ``ptr``”h]”j)�”}”(hjÎãh]”hŒptr”…”�”}”(hjÐãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÌãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MEhjÈãubj2)�”}”(hhh]”hÝ)�”}”(hŒregular pointer”h]”hŒregular pointer”…”�”}”(hjçãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jããh´MEhjäãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÈãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jããh´MEhjŒãubj)�”}”(hŒI``c`` the lockdep conditions under which the dereference will take place ”h]”(j)�”}”(hŒ``c``”h]”j)�”}”(hjäh]”hŒc”…”�”}”(hj äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MFhjäubj2)�”}”(hhh]”hÝ)�”}”(hŒBthe lockdep conditions under which the dereference will take place”h]”hŒBthe lockdep conditions under which the dereference will take place”…”�”}”(hj äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jäh´MFhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jäh´MFhjŒãubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjpãubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjBäh]”hŒ Description”…”�”}”(hjDäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj@äubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MHhjpãubhÝ)�”}”(hXPerform a replacement, where **rcu_ptr** is an RCU-annotated pointer and **c** is the lockdep argument that is passed to the rcu_dereference_protected() call used to read that pointer. The old value of **rcu_ptr** is returned, and **rcu_ptr** is set to **ptr**.”h]”(hŒPerform a replacement, where ”…”�”}”(hjXäh²hh³Nh´Nubjõ)�”}”(hŒ **rcu_ptr**”h]”hŒrcu_ptr”…”�”}”(hj`äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXäubhŒ! is an RCU-annotated pointer and ”…”�”}”(hjXäh²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjräh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXäubhŒ} is the lockdep argument that is passed to the rcu_dereference_protected() call used to read that pointer. The old value of ”…”�”}”(hjXäh²hh³Nh´Nubjõ)�”}”(hŒ **rcu_ptr**”h]”hŒrcu_ptr”…”�”}”(hj„äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXäubhŒ is returned, and ”…”�”}”(hjXäh²hh³Nh´Nubjõ)�”}”(hŒ **rcu_ptr**”h]”hŒrcu_ptr”…”�”}”(hj–äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXäubhŒ is set to ”…”�”}”(hjXäh²hh³Nh´Nubjõ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hj¨äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjXäubhŒ.”…”�”}”(hjXäh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MGhjpãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_access_pointer (C macro)”Œc.rcu_access_pointer”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_access_pointer”h]”j)�”}”(hŒrcu_access_pointer”h]”j{)�”}”(hŒrcu_access_pointer”h]”j�)�”}”(hjÛäh]”hŒrcu_access_pointer”…”�”}”(hjåäh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáäubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÝäh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MUubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÙäh²hh³jøäh´MUubah}”(h]”jÔäah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jøäh´MUhjÖäh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÖäh²hh³jøäh´MUubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjåjæjåjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``rcu_access_pointer (p)``”h]”j)�”}”(hjåh]”hŒrcu_access_pointer (p)”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MWhjôÖh²hubj•)�”}”(hŒ(fetch RCU pointer with no dereferencing ”h]”hÝ)�”}”(hŒ'fetch RCU pointer with no dereferencing”h]”hŒ'fetch RCU pointer with no dereferencing”…”�”}”(hj1åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MUhj-åubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j?åh´MUhjôÖh²hubjë)�”}”(hXï**Parameters** ``p`` The pointer to read **Description** Return the value of the specified RCU-protected pointer, but omit the lockdep checks for being in an RCU read-side critical section. This is useful when the value of this pointer is accessed, but the pointer is not dereferenced, for example, when testing an RCU-protected pointer against NULL. Within an RCU read-side critical section, there is little reason to use rcu_access_pointer(). Although rcu_access_pointer() may also be used in cases where update-side locks prevent the value of the pointer from changing, you should instead use rcu_dereference_protected() for this use case. It is also permissible to use rcu_access_pointer() within lockless updaters to obtain the old value for an atomic operation, for example, for cmpxchg(). It is usually best to test the rcu_access_pointer() return value directly in order to avoid accidental dereferences being introduced by later inattentive changes. In other words, assigning the rcu_access_pointer() return value to a local variable results in an accident waiting to happen. It is also permissible to use rcu_access_pointer() when read-side access to the pointer was removed at least one grace period ago, as is the case in the context of the RCU callback that is freeing up the data, or after a synchronize_rcu() returns. This can be useful when tearing down multi-linked structures after a grace period has elapsed. However, rcu_dereference_protected() is normally preferred for this use case.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjLåh]”hŒ Parameters”…”�”}”(hjNåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJåubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MYhjFåubj )�”}”(hhh]”j)�”}”(hŒ``p`` The pointer to read ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjkåh]”hŒp”…”�”}”(hjmåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjiåubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MVhjeåubj2)�”}”(hhh]”hÝ)�”}”(hŒThe pointer to read”h]”hŒThe pointer to read”…”�”}”(hj„åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j€åh´MVhj�åubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjeåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j€åh´MVhjbåubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjFåubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¦åh]”hŒ Description”…”�”}”(hj¨åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤åubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MXhjFåubhÝ)�”}”(hXæReturn the value of the specified RCU-protected pointer, but omit the lockdep checks for being in an RCU read-side critical section. This is useful when the value of this pointer is accessed, but the pointer is not dereferenced, for example, when testing an RCU-protected pointer against NULL. Within an RCU read-side critical section, there is little reason to use rcu_access_pointer(). Although rcu_access_pointer() may also be used in cases where update-side locks prevent the value of the pointer from changing, you should instead use rcu_dereference_protected() for this use case. It is also permissible to use rcu_access_pointer() within lockless updaters to obtain the old value for an atomic operation, for example, for cmpxchg().”h]”hXæReturn the value of the specified RCU-protected pointer, but omit the lockdep checks for being in an RCU read-side critical section. This is useful when the value of this pointer is accessed, but the pointer is not dereferenced, for example, when testing an RCU-protected pointer against NULL. Within an RCU read-side critical section, there is little reason to use rcu_access_pointer(). Although rcu_access_pointer() may also be used in cases where update-side locks prevent the value of the pointer from changing, you should instead use rcu_dereference_protected() for this use case. It is also permissible to use rcu_access_pointer() within lockless updaters to obtain the old value for an atomic operation, for example, for cmpxchg().”…”�”}”(hj¼åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MWhjFåubhÝ)�”}”(hX!It is usually best to test the rcu_access_pointer() return value directly in order to avoid accidental dereferences being introduced by later inattentive changes. In other words, assigning the rcu_access_pointer() return value to a local variable results in an accident waiting to happen.”h]”hX!It is usually best to test the rcu_access_pointer() return value directly in order to avoid accidental dereferences being introduced by later inattentive changes. In other words, assigning the rcu_access_pointer() return value to a local variable results in an accident waiting to happen.”…”�”}”(hjËåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MchjFåubhÝ)�”}”(hX¦It is also permissible to use rcu_access_pointer() when read-side access to the pointer was removed at least one grace period ago, as is the case in the context of the RCU callback that is freeing up the data, or after a synchronize_rcu() returns. This can be useful when tearing down multi-linked structures after a grace period has elapsed. However, rcu_dereference_protected() is normally preferred for this use case.”h]”hX¦It is also permissible to use rcu_access_pointer() when read-side access to the pointer was removed at least one grace period ago, as is the case in the context of the RCU callback that is freeing up the data, or after a synchronize_rcu() returns. This can be useful when tearing down multi-linked structures after a grace period has elapsed. However, rcu_dereference_protected() is normally preferred for this use case.”…”�”}”(hjÚåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MihjFåubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_dereference_check (C macro)”Œc.rcu_dereference_check”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_dereference_check”h]”j)�”}”(hŒrcu_dereference_check”h]”j{)�”}”(hŒrcu_dereference_check”h]”j�)�”}”(hjæh]”hŒrcu_dereference_check”…”�”}”(hj æh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj æubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjæh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mtubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjæh²hh³j æh´Mtubah}”(h]”jüåah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j æh´Mthjþåh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjþåh²hh³j æh´Mtubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj9æjæj9æjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ ``rcu_dereference_check (p, c)``”h]”j)�”}”(hj?æh]”hŒrcu_dereference_check (p, c)”…”�”}”(hjAæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=æubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MvhjôÖh²hubj•)�”}”(hŒ$rcu_dereference with debug checking ”h]”hÝ)�”}”(hŒ#rcu_dereference with debug checking”h]”hŒ#rcu_dereference with debug checking”…”�”}”(hjYæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MthjUæubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jgæh´MthjôÖh²hubjë)�”}”(hX¢**Parameters** ``p`` The pointer to read, prior to dereferencing ``c`` The conditions under which the dereference will take place **Description** Do an rcu_dereference(), but check that the conditions under which the dereference will take place are correct. Typically the conditions indicate the various locking conditions that should be held at that point. The check should return true if the conditions are satisfied. An implicit check for being in an RCU read-side critical section (rcu_read_lock()) is included. For example: bar = rcu_dereference_check(foo->bar, lockdep_is_held(:c:type:`foo->lock `)); could be used to indicate to lockdep that foo->bar may only be dereferenced if either rcu_read_lock() is held, or that the lock required to replace the bar struct at foo->bar is held. Note that the list of conditions may also include indications of when a lock need not be held, for example during initialisation or destruction of the target struct: bar = rcu_dereference_check(foo->bar, lockdep_is_held(:c:type:`foo->lock `) || atomic_read(:c:type:`foo->usage `) == 0); Inserts memory barriers on architectures that require them (currently only the Alpha), prevents the compiler from refetching (and from merging fetches), and, more importantly, documents exactly which pointers are protected by RCU and checks that the pointer is annotated as __rcu.”•Wh]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjtæh]”hŒ Parameters”…”�”}”(hjvæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjræubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mxhjnæubj )�”}”(hhh]”(j)�”}”(hŒ2``p`` The pointer to read, prior to dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj“æh]”hŒp”…”�”}”(hj•æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘æubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Muhj�æubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The pointer to read, prior to dereferencing”h]”hŒ+The pointer to read, prior to dereferencing”…”�”}”(hj¬æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¨æh´Muhj©æubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�æubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¨æh´MuhjŠæubj)�”}”(hŒA``c`` The conditions under which the dereference will take place ”h]”(j)�”}”(hŒ``c``”h]”j)�”}”(hjÌæh]”hŒc”…”�”}”(hjÎæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÊæubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MvhjÆæubj2)�”}”(hhh]”hÝ)�”}”(hŒ:The conditions under which the dereference will take place”h]”hŒ:The conditions under which the dereference will take place”…”�”}”(hjåæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jáæh´Mvhjâæubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÆæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jáæh´MvhjŠæubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjnæubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjçh]”hŒ Description”…”�”}”(hj çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjçubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MxhjnæubhÝ)�”}”(hXsDo an rcu_dereference(), but check that the conditions under which the dereference will take place are correct. Typically the conditions indicate the various locking conditions that should be held at that point. The check should return true if the conditions are satisfied. An implicit check for being in an RCU read-side critical section (rcu_read_lock()) is included.”h]”hXsDo an rcu_dereference(), but check that the conditions under which the dereference will take place are correct. Typically the conditions indicate the various locking conditions that should be held at that point. The check should return true if the conditions are satisfied. An implicit check for being in an RCU read-side critical section (rcu_read_lock()) is included.”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MwhjnæubhÝ)�”}”(hŒ For example:”h]”hŒ For example:”…”�”}”(hj,çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M~hjnæubj•)�”}”(hŒSbar = rcu_dereference_check(foo->bar, lockdep_is_held(:c:type:`foo->lock `)); ”h]”hÝ)�”}”(hŒRbar = rcu_dereference_check(foo->bar, lockdep_is_held(:c:type:`foo->lock `));”h]”(hŒ6bar = rcu_dereference_check(foo->bar, lockdep_is_held(”…”�”}”(hj?çh²hh³Nh´Nubh)�”}”(hŒ:c:type:`foo->lock `”h]”j)�”}”(hjIçh]”hŒ foo->lock”…”�”}”(hjKçh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjGçubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œfoo”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M€hj?çubhŒ));”…”�”}”(hj?çh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jfçh´M€hj;çubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jfçh´M€hjnæubhÝ)�”}”(hŒ·could be used to indicate to lockdep that foo->bar may only be dereferenced if either rcu_read_lock() is held, or that the lock required to replace the bar struct at foo->bar is held.”h]”hŒ·could be used to indicate to lockdep that foo->bar may only be dereferenced if either rcu_read_lock() is held, or that the lock required to replace the bar struct at foo->bar is held.”…”�”}”(hjwçh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M‚hjnæubhÝ)�”}”(hŒ¥Note that the list of conditions may also include indications of when a lock need not be held, for example during initialisation or destruction of the target struct:”h]”hŒ¥Note that the list of conditions may also include indications of when a lock need not be held, for example during initialisation or destruction of the target struct:”…”�”}”(hj†çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M†hjnæubj•)�”}”(hŒ©bar = rcu_dereference_check(foo->bar, lockdep_is_held(:c:type:`foo->lock `) || atomic_read(:c:type:`foo->usage `) == 0); ”h]”j )�”}”(hhh]”j)�”}”(hŒƒbar = rcu_dereference_check(foo->bar, lockdep_is_held(:c:type:`foo->lock `) || atomic_read(:c:type:`foo->usage `) == 0); ”h]”(j)�”}”(hŒSbar = rcu_dereference_check(foo->bar, lockdep_is_held(:c:type:`foo->lock `) ||”h]”(hŒ6bar = rcu_dereference_check(foo->bar, lockdep_is_held(”…”�”}”(hj çh²hh³Nh´Nubh)�”}”(hŒ:c:type:`foo->lock `”h]”j)�”}”(hjªçh]”hŒ foo->lock”…”�”}”(hj¬çh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhj¨çubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œfoo”uh1hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M‹hj çubhŒ) ||”…”�”}”(hj çh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇçh´M‹hjœçubj2)�”}”(hhh]”hÝ)�”}”(hŒ.atomic_read(:c:type:`foo->usage `) == 0);”h]”(hŒ atomic_read(”…”�”}”(hjÕçh²hh³Nh´Nubh)�”}”(hŒ:c:type:`foo->usage `”h]”j)�”}”(hjßçh]”hŒ foo->usage”…”�”}”(hjáçh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjÝçubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œfoo”uh1hh³jÇçh´M‹hjÕçubhŒ) == 0);”…”�”}”(hjÕçh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÇçh´M‹hjÒçubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœçubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÇçh´M‹hj™çubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj•çubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MŠhjnæubhÝ)�”}”(hXInserts memory barriers on architectures that require them (currently only the Alpha), prevents the compiler from refetching (and from merging fetches), and, more importantly, documents exactly which pointers are protected by RCU and checks that the pointer is annotated as __rcu.”h]”hXInserts memory barriers on architectures that require them (currently only the Alpha), prevents the compiler from refetching (and from merging fetches), and, more importantly, documents exactly which pointers are protected by RCU and checks that the pointer is annotated as __rcu.”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M�hjnæubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"rcu_dereference_bh_check (C macro)”Œc.rcu_dereference_bh_check”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_dereference_bh_check”h]”j)�”}”(hŒrcu_dereference_bh_check”h]”j{)�”}”(hŒrcu_dereference_bh_check”h]”j�)�”}”(hjHèh]”hŒrcu_dereference_bh_check”…”�”}”(hjRèh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNèubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjJèh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M™ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjFèh²hh³jeèh´M™ubah}”(h]”jAèah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jeèh´M™hjCèh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjCèh²hh³jeèh´M™ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj~èjæj~èjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ#``rcu_dereference_bh_check (p, c)``”h]”j)�”}”(hj„èh]”hŒrcu_dereference_bh_check (p, c)”…”�”}”(hj†èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M›hjôÖh²hubj•)�”}”(hŒ'rcu_dereference_bh with debug checking ”h]”hÝ)�”}”(hŒ&rcu_dereference_bh with debug checking”h]”hŒ&rcu_dereference_bh with debug checking”…”�”}”(hjžèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M™hjšèubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¬èh´M™hjôÖh²hubjë)�”}”(hX'**Parameters** ``p`` The pointer to read, prior to dereferencing ``c`` The conditions under which the dereference will take place **Description** This is the RCU-bh counterpart to rcu_dereference_check(). However, please note that starting in v5.0 kernels, vanilla RCU grace periods wait for local_bh_disable() regions of code in addition to regions of code demarked by rcu_read_lock() and rcu_read_unlock(). This means that synchronize_rcu(), call_rcu, and friends all take not only rcu_read_lock() but also rcu_read_lock_bh() into account.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¹èh]”hŒ Parameters”…”�”}”(hj»èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·èubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M�hj³èubj )�”}”(hhh]”(j)�”}”(hŒ2``p`` The pointer to read, prior to dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjØèh]”hŒp”…”�”}”(hjÚèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖèubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MšhjÒèubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The pointer to read, prior to dereferencing”h]”hŒ+The pointer to read, prior to dereferencing”…”�”}”(hjñèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jíèh´Mšhjîèubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÒèubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jíèh´MšhjÏèubj)�”}”(hŒA``c`` The conditions under which the dereference will take place ”h]”(j)�”}”(hŒ``c``”h]”j)�”}”(hjéh]”hŒc”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M›hj éubj2)�”}”(hhh]”hÝ)�”}”(hŒ:The conditions under which the dereference will take place”h]”hŒ:The conditions under which the dereference will take place”…”�”}”(hj*éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j&éh´M›hj'éubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&éh´M›hjÏèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj³èubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjLéh]”hŒ Description”…”�”}”(hjNéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjJéubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M�hj³èubhÝ)�”}”(hX�This is the RCU-bh counterpart to rcu_dereference_check(). However, please note that starting in v5.0 kernels, vanilla RCU grace periods wait for local_bh_disable() regions of code in addition to regions of code demarked by rcu_read_lock() and rcu_read_unlock(). This means that synchronize_rcu(), call_rcu, and friends all take not only rcu_read_lock() but also rcu_read_lock_bh() into account.”h]”hX�This is the RCU-bh counterpart to rcu_dereference_check(). However, please note that starting in v5.0 kernels, vanilla RCU grace periods wait for local_bh_disable() regions of code in addition to regions of code demarked by rcu_read_lock() and rcu_read_unlock(). This means that synchronize_rcu(), call_rcu, and friends all take not only rcu_read_lock() but also rcu_read_lock_bh() into account.”…”�”}”(hjbéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mœhj³èubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%rcu_dereference_sched_check (C macro)”Œc.rcu_dereference_sched_check”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_dereference_sched_check”h]”j)�”}”(hŒrcu_dereference_sched_check”h]”j{)�”}”(hŒrcu_dereference_sched_check”h]”j�)�”}”(hj‹éh]”hŒrcu_dereference_sched_check”…”�”}”(hj•éh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‘éubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�éh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M©ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‰éh²hh³j¨éh´M©ubah}”(h]”j„éah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¨éh´M©hj†éh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj†éh²hh³j¨éh´M©ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÁéjæjÁéjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ&``rcu_dereference_sched_check (p, c)``”h]”j)�”}”(hjÇéh]”hŒ"rcu_dereference_sched_check (p, c)”…”�”}”(hjÉéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÅéubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M«hjôÖh²hubj•)�”}”(hŒ*rcu_dereference_sched with debug checking ”h]”hÝ)�”}”(hŒ)rcu_dereference_sched with debug checking”h]”hŒ)rcu_dereference_sched with debug checking”…”�”}”(hjáéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M©hjÝéubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jïéh´M©hjôÖh²hubjë)�”}”(hX***Parameters** ``p`` The pointer to read, prior to dereferencing ``c`` The conditions under which the dereference will take place **Description** This is the RCU-sched counterpart to rcu_dereference_check(). However, please note that starting in v5.0 kernels, vanilla RCU grace periods wait for preempt_disable() regions of code in addition to regions of code demarked by rcu_read_lock() and rcu_read_unlock(). This means that synchronize_rcu(), call_rcu, and friends all take not only rcu_read_lock() but also rcu_read_lock_sched() into account.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjüéh]”hŒ Parameters”…”�”}”(hjþéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúéubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M­hjöéubj )�”}”(hhh]”(j)�”}”(hŒ2``p`` The pointer to read, prior to dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjêh]”hŒp”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mªhjêubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The pointer to read, prior to dereferencing”h]”hŒ+The pointer to read, prior to dereferencing”…”�”}”(hj4êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0êh´Mªhj1êubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0êh´Mªhjêubj)�”}”(hŒA``c`` The conditions under which the dereference will take place ”h]”(j)�”}”(hŒ``c``”h]”j)�”}”(hjTêh]”hŒc”…”�”}”(hjVêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRêubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M«hjNêubj2)�”}”(hhh]”hÝ)�”}”(hŒ:The conditions under which the dereference will take place”h]”hŒ:The conditions under which the dereference will take place”…”�”}”(hjmêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jiêh´M«hjjêubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjNêubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jiêh´M«hjêubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjöéubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�êh]”hŒ Description”…”�”}”(hj‘êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M­hjöéubhÝ)�”}”(hX�This is the RCU-sched counterpart to rcu_dereference_check(). However, please note that starting in v5.0 kernels, vanilla RCU grace periods wait for preempt_disable() regions of code in addition to regions of code demarked by rcu_read_lock() and rcu_read_unlock(). This means that synchronize_rcu(), call_rcu, and friends all take not only rcu_read_lock() but also rcu_read_lock_sched() into account.”h]”hX�This is the RCU-sched counterpart to rcu_dereference_check(). However, please note that starting in v5.0 kernels, vanilla RCU grace periods wait for preempt_disable() regions of code in addition to regions of code demarked by rcu_read_lock() and rcu_read_unlock(). This means that synchronize_rcu(), call_rcu, and friends all take not only rcu_read_lock() but also rcu_read_lock_sched() into account.”…”�”}”(hj¥êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¬hjöéubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#rcu_dereference_all_check (C macro)”Œc.rcu_dereference_all_check”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_dereference_all_check”h]”j)�”}”(hŒrcu_dereference_all_check”h]”j{)�”}”(hŒrcu_dereference_all_check”h]”j�)�”}”(hjÎêh]”hŒrcu_dereference_all_check”…”�”}”(hjØêh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔêubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÐêh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mºubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÌêh²hh³jëêh´Mºubah}”(h]”jÇêah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jëêh´MºhjÉêh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÉêh²hh³jëêh´Mºubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjëjæjëjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ$``rcu_dereference_all_check (p, c)``”h]”j)�”}”(hj ëh]”hŒ rcu_dereference_all_check (p, c)”…”�”}”(hj ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¼hjôÖh²hubj•)�”}”(hŒ(rcu_dereference_all with debug checking ”h]”hÝ)�”}”(hŒ'rcu_dereference_all with debug checking”h]”hŒ'rcu_dereference_all with debug checking”…”�”}”(hj$ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mºhj ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j2ëh´MºhjôÖh²hubjë)�”}”(hXD**Parameters** ``p`` The pointer to read, prior to dereferencing ``c`` The conditions under which the dereference will take place **Description** This is similar to rcu_dereference_check(), but allows protection by all forms of vanilla RCU readers, including preemption disabled, bh-disabled, and interrupt-disabled regions of code. Note that "vanilla RCU" excludes SRCU and the various Tasks RCU flavors. Please note that this macro should not be backported to any Linux-kernel version preceding v5.0 due to changes in synchronize_rcu() semantics prior to that version.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj?ëh]”hŒ Parameters”…”�”}”(hjAëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj=ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¾hj9ëubj )�”}”(hhh]”(j)�”}”(hŒ2``p`` The pointer to read, prior to dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj^ëh]”hŒp”…”�”}”(hj`ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M»hjXëubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The pointer to read, prior to dereferencing”h]”hŒ+The pointer to read, prior to dereferencing”…”�”}”(hjwëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jsëh´M»hjtëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjXëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jsëh´M»hjUëubj)�”}”(hŒA``c`` The conditions under which the dereference will take place ”h]”(j)�”}”(hŒ``c``”h]”j)�”}”(hj—ëh]”hŒc”…”�”}”(hj™ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¼hj‘ëubj2)�”}”(hhh]”hÝ)�”}”(hŒ:The conditions under which the dereference will take place”h]”hŒ:The conditions under which the dereference will take place”…”�”}”(hj°ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¬ëh´M¼hj­ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‘ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬ëh´M¼hjUëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj9ëubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÒëh]”hŒ Description”…”�”}”(hjÔëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÐëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¾hj9ëubhÝ)�”}”(hXªThis is similar to rcu_dereference_check(), but allows protection by all forms of vanilla RCU readers, including preemption disabled, bh-disabled, and interrupt-disabled regions of code. Note that "vanilla RCU" excludes SRCU and the various Tasks RCU flavors. Please note that this macro should not be backported to any Linux-kernel version preceding v5.0 due to changes in synchronize_rcu() semantics prior to that version.”h]”hX®This is similar to rcu_dereference_check(), but allows protection by all forms of vanilla RCU readers, including preemption disabled, bh-disabled, and interrupt-disabled regions of code. Note that “vanilla RCUâ€� excludes SRCU and the various Tasks RCU flavors. Please note that this macro should not be backported to any Linux-kernel version preceding v5.0 due to changes in synchronize_rcu() semantics prior to that version.”…”�”}”(hjèëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M½hj9ëubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#rcu_dereference_protected (C macro)”Œc.rcu_dereference_protected”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_dereference_protected”h]”j)�”}”(hŒrcu_dereference_protected”h]”j{)�”}”(hŒrcu_dereference_protected”h]”j�)�”}”(hjìh]”hŒrcu_dereference_protected”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjìh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÖubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjìh²hh³j.ìh´MÖubah}”(h]”j ìah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j.ìh´MÖhj ìh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj ìh²hh³j.ìh´MÖubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjGìjæjGìjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ$``rcu_dereference_protected (p, c)``”h]”j)�”}”(hjMìh]”hŒ rcu_dereference_protected (p, c)”…”�”}”(hjOìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MØhjôÖh²hubj•)�”}”(hŒ)fetch RCU pointer when updates prevented ”h]”hÝ)�”}”(hŒ(fetch RCU pointer when updates prevented”h]”hŒ(fetch RCU pointer when updates prevented”…”�”}”(hjgìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÖhjcìubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³juìh´MÖhjôÖh²hubjë)�”}”(hX¯**Parameters** ``p`` The pointer to read, prior to dereferencing ``c`` The conditions under which the dereference will take place **Description** Return the value of the specified RCU-protected pointer, but omit the READ_ONCE(). This is useful in cases where update-side locks prevent the value of the pointer from changing. Please note that this primitive does *not* prevent the compiler from repeating this reference or combining it with other references, so it should not be used without protection of appropriate locks. This function is only for update-side use. Using this function when protected only by rcu_read_lock() will result in infrequent but very ugly failures.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‚ìh]”hŒ Parameters”…”�”}”(hj„ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÚhj|ìubj )�”}”(hhh]”(j)�”}”(hŒ2``p`` The pointer to read, prior to dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj¡ìh]”hŒp”…”�”}”(hj£ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M×hj›ìubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The pointer to read, prior to dereferencing”h]”hŒ+The pointer to read, prior to dereferencing”…”�”}”(hjºìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶ìh´M×hj·ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶ìh´M×hj˜ìubj)�”}”(hŒA``c`` The conditions under which the dereference will take place ”h]”(j)�”}”(hŒ``c``”h]”j)�”}”(hjÚìh]”hŒc”…”�”}”(hjÜìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MØhjÔìubj2)�”}”(hhh]”hÝ)�”}”(hŒ:The conditions under which the dereference will take place”h]”hŒ:The conditions under which the dereference will take place”…”�”}”(hjóìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïìh´MØhjðìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïìh´MØhj˜ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj|ìubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjíh]”hŒ Description”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÚhj|ìubhÝ)�”}”(hX{Return the value of the specified RCU-protected pointer, but omit the READ_ONCE(). This is useful in cases where update-side locks prevent the value of the pointer from changing. Please note that this primitive does *not* prevent the compiler from repeating this reference or combining it with other references, so it should not be used without protection of appropriate locks.”h]”(hŒÚReturn the value of the specified RCU-protected pointer, but omit the READ_ONCE(). This is useful in cases where update-side locks prevent the value of the pointer from changing. Please note that this primitive does ”…”�”}”(hj+íh²hh³Nh´Nubjp‡)�”}”(hŒ*not*”h]”hŒnot”…”�”}”(hj3íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj+íubhŒœ prevent the compiler from repeating this reference or combining it with other references, so it should not be used without protection of appropriate locks.”…”�”}”(hj+íh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÙhj|ìubhÝ)�”}”(hŒ˜This function is only for update-side use. Using this function when protected only by rcu_read_lock() will result in infrequent but very ugly failures.”h]”hŒ˜This function is only for update-side use. Using this function when protected only by rcu_read_lock() will result in infrequent but very ugly failures.”…”�”}”(hjLíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Màhj|ìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_dereference (C macro)”Œc.rcu_dereference”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_dereference”h]”j)�”}”(hŒrcu_dereference”h]”j{)�”}”(hŒrcu_dereference”h]”j�)�”}”(hjuíh]”hŒrcu_dereference”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{íubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjwíh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mêubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjsíh²hh³j’íh´Mêubah}”(h]”jníah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j’íh´Mêhjpíh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjpíh²hh³j’íh´Mêubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj«íjæj«íjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``rcu_dereference (p)``”h]”j)�”}”(hj±íh]”hŒrcu_dereference (p)”…”�”}”(hj³íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¯íubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MìhjôÖh²hubj•)�”}”(hŒ.fetch RCU-protected pointer for dereferencing ”h]”hÝ)�”}”(hŒ-fetch RCU-protected pointer for dereferencing”h]”hŒ-fetch RCU-protected pointer for dereferencing”…”�”}”(hjËíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MêhjÇíubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÙíh´MêhjôÖh²hubjë)�”}”(hŒŽ**Parameters** ``p`` The pointer to read, prior to dereferencing **Description** This is a simple wrapper around rcu_dereference_check().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjæíh]”hŒ Parameters”…”�”}”(hjèíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjäíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mîhjàíubj )�”}”(hhh]”j)�”}”(hŒ2``p`` The pointer to read, prior to dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjîh]”hŒp”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mëhjÿíubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The pointer to read, prior to dereferencing”h]”hŒ+The pointer to read, prior to dereferencing”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jîh´Mëhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÿíubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîh´Mëhjüíubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjàíubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj@îh]”hŒ Description”…”�”}”(hjBîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MíhjàíubhÝ)�”}”(hŒ8This is a simple wrapper around rcu_dereference_check().”h]”hŒ8This is a simple wrapper around rcu_dereference_check().”…”�”}”(hjVîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mìhjàíubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_dereference_bh (C macro)”Œc.rcu_dereference_bh”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_dereference_bh”h]”j)�”}”(hŒrcu_dereference_bh”h]”j{)�”}”(hŒrcu_dereference_bh”h]”j�)�”}”(hjîh]”hŒrcu_dereference_bh”…”�”}”(hj‰îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…îubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�îh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mòubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj}îh²hh³jœîh´Mòubah}”(h]”jxîah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jœîh´Mòhjzîh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjzîh²hh³jœîh´Mòubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjµîjæjµîjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``rcu_dereference_bh (p)``”h]”j)�”}”(hj»îh]”hŒrcu_dereference_bh (p)”…”�”}”(hj½îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MôhjôÖh²hubj•)�”}”(hŒ4fetch an RCU-bh-protected pointer for dereferencing ”h]”hÝ)�”}”(hŒ3fetch an RCU-bh-protected pointer for dereferencing”h]”hŒ3fetch an RCU-bh-protected pointer for dereferencing”…”�”}”(hjÕîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MòhjÑîubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jãîh´MòhjôÖh²hubjë)�”}”(hŒ†**Parameters** ``p`` The pointer to read, prior to dereferencing **Description** Makes rcu_dereference_check() do the dirty work.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjðîh]”hŒ Parameters”…”�”}”(hjòîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjîîubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Möhjêîubj )�”}”(hhh]”j)�”}”(hŒ2``p`` The pointer to read, prior to dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjïh]”hŒp”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Móhj ïubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The pointer to read, prior to dereferencing”h]”hŒ+The pointer to read, prior to dereferencing”…”�”}”(hj(ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j$ïh´Móhj%ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$ïh´Móhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjêîubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjJïh]”hŒ Description”…”�”}”(hjLïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjHïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MõhjêîubhÝ)�”}”(hŒ0Makes rcu_dereference_check() do the dirty work.”h]”hŒ0Makes rcu_dereference_check() do the dirty work.”…”�”}”(hj`ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Môhjêîubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_dereference_sched (C macro)”Œc.rcu_dereference_sched”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_dereference_sched”h]”j)�”}”(hŒrcu_dereference_sched”h]”j{)�”}”(hŒrcu_dereference_sched”h]”j�)�”}”(hj‰ïh]”hŒrcu_dereference_sched”…”�”}”(hj“ïh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ïubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‹ïh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Múubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‡ïh²hh³j¦ïh´Múubah}”(h]”j‚ïah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¦ïh´Múhj„ïh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj„ïh²hh³j¦ïh´Múubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj¿ïjæj¿ïjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``rcu_dereference_sched (p)``”h]”j)�”}”(hjÅïh]”hŒrcu_dereference_sched (p)”…”�”}”(hjÇïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MühjôÖh²hubj•)�”}”(hŒ4fetch RCU-sched-protected pointer for dereferencing ”h]”hÝ)�”}”(hŒ3fetch RCU-sched-protected pointer for dereferencing”h]”hŒ3fetch RCU-sched-protected pointer for dereferencing”…”�”}”(hjßïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MúhjÛïubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jíïh´MúhjôÖh²hubjë)�”}”(hŒ†**Parameters** ``p`` The pointer to read, prior to dereferencing **Description** Makes rcu_dereference_check() do the dirty work.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjúïh]”hŒ Parameters”…”�”}”(hjüïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mþhjôïubj )�”}”(hhh]”j)�”}”(hŒ2``p`` The pointer to read, prior to dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjðh]”hŒp”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mûhjðubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The pointer to read, prior to dereferencing”h]”hŒ+The pointer to read, prior to dereferencing”…”�”}”(hj2ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.ðh´Mûhj/ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.ðh´Mûhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjôïubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjTðh]”hŒ Description”…”�”}”(hjVðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MýhjôïubhÝ)�”}”(hŒ0Makes rcu_dereference_check() do the dirty work.”h]”hŒ0Makes rcu_dereference_check() do the dirty work.”…”�”}”(hjjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mühjôïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_dereference_all (C macro)”Œc.rcu_dereference_all”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_dereference_all”h]”j)�”}”(hŒrcu_dereference_all”h]”j{)�”}”(hŒrcu_dereference_all”h]”j�)�”}”(hj“ðh]”hŒrcu_dereference_all”…”�”}”(hj�ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj™ðubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj•ðh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‘ðh²hh³j°ðh´Mubah}”(h]”jŒðah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j°ðh´MhjŽðh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŽðh²hh³j°ðh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÉðjæjÉðjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``rcu_dereference_all (p)``”h]”j)�”}”(hjÏðh]”hŒrcu_dereference_all (p)”…”�”}”(hjÑðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÍðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjôÖh²hubj•)�”}”(hŒ2fetch RCU-all-protected pointer for dereferencing ”h]”hÝ)�”}”(hŒ1fetch RCU-all-protected pointer for dereferencing”h]”hŒ1fetch RCU-all-protected pointer for dereferencing”…”�”}”(hjéðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjåðubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j÷ðh´MhjôÖh²hubjë)�”}”(hŒ†**Parameters** ``p`` The pointer to read, prior to dereferencing **Description** Makes rcu_dereference_check() do the dirty work.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjñh]”hŒ Parameters”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjþðubj )�”}”(hhh]”j)�”}”(hŒ2``p`` The pointer to read, prior to dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj#ñh]”hŒp”…”�”}”(hj%ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjñubj2)�”}”(hhh]”hÝ)�”}”(hŒ+The pointer to read, prior to dereferencing”h]”hŒ+The pointer to read, prior to dereferencing”…”�”}”(hj<ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j8ñh´Mhj9ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8ñh´Mhjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjþðubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj^ñh]”hŒ Description”…”�”}”(hj`ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjþðubhÝ)�”}”(hŒ0Makes rcu_dereference_check() do the dirty work.”h]”hŒ0Makes rcu_dereference_check() do the dirty work.”…”�”}”(hjtñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjþðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_pointer_handoff (C macro)”Œc.rcu_pointer_handoff”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_pointer_handoff”h]”j)�”}”(hŒrcu_pointer_handoff”h]”j{)�”}”(hŒrcu_pointer_handoff”h]”j�)�”}”(hj�ñh]”hŒrcu_pointer_handoff”…”�”}”(hj§ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ñubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŸñh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj›ñh²hh³jºñh´M ubah}”(h]”j–ñah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jºñh´M hj˜ñh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj˜ñh²hh³jºñh´M ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÓñjæjÓñjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``rcu_pointer_handoff (p)``”h]”j)�”}”(hjÙñh]”hŒrcu_pointer_handoff (p)”…”�”}”(hjÛñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hjôÖh²hubj•)�”}”(hŒ/Hand off a pointer from RCU to other mechanism ”h]”hÝ)�”}”(hŒ.Hand off a pointer from RCU to other mechanism”h]”hŒ.Hand off a pointer from RCU to other mechanism”…”�”}”(hjóñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hjïñubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jòh´M hjôÖh²hubjë)�”}”(hXk**Parameters** ``p`` The pointer to hand off **Description** This is simply an identity function, but it documents where a pointer is handed off from RCU to some other synchronization mechanism, for example, reference counting or locking. In C11, it would map to kill_dependency(). It could be used as follows:: rcu_read_lock(); p = rcu_dereference(gp); long_lived = is_long_lived(p); if (long_lived) { if (!atomic_inc_not_zero(p->refcnt)) long_lived = false; else p = rcu_pointer_handoff(p); } rcu_read_unlock();”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjòh]”hŒ Parameters”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjòubj )�”}”(hhh]”j)�”}”(hŒ``p`` The pointer to hand off ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj-òh]”hŒp”…”�”}”(hj/òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+òubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hj'òubj2)�”}”(hhh]”hÝ)�”}”(hŒThe pointer to hand off”h]”hŒThe pointer to hand off”…”�”}”(hjFòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jBòh´M hjCòubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj'òubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jBòh´M hj$òubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjòubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjhòh]”hŒ Description”…”�”}”(hjjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfòubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hjòubhÝ)�”}”(hŒüThis is simply an identity function, but it documents where a pointer is handed off from RCU to some other synchronization mechanism, for example, reference counting or locking. In C11, it would map to kill_dependency(). It could be used as follows::”h]”hŒûThis is simply an identity function, but it documents where a pointer is handed off from RCU to some other synchronization mechanism, for example, reference counting or locking. In C11, it would map to kill_dependency(). It could be used as follows:”…”�”}”(hj~òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hjòubj‘H)�”}”(hŒùrcu_read_lock(); p = rcu_dereference(gp); long_lived = is_long_lived(p); if (long_lived) { if (!atomic_inc_not_zero(p->refcnt)) long_lived = false; else p = rcu_pointer_handoff(p); } rcu_read_unlock();”h]”hŒùrcu_read_lock(); p = rcu_dereference(gp); long_lived = is_long_lived(p); if (long_lived) { if (!atomic_inc_not_zero(p->refcnt)) long_lived = false; else p = rcu_pointer_handoff(p); } rcu_read_unlock();”…”�”}”hj�òsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjòubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_read_lock (C function)”Œc.rcu_read_lock”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_read_lock (void)”h]”j)�”}”(hŒvoid rcu_read_lock(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¼òh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¸òh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËòh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸òh²hh³jÊòh´M ubj{)�”}”(hŒ rcu_read_lock”h]”j�)�”}”(hŒ rcu_read_lock”h]”hŒ rcu_read_lock”…”�”}”(hjÝòh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÙòubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¸òh²hh³jÊòh´M ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjùòh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjõòubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjñòubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¸òh²hh³jÊòh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj´òh²hh³jÊòh´M ubah}”(h]”j¯òah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÊòh´M hj±òh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7mark the beginning of an RCU read-side critical section”h]”hŒ7mark the beginning of an RCU read-side critical section”…”�”}”(hj#óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hj óh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj±òh²hh³jÊòh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj;ójæj;ójç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX **Parameters** ``void`` no arguments **Description** When synchronize_rcu() is invoked on one CPU while other CPUs are within RCU read-side critical sections, then the synchronize_rcu() is guaranteed to block until after all the other CPUs exit their critical sections. Similarly, if call_rcu() is invoked on one CPU while other CPUs are within RCU read-side critical sections, invocation of the corresponding RCU callback is deferred until after the all the other CPUs exit their critical sections. Both synchronize_rcu() and call_rcu() also wait for regions of code with preemption disabled, including regions of code with interrupts or softirqs disabled. Note, however, that RCU callbacks are permitted to run concurrently with new RCU read-side critical sections. One way that this can happen is via the following sequence of events: (1) CPU 0 enters an RCU read-side critical section, (2) CPU 1 invokes call_rcu() to register an RCU callback, (3) CPU 0 exits the RCU read-side critical section, (4) CPU 2 enters a RCU read-side critical section, (5) the RCU callback is invoked. This is legal, because the RCU read-side critical section that was running concurrently with the call_rcu() (and which therefore might be referencing something that the corresponding RCU callback would free up) has completed before the corresponding RCU callback is invoked. RCU read-side critical sections may be nested. Any deferred actions will be deferred until the outermost RCU read-side critical section completes. You can avoid reading and understanding the next paragraph by following this rule: don't put anything in an rcu_read_lock() RCU read-side critical section that would block in a !PREEMPTION kernel. But if you want the full story, read on! In non-preemptible RCU implementations (pure TREE_RCU and TINY_RCU), it is illegal to block while in an RCU read-side critical section. In preemptible RCU implementations (PREEMPT_RCU) in CONFIG_PREEMPTION kernel builds, RCU read-side critical sections may be preempted, but explicit blocking is illegal. Finally, in preemptible RCU implementations in real-time (with -rt patchset) kernel builds, RCU read-side critical sections may be preempted and they may also block, but only when acquiring spinlocks that are subject to priority inheritance.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjEóh]”hŒ Parameters”…”�”}”(hjGóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjCóubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M$hj?óubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjdóh]”hŒvoid”…”�”}”(hjfóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjbóubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Khj^óubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj}óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jyóh´Khjzóubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^óubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jyóh´Khj[óubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj?óubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŸóh]”hŒ Description”…”�”}”(hj¡óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�óubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Khj?óubhÝ)�”}”(hX¿When synchronize_rcu() is invoked on one CPU while other CPUs are within RCU read-side critical sections, then the synchronize_rcu() is guaranteed to block until after all the other CPUs exit their critical sections. Similarly, if call_rcu() is invoked on one CPU while other CPUs are within RCU read-side critical sections, invocation of the corresponding RCU callback is deferred until after the all the other CPUs exit their critical sections.”h]”hX¿When synchronize_rcu() is invoked on one CPU while other CPUs are within RCU read-side critical sections, then the synchronize_rcu() is guaranteed to block until after all the other CPUs exit their critical sections. Similarly, if call_rcu() is invoked on one CPU while other CPUs are within RCU read-side critical sections, invocation of the corresponding RCU callback is deferred until after the all the other CPUs exit their critical sections.”…”�”}”(hjµóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M!hj?óubhÝ)�”}”(hŒ�Both synchronize_rcu() and call_rcu() also wait for regions of code with preemption disabled, including regions of code with interrupts or softirqs disabled.”h]”hŒ�Both synchronize_rcu() and call_rcu() also wait for regions of code with preemption disabled, including regions of code with interrupts or softirqs disabled.”…”�”}”(hjÄóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M)hj?óubhÝ)�”}”(hX¾Note, however, that RCU callbacks are permitted to run concurrently with new RCU read-side critical sections. One way that this can happen is via the following sequence of events: (1) CPU 0 enters an RCU read-side critical section, (2) CPU 1 invokes call_rcu() to register an RCU callback, (3) CPU 0 exits the RCU read-side critical section, (4) CPU 2 enters a RCU read-side critical section, (5) the RCU callback is invoked. This is legal, because the RCU read-side critical section that was running concurrently with the call_rcu() (and which therefore might be referencing something that the corresponding RCU callback would free up) has completed before the corresponding RCU callback is invoked.”h]”hX¾Note, however, that RCU callbacks are permitted to run concurrently with new RCU read-side critical sections. One way that this can happen is via the following sequence of events: (1) CPU 0 enters an RCU read-side critical section, (2) CPU 1 invokes call_rcu() to register an RCU callback, (3) CPU 0 exits the RCU read-side critical section, (4) CPU 2 enters a RCU read-side critical section, (5) the RCU callback is invoked. This is legal, because the RCU read-side critical section that was running concurrently with the call_rcu() (and which therefore might be referencing something that the corresponding RCU callback would free up) has completed before the corresponding RCU callback is invoked.”…”�”}”(hjÓóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M-hj?óubhÝ)�”}”(hŒ“RCU read-side critical sections may be nested. Any deferred actions will be deferred until the outermost RCU read-side critical section completes.”h]”hŒ“RCU read-side critical sections may be nested. Any deferred actions will be deferred until the outermost RCU read-side critical section completes.”…”�”}”(hjâóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M9hj?óubhÝ)�”}”(hŒíYou can avoid reading and understanding the next paragraph by following this rule: don't put anything in an rcu_read_lock() RCU read-side critical section that would block in a !PREEMPTION kernel. But if you want the full story, read on!”h]”hŒïYou can avoid reading and understanding the next paragraph by following this rule: don’t put anything in an rcu_read_lock() RCU read-side critical section that would block in a !PREEMPTION kernel. But if you want the full story, read on!”…”�”}”(hjñóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M=hj?óubhÝ)�”}”(hX#In non-preemptible RCU implementations (pure TREE_RCU and TINY_RCU), it is illegal to block while in an RCU read-side critical section. In preemptible RCU implementations (PREEMPT_RCU) in CONFIG_PREEMPTION kernel builds, RCU read-side critical sections may be preempted, but explicit blocking is illegal. Finally, in preemptible RCU implementations in real-time (with -rt patchset) kernel builds, RCU read-side critical sections may be preempted and they may also block, but only when acquiring spinlocks that are subject to priority inheritance.”h]”hX#In non-preemptible RCU implementations (pure TREE_RCU and TINY_RCU), it is illegal to block while in an RCU read-side critical section. In preemptible RCU implementations (PREEMPT_RCU) in CONFIG_PREEMPTION kernel builds, RCU read-side critical sections may be preempted, but explicit blocking is illegal. Finally, in preemptible RCU implementations in real-time (with -rt patchset) kernel builds, RCU read-side critical sections may be preempted and they may also block, but only when acquiring spinlocks that are subject to priority inheritance.”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MBhj?óubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_read_unlock (C function)”Œc.rcu_read_unlock”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_read_unlock (void)”h]”j)�”}”(hŒvoid rcu_read_unlock(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj/ôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj+ôh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Maubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>ôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+ôh²hh³j=ôh´Maubj{)�”}”(hŒrcu_read_unlock”h]”j�)�”}”(hŒrcu_read_unlock”h]”hŒrcu_read_unlock”…”�”}”(hjPôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLôubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj+ôh²hh³j=ôh´Maubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjlôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjhôubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjdôubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj+ôh²hh³j=ôh´Maubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj'ôh²hh³j=ôh´Maubah}”(h]”j"ôah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j=ôh´Mahj$ôh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3marks the end of an RCU read-side critical section.”h]”hŒ3marks the end of an RCU read-side critical section.”…”�”}”(hj–ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mahj“ôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj$ôh²hh³j=ôh´Maubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj®ôjæj®ôjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX†**Parameters** ``void`` no arguments **Description** In almost all situations, rcu_read_unlock() is immune from deadlock. This deadlock immunity also extends to the scheduler's runqueue and priority-inheritance spinlocks, courtesy of the quiescent-state deferral that is carried out when rcu_read_unlock() is invoked with interrupts disabled. See rcu_read_lock() for more information.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¸ôh]”hŒ Parameters”…”�”}”(hjºôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mehj²ôubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj×ôh]”hŒvoid”…”�”}”(hjÙôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KhjÑôubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjðôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jìôh´Khjíôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑôubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jìôh´KhjÎôubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj²ôubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjõh]”hŒ Description”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Khj²ôubhÝ)�”}”(hX!In almost all situations, rcu_read_unlock() is immune from deadlock. This deadlock immunity also extends to the scheduler's runqueue and priority-inheritance spinlocks, courtesy of the quiescent-state deferral that is carried out when rcu_read_unlock() is invoked with interrupts disabled.”h]”hX#In almost all situations, rcu_read_unlock() is immune from deadlock. This deadlock immunity also extends to the scheduler’s runqueue and priority-inheritance spinlocks, courtesy of the quiescent-state deferral that is carried out when rcu_read_unlock() is invoked with interrupts disabled.”…”�”}”(hj(õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mbhj²ôubhÝ)�”}”(hŒ)See rcu_read_lock() for more information.”h]”hŒ)See rcu_read_lock() for more information.”…”�”}”(hj7õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhhj²ôubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_read_lock_bh (C function)”Œc.rcu_read_lock_bh”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_read_lock_bh (void)”h]”j)�”}”(hŒvoid rcu_read_lock_bh(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjfõh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjbõh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mvubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjbõh²hh³jtõh´Mvubj{)�”}”(hŒrcu_read_lock_bh”h]”j�)�”}”(hŒrcu_read_lock_bh”h]”hŒrcu_read_lock_bh”…”�”}”(hj‡õh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒõubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjbõh²hh³jtõh´Mvubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj£õh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŸõubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj›õubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjbõh²hh³jtõh´Mvubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj^õh²hh³jtõh´Mvubah}”(h]”jYõah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jtõh´Mvhj[õh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0mark the beginning of an RCU-bh critical section”h]”hŒ0mark the beginning of an RCU-bh critical section”…”�”}”(hjÍõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”•h´MvhjÊõh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj[õh²hh³jtõh´Mvubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjåõjæjåõjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXb**Parameters** ``void`` no arguments **Description** This is equivalent to rcu_read_lock(), but also disables softirqs. Note that anything else that disables softirqs can also serve as an RCU read-side critical section. However, please note that this equivalence applies only to v5.0 and later. Before v5.0, rcu_read_lock() and rcu_read_lock_bh() were unrelated. Note that rcu_read_lock_bh() and the matching rcu_read_unlock_bh() must occur in the same context, for example, it is illegal to invoke rcu_read_unlock_bh() from one task if the matching rcu_read_lock_bh() was invoked from some other task.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjïõh]”hŒ Parameters”…”�”}”(hjñõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjíõubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mzhjéõubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjöh]”hŒvoid”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj öubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Khjöubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj'öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j#öh´Khj$öubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjöubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#öh´Khjöubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjéõubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjIöh]”hŒ Description”…”�”}”(hjKöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjGöubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KhjéõubhÝ)�”}”(hX7This is equivalent to rcu_read_lock(), but also disables softirqs. Note that anything else that disables softirqs can also serve as an RCU read-side critical section. However, please note that this equivalence applies only to v5.0 and later. Before v5.0, rcu_read_lock() and rcu_read_lock_bh() were unrelated.”h]”hX7This is equivalent to rcu_read_lock(), but also disables softirqs. Note that anything else that disables softirqs can also serve as an RCU read-side critical section. However, please note that this equivalence applies only to v5.0 and later. Before v5.0, rcu_read_lock() and rcu_read_lock_bh() were unrelated.”…”�”}”(hj_öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MwhjéõubhÝ)�”}”(hŒïNote that rcu_read_lock_bh() and the matching rcu_read_unlock_bh() must occur in the same context, for example, it is illegal to invoke rcu_read_unlock_bh() from one task if the matching rcu_read_lock_bh() was invoked from some other task.”h]”hŒïNote that rcu_read_lock_bh() and the matching rcu_read_unlock_bh() must occur in the same context, for example, it is illegal to invoke rcu_read_unlock_bh() from one task if the matching rcu_read_lock_bh() was invoked from some other task.”…”�”}”(hjnöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M}hjéõubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_read_unlock_bh (C function)”Œc.rcu_read_unlock_bh”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_read_unlock_bh (void)”h]”j)�”}”(hŒvoid rcu_read_unlock_bh(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj�öh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj™öh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬öh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj™öh²hh³j«öh´M�ubj{)�”}”(hŒrcu_read_unlock_bh”h]”j�)�”}”(hŒrcu_read_unlock_bh”h]”hŒrcu_read_unlock_bh”…”�”}”(hj¾öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjºöubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj™öh²hh³j«öh´M�ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÚöh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÖöubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÒöubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj™öh²hh³j«öh´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj•öh²hh³j«öh´M�ubah}”(h]”j�öah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j«öh´M�hj’öh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4marks the end of a softirq-only RCU critical section”h]”hŒ4marks the end of a softirq-only RCU critical section”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M�hj÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj’öh²hh³j«öh´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj÷jæj÷jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒf**Parameters** ``void`` no arguments **Description** See rcu_read_lock_bh() for more information.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj&÷h]”hŒ Parameters”…”�”}”(hj(÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj$÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M“hj ÷ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjE÷h]”hŒvoid”…”�”}”(hjG÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjC÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Khj?÷ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj^÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jZ÷h´Khj[÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj?÷ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jZ÷h´Khj<÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ÷ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj€÷h]”hŒ Description”…”�”}”(hj‚÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Khj ÷ubhÝ)�”}”(hŒ,See rcu_read_lock_bh() for more information.”h]”hŒ,See rcu_read_lock_bh() for more information.”…”�”}”(hj–÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M�hj ÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ rcu_read_lock_sched (C function)”Œc.rcu_read_lock_sched”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_read_lock_sched (void)”h]”j)�”}”(hŒvoid rcu_read_lock_sched(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÅ÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÁ÷h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MŸubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÁ÷h²hh³jÓ÷h´MŸubj{)�”}”(hŒrcu_read_lock_sched”h]”j�)�”}”(hŒrcu_read_lock_sched”h]”hŒrcu_read_lock_sched”…”�”}”(hjæ÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâ÷ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÁ÷h²hh³jÓ÷h´MŸubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþ÷ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjú÷ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÁ÷h²hh³jÓ÷h´MŸubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj½÷h²hh³jÓ÷h´MŸubah}”(h]”j¸÷ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÓ÷h´MŸhjº÷h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ2mark the beginning of a RCU-sched critical section”h]”hŒ2mark the beginning of a RCU-sched critical section”…”�”}”(hj,øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MŸhj)øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjº÷h²hh³jÓ÷h´MŸubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjDøjæjDøjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX°**Parameters** ``void`` no arguments **Description** This is equivalent to rcu_read_lock(), but also disables preemption. Read-side critical sections can also be introduced by anything else that disables preemption, including local_irq_disable() and friends. However, please note that the equivalence to rcu_read_lock() applies only to v5.0 and later. Before v5.0, rcu_read_lock() and rcu_read_lock_sched() were unrelated. Note that rcu_read_lock_sched() and the matching rcu_read_unlock_sched() must occur in the same context, for example, it is illegal to invoke rcu_read_unlock_sched() from process context if the matching rcu_read_lock_sched() was invoked from an NMI handler.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjNøh]”hŒ Parameters”…”�”}”(hjPøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjLøubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M£hjHøubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjmøh]”hŒvoid”…”�”}”(hjoøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkøubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Khjgøubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj†øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‚øh´Khjƒøubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjgøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚øh´Khjdøubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjHøubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¨øh]”hŒ Description”…”�”}”(hjªøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¦øubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KhjHøubhÝ)�”}”(hXsThis is equivalent to rcu_read_lock(), but also disables preemption. Read-side critical sections can also be introduced by anything else that disables preemption, including local_irq_disable() and friends. However, please note that the equivalence to rcu_read_lock() applies only to v5.0 and later. Before v5.0, rcu_read_lock() and rcu_read_lock_sched() were unrelated.”h]”hXsThis is equivalent to rcu_read_lock(), but also disables preemption. Read-side critical sections can also be introduced by anything else that disables preemption, including local_irq_disable() and friends. However, please note that the equivalence to rcu_read_lock() applies only to v5.0 and later. Before v5.0, rcu_read_lock() and rcu_read_lock_sched() were unrelated.”…”�”}”(hj¾øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hjHøubhÝ)�”}”(hXNote that rcu_read_lock_sched() and the matching rcu_read_unlock_sched() must occur in the same context, for example, it is illegal to invoke rcu_read_unlock_sched() from process context if the matching rcu_read_lock_sched() was invoked from an NMI handler.”h]”hXNote that rcu_read_lock_sched() and the matching rcu_read_unlock_sched() must occur in the same context, for example, it is illegal to invoke rcu_read_unlock_sched() from process context if the matching rcu_read_lock_sched() was invoked from an NMI handler.”…”�”}”(hjÍøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M§hjHøubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"rcu_read_unlock_sched (C function)”Œc.rcu_read_unlock_sched”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ!void rcu_read_unlock_sched (void)”h]”j)�”}”(hŒ void rcu_read_unlock_sched(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjüøh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjøøh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÂubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøøh²hh³j ùh´MÂubj{)�”}”(hŒrcu_read_unlock_sched”h]”j�)�”}”(hŒrcu_read_unlock_sched”h]”hŒrcu_read_unlock_sched”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjùubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjøøh²hh³j ùh´MÂubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj9ùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj5ùubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj1ùubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjøøh²hh³j ùh´MÂubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjôøh²hh³j ùh´MÂubah}”(h]”jïøah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j ùh´MÂhjñøh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/marks the end of a RCU-classic critical section”h]”hŒ/marks the end of a RCU-classic critical section”…”�”}”(hjcùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÂhj`ùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjñøh²hh³j ùh´MÂubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj{ùjæj{ùjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒi**Parameters** ``void`` no arguments **Description** See rcu_read_lock_sched() for more information.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj…ùh]”hŒ Parameters”…”�”}”(hj‡ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÆhjùubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj¤ùh]”hŒvoid”…”�”}”(hj¦ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢ùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Khjžùubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj½ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¹ùh´Khjºùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjžùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¹ùh´Khj›ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjùubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjßùh]”hŒ Description”…”�”}”(hjáùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÝùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´KhjùubhÝ)�”}”(hŒ/See rcu_read_lock_sched() for more information.”h]”hŒ/See rcu_read_lock_sched() for more information.”…”�”}”(hjõùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MÃhjùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j ŒRCU_INIT_POINTER (C macro)”Œc.RCU_INIT_POINTER”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRCU_INIT_POINTER”h]”j)�”}”(hŒRCU_INIT_POINTER”h]”j{)�”}”(hŒRCU_INIT_POINTER”h]”j�)�”}”(hjúh]”hŒRCU_INIT_POINTER”…”�”}”(hj(úh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$úubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj úh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mëubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjúh²hh³j;úh´Mëubah}”(h]”júah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j;úh´Mëhjúh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjúh²hh³j;úh´Mëubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjTújæjTújç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``RCU_INIT_POINTER (p, v)``”h]”j)�”}”(hjZúh]”hŒRCU_INIT_POINTER (p, v)”…”�”}”(hj\úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXúubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MíhjôÖh²hubj•)�”}”(hŒ$initialize an RCU protected pointer ”h]”hÝ)�”}”(hŒ#initialize an RCU protected pointer”h]”hŒ#initialize an RCU protected pointer”…”�”}”(hjtúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mëhjpúubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j‚úh´MëhjôÖh²hubjë)�”}”(hX<**Parameters** ``p`` The pointer to be initialized. ``v`` The value to initialized the pointer to. **Description** Initialize an RCU-protected pointer in special cases where readers do not need ordering constraints on the CPU or the compiler. These special cases are: 1. This use of RCU_INIT_POINTER() is NULLing out the pointer *or* 2. The caller has taken whatever steps are required to prevent RCU readers from concurrently accessing this pointer *or* 3. The referenced data structure has already been exposed to readers either at compile time or via rcu_assign_pointer() *and* a. You have not made *any* reader-visible changes to this structure since then *or* b. It is OK for readers accessing this structure from its new location to see the old state of the structure. (For example, the changes were to statistical counters or to other state where exact synchronization is not required.) Failure to follow these rules governing use of RCU_INIT_POINTER() will result in impossible-to-diagnose memory corruption. As in the structures will look OK in crash dumps, but any concurrent RCU readers might see pre-initialized values of the referenced data structure. So please be very careful how you use RCU_INIT_POINTER()!!! If you are creating an RCU-protected linked structure that is accessed by a single external-to-structure RCU-protected pointer, then you may use RCU_INIT_POINTER() to initialize the internal RCU-protected pointers, but you must use rcu_assign_pointer() to initialize the external-to-structure pointer *after* you have completely initialized the reader-accessible portions of the linked structure. Note that unlike rcu_assign_pointer(), RCU_INIT_POINTER() provides no ordering guarantees for either the CPU or the compiler.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�úh]”hŒ Parameters”…”�”}”(hj‘úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�úubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mïhj‰úubj )�”}”(hhh]”(j)�”}”(hŒ%``p`` The pointer to be initialized. ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj®úh]”hŒp”…”�”}”(hj°úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬úubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mìhj¨úubj2)�”}”(hhh]”hÝ)�”}”(hŒThe pointer to be initialized.”h]”hŒThe pointer to be initialized.”…”�”}”(hjÇúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÃúh´MìhjÄúubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¨úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÃúh´Mìhj¥úubj)�”}”(hŒ/``v`` The value to initialized the pointer to. ”h]”(j)�”}”(hŒ``v``”h]”j)�”}”(hjçúh]”hŒv”…”�”}”(hjéúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjåúubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Míhjáúubj2)�”}”(hhh]”hÝ)�”}”(hŒ(The value to initialized the pointer to.”h]”hŒ(The value to initialized the pointer to.”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jüúh´Míhjýúubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjáúubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jüúh´Míhj¥úubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‰úubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj"ûh]”hŒ Description”…”�”}”(hj$ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mïhj‰úubhÝ)�”}”(hŒ™Initialize an RCU-protected pointer in special cases where readers do not need ordering constraints on the CPU or the compiler. These special cases are:”h]”hŒ™Initialize an RCU-protected pointer in special cases where readers do not need ordering constraints on the CPU or the compiler. These special cases are:”…”�”}”(hj8ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mîhj‰úubjM)�”}”(hhh]”(j )�”}”(hŒ>This use of RCU_INIT_POINTER() is NULLing out the pointer *or*”h]”hÝ)�”}”(hjLûh]”(hŒ:This use of RCU_INIT_POINTER() is NULLing out the pointer ”…”�”}”(hjNûh²hh³Nh´Nubjp‡)�”}”(hŒ*or*”h]”hŒor”…”�”}”(hjUûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hjNûubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MòhjJûubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjGûubj )�”}”(hŒuThe caller has taken whatever steps are required to prevent RCU readers from concurrently accessing this pointer *or*”h]”hÝ)�”}”(hŒuThe caller has taken whatever steps are required to prevent RCU readers from concurrently accessing this pointer *or*”h]”(hŒqThe caller has taken whatever steps are required to prevent RCU readers from concurrently accessing this pointer ”…”�”}”(hjtûh²hh³Nh´Nubjp‡)�”}”(hŒ*or*”h]”hŒor”…”�”}”(hj|ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hjtûubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Móhjpûubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjGûubj )�”}”(hXàThe referenced data structure has already been exposed to readers either at compile time or via rcu_assign_pointer() *and* a. You have not made *any* reader-visible changes to this structure since then *or* b. It is OK for readers accessing this structure from its new location to see the old state of the structure. (For example, the changes were to statistical counters or to other state where exact synchronization is not required.) ”h]”(hÝ)�”}”(hŒzThe referenced data structure has already been exposed to readers either at compile time or via rcu_assign_pointer() *and*”h]”(hŒuThe referenced data structure has already been exposed to readers either at compile time or via rcu_assign_pointer() ”…”�”}”(hj›ûh²hh³Nh´Nubjp‡)�”}”(hŒ*and*”h]”hŒand”…”�”}”(hj£ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj›ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mõhj—ûubjM)�”}”(hhh]”(j )�”}”(hŒPYou have not made *any* reader-visible changes to this structure since then *or*”h]”hÝ)�”}”(hŒPYou have not made *any* reader-visible changes to this structure since then *or*”h]”(hŒYou have not made ”…”�”}”(hj¿ûh²hh³Nh´Nubjp‡)�”}”(hŒ*any*”h]”hŒany”…”�”}”(hjÇûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj¿ûubhŒ5 reader-visible changes to this structure since then ”…”�”}”(hj¿ûh²hh³Nh´Nubjp‡)�”}”(hŒ*or*”h]”hŒor”…”�”}”(hjÙûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj¿ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Møhj»ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¸ûubj )�”}”(hŒãIt is OK for readers accessing this structure from its new location to see the old state of the structure. (For example, the changes were to statistical counters or to other state where exact synchronization is not required.) ”h]”hÝ)�”}”(hŒâIt is OK for readers accessing this structure from its new location to see the old state of the structure. (For example, the changes were to statistical counters or to other state where exact synchronization is not required.)”h]”hŒâIt is OK for readers accessing this structure from its new location to see the old state of the structure. (For example, the changes were to statistical counters or to other state where exact synchronization is not required.)”…”�”}”(hjøûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Múhjôûubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhj¸ûubeh}”(h]”h ]”h"]”h$]”h&]”j×MjàjÙMhjÚMjÛMuh1jMhj—ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjGûubeh}”(h]”h ]”h"]”h$]”h&]”j×MjØMjÙMhjÚMjÛMuh1jMhj‰úubhÝ)�”}”(hXLFailure to follow these rules governing use of RCU_INIT_POINTER() will result in impossible-to-diagnose memory corruption. As in the structures will look OK in crash dumps, but any concurrent RCU readers might see pre-initialized values of the referenced data structure. So please be very careful how you use RCU_INIT_POINTER()!!!”h]”hXLFailure to follow these rules governing use of RCU_INIT_POINTER() will result in impossible-to-diagnose memory corruption. As in the structures will look OK in crash dumps, but any concurrent RCU readers might see pre-initialized values of the referenced data structure. So please be very careful how you use RCU_INIT_POINTER()!!!”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mÿhj‰úubhÝ)�”}”(hXŒIf you are creating an RCU-protected linked structure that is accessed by a single external-to-structure RCU-protected pointer, then you may use RCU_INIT_POINTER() to initialize the internal RCU-protected pointers, but you must use rcu_assign_pointer() to initialize the external-to-structure pointer *after* you have completely initialized the reader-accessible portions of the linked structure.”h]”(hX-If you are creating an RCU-protected linked structure that is accessed by a single external-to-structure RCU-protected pointer, then you may use RCU_INIT_POINTER() to initialize the internal RCU-protected pointers, but you must use rcu_assign_pointer() to initialize the external-to-structure pointer ”…”�”}”(hj.üh²hh³Nh´Nubjp‡)�”}”(hŒ*after*”h]”hŒafter”…”�”}”(hj6üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj.üubhŒX you have completely initialized the reader-accessible portions of the linked structure.”…”�”}”(hj.üh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhj‰úubhÝ)�”}”(hŒ}Note that unlike rcu_assign_pointer(), RCU_INIT_POINTER() provides no ordering guarantees for either the CPU or the compiler.”h]”hŒ}Note that unlike rcu_assign_pointer(), RCU_INIT_POINTER() provides no ordering guarantees for either the CPU or the compiler.”…”�”}”(hjOüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M hj‰úubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!RCU_POINTER_INITIALIZER (C macro)”Œc.RCU_POINTER_INITIALIZER”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒRCU_POINTER_INITIALIZER”h]”j)�”}”(hŒRCU_POINTER_INITIALIZER”h]”j{)�”}”(hŒRCU_POINTER_INITIALIZER”h]”j�)�”}”(hjxüh]”hŒRCU_POINTER_INITIALIZER”…”�”}”(hj‚üh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj~üubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjzüh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjvüh²hh³j•üh´Mubah}”(h]”jqüah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j•üh´Mhjsüh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjsüh²hh³j•üh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj®üjæj®üjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ"``RCU_POINTER_INITIALIZER (p, v)``”h]”j)�”}”(hj´üh]”hŒRCU_POINTER_INITIALIZER (p, v)”…”�”}”(hj¶üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj²üubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjôÖh²hubj•)�”}”(hŒ/statically initialize an RCU protected pointer ”h]”hÝ)�”}”(hŒ.statically initialize an RCU protected pointer”h]”hŒ.statically initialize an RCU protected pointer”…”�”}”(hjÎüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjÊüubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÜüh´MhjôÖh²hubjë)�”}”(hŒÆ**Parameters** ``p`` The pointer to be initialized. ``v`` The value to initialized the pointer to. **Description** GCC-style initialization for an RCU-protected pointer in a structure field.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjéüh]”hŒ Parameters”…”�”}”(hjëüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjçüubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjãüubj )�”}”(hhh]”(j)�”}”(hŒ%``p`` The pointer to be initialized. ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjýh]”hŒp”…”�”}”(hj ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjýubj2)�”}”(hhh]”hÝ)�”}”(hŒThe pointer to be initialized.”h]”hŒThe pointer to be initialized.”…”�”}”(hj!ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jýh´Mhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jýh´Mhjÿüubj)�”}”(hŒ/``v`` The value to initialized the pointer to. ”h]”(j)�”}”(hŒ``v``”h]”j)�”}”(hjAýh]”hŒv”…”�”}”(hjCýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj?ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhj;ýubj2)�”}”(hhh]”hÝ)�”}”(hŒ(The value to initialized the pointer to.”h]”hŒ(The value to initialized the pointer to.”…”�”}”(hjZýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jVýh´MhjWýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj;ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jVýh´Mhjÿüubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjãüubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj|ýh]”hŒ Description”…”�”}”(hj~ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjzýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´MhjãüubhÝ)�”}”(hŒKGCC-style initialization for an RCU-protected pointer in a structure field.”h]”hŒKGCC-style initialization for an RCU-protected pointer in a structure field.”…”�”}”(hj’ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mhjãüubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œkfree_rcu (C macro)”Œ c.kfree_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ kfree_rcu”h]”j)�”}”(hŒ kfree_rcu”h]”j{)�”}”(hŒ kfree_rcu”h]”j�)�”}”(hj»ýh]”hŒ kfree_rcu”…”�”}”(hjÅýh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁýubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj½ýh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M!ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¹ýh²hh³jØýh´M!ubah}”(h]”j´ýah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jØýh´M!hj¶ýh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¶ýh²hh³jØýh´M!ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjñýjæjñýjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``kfree_rcu (ptr, rhf)``”h]”j)�”}”(hj÷ýh]”hŒkfree_rcu (ptr, rhf)”…”�”}”(hjùýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M#hjôÖh²hubj•)�”}”(hŒ&kfree an object after a grace period. ”h]”hÝ)�”}”(hŒ%kfree an object after a grace period.”h]”hŒ%kfree an object after a grace period.”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M!hj þubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jþh´M!hjôÖh²hubjë)�”}”(hX?**Parameters** ``ptr`` pointer to kfree for double-argument invocations. ``rhf`` the name of the struct rcu_head within the type of **ptr**. **Description** Many rcu callbacks functions just call kfree() on the base structure. These functions are trivial, but their size adds up, and furthermore when they are used in a kernel module, that module must invoke the high-latency rcu_barrier() function at module-unload time. The kfree_rcu() function handles this issue. In order to have a universal callback function handling different offsets of rcu_head, the callback needs to determine the starting address of the freed object, which can be a large kmalloc or vmalloc allocation. To allow simply aligning the pointer down to page boundary for those, only offsets up to 4095 bytes can be accommodated. If the offset is larger than 4095 bytes, a compile-time error will be generated in kvfree_rcu_arg_2(). If this error is triggered, you can either fall back to use of call_rcu() or rearrange the structure to position the rcu_head structure into the first 4096 bytes. The object to be freed can be allocated either by kmalloc(), kmalloc_nolock(), or kmem_cache_alloc(). Note that the allowable offset might decrease in the future. The BUILD_BUG_ON check must not involve any function calls, hence the checks are done in macros here.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj,þh]”hŒ Parameters”…”�”}”(hj.þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj*þubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M%hj&þubj )�”}”(hhh]”(j)�”}”(hŒ:``ptr`` pointer to kfree for double-argument invocations. ”h]”(j)�”}”(hŒ``ptr``”h]”j)�”}”(hjKþh]”hŒptr”…”�”}”(hjMþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIþubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M"hjEþubj2)�”}”(hhh]”hÝ)�”}”(hŒ1pointer to kfree for double-argument invocations.”h]”hŒ1pointer to kfree for double-argument invocations.”…”�”}”(hjdþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j`þh´M"hjaþubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjEþubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`þh´M"hjBþubj)�”}”(hŒD``rhf`` the name of the struct rcu_head within the type of **ptr**. ”h]”(j)�”}”(hŒ``rhf``”h]”j)�”}”(hj„þh]”hŒrhf”…”�”}”(hj†þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚þubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M#hj~þubj2)�”}”(hhh]”hÝ)�”}”(hŒ;the name of the struct rcu_head within the type of **ptr**.”h]”(hŒ3the name of the struct rcu_head within the type of ”…”�”}”(hj�þh²hh³Nh´Nubjõ)�”}”(hŒ**ptr**”h]”hŒptr”…”�”}”(hj¥þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�þubhŒ.”…”�”}”(hj�þh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™þh´M#hjšþubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~þubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™þh´M#hjBþubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj&þubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÑþh]”hŒ Description”…”�”}”(hjÓþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏþubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M%hj&þubhÝ)�”}”(hXMany rcu callbacks functions just call kfree() on the base structure. These functions are trivial, but their size adds up, and furthermore when they are used in a kernel module, that module must invoke the high-latency rcu_barrier() function at module-unload time.”h]”hXMany rcu callbacks functions just call kfree() on the base structure. These functions are trivial, but their size adds up, and furthermore when they are used in a kernel module, that module must invoke the high-latency rcu_barrier() function at module-unload time.”…”�”}”(hjçþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M$hj&þubhÝ)�”}”(hX„The kfree_rcu() function handles this issue. In order to have a universal callback function handling different offsets of rcu_head, the callback needs to determine the starting address of the freed object, which can be a large kmalloc or vmalloc allocation. To allow simply aligning the pointer down to page boundary for those, only offsets up to 4095 bytes can be accommodated. If the offset is larger than 4095 bytes, a compile-time error will be generated in kvfree_rcu_arg_2(). If this error is triggered, you can either fall back to use of call_rcu() or rearrange the structure to position the rcu_head structure into the first 4096 bytes.”h]”hX„The kfree_rcu() function handles this issue. In order to have a universal callback function handling different offsets of rcu_head, the callback needs to determine the starting address of the freed object, which can be a large kmalloc or vmalloc allocation. To allow simply aligning the pointer down to page boundary for those, only offsets up to 4095 bytes can be accommodated. If the offset is larger than 4095 bytes, a compile-time error will be generated in kvfree_rcu_arg_2(). If this error is triggered, you can either fall back to use of call_rcu() or rearrange the structure to position the rcu_head structure into the first 4096 bytes.”…”�”}”(hjöþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M)hj&þubhÝ)�”}”(hŒeThe object to be freed can be allocated either by kmalloc(), kmalloc_nolock(), or kmem_cache_alloc().”h]”hŒeThe object to be freed can be allocated either by kmalloc(), kmalloc_nolock(), or kmem_cache_alloc().”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M3hj&þubhÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjh²hh³j)h´M–ubj{)�”}”(hŒ rcu_head_init”h]”j�)�”}”(hŒ rcu_head_init”h]”hŒ rcu_head_init”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjh²hh³j)h´M–ubjœ)�”}”(hŒ(struct rcu_head *rhp)”h]”j¢)�”}”(hŒstruct rcu_head *rhp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjsubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jxŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j>sbŒc.rcu_head_init”†”asbuh1hhjTubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjTubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjTubj�)�”}”(hŒrhp”h]”hŒrhp”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjPubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³j)h´M–ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³j)h´M–ubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j)h´M–hjh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1Initialize rcu_head for rcu_head_after_call_rcu()”h]”hŒ1Initialize rcu_head for rcu_head_after_call_rcu()”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M–hjØh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³j)h´M–ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjójæjójç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX½**Parameters** ``struct rcu_head *rhp`` The rcu_head structure to initialize. **Description** If you intend to invoke rcu_head_after_call_rcu() to test whether a given rcu_head structure has already been passed to call_rcu(), then you must also invoke this rcu_head_init() function on it just after allocating that structure. Calls to this function must not race with calls to call_rcu(), rcu_head_after_call_rcu(), or callback invocation.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjýh]”hŒ Parameters”…”�”}”(hjÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´Mšhj÷ubj )�”}”(hhh]”j)�”}”(hŒ?``struct rcu_head *rhp`` The rcu_head structure to initialize. ”h]”(j)�”}”(hŒ``struct rcu_head *rhp``”h]”j)�”}”(hjh]”hŒstruct rcu_head *rhp”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M—hjubj2)�”}”(hhh]”hÝ)�”}”(hŒ%The rcu_head structure to initialize.”h]”hŒ%The rcu_head structure to initialize.”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j1h´M—hj2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j1h´M—hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj÷ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjWh]”hŒ Description”…”�”}”(hjYh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M™hj÷ubhÝ)�”}”(hXZIf you intend to invoke rcu_head_after_call_rcu() to test whether a given rcu_head structure has already been passed to call_rcu(), then you must also invoke this rcu_head_init() function on it just after allocating that structure. Calls to this function must not race with calls to call_rcu(), rcu_head_after_call_rcu(), or callback invocation.”h]”hXZIf you intend to invoke rcu_head_after_call_rcu() to test whether a given rcu_head structure has already been passed to call_rcu(), then you must also invoke this rcu_head_init() function on it just after allocating that structure. Calls to this function must not race with calls to call_rcu(), rcu_head_after_call_rcu(), or callback invocation.”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M˜hj÷ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$rcu_head_after_call_rcu (C function)”Œc.rcu_head_after_call_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEbool rcu_head_after_call_rcu (struct rcu_head *rhp, rcu_callback_t f)”h]”j)�”}”(hŒDbool rcu_head_after_call_rcu(struct rcu_head *rhp, rcu_callback_t f)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj˜h²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj˜h²hh³j©h´M¥ubj{)�”}”(hŒrcu_head_after_call_rcu”h]”j�)�”}”(hŒrcu_head_after_call_rcu”h]”hŒrcu_head_after_call_rcu”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj˜h²hh³j©h´M¥ubjœ)�”}”(hŒ((struct rcu_head *rhp, rcu_callback_t f)”h]”(j¢)�”}”(hŒstruct rcu_head *rhp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jøŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¾sbŒc.rcu_head_after_call_rcu”†”asbuh1hhjÔubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔubj�)�”}”(hŒrhp”h]”hŒrhp”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐubj¢)�”}”(hŒrcu_callback_t f”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcu_callback_t”h]”hŒrcu_callback_t”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jOŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŒc.rcu_head_after_call_rcu”†”asbuh1hhjFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFubj�)�”}”(hŒf”h]”hŒf”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÐubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj˜h²hh³j©h´M¥ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj”h²hh³j©h´M¥ubah}”(h]”j�ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j©h´M¥hj‘h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,Has this rcu_head been passed to call_rcu()?”h]”hŒ,Has this rcu_head been passed to call_rcu()?”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¥hj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‘h²hh³j©h´M¥ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj»jæj»jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX�**Parameters** ``struct rcu_head *rhp`` The rcu_head structure to test. ``rcu_callback_t f`` The function passed to call_rcu() along with **rhp**. **Description** Returns **true** if the **rhp** has been passed to call_rcu() with **func**, and **false** otherwise. Emits a warning in any other case, including the case where **rhp** has already been invoked after a grace period. Calls to this function must not race with callback invocation. One way to avoid such races is to enclose the call to rcu_head_after_call_rcu() in an RCU read-side critical section that includes a read-side fetch of the pointer to the structure containing **rhp**.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÅh]”hŒ Parameters”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M©hj¿ubj )�”}”(hhh]”(j)�”}”(hŒ9``struct rcu_head *rhp`` The rcu_head structure to test. ”h]”(j)�”}”(hŒ``struct rcu_head *rhp``”h]”j)�”}”(hjäh]”hŒstruct rcu_head *rhp”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¦hjÞubj2)�”}”(hhh]”hÝ)�”}”(hŒThe rcu_head structure to test.”h]”hŒThe rcu_head structure to test.”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jùh´M¦hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÞubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jùh´M¦hjÛubj)�”}”(hŒK``rcu_callback_t f`` The function passed to call_rcu() along with **rhp**. ”h]”(j)�”}”(hŒ``rcu_callback_t f``”h]”j)�”}”(hjh]”hŒrcu_callback_t f”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M§hjubj2)�”}”(hhh]”hÝ)�”}”(hŒ5The function passed to call_rcu() along with **rhp**.”h]”(hŒ-The function passed to call_rcu() along with ”…”�”}”(hj6h²hh³Nh´Nubjõ)�”}”(hŒ**rhp**”h]”hŒrhp”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6ubhŒ.”…”�”}”(hj6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j2h´M§hj3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j2h´M§hjÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjjh]”hŒ Description”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M©hj¿ubhÝ)�”}”(hXâReturns **true** if the **rhp** has been passed to call_rcu() with **func**, and **false** otherwise. Emits a warning in any other case, including the case where **rhp** has already been invoked after a grace period. Calls to this function must not race with callback invocation. One way to avoid such races is to enclose the call to rcu_head_after_call_rcu() in an RCU read-side critical section that includes a read-side fetch of the pointer to the structure containing **rhp**.”h]”(hŒReturns ”…”�”}”(hj€h²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hjˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ubhŒ if the ”…”�”}”(hj€h²hh³Nh´Nubjõ)�”}”(hŒ**rhp**”h]”hŒrhp”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ubhŒ$ has been passed to call_rcu() with ”…”�”}”(hj€h²hh³Nh´Nubjõ)�”}”(hŒ**func**”h]”hŒfunc”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ubhŒ, and ”…”�”}”(hj€h²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ubhŒI otherwise. Emits a warning in any other case, including the case where ”…”�”}”(hj€h²hh³Nh´Nubjõ)�”}”(hŒ**rhp**”h]”hŒrhp”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ubhX0 has already been invoked after a grace period. Calls to this function must not race with callback invocation. One way to avoid such races is to enclose the call to rcu_head_after_call_rcu() in an RCU read-side critical section that includes a read-side fetch of the pointer to the structure containing ”…”�”}”(hj€h²hh³Nh´Nubjõ)�”}”(hŒ**rhp**”h]”hŒrhp”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ubhŒ.”…”�”}”(hj€h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:399: ./include/linux/rcupdate.h”h´M¨hj¿ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_softirq_qs (C function)”Œc.rcu_softirq_qs”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_softirq_qs (void)”h]”j)�”}”(hŒvoid rcu_softirq_qs(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²•0hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Kïubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³j)h´Kïubj{)�”}”(hŒrcu_softirq_qs”h]”j�)�”}”(hŒrcu_softirq_qs”h]”hŒrcu_softirq_qs”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjh²hh³j)h´Kïubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjTubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjPubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³j)h´Kïubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³j)h´Kïubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j)h´Kïhjh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ;Provide a set of RCU quiescent states in softirq processing”h]”hŒ;Provide a set of RCU quiescent states in softirq processing”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Kïhjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³j)h´Kïubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjšjæjšjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX;**Parameters** ``void`` no arguments **Description** Mark a quiescent state for RCU, Tasks RCU, and Tasks Trace RCU. This is a special-purpose function to be used in the softirq infrastructure and perhaps the occasional long-running softirq handler. Note that from RCU's viewpoint, a call to rcu_softirq_qs() is equivalent to momentarily completely enabling preemption. For example, given this code:: local_bh_disable(); do_something(); rcu_softirq_qs(); // A do_something_else(); local_bh_enable(); // B A call to synchronize_rcu() that began concurrently with the call to do_something() would be guaranteed to wait only until execution reached statement A. Without that rcu_softirq_qs(), that same synchronize_rcu() would instead be guaranteed to wait until execution reached statement B.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¤h]”hŒ Parameters”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Kóhjžubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjÃh]”hŒvoid”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khj½ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØh´KhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØh´Khjºubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjžubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjþh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjüubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´KhjžubhÝ)�”}”(hŒÄMark a quiescent state for RCU, Tasks RCU, and Tasks Trace RCU. This is a special-purpose function to be used in the softirq infrastructure and perhaps the occasional long-running softirq handler.”h]”hŒÄMark a quiescent state for RCU, Tasks RCU, and Tasks Trace RCU. This is a special-purpose function to be used in the softirq infrastructure and perhaps the occasional long-running softirq handler.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´KðhjžubhÝ)�”}”(hŒ—Note that from RCU's viewpoint, a call to rcu_softirq_qs() is equivalent to momentarily completely enabling preemption. For example, given this code::”h]”hŒ˜Note that from RCU’s viewpoint, a call to rcu_softirq_qs() is equivalent to momentarily completely enabling preemption. For example, given this code:”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Kõhjžubj‘H)�”}”(hŒilocal_bh_disable(); do_something(); rcu_softirq_qs(); // A do_something_else(); local_bh_enable(); // B”h]”hŒilocal_bh_disable(); do_something(); rcu_softirq_qs(); // A do_something_else(); local_bh_enable(); // B”…”�”}”hj2sbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´KùhjžubhÝ)�”}”(hXA call to synchronize_rcu() that began concurrently with the call to do_something() would be guaranteed to wait only until execution reached statement A. Without that rcu_softirq_qs(), that same synchronize_rcu() would instead be guaranteed to wait until execution reached statement B.”h]”hXA call to synchronize_rcu() that began concurrently with the call to do_something() would be guaranteed to wait only until execution reached statement A. Without that rcu_softirq_qs(), that same synchronize_rcu() would instead be guaranteed to wait until execution reached statement B.”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Kÿhjžubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,rcu_watching_snap_stopped_since (C function)”Œ!c.rcu_watching_snap_stopped_since”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEbool rcu_watching_snap_stopped_since (struct rcu_data *rdp, int snap)”h]”j)�”}”(hŒDbool rcu_watching_snap_stopped_since(struct rcu_data *rdp, int snap)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjlh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M,ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjlh²hh³j}h´M,ubj{)�”}”(hŒrcu_watching_snap_stopped_since”h]”j�)�”}”(hŒrcu_watching_snap_stopped_since”h]”hŒrcu_watching_snap_stopped_since”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjlh²hh³j}h´M,ubjœ)�”}”(hŒ (struct rcu_data *rdp, int snap)”h]”(j¢)�”}”(hŒstruct rcu_data *rdp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¨ubh)�”}”(hhh]”j�)�”}”(hŒrcu_data”h]”hŒrcu_data”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÌŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j’sbŒ!c.rcu_watching_snap_stopped_since”†”asbuh1hhj¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¨ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¨ubj�)�”}”(hŒrdp”h]”hŒrdp”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¤ubj¢)�”}”(hŒint snap”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒsnap”h]”hŒsnap”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjlh²hh³j}h´M,ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjhh²hh³j}h´M,ubah}”(h]”jcah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j}h´M,hjeh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒBHas RCU stopped watching a given CPU since the specified **snap**?”h]”(hŒ9Has RCU stopped watching a given CPU since the specified ”…”�”}”(hjdh²hh³Nh´Nubjõ)�”}”(hŒ**snap**”h]”hŒsnap”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjdubhŒ?”…”�”}”(hjdh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M,hjah²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjeh²hh³j}h´M,ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŽjæjŽjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXì**Parameters** ``struct rcu_data *rdp`` The rcu_data corresponding to the CPU for which to check EQS. ``int snap`` rcu_watching snapshot taken when the CPU wasn't in an EQS. **Description** Returns true if the CPU corresponding to **rdp** has spent some time in an extended quiescent state since **snap**. Note that this doesn't check if it /still/ is in an EQS, just that it went through one since **snap**. This is meant to be used in a loop waiting for a CPU to go through an EQS.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M0hj’ubj )�”}”(hhh]”(j)�”}”(hŒW``struct rcu_data *rdp`` The rcu_data corresponding to the CPU for which to check EQS. ”h]”(j)�”}”(hŒ``struct rcu_data *rdp``”h]”j)�”}”(hj·h]”hŒstruct rcu_data *rdp”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M/hj±ubj2)�”}”(hhh]”hÝ)�”}”(hŒ=The rcu_data corresponding to the CPU for which to check EQS.”h]”hŒ=The rcu_data corresponding to the CPU for which to check EQS.”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌh´M/hjÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌh´M/hj®ubj)�”}”(hŒH``int snap`` rcu_watching snapshot taken when the CPU wasn't in an EQS. ”h]”(j)�”}”(hŒ ``int snap``”h]”j)�”}”(hjðh]”hŒint snap”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M0hjêubj2)�”}”(hhh]”hÝ)�”}”(hŒ:rcu_watching snapshot taken when the CPU wasn't in an EQS.”h]”hŒah"]”h$]”h&]”uh1j1hj± h²hh³jà h´Mtubj{)�”}”(hŒrcu_is_cpu_rrupt_from_idle”h]”j�)�”}”(hŒrcu_is_cpu_rrupt_from_idle”h]”hŒrcu_is_cpu_rrupt_from_idle”…”�”}”(hjÖ h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒ ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj± h²hh³jà h´Mtubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjò h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjî ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjê ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj± h²hh³jà h´Mtubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj­ h²hh³jà h´Mtubah}”(h]”j¨ ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jà h´Mthjª h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒsee if 'interrupted' from idle”h]”hŒ"see if ‘interrupted’ from idle”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mthj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjª h²hh³jà h´Mtubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj4 jæj4 jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒÜ**Parameters** ``void`` no arguments **Description** If the current CPU is idle and running at a first-level (not nested) interrupt, or directly, from idle, return true. The caller must have at least disabled IRQs.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj> h]”hŒ Parameters”…”�”}”(hj@ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj< ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mxhj8 ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj] h]”hŒvoid”…”�”}”(hj_ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´KhjW ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jr h´Khjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjW ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jr h´KhjT ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj8 ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj˜ h]”hŒ Description”…”�”}”(hjš h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj– ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khj8 ubhÝ)�”}”(hŒtIf the current CPU is idle and running at a first-level (not nested) interrupt, or directly, from idle, return true.”h]”hŒtIf the current CPU is idle and running at a first-level (not nested) interrupt, or directly, from idle, return true.”…”�”}”(hj® h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Muhj8 ubhÝ)�”}”(hŒ,The caller must have at least disabled IRQs.”h]”hŒ,The caller must have at least disabled IRQs.”…”�”}”(hj½ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mxhj8 ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'rcu_irq_exit_check_preempt (C function)”Œc.rcu_irq_exit_check_preempt”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ&void rcu_irq_exit_check_preempt (void)”h]”j)�”}”(hŒ%void rcu_irq_exit_check_preempt(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjì h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjè h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mlubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjè h²hh³jú h´Mlubj{)�”}”(hŒrcu_irq_exit_check_preempt”h]”j�)�”}”(hŒrcu_irq_exit_check_preempt”h]”hŒrcu_irq_exit_check_preempt”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjè h²hh³jú h´Mlubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj) h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj% ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj! ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjè h²hh³jú h´Mlubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjä h²hh³jú h´Mlubah}”(h]”jß ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jú h´Mlhjá h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ$Validate that scheduling is possible”h]”hŒ$Validate that scheduling is possible”…”�”}”(hjS h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MlhjP h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjá h²hh³jú h´Mlubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjk jæjk jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒ'**Parameters** ``void`` no arguments”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hju h]”hŒ Parameters”…”�”}”(hjw h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjs ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mphjo ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj” h]”hŒvoid”…”�”}”(hj– h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MrhjŽ ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj­ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khjª ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŽ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j© h´Mrhj‹ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjo ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'__rcu_irq_enter_check_tick (C function)”Œc.__rcu_irq_enter_check_tick”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ&void __rcu_irq_enter_check_tick (void)”h]”j)�”}”(hŒ%void __rcu_irq_enter_check_tick(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjî h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjê h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M~ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjê h²hh³jü h´M~ubj{)�”}”(hŒ__rcu_irq_enter_check_tick”h]”j�)�”}”(hŒ__rcu_irq_enter_check_tick”h]”hŒ__rcu_irq_enter_check_tick”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjê h²hh³jü h´M~ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj+ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj' ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj# ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjê h²hh³jü h´M~ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjæ h²hh³jü h´M~ubah}”(h]”já ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jü h´M~hjã h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Enable scheduler tick on CPU if RCU needs it.”h]”hŒ-Enable scheduler tick on CPU if RCU needs it.”…”�”}”(hjU h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M~hjR h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjã h²hh³jü h´M~ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjm jæjm jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``void`` no arguments **Description** The scheduler tick is not normally enabled when CPUs enter the kernel from nohz_full userspace execution. After all, nohz_full userspace execution is an RCU quiescent state and the time executing in the kernel is quite short. Except of course when it isn't. And it is not hard to cause a large system to spend tens of seconds or even minutes looping in the kernel, which can cause a number of problems, include RCU CPU stall warnings. Therefore, if a nohz_full CPU fails to report a quiescent state in a timely manner, the RCU grace-period kthread sets that CPU's ->rcu_urgent_qs flag with the expectation that the next interrupt or exception will invoke this function, which will turn on the scheduler tick, which will enable RCU to detect that CPU's quiescent states, for example, due to cond_resched() calls in CONFIG_PREEMPT=n kernels. The tick will be disabled once a quiescent state is reported for this CPU. Of course, in carefully tuned systems, there might never be an interrupt or exception. In that case, the RCU grace-period kthread will eventually cause one to happen. However, in less carefully controlled environments, this function allows RCU to get what it needs without creating otherwise useless interruptions.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjw h]”hŒ Parameters”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhju ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M‚hjq ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj– h]”hŒvoid”…”�”}”(hj˜ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj” ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khj� ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj¯ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j« h´Khj¬ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j« h´Khj� ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjq ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÑ h]”hŒ Description”…”�”}”(hjÓ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khjq ubhÝ)�”}”(hXµThe scheduler tick is not normally enabled when CPUs enter the kernel from nohz_full userspace execution. After all, nohz_full userspace execution is an RCU quiescent state and the time executing in the kernel is quite short. Except of course when it isn't. And it is not hard to cause a large system to spend tens of seconds or even minutes looping in the kernel, which can cause a number of problems, include RCU CPU stall warnings.”h]”hX·The scheduler tick is not normally enabled when CPUs enter the kernel from nohz_full userspace execution. After all, nohz_full userspace execution is an RCU quiescent state and the time executing in the kernel is quite short. Except of course when it isn’t. And it is not hard to cause a large system to spend tens of seconds or even minutes looping in the kernel, which can cause a number of problems, include RCU CPU stall warnings.”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mhjq ubhÝ)�”}”(hXßTherefore, if a nohz_full CPU fails to report a quiescent state in a timely manner, the RCU grace-period kthread sets that CPU's ->rcu_urgent_qs flag with the expectation that the next interrupt or exception will invoke this function, which will turn on the scheduler tick, which will enable RCU to detect that CPU's quiescent states, for example, due to cond_resched() calls in CONFIG_PREEMPT=n kernels. The tick will be disabled once a quiescent state is reported for this CPU.”h]”hXãTherefore, if a nohz_full CPU fails to report a quiescent state in a timely manner, the RCU grace-period kthread sets that CPU’s ->rcu_urgent_qs flag with the expectation that the next interrupt or exception will invoke this function, which will turn on the scheduler tick, which will enable RCU to detect that CPU’s quiescent states, for example, due to cond_resched() calls in CONFIG_PREEMPT=n kernels. The tick will be disabled once a quiescent state is reported for this CPU.”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M‡hjq ubhÝ)�”}”(hX<Of course, in carefully tuned systems, there might never be an interrupt or exception. In that case, the RCU grace-period kthread will eventually cause one to happen. However, in less carefully controlled environments, this function allows RCU to get what it needs without creating otherwise useless interruptions.”h]”hX<Of course, in carefully tuned systems, there might never be an interrupt or exception. In that case, the RCU grace-period kthread will eventually cause one to happen. However, in less carefully controlled environments, this function allows RCU to get what it needs without creating otherwise useless interruptions.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M�hjq ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_is_watching (C function)”Œc.rcu_is_watching”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ#notrace bool rcu_is_watching (void)”h]”j)�”}”(hŒ"notrace bool rcu_is_watching(void)”h]”(hŒnotrace”…”�”}”(hj0 h²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0 h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MÞubj )�”}”(hjª8h]”hŒbool”…”�”}”(hjG h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj0 h²hh³jF h´MÞubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0 h²hh³jF h´MÞubj{)�”}”(hŒrcu_is_watching”h]”j�)�”}”(hŒrcu_is_watching”h]”hŒrcu_is_watching”…”�”}”(hjf h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjb ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj0 h²hh³jF h´MÞubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‚ h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj~ ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjz ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj0 h²hh³jF h´MÞubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj, h²hh³jF h´MÞubah}”(h]”j' ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jF h´MÞhj) h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9RCU read-side critical sections permitted on current CPU?”h]”hŒ9RCU read-side critical sections permitted on current CPU?”…”�”}”(hj¬ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MÞhj© h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj) h²hh³jF h´MÞubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÄ jæjÄ jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXo**Parameters** ``void`` no arguments **Description** Return **true** if RCU is watching the running CPU and **false** otherwise. An **true** return means that this CPU can safely enter RCU read-side critical sections. Although calls to rcu_is_watching() from most parts of the kernel will return **true**, there are important exceptions. For example, if the current CPU is deep within its idle loop, in kernel entry/exit code, or offline, rcu_is_watching() will return **false**. Make notrace because it can be called by the internal functions of ftrace, and making this notrace removes unnecessary recursion calls.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÎ h]”hŒ Parameters”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÌ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MâhjÈ ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjí h]”hŒvoid”…”�”}”(hjï h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjë ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khjç ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Khjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjç ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Khjä ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÈ ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj(h]”hŒ Description”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´KhjÈ ubhÝ)�”}”(hŒ¤Return **true** if RCU is watching the running CPU and **false** otherwise. An **true** return means that this CPU can safely enter RCU read-side critical sections.”h]”(hŒReturn ”…”�”}”(hj>h²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>ubhŒ( if RCU is watching the running CPU and ”…”�”}”(hj>h²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>ubhŒ otherwise. An ”…”�”}”(hj>h²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj>ubhŒM return means that this CPU can safely enter RCU read-side critical sections.”…”�”}”(hj>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MßhjÈ ubhÝ)�”}”(hXAlthough calls to rcu_is_watching() from most parts of the kernel will return **true**, there are important exceptions. For example, if the current CPU is deep within its idle loop, in kernel entry/exit code, or offline, rcu_is_watching() will return **false**.”h]”(hŒNAlthough calls to rcu_is_watching() from most parts of the kernel will return ”…”�”}”(hjƒh²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒubhŒ¦, there are important exceptions. For example, if the current CPU is deep within its idle loop, in kernel entry/exit code, or offline, rcu_is_watching() will return ”…”�”}”(hjƒh²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒubhŒ.”…”�”}”(hjƒh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MãhjÈ ubhÝ)�”}”(hŒ‡Make notrace because it can be called by the internal functions of ftrace, and making this notrace removes unnecessary recursion calls.”h]”hŒ‡Make notrace because it can be called by the internal functions of ftrace, and making this notrace removes unnecessary recursion calls.”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MèhjÈ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_set_gpwrap_lag (C function)”Œc.rcu_set_gpwrap_lag”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ/void rcu_set_gpwrap_lag (unsigned long lag_gps)”h]”j)�”}”(hŒ.void rcu_set_gpwrap_lag(unsigned long lag_gps)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjáh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáh²hh³jóh´M ubj{)�”}”(hŒrcu_set_gpwrap_lag”h]”j�)�”}”(hŒrcu_set_gpwrap_lag”h]”hŒrcu_set_gpwrap_lag”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjáh²hh³jóh´M ubjœ)�”}”(hŒ(unsigned long lag_gps)”h]”j¢)�”}”(hŒunsigned long lag_gps”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubj�)�”}”(hŒlag_gps”h]”hŒlag_gps”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjáh²hh³jóh´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÝh²hh³jóh´M ubah}”(h]”jØah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jóh´M hjÚh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'Set RCU GP sequence overflow lag value.”h]”hŒ'Set RCU GP sequence overflow lag value.”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M hj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÚh²hh³jóh´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjœjæjœjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒì**Parameters** ``unsigned long lag_gps`` Set overflow lag to this many grace period worth of counters which is used by rcutorture to quickly force a gpwrap situation. **lag_gps** = 0 means we reset it back to the boot-time value.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¦h]”hŒ Parameters”…”�”}”(hj¨h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mhj ubj )�”}”(hhh]”j)�”}”(hŒÖ``unsigned long lag_gps`` Set overflow lag to this many grace period worth of counters which is used by rcutorture to quickly force a gpwrap situation. **lag_gps** = 0 means we reset it back to the boot-time value.”h]”(j)�”}”(hŒ``unsigned long lag_gps``”h]”j)�”}”(hjÅh]”hŒunsigned long lag_gps”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mhj¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒ¼Set overflow lag to this many grace period worth of counters which is used by rcutorture to quickly force a gpwrap situation. **lag_gps** = 0 means we reset it back to the boot-time value.”h]”(hŒ~Set overflow lag to this many grace period worth of counters which is used by rcutorture to quickly force a gpwrap situation. ”…”�”}”(hjÞh²hh³Nh´Nubjõ)�”}”(hŒ **lag_gps**”h]”hŒlag_gps”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞubhŒ3 = 0 means we reset it back to the boot-time value.”…”�”}”(hjÞh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M hjÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚh´Mhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcall_rcu_hurry (C function)”Œc.call_rcu_hurry”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@void call_rcu_hurry (struct rcu_head *head, rcu_callback_t func)”h]”j)�”}”(hŒ?void call_rcu_hurry(struct rcu_head *head, rcu_callback_t func)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj-h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MŽ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-h²hh³j?h´MŽ ubj{)�”}”(hŒcall_rcu_hurry”h]”j�)�”}”(hŒcall_rcu_hurry”h]”hŒcall_rcu_hurry”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj-h²hh³j?h´MŽ ubjœ)�”}”(hŒ,(struct rcu_head *head, rcu_callback_t func)”h]”(j¢)�”}”(hŒstruct rcu_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŽŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jTsbŒc.call_rcu_hurry”†”asbuh1hhjjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjjubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjfubj¢)�”}”(hŒrcu_callback_t func”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcu_callback_t”h]”hŒrcu_callback_t”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjàubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jåŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¨Œc.call_rcu_hurry”†”asbuh1hhjÜubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÜubj�)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjfubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj-h²hh³j?h´MŽ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj)h²hh³j?h´MŽ ubah}”(h]”j$ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j?h´MŽ hj&h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ�Queue RCU callback for invocation after grace period, and flush all lazy callbacks (including the new one) to the main ->cblist while doing so.”h]”hŒ�Queue RCU callback for invocation after grace period, and flush all lazy callbacks (including the new one) to the main ->cblist while doing so.”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MŽ hj6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj&h²hh³j?h´MŽ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjQjæjQjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXS**Parameters** ``struct rcu_head *head`` structure to be used for queueing the RCU updates. ``rcu_callback_t func`` actual callback function to be invoked after the grace period **Description** The callback function will be invoked some time after a full grace period elapses, in other words after all pre-existing RCU read-side critical sections have completed. Use this API instead of call_rcu() if you don't want the callback to be delayed for very long periods of time, which can happen on systems without memory pressure and on systems which are lightly loaded or mostly idle. This function will cause callbacks to be invoked sooner than later at the expense of extra power. Other than that, this function is identical to, and reuses call_rcu()'s logic. Refer to call_rcu() for more details about memory ordering and other functionality.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj[h]”hŒ Parameters”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M’ hjUubj )�”}”(hhh]”(j)�”}”(hŒM``struct rcu_head *head`` structure to be used for queueing the RCU updates. ”h]”(j)�”}”(hŒ``struct rcu_head *head``”h]”j)�”}”(hjzh]”hŒstruct rcu_head *head”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M’ hjtubj2)�”}”(hhh]”hÝ)�”}”(hŒ2structure to be used for queueing the RCU updates.”h]”hŒ2structure to be used for queueing the RCU updates.”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�h´M’ hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjtubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´M’ hjqubj)�”}”(hŒV``rcu_callback_t func`` actual callback function to be invoked after the grace period ”h]”(j)�”}”(hŒ``rcu_callback_t func``”h]”j)�”}”(hj³h]”hŒrcu_callback_t func”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M“ hj­ubj2)�”}”(hhh]”hÝ)�”}”(hŒ=actual callback function to be invoked after the grace period”h]”hŒ=actual callback function to be invoked after the grace period”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÈh´M“ hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj­ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈh´M“ hjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjUubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjîh]”hŒ Description”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M• hjUubhÝ)�”}”(hŒ¨The callback function will be invoked some time after a full grace period elapses, in other words after all pre-existing RCU read-side critical sections have completed.”h]”hŒ¨The callback function will be invoked some time after a full grace period elapses, in other words after all pre-existing RCU read-side critical sections have completed.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M” hjUubhÝ)�”}”(hXßUse this API instead of call_rcu() if you don't want the callback to be delayed for very long periods of time, which can happen on systems without memory pressure and on systems which are lightly loaded or mostly idle. This function will cause callbacks to be invoked sooner than later at the expense of extra power. Other than that, this function is identical to, and reuses call_rcu()'s logic. Refer to call_rcu() for more details about memory ordering and other functionality.”h]”hXãUse this API instead of call_rcu() if you don’t want the callback to be delayed for very long periods of time, which can happen on systems without memory pressure and on systems which are lightly loaded or mostly idle. This function will cause callbacks to be invoked sooner than later at the expense of extra power. Other than that, this function is identical to, and reuses call_rcu()’s logic. Refer to call_rcu() for more details about memory ordering and other functionality.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M˜ hjUubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcall_rcu (C function)”Œ c.call_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:void call_rcu (struct rcu_head *head, rcu_callback_t func)”h]”j)�”}”(hŒ9void call_rcu(struct rcu_head *head, rcu_callback_t func)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj>h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M« ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj>h²hh³jPh´M« ubj{)�”}”(hŒcall_rcu”h]”j�)�”}”(hŒcall_rcu”h]”hŒcall_rcu”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj>h²hh³jPh´M« ubjœ)�”}”(hŒ,(struct rcu_head *head, rcu_callback_t func)”h]”(j¢)�”}”(hŒstruct rcu_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj{ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj{ubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjšubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŸŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jesbŒ c.call_rcu”†”asbuh1hhj{ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj{ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj{ubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjwubj¢)�”}”(hŒrcu_callback_t func”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcu_callback_t”h]”hŒrcu_callback_t”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jöŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j¹Œ c.call_rcu”†”asbuh1hhjíubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjíubj�)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjíubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjwubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj>h²hh³jPh´M« ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj:h²hh³jPh´M« ubah}”(h]”j5ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jPh´M« hj7h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒþQueue an RCU callback for invocation after a grace period. By default the callbacks are 'lazy' and are kept hidden from the main ->cblist to prevent starting of grace periods too soon. If you desire grace periods to start very soon, use call_rcu_hurry().”h]”hXQueue an RCU callback for invocation after a grace period. By default the callbacks are ‘lazy’ and are kept hidden from the main ->cblist to prevent starting of grace periods too soon. If you desire grace periods to start very soon, use call_rcu_hurry().”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M« hjGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj7h²hh³jPh´M« ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjbjæjbjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX& **Parameters** ``struct rcu_head *head`` structure to be used for queueing the RCU updates. ``rcu_callback_t func`` actual callback function to be invoked after the grace period **Description** The callback function will be invoked some time after a full grace period elapses, in other words after all pre-existing RCU read-side critical sections have completed. However, the callback function might well execute concurrently with RCU read-side critical sections that started after call_rcu() was invoked. It is perfectly legal to repost an RCU callback, potentially with a different callback function, from within its callback function. The specified function will be invoked after another full grace period has elapsed. This use case is similar in form to the common practice of reposting a timer from within its own handler. RCU read-side critical sections are delimited by rcu_read_lock() and rcu_read_unlock(), and may be nested. In addition, but only in v5.0 and later, regions of code across which interrupts, preemption, or softirqs have been disabled also serve as RCU read-side critical sections. This includes hardware interrupt handlers, softirq handlers, and NMI handlers. Note that all CPUs must agree that the grace period extended beyond all pre-existing RCU read-side critical section. On systems with more than one CPU, this means that when "func()" is invoked, each CPU is guaranteed to have executed a full memory barrier since the end of its last RCU read-side critical section whose beginning preceded the call to call_rcu(). It also means that each CPU executing an RCU read-side critical section that continues beyond the start of "func()" must have executed a memory barrier after the call_rcu() but before the beginning of that RCU read-side critical section. Note that these guarantees include CPUs that are offline, idle, or executing in user mode, as well as CPUs that are executing in the kernel. Furthermore, if CPU A invoked call_rcu() and CPU B invoked the resulting RCU callback function "func()", then both CPU A and CPU B are guaranteed to execute a full memory barrier during the time interval between the call to call_rcu() and the invocation of "func()" -- even if CPU A and CPU B are the same CPU (but again only if the system has more than one CPU). Implementation of these memory-ordering guarantees is described here: Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst. Specific to call_rcu() (as opposed to the other call_rcu*() functions), in kernels built with CONFIG_RCU_LAZY=y, call_rcu() might delay for many seconds before starting the grace period needed by the corresponding callback. This delay can significantly improve energy-efficiency on low-utilization battery-powered devices. To avoid this delay, in latency-sensitive kernel code, use call_rcu_hurry().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjlh]”hŒ Parameters”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M¯ hjfubj )�”}”(hhh]”(j)�”}”(hŒM``struct rcu_head *head`` structure to be used for queueing the RCU updates. ”h]”(j)�”}”(hŒ``struct rcu_head *head``”h]”j)�”}”(hj‹h]”hŒstruct rcu_head *head”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M° hj…ubj2)�”}”(hhh]”hÝ)�”}”(hŒ2structure to be used for queueing the RCU updates.”h]”hŒ2structure to be used for queueing the RCU updates.”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j h´M° hj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j h´M° hj‚ubj)�”}”(hŒV``rcu_callback_t func`` actual callback function to be invoked after the grace period ”h]”(j)�”}”(hŒ``rcu_callback_t func``”h]”j)�”}”(hjÄh]”hŒrcu_callback_t func”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M± hj¾ubj2)�”}”(hhh]”hÝ)�”}”(hŒ=actual callback function to be invoked after the grace period”h]”hŒ=actual callback function to be invoked after the grace period”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÙh´M± hjÚubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÙh´M± hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjfubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÿh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M³ hjfubhÝ)�”}”(hX8The callback function will be invoked some time after a full grace period elapses, in other words after all pre-existing RCU read-side critical sections have completed. However, the callback function might well execute concurrently with RCU read-side critical sections that started after call_rcu() was invoked.”h]”hX8The callback function will be invoked some time after a full grace period elapses, in other words after all pre-existing RCU read-side critical sections have completed. However, the callback function might well execute concurrently with RCU read-side critical sections that started after call_rcu() was invoked.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M² hjfubhÝ)�”}”(hXBIt is perfectly legal to repost an RCU callback, potentially with a different callback function, from within its callback function. The specified function will be invoked after another full grace period has elapsed. This use case is similar in form to the common practice of reposting a timer from within its own handler.”h]”hXBIt is perfectly legal to repost an RCU callback, potentially with a different callback function, from within its callback function. The specified function will be invoked after another full grace period has elapsed. This use case is similar in form to the common practice of reposting a timer from within its own handler.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M¸ hjfubhÝ)�”}”(hXgRCU read-side critical sections are delimited by rcu_read_lock() and rcu_read_unlock(), and may be nested. In addition, but only in v5.0 and later, regions of code across which interrupts, preemption, or softirqs have been disabled also serve as RCU read-side critical sections. This includes hardware interrupt handlers, softirq handlers, and NMI handlers.”h]”hXgRCU read-side critical sections are delimited by rcu_read_lock() and rcu_read_unlock(), and may be nested. In addition, but only in v5.0 and later, regions of code across which interrupts, preemption, or softirqs have been disabled also serve as RCU read-side critical sections. This includes hardware interrupt handlers, softirq handlers, and NMI handlers.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M¾ hjfubhÝ)�”}”(hXçNote that all CPUs must agree that the grace period extended beyond all pre-existing RCU read-side critical section. On systems with more than one CPU, this means that when "func()" is invoked, each CPU is guaranteed to have executed a full memory barrier since the end of its last RCU read-side critical section whose beginning preceded the call to call_rcu(). It also means that each CPU executing an RCU read-side critical section that continues beyond the start of "func()" must have executed a memory barrier after the call_rcu() but before the beginning of that RCU read-side critical section. Note that these guarantees include CPUs that are offline, idle, or executing in user mode, as well as CPUs that are executing in the kernel.”h]”hXïNote that all CPUs must agree that the grace period extended beyond all pre-existing RCU read-side critical section. On systems with more than one CPU, this means that when “func()â€� is invoked, each CPU is guaranteed to have executed a full memory barrier since the end of its last RCU read-side critical section whose beginning preceded the call to call_rcu(). It also means that each CPU executing an RCU read-side critical section that continues beyond the start of “func()â€� must have executed a memory barrier after the call_rcu() but before the beginning of that RCU read-side critical section. Note that these guarantees include CPUs that are offline, idle, or executing in user mode, as well as CPUs that are executing in the kernel.”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MÅ hjfubhÝ)�”}”(hXkFurthermore, if CPU A invoked call_rcu() and CPU B invoked the resulting RCU callback function "func()", then both CPU A and CPU B are guaranteed to execute a full memory barrier during the time interval between the call to call_rcu() and the invocation of "func()" -- even if CPU A and CPU B are the same CPU (but again only if the system has more than one CPU).”h]”hXsFurthermore, if CPU A invoked call_rcu() and CPU B invoked the resulting RCU callback function “func()â€�, then both CPU A and CPU B are guaranteed to execute a full memory barrier during the time interval between the call to call_rcu() and the invocation of “func()â€� -- even if CPU A and CPU B are the same CPU (but again only if the system has more than one CPU).”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MÑ hjfubhÝ)�”}”(hŒŒImplementation of these memory-ordering guarantees is described here: Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst.”h]”hŒŒImplementation of these memory-ordering guarantees is described here: Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst.”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MØ hjfubhÝ)�”}”(hX‘Specific to call_rcu() (as opposed to the other call_rcu*() functions), in kernels built with CONFIG_RCU_LAZY=y, call_rcu() might delay for many seconds before starting the grace period needed by the corresponding callback. This delay can significantly improve energy-efficiency on low-utilization battery-powered devices. To avoid this delay, in latency-sensitive kernel code, use call_rcu_hurry().”h]”hX‘Specific to call_rcu() (as opposed to the other call_rcu*() functions), in kernels built with CONFIG_RCU_LAZY=y, call_rcu() might delay for many seconds before starting the grace period needed by the corresponding callback. This delay can significantly improve energy-efficiency on low-utilization battery-powered devices. To avoid this delay, in latency-sensitive kernel code, use call_rcu_hurry().”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MÛ hjfubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsynchronize_rcu (C function)”Œc.synchronize_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid synchronize_rcu (void)”h]”j)�”}”(hŒvoid synchronize_rcu(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjšh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M# ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšh²hh³j¬h´M# ubj{)�”}”(hŒsynchronize_rcu”h]”j�)�”}”(hŒsynchronize_rcu”h]”hŒsynchronize_rcu”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjšh²hh³j¬h´M# ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj×ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjšh²hh³j¬h´M# ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj–h²hh³j¬h´M# ubah}”(h]”j‘ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¬h´M# hj“h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&wait until a grace period has elapsed.”h]”hŒ&wait until a grace period has elapsed.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M# hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj“h²hh³j¬h´M# ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX²**Parameters** ``void`` no arguments **Description** Control will return to the caller some time after a full grace period has elapsed, in other words after all currently executing RCU read-side critical sections have completed. Note, however, that upon return from synchronize_rcu(), the caller might well be executing concurrently with new RCU read-side critical sections that began while synchronize_rcu() was waiting. RCU read-side critical sections are delimited by rcu_read_lock() and rcu_read_unlock(), and may be nested. In addition, but only in v5.0 and later, regions of code across which interrupts, preemption, or softirqs have been disabled also serve as RCU read-side critical sections. This includes hardware interrupt handlers, softirq handlers, and NMI handlers. Note that this guarantee implies further memory-ordering guarantees. On systems with more than one CPU, when synchronize_rcu() returns, each CPU is guaranteed to have executed a full memory barrier since the end of its last RCU read-side critical section whose beginning preceded the call to synchronize_rcu(). In addition, each CPU having an RCU read-side critical section that extends beyond the return from synchronize_rcu() is guaranteed to have executed a full memory barrier after the beginning of synchronize_rcu() and before the beginning of that RCU read-side critical section. Note that these guarantees include CPUs that are offline, idle, or executing in user mode, as well as CPUs that are executing in the kernel. Furthermore, if CPU A invoked synchronize_rcu(), which returned to its caller on CPU B, then both CPU A and CPU B are guaranteed to have executed a full memory barrier during the execution of synchronize_rcu() -- even if CPU A and CPU B are the same CPU (but again only if the system has more than one CPU). Implementation of these memory-ordering guarantees is described here: Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj'h]”hŒ Parameters”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M' hj!ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjFh]”hŒvoid”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”•h´Khj@ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j[h´Khj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j[h´Khj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj!ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�h]”hŒ Description”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khj!ubhÝ)�”}”(hXqControl will return to the caller some time after a full grace period has elapsed, in other words after all currently executing RCU read-side critical sections have completed. Note, however, that upon return from synchronize_rcu(), the caller might well be executing concurrently with new RCU read-side critical sections that began while synchronize_rcu() was waiting.”h]”hXqControl will return to the caller some time after a full grace period has elapsed, in other words after all currently executing RCU read-side critical sections have completed. Note, however, that upon return from synchronize_rcu(), the caller might well be executing concurrently with new RCU read-side critical sections that began while synchronize_rcu() was waiting.”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M$ hj!ubhÝ)�”}”(hXgRCU read-side critical sections are delimited by rcu_read_lock() and rcu_read_unlock(), and may be nested. In addition, but only in v5.0 and later, regions of code across which interrupts, preemption, or softirqs have been disabled also serve as RCU read-side critical sections. This includes hardware interrupt handlers, softirq handlers, and NMI handlers.”h]”hXgRCU read-side critical sections are delimited by rcu_read_lock() and rcu_read_unlock(), and may be nested. In addition, but only in v5.0 and later, regions of code across which interrupts, preemption, or softirqs have been disabled also serve as RCU read-side critical sections. This includes hardware interrupt handlers, softirq handlers, and NMI handlers.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M+ hj!ubhÝ)�”}”(hXÙNote that this guarantee implies further memory-ordering guarantees. On systems with more than one CPU, when synchronize_rcu() returns, each CPU is guaranteed to have executed a full memory barrier since the end of its last RCU read-side critical section whose beginning preceded the call to synchronize_rcu(). In addition, each CPU having an RCU read-side critical section that extends beyond the return from synchronize_rcu() is guaranteed to have executed a full memory barrier after the beginning of synchronize_rcu() and before the beginning of that RCU read-side critical section. Note that these guarantees include CPUs that are offline, idle, or executing in user mode, as well as CPUs that are executing in the kernel.”h]”hXÙNote that this guarantee implies further memory-ordering guarantees. On systems with more than one CPU, when synchronize_rcu() returns, each CPU is guaranteed to have executed a full memory barrier since the end of its last RCU read-side critical section whose beginning preceded the call to synchronize_rcu(). In addition, each CPU having an RCU read-side critical section that extends beyond the return from synchronize_rcu() is guaranteed to have executed a full memory barrier after the beginning of synchronize_rcu() and before the beginning of that RCU read-side critical section. Note that these guarantees include CPUs that are offline, idle, or executing in user mode, as well as CPUs that are executing in the kernel.”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M2 hj!ubhÝ)�”}”(hX3Furthermore, if CPU A invoked synchronize_rcu(), which returned to its caller on CPU B, then both CPU A and CPU B are guaranteed to have executed a full memory barrier during the execution of synchronize_rcu() -- even if CPU A and CPU B are the same CPU (but again only if the system has more than one CPU).”h]”hX3Furthermore, if CPU A invoked synchronize_rcu(), which returned to its caller on CPU B, then both CPU A and CPU B are guaranteed to have executed a full memory barrier during the execution of synchronize_rcu() -- even if CPU A and CPU B are the same CPU (but again only if the system has more than one CPU).”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M> hj!ubhÝ)�”}”(hŒŒImplementation of these memory-ordering guarantees is described here: Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst.”h]”hŒŒImplementation of these memory-ordering guarantees is described here: Documentation/RCU/Design/Memory-Ordering/Tree-RCU-Memory-Ordering.rst.”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MD hj!ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ/get_completed_synchronize_rcu_full (C function)”Œ$c.get_completed_synchronize_rcu_full”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@void get_completed_synchronize_rcu_full (struct rcu_gp_seq *gsp)”h]”j)�”}”(hŒ?void get_completed_synchronize_rcu_full(struct rcu_gp_seq *gsp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mp ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþh²hh³jh´Mp ubj{)�”}”(hŒ"get_completed_synchronize_rcu_full”h]”j�)�”}”(hŒ"get_completed_synchronize_rcu_full”h]”hŒ"get_completed_synchronize_rcu_full”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjþh²hh³jh´Mp ubjœ)�”}”(hŒ(struct rcu_gp_seq *gsp)”h]”j¢)�”}”(hŒstruct rcu_gp_seq *gsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;ubh)�”}”(hhh]”j�)�”}”(hŒ rcu_gp_seq”h]”hŒ rcu_gp_seq”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j%sbŒ$c.get_completed_synchronize_rcu_full”†”asbuh1hhj;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;ubj�)�”}”(hŒgsp”h]”hŒgsp”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjþh²hh³jh´Mp ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjúh²hh³jh´Mp ubah}”(h]”jõah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´Mp hj÷h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/Return a full pre-completed polled state cookie”h]”hŒ/Return a full pre-completed polled state cookie”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mp hj¿h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj÷h²hh³jh´Mp ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÚjæjÚjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒú**Parameters** ``struct rcu_gp_seq *gsp`` Place to put state cookie **Description** Stores into **gsp** a value that will always be treated by functions like poll_state_synchronize_rcu_full() as a cookie whose grace period has already completed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjäh]”hŒ Parameters”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mt hjÞubj )�”}”(hhh]”j)�”}”(hŒ5``struct rcu_gp_seq *gsp`` Place to put state cookie ”h]”(j)�”}”(hŒ``struct rcu_gp_seq *gsp``”h]”j)�”}”(hjh]”hŒstruct rcu_gp_seq *gsp”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mq hjýubj2)�”}”(hhh]”hÝ)�”}”(hŒPlace to put state cookie”h]”hŒPlace to put state cookie”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jh´Mq hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jh´Mq hjúubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÞubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj>h]”hŒ Description”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Ms hjÞubhÝ)�”}”(hŒ¡Stores into **gsp** a value that will always be treated by functions like poll_state_synchronize_rcu_full() as a cookie whose grace period has already completed.”h]”(hŒ Stores into ”…”�”}”(hjTh²hh³Nh´Nubjõ)�”}”(hŒ**gsp**”h]”hŒgsp”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjTubhŒŽ a value that will always be treated by functions like poll_state_synchronize_rcu_full() as a cookie whose grace period has already completed.”…”�”}”(hjTh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mr hjÞubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&get_state_synchronize_rcu (C function)”Œc.get_state_synchronize_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.unsigned long get_state_synchronize_rcu (void)”h]”j)�”}”(hŒ-unsigned long get_state_synchronize_rcu(void)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘h²hh³j£h´M ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘h²hh³j£h´M ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘h²hh³j£h´M ubj{)�”}”(hŒget_state_synchronize_rcu”h]”j�)�”}”(hŒget_state_synchronize_rcu”h]”hŒget_state_synchronize_rcu”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‘h²hh³j£h´M ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjêubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjæubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‘h²hh³j£h´M ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�h²hh³j£h´M ubah}”(h]”jˆah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j£h´M hjŠh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒSnapshot current RCU state”h]”hŒSnapshot current RCU state”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M hjh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŠh²hh³j£h´M ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj0jæj0jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒî**Parameters** ``void`` no arguments **Description** Returns a cookie that is used by a later call to cond_synchronize_rcu() or poll_state_synchronize_rcu() to determine whether or not a full grace period has elapsed in the meantime.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj:h]”hŒ Parameters”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mƒ hj4ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjYh]”hŒvoid”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´KhjSubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jnh´Khjoubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjSubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jnh´KhjPubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj4ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj”h]”hŒ Description”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj’ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khj4ubhÝ)�”}”(hŒ´Returns a cookie that is used by a later call to cond_synchronize_rcu() or poll_state_synchronize_rcu() to determine whether or not a full grace period has elapsed in the meantime.”h]”hŒ´Returns a cookie that is used by a later call to cond_synchronize_rcu() or poll_state_synchronize_rcu() to determine whether or not a full grace period has elapsed in the meantime.”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M€ hj4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ+get_state_synchronize_rcu_full (C function)”Œ c.get_state_synchronize_rcu_full”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjÕh²hh³jçh´M‘ ubj{)�”}”(hŒget_state_synchronize_rcu_full”h]”j�)�”}”(hŒget_state_synchronize_rcu_full”h]”hŒget_state_synchronize_rcu_full”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÕh²hh³jçh´M‘ ubjœ)�”}”(hŒ(struct rcu_gp_seq *gsp)”h]”j¢)�”}”(hŒstruct rcu_gp_seq *gsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒ rcu_gp_seq”h]”hŒ rcu_gp_seq”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j6Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jüsbŒ c.get_state_synchronize_rcu_full”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒgsp”h]”hŒgsp”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÕh²hh³jçh´M‘ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÑh²hh³jçh´M‘ ubah}”(h]”jÌah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jçh´M‘ hjÎh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Snapshot RCU state, both normal and expedited”h]”hŒ-Snapshot RCU state, both normal and expedited”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M‘ hj–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÎh²hh³jçh´M‘ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj±jæj±jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXÈ**Parameters** ``struct rcu_gp_seq *gsp`` location to place combined normal/expedited grace-period state **Description** Places the normal and expedited grace-period states in **gsp**. This state value can be passed to a later call to cond_synchronize_rcu_full() or poll_state_synchronize_rcu_full() to determine whether or not a grace period (whether normal or expedited) has elapsed in the meantime. The rcu_gp_seq structure takes up twice the memory of an unsigned long, but is guaranteed to see all grace periods. In contrast, the combined state occupies less memory, but can sometimes fail to take grace periods into account. This does not guarantee that the needed grace period will actually start.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj»h]”hŒ Parameters”…”�”}”(hj½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M• hjµubj )�”}”(hhh]”j)�”}”(hŒZ``struct rcu_gp_seq *gsp`` location to place combined normal/expedited grace-period state ”h]”(j)�”}”(hŒ``struct rcu_gp_seq *gsp``”h]”j)�”}”(hjÚh]”hŒstruct rcu_gp_seq *gsp”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M’ hjÔubj2)�”}”(hhh]”hÝ)�”}”(hŒ>location to place combined normal/expedited grace-period state”h]”hŒ>location to place combined normal/expedited grace-period state”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïh´M’ hjðubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïh´M’ hjÑubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjµubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjh]”hŒ Description”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M” hjµubhÝ)�”}”(hXÿPlaces the normal and expedited grace-period states in **gsp**. This state value can be passed to a later call to cond_synchronize_rcu_full() or poll_state_synchronize_rcu_full() to determine whether or not a grace period (whether normal or expedited) has elapsed in the meantime. The rcu_gp_seq structure takes up twice the memory of an unsigned long, but is guaranteed to see all grace periods. In contrast, the combined state occupies less memory, but can sometimes fail to take grace periods into account.”h]”(hŒ7Places the normal and expedited grace-period states in ”…”�”}”(hj+h²hh³Nh´Nubjõ)�”}”(hŒ**gsp**”h]”hŒgsp”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj+ubhXÁ. This state value can be passed to a later call to cond_synchronize_rcu_full() or poll_state_synchronize_rcu_full() to determine whether or not a grace period (whether normal or expedited) has elapsed in the meantime. The rcu_gp_seq structure takes up twice the memory of an unsigned long, but is guaranteed to see all grace periods. In contrast, the combined state occupies less memory, but can sometimes fail to take grace periods into account.”…”�”}”(hj+h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M“ hjµubhÝ)�”}”(hŒIThis does not guarantee that the needed grace period will actually start.”h]”hŒIThis does not guarantee that the needed grace period will actually start.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mœ hjµubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'start_poll_synchronize_rcu (C function)”Œc.start_poll_synchronize_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ/unsigned long start_poll_synchronize_rcu (void)”h]”j)�”}”(hŒ.unsigned long start_poll_synchronize_rcu(void)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjwh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MÍ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwh²hh³j‰h´MÍ ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjwh²hh³j‰h´MÍ ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwh²hh³j‰h´MÍ ubj{)�”}”(hŒstart_poll_synchronize_rcu”h]”j�)�”}”(hŒstart_poll_synchronize_rcu”h]”hŒstart_poll_synchronize_rcu”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjwh²hh³j‰h´MÍ ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÐubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÌubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjwh²hh³j‰h´MÍ ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjsh²hh³j‰h´MÍ ubah}”(h]”jnah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‰h´MÍ hjph²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Snapshot and start RCU grace period”h]”hŒ#Snapshot and start RCU grace period”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MÍ hjûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjph²hh³j‰h´MÍ ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX_**Parameters** ``void`` no arguments **Description** Returns a cookie that is used by a later call to cond_synchronize_rcu() or poll_state_synchronize_rcu() to determine whether or not a full grace period has elapsed in the meantime. If the needed grace period is not already slated to start, notifies RCU core of the need for that grace period.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MÑ hjubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj?h]”hŒvoid”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khj9ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jTh´KhjUubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj9ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jTh´Khj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjzh]”hŒ Description”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjxubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´KhjubhÝ)�”}”(hX%Returns a cookie that is used by a later call to cond_synchronize_rcu() or poll_state_synchronize_rcu() to determine whether or not a full grace period has elapsed in the meantime. If the needed grace period is not already slated to start, notifies RCU core of the need for that grace period.”h]”hX%Returns a cookie that is used by a later call to cond_synchronize_rcu() or poll_state_synchronize_rcu() to determine whether or not a full grace period has elapsed in the meantime. If the needed grace period is not already slated to start, notifies RCU core of the need for that grace period.”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MÎ hjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,start_poll_synchronize_rcu_full (C function)”Œ!c.start_poll_synchronize_rcu_full”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=void start_poll_synchronize_rcu_full (struct rcu_gp_seq *gsp)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hj»h²hh³jÍh´Mß ubj{)�”}”(hŒstart_poll_synchronize_rcu_full”h]”j�)�”}”(hŒstart_poll_synchronize_rcu_full”h]”hŒstart_poll_synchronize_rcu_full”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj»h²hh³jÍh´Mß ubjœ)�”}”(hŒ(struct rcu_gp_seq *gsp)”h]”j¢)�”}”(hŒstruct rcu_gp_seq *gsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøubh)�”}”(hhh]”j�)�”}”(hŒ rcu_gp_seq”h]”hŒ rcu_gp_seq”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jâsbŒ!c.start_poll_synchronize_rcu_full”†”asbuh1hhjøubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjøubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjHh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjøubj�)�”}”(hŒgsp”h]”hŒgsp”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjøubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjôubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj»h²hh³jÍh´Mß ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj·h²hh³jÍh´Mß ubah}”(h]”j²ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÍh´Mß hj´h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/Take a full snapshot and start RCU grace period”h]”hŒ/Take a full snapshot and start RCU grace period”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mß hj|h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj´h²hh³jÍh´Mß ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj—jæj—jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``struct rcu_gp_seq *gsp`` value from get_state_synchronize_rcu_full() or start_poll_synchronize_rcu_full() **Description** Places the normal and expedited grace-period states in ***gs**. This state value can be passed to a later call to cond_synchronize_rcu_full() or poll_state_synchronize_rcu_full() to determine whether or not a grace period (whether normal or expedited) has elapsed in the meantime. If the needed grace period is not already slated to start, notifies RCU core of the need for that grace period.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¡h]”hŒ Parameters”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mã hj›ubj )�”}”(hhh]”j)�”}”(hŒl``struct rcu_gp_seq *gsp`` value from get_state_synchronize_rcu_full() or start_poll_synchronize_rcu_full() ”h]”(j)�”}”(hŒ``struct rcu_gp_seq *gsp``”h]”j)�”}”(hjÀh]”hŒstruct rcu_gp_seq *gsp”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mà hjºubj2)�”}”(hhh]”hÝ)�”}”(hŒPvalue from get_state_synchronize_rcu_full() or start_poll_synchronize_rcu_full()”h]”hŒPvalue from get_state_synchronize_rcu_full() or start_poll_synchronize_rcu_full()”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÕh´Mà hjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕh´Mà hj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj›ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjûh]”hŒ Description”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mâ hj›ubhÝ)�”}”(hX‰Places the normal and expedited grace-period states in ***gs**. This state value can be passed to a later call to cond_synchronize_rcu_full() or poll_state_synchronize_rcu_full() to determine whether or not a grace period (whether normal or expedited) has elapsed in the meantime. If the needed grace period is not already slated to start, notifies RCU core of the need for that grace period.”h]”(hŒ7Places the normal and expedited grace-period states in ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ***gs**”h]”hŒ*gs”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhXK. This state value can be passed to a later call to cond_synchronize_rcu_full() or poll_state_synchronize_rcu_full() to determine whether or not a grace period (whether normal or expedited) has elapsed in the meantime. If the needed grace period is not already slated to start, notifies RCU core of the need for that grace period.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Má hj›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'poll_state_synchronize_rcu (C function)”Œc.poll_state_synchronize_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8bool poll_state_synchronize_rcu (unsigned long oldstate)”h]”j)�”}”(hŒ7bool poll_state_synchronize_rcu(unsigned long oldstate)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjNh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mò ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNh²hh³j_h´Mò ubj{)�”}”(hŒpoll_state_synchronize_rcu”h]”j�)�”}”(hŒpoll_state_synchronize_rcu”h]”hŒpoll_state_synchronize_rcu”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjNh²hh³j_h´Mò ubjœ)�”}”(hŒ(unsigned long oldstate)”h]”j¢)�”}”(hŒunsigned long oldstate”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŠubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŠubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŠubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŠubj�)�”}”(hŒoldstate”h]”hŒoldstate”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŠubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj†ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjNh²hh³j_h´Mò ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjJh²hh³j_h´Mò ubah}”(h]”jEah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j_h´Mò hjGh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Has the specified RCU grace period completed?”h]”hŒ-Has the specified RCU grace period completed?”…”�”}”(hjðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mò hjíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjGh²hh³j_h´Mò ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXì**Parameters** ``unsigned long oldstate`` value from get_state_synchronize_rcu() or start_poll_synchronize_rcu() **Description** If a full RCU grace period has elapsed since the earlier call from which **oldstate** was obtained, return **true**, otherwise return **false**. If **false** is returned, it is the caller's responsibility to invoke this function later on until it does return **true**. Alternatively, the caller can explicitly wait for a grace period, for example, by passing **oldstate** to either cond_synchronize_rcu() or cond_synchronize_rcu_expedited() on the one hand or by directly invoking either synchronize_rcu() or synchronize_rcu_expedited() on the other. Yes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than a billion grace periods (and way more on a 64-bit system!). Those needing to keep old state values for very long time periods (many hours even on 32-bit systems) should check them occasionally and either refresh them or set a flag indicating that the grace period has completed. Alternatively, they can use get_completed_synchronize_rcu() to get a guaranteed-completed grace-period state. In addition, because oldstate compresses the grace-period state for both normal and expedited grace periods into a single unsigned long, it can miss a grace period when synchronize_rcu() runs concurrently with synchronize_rcu_expedited(). If this is unacceptable, please instead use the _full() variant of these polling APIs. This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **oldstate**, and that returned at the end of this function.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mö hj ubj )�”}”(hhh]”j)�”}”(hŒb``unsigned long oldstate`` value from get_state_synchronize_rcu() or start_poll_synchronize_rcu() ”h]”(j)�”}”(hŒ``unsigned long oldstate``”h]”j)�”}”(hj1h]”hŒunsigned long oldstate”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mó hj+ubj2)�”}”(hhh]”hÝ)�”}”(hŒFvalue from get_state_synchronize_rcu() or start_poll_synchronize_rcu()”h]”hŒFvalue from get_state_synchronize_rcu() or start_poll_synchronize_rcu()”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jFh´Mó hjGubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj+ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jFh´Mó hj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjlh]”hŒ Description”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mõ hj ubhÝ)�”}”(hX'If a full RCU grace period has elapsed since the earlier call from which **oldstate** was obtained, return **true**, otherwise return **false**. If **false** is returned, it is the caller's responsibility to invoke this function later on until it does return **true**. Alternatively, the caller can explicitly wait for a grace period, for example, by passing **oldstate** to either cond_synchronize_rcu() or cond_synchronize_rcu_expedited() on the one hand or by directly invoking either synchronize_rcu() or synchronize_rcu_expedited() on the other.”h]”(hŒIIf a full RCU grace period has elapsed since the earlier call from which ”…”�”}”(hj‚h²hh³Nh´Nubjõ)�”}”(hŒ **oldstate**”h]”hŒoldstate”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚ubhŒ was obtained, return ”…”�”}”(hj‚h²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚ubhŒ, otherwise return ”…”�”}”(hj‚h²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚ubhŒ. If ”…”�”}”(hj‚h²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚ubhŒh is returned, it is the caller’s responsibility to invoke this function later on until it does return ”…”�”}”(hj‚h²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚ubhŒ]. Alternatively, the caller can explicitly wait for a grace period, for example, by passing ”…”�”}”(hj‚h²hh³Nh´Nubjõ)�”}”(hŒ **oldstate**”h]”hŒoldstate”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚ubhŒ³ to either cond_synchronize_rcu() or cond_synchronize_rcu_expedited() on the one hand or by directly invoking either synchronize_rcu() or synchronize_rcu_expedited() on the other.”…”�”}”(hj‚h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mô hj ubhÝ)�”}”(hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than a billion grace periods (and way more on a 64-bit system!). Those needing to keep old state values for very long time periods (many hours even on 32-bit systems) should check them occasionally and either refresh them or set a flag indicating that the grace period has completed. Alternatively, they can use get_completed_synchronize_rcu() to get a guaranteed-completed grace-period state.”h]”hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than a billion grace periods (and way more on a 64-bit system!). Those needing to keep old state values for very long time periods (many hours even on 32-bit systems) should check them occasionally and either refresh them or set a flag indicating that the grace period has completed. Alternatively, they can use get_completed_synchronize_rcu() to get a guaranteed-completed grace-period state.”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mý hj ubhÝ)�”}”(hXFIn addition, because oldstate compresses the grace-period state for both normal and expedited grace periods into a single unsigned long, it can miss a grace period when synchronize_rcu() runs concurrently with synchronize_rcu_expedited(). If this is unacceptable, please instead use the _full() variant of these polling APIs.”h]”hXFIn addition, because oldstate compresses the grace-period state for both normal and expedited grace periods into a single unsigned long, it can miss a grace period when synchronize_rcu() runs concurrently with synchronize_rcu_expedited(). If this is unacceptable, please instead use the _full() variant of these polling APIs.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mhj ubhÝ)�”}”(hŒàThis function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **oldstate**, and that returned at the end of this function.”h]”(hŒ¤This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided ”…”�”}”(hjh²hh³Nh´Nubjõ)�”}”(hŒ **oldstate**”h]”hŒoldstate”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubhŒ0, and that returned at the end of this function.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M hj ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,poll_state_synchronize_rcu_full (C function)”Œ!c.poll_state_synchronize_rcu_full”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ=bool poll_state_synchronize_rcu_full (struct rcu_gp_seq *gsp)”h]”j)�”}”(hŒah"]”h$]”h&]”uh1j1hjXh²hh³jih´M0ubj{)�”}”(hŒpoll_state_synchronize_rcu_full”h]”j�)�”}”(hŒpoll_state_synchronize_rcu_full”h]”hŒpoll_state_synchronize_rcu_full”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjxubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjXh²hh³jih´M0ubjœ)�”}”(hŒ(struct rcu_gp_seq *gsp)”h]”j¢)�”}”(hŒstruct rcu_gp_seq *gsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj”ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”ubh)�”}”(hhh]”j�)�”}”(hŒ rcu_gp_seq”h]”hŒ rcu_gp_seq”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¸Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j~sbŒ!c.poll_state_synchronize_rcu_full”†”asbuh1hhj”ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj”ubj�)�”}”(hŒgsp”h]”hŒgsp”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjXh²hh³jih´M0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjTh²hh³jih´M0ubah}”(h]”jOah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jih´M0hjQh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Has the specified RCU grace period completed?”h]”hŒ-Has the specified RCU grace period completed?”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M0hj h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjQh²hh³jih´M0ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj3 jæj3 jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXZ**Parameters** ``struct rcu_gp_seq *gsp`` value from get_state_synchronize_rcu_full() or start_poll_synchronize_rcu_full() **Description** If a full RCU grace period has elapsed since the earlier call from which *gsp was obtained, return **true**, otherwise return **false**. If **false** is returned, it is the caller's responsibility to invoke this function later on until it does return **true**. Alternatively, the caller can explicitly wait for a grace period, for example, by passing **gsp** to cond_synchronize_rcu() or by directly invoking synchronize_rcu(). Yes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than a billion grace periods (and way more on a 64-bit system!). Those needing to keep rcu_gp_seq values for very long time periods (many hours even on 32-bit systems) should check them occasionally and either refresh them or set a flag indicating that the grace period has completed. Alternatively, they can use get_completed_synchronize_rcu_full() to get a guaranteed-completed grace-period state. This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **gsp**, and that returned at the end of this function. And this guarantee requires that the root rcu_node structure's ->gp_seq field be checked instead of that of the rcu_state structure. The problem is that the just-ending grace-period's callbacks can be invoked between the time that the root rcu_node structure's ->gp_seq field is updated and the time that the rcu_state structure's ->gp_seq field is updated. Therefore, if a single synchronize_rcu() is to cause a subsequent poll_state_synchronize_rcu_full() to return **true**, then the root rcu_node structure is the one that needs to be polled.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj= h]”hŒ Parameters”…”�”}”(hj? h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj; ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M4hj7 ubj )�”}”(hhh]”j)�”}”(hŒl``struct rcu_gp_seq *gsp`` value from get_state_synchronize_rcu_full() or start_poll_synchronize_rcu_full() ”h]”(j)�”}”(hŒ``struct rcu_gp_seq *gsp``”h]”j)�”}”(hj\ h]”hŒstruct rcu_gp_seq *gsp”…”�”}”(hj^ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjZ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M1hjV ubj2)�”}”(hhh]”hÝ)�”}”(hŒPvalue from get_state_synchronize_rcu_full() or start_poll_synchronize_rcu_full()”h]”hŒPvalue from get_state_synchronize_rcu_full() or start_poll_synchronize_rcu_full()”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jq h´M1hjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjV ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jq h´M1hjS ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj7 ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj— h]”hŒ Description”…”�”}”(hj™ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M3hj7 ubhÝ)�”}”(hX¬If a full RCU grace period has elapsed since the earlier call from which *gsp was obtained, return **true**, otherwise return **false**. If **false** is returned, it is the caller's responsibility to invoke this function later on until it does return **true**. Alternatively, the caller can explicitly wait for a grace period, for example, by passing **gsp** to cond_synchronize_rcu() or by directly invoking synchronize_rcu().”h]”(hŒIIf a full RCU grace period has elapsed since the earlier call from which ”…”�”}”(hj­ h²hh³Nh´Nubjp‡)�”}”(hŒ"*gsp was obtained, return **true**”h]”hŒ gsp was obtained, return **true*”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj­ ubhŒ, otherwise return ”…”�”}”(hj­ h²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hjÇ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ ubhŒ. If ”…”�”}”(hj­ h²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hjÙ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ ubhŒh is returned, it is the caller’s responsibility to invoke this function later on until it does return ”…”�”}”(hj­ h²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hjë h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ ubhŒ]. Alternatively, the caller can explicitly wait for a grace period, for example, by passing ”…”�”}”(hj­ h²hh³Nh´Nubjõ)�”}”(hŒ**gsp**”h]”hŒgsp”…”�”}”(hjý h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ ubhŒE to cond_synchronize_rcu() or by directly invoking synchronize_rcu().”…”�”}”(hj­ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M2hj7 ubhÝ)�”}”(hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than a billion grace periods (and way more on a 64-bit system!). Those needing to keep rcu_gp_seq values for very long time periods (many hours even on 32-bit systems) should check them occasionally and either refresh them or set a flag indicating that the grace period has completed. Alternatively, they can use get_completed_synchronize_rcu_full() to get a guaranteed-completed grace-period state.”h]”hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than a billion grace periods (and way more on a 64-bit system!). Those needing to keep rcu_gp_seq values for very long time periods (many hours even on 32-bit systems) should check them occasionally and either refresh them or set a flag indicating that the grace period has completed. Alternatively, they can use get_completed_synchronize_rcu_full() to get a guaranteed-completed grace-period state.”…”�”}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M9hj7 ubhÝ)�”}”(hXThis function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **gsp**, and that returned at the end of this function. And this guarantee requires that the root rcu_node structure's ->gp_seq field be checked instead of that of the rcu_state structure. The problem is that the just-ending grace-period's callbacks can be invoked between the time that the root rcu_node structure's ->gp_seq field is updated and the time that the rcu_state structure's ->gp_seq field is updated. Therefore, if a single synchronize_rcu() is to cause a subsequent poll_state_synchronize_rcu_full() to return **true**, then the root rcu_node structure is the one that needs to be polled.”h]”(hŒ¤This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided ”…”�”}”(hj%!h²hh³Nh´Nubjõ)�”}”(hŒ**gsp**”h]”hŒgsp”…”�”}”(hj-!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%!ubhX, and that returned at the end of this function. And this guarantee requires that the root rcu_node structure’s ->gp_seq field be checked instead of that of the rcu_state structure. The problem is that the just-ending grace-period’s callbacks can be invoked between the time that the root rcu_node structure’s ->gp_seq field is updated and the time that the rcu_state structure’s ->gp_seq field is updated. Therefore, if a single synchronize_rcu() is to cause a subsequent poll_state_synchronize_rcu_full() to return ”…”�”}”(hj%!h²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hj?!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%!ubhŒF, then the root rcu_node structure is the one that needs to be polled.”…”�”}”(hj%!h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MChj7 ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!cond_synchronize_rcu (C function)”Œc.cond_synchronize_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2void cond_synchronize_rcu (unsigned long oldstate)”h]”j)�”}”(hŒ1void cond_synchronize_rcu(unsigned long oldstate)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjx!h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjt!h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjt!h²hh³j†!h´M\ubj{)�”}”(hŒcond_synchronize_rcu”h]”j�)�”}”(hŒcond_synchronize_rcu”h]”hŒcond_synchronize_rcu”…”�”}”(hj™!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•!ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjt!h²hh³j†!h´M\ubjœ)�”}”(hŒ(unsigned long oldstate)”h]”j¢)�”}”(hŒunsigned long oldstate”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjµ!h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj±!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÃ!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±!ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjÑ!h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj±!ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjß!h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj±!ubj�)�”}”(hŒoldstate”h]”hŒoldstate”…”�”}”(hjí!h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±!ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj­!ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjt!h²hh³j†!h´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjp!h²hh³j†!h´M\ubah}”(h]”jk!ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j†!h´M\hjm!h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Conditionally wait for an RCU grace period”h]”hŒ*Conditionally wait for an RCU grace period”…”�”}”(hj"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M\hj"h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjm!h²hh³j†!h´M\ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj/"jæj/"jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXs**Parameters** ``unsigned long oldstate`` value from get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited() **Description** If a full RCU grace period has elapsed since the earlier call to get_state_synchronize_rcu() or start_poll_synchronize_rcu(), just return. Otherwise, invoke synchronize_rcu() to wait for a full grace period. Yes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine. This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **oldstate** and that returned at the end of this function.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj9"h]”hŒ Parameters”…”�”}”(hj;"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj7"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M`hj3"ubj )�”}”(hhh]”j)�”}”(hŒ‹``unsigned long oldstate`` value from get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited() ”h]”(j)�”}”(hŒ``unsigned long oldstate``”h]”j)�”}”(hjX"h]”hŒunsigned long oldstate”…”�”}”(hjZ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjV"ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M]hjR"ubj2)�”}”(hhh]”hÝ)�”}”(hŒovalue from get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited()”h]”hŒovalue from get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited()”…”�”}”(hjq"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jm"h´M]hjn"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjR"ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jm"h´M]hjO"ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj3"ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj“"h]”hŒ Description”…”�”}”(hj•"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‘"ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M_hj3"ubhÝ)�”}”(hŒÏIf a full RCU grace period has elapsed since the earlier call to get_state_synchronize_rcu() or start_poll_synchronize_rcu(), just return. Otherwise, invoke synchronize_rcu() to wait for a full grace period.”h]”hŒÏIf a full RCU grace period has elapsed since the earlier call to get_state_synchronize_rcu() or start_poll_synchronize_rcu(), just return. Otherwise, invoke synchronize_rcu() to wait for a full grace period.”…”�”}”(hj©"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M^hj3"ubhÝ)�”}”(hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine.”h]”hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine.”…”�”}”(hj¸"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mbhj3"ubhÝ)�”}”(hŒßThis function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **oldstate** and that returned at the end of this function.”h]”(hŒ¤This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided ”…”�”}”(hjÇ"h²hh³Nh´Nubjõ)�”}”(hŒ **oldstate**”h]”hŒoldstate”…”�”}”(hjÏ"h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÇ"ubhŒ/ and that returned at the end of this function.”…”�”}”(hjÇ"h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mghj3"ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&cond_synchronize_rcu_full (C function)”Œc.cond_synchronize_rcu_full”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7void cond_synchronize_rcu_full (struct rcu_gp_seq *gsp)”h]”j)�”}”(hŒ6void cond_synchronize_rcu_full(struct rcu_gp_seq *gsp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj#h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Muubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj#h²hh³j#h´Muubj{)�”}”(hŒcond_synchronize_rcu_full”h]”j�)�”}”(hŒcond_synchronize_rcu_full”h]”hŒcond_synchronize_rcu_full”…”�”}”(hj)#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%#ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj#h²hh³j#h´Muubjœ)�”}”(hŒ(struct rcu_gp_seq *gsp)”h]”j¢)�”}”(hŒstruct rcu_gp_seq *gsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjE#h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjA#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjR#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjA#ubh)�”}”(hhh]”j�)�”}”(hŒ rcu_gp_seq”h]”hŒ rcu_gp_seq”…”�”}”(hjc#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj`#ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”je#Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j+#sbŒc.cond_synchronize_rcu_full”†”asbuh1hhjA#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒ#h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjA#ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‘#h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjA#ubj�)�”}”(hŒgsp”h]”hŒgsp”…”�”}”(hjž#h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjA#ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj=#ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj#h²hh³j#h´Muubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj#h²hh³j#h´Muubah}”(h]”jû"ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j#h´Muhjý"h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Conditionally wait for an RCU grace period”h]”hŒ*Conditionally wait for an RCU grace period”…”�”}”(hjÈ#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MuhjÅ#h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjý"h²hh³j#h´Muubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjà#jæjà#jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXÎ**Parameters** ``struct rcu_gp_seq *gsp`` value from get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() **Description** If a full RCU grace period has elapsed since the call to get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() from which **gsp** was obtained, just return. Otherwise, invoke synchronize_rcu() to wait for a full grace period. Yes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine. This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **gsp** and that returned at the end of this function.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjê#h]”hŒ Parameters”…”�”}”(hjì#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjè#ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Myhjä#ubj )�”}”(hhh]”j)�”}”(hŒš``struct rcu_gp_seq *gsp`` value from get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() ”h]”(j)�”}”(hŒ``struct rcu_gp_seq *gsp``”h]”j)�”}”(hj $h]”hŒstruct rcu_gp_seq *gsp”…”�”}”(hj $h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mvhj$ubj2)�”}”(hhh]”hÝ)�”}”(hŒ~value from get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full()”h]”hŒ~value from get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full()”…”�”}”(hj"$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j$h´Mvhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj$ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$h´Mvhj$ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjä#ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjD$h]”hŒ Description”…”�”}”(hjF$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjB$ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mxhjä#ubhÝ)�”}”(hX If a full RCU grace period has elapsed since the call to get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() from which **gsp** was obtained, just return. Otherwise, invoke synchronize_rcu() to wait for a full grace period.”h]”(hŒ¸If a full RCU grace period has elapsed since the call to get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() from which ”…”�”•5}”(hjZ$h²hh³Nh´Nubjõ)�”}”(hŒ**gsp**”h]”hŒgsp”…”�”}”(hjb$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjZ$ubhŒa was obtained, just return. Otherwise, invoke synchronize_rcu() to wait for a full grace period.”…”�”}”(hjZ$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mwhjä#ubhÝ)�”}”(hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine.”h]”hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine.”…”�”}”(hj{$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M}hjä#ubhÝ)�”}”(hŒÚThis function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **gsp** and that returned at the end of this function.”h]”(hŒ¤This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided ”…”�”}”(hjŠ$h²hh³Nh´Nubjõ)�”}”(hŒ**gsp**”h]”hŒgsp”…”�”}”(hj’$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŠ$ubhŒ/ and that returned at the end of this function.”…”�”}”(hjŠ$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M‚hjä#ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_barrier (C function)”Œ c.rcu_barrier”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_barrier (void)”h]”j)�”}”(hŒvoid rcu_barrier(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjË$h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÇ$h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M)ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚ$h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇ$h²hh³jÙ$h´M)ubj{)�”}”(hŒ rcu_barrier”h]”j�)�”}”(hŒ rcu_barrier”h]”hŒ rcu_barrier”…”�”}”(hjì$h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjè$ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÇ$h²hh³jÙ$h´M)ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj%ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÇ$h²hh³jÙ$h´M)ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÃ$h²hh³jÙ$h´M)ubah}”(h]”j¾$ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÙ$h´M)hjÀ$h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ7Wait until all in-flight call_rcu() callbacks complete.”h]”hŒ7Wait until all in-flight call_rcu() callbacks complete.”…”�”}”(hj2%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M)hj/%h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀ$h²hh³jÙ$h´M)ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjJ%jæjJ%jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX>**Parameters** ``void`` no arguments **Description** Note that this primitive does not necessarily wait for an RCU grace period to complete. For example, if there are no RCU callbacks queued anywhere in the system, then rcu_barrier() is within its rights to return immediately, without waiting for anything, much less an RCU grace period. In fact, rcu_barrier() will normally not result in any RCU grace periods beyond those that were already destined to be executed. In kernels built with CONFIG_RCU_LAZY=y, this function also hurries all pending lazy RCU callbacks.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjT%h]”hŒ Parameters”…”�”}”(hjV%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjR%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M-hjN%ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjs%h]”hŒvoid”…”�”}”(hju%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjq%ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khjm%ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjŒ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆ%h´Khj‰%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjm%ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆ%h´Khjj%ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjN%ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj®%h]”hŒ Description”…”�”}”(hj°%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¬%ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´KhjN%ubhÝ)�”}”(hXŸNote that this primitive does not necessarily wait for an RCU grace period to complete. For example, if there are no RCU callbacks queued anywhere in the system, then rcu_barrier() is within its rights to return immediately, without waiting for anything, much less an RCU grace period. In fact, rcu_barrier() will normally not result in any RCU grace periods beyond those that were already destined to be executed.”h]”hXŸNote that this primitive does not necessarily wait for an RCU grace period to complete. For example, if there are no RCU callbacks queued anywhere in the system, then rcu_barrier() is within its rights to return immediately, without waiting for anything, much less an RCU grace period. In fact, rcu_barrier() will normally not result in any RCU grace periods beyond those that were already destined to be executed.”…”�”}”(hjÄ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M*hjN%ubhÝ)�”}”(hŒcIn kernels built with CONFIG_RCU_LAZY=y, this function also hurries all pending lazy RCU callbacks.”h]”hŒcIn kernels built with CONFIG_RCU_LAZY=y, this function also hurries all pending lazy RCU callbacks.”…”�”}”(hjÓ%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M1hjN%ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"rcu_barrier_throttled (C function)”Œc.rcu_barrier_throttled”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ!void rcu_barrier_throttled (void)”h]”j)�”}”(hŒ void rcu_barrier_throttled(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjþ%h²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M˜ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ%h²hh³j&h´M˜ubj{)�”}”(hŒrcu_barrier_throttled”h]”j�)�”}”(hŒrcu_barrier_throttled”h]”hŒrcu_barrier_throttled”…”�”}”(hj#&h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj&ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjþ%h²hh³j&h´M˜ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj?&h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj;&ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7&ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjþ%h²hh³j&h´M˜ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjú%h²hh³j&h´M˜ubah}”(h]”jõ%ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j&h´M˜hj÷%h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Do rcu_barrier(), but limit to one per second”h]”hŒ-Do rcu_barrier(), but limit to one per second”…”�”}”(hji&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M˜hjf&h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj÷%h²hh³j&h´M˜ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj�&jæj�&jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXl**Parameters** ``void`` no arguments **Description** This can be thought of as guard rails around rcu_barrier() that permits unrestricted userspace use, at least assuming the hardware's try_cmpxchg() is robust. There will be at most one call per second to rcu_barrier() system-wide from use of this function, which means that callers might needlessly wait a second or three. This is intended for use by test suites to avoid OOM by flushing RCU callbacks from the previous test before starting the next. See the rcutree.do_rcu_barrier module parameter for more information. Why not simply make rcu_barrier() more scalable? That might be the eventual endpoint, but let's keep it simple for the time being. Note that the module parameter infrastructure serializes calls to a given .set() function, but should concurrent .set() invocation ever be possible, we are ready!”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‹&h]”hŒ Parameters”…”�”}”(hj�&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‰&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Mœhj…&ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjª&h]”hŒvoid”…”�”}”(hj¬&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khj¤&ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjÃ&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¿&h´KhjÀ&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¤&ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿&h´Khj¡&ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj…&ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjå&h]”hŒ Description”…”�”}”(hjç&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã&ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´Khj…&ubhÝ)�”}”(hXBThis can be thought of as guard rails around rcu_barrier() that permits unrestricted userspace use, at least assuming the hardware's try_cmpxchg() is robust. There will be at most one call per second to rcu_barrier() system-wide from use of this function, which means that callers might needlessly wait a second or three.”h]”hXDThis can be thought of as guard rails around rcu_barrier() that permits unrestricted userspace use, at least assuming the hardware’s try_cmpxchg() is robust. There will be at most one call per second to rcu_barrier() system-wide from use of this function, which means that callers might needlessly wait a second or three.”…”�”}”(hjû&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M™hj…&ubhÝ)�”}”(hŒÆThis is intended for use by test suites to avoid OOM by flushing RCU callbacks from the previous test before starting the next. See the rcutree.do_rcu_barrier module parameter for more information.”h]”hŒÆThis is intended for use by test suites to avoid OOM by flushing RCU callbacks from the previous test before starting the next. See the rcutree.do_rcu_barrier module parameter for more information.”…”�”}”(hj 'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´MŸhj…&ubhÝ)�”}”(hX&Why not simply make rcu_barrier() more scalable? That might be the eventual endpoint, but let's keep it simple for the time being. Note that the module parameter infrastructure serializes calls to a given .set() function, but should concurrent .set() invocation ever be possible, we are ready!”h]”hX(Why not simply make rcu_barrier() more scalable? That might be the eventual endpoint, but let’s keep it simple for the time being. Note that the module parameter infrastructure serializes calls to a given .set() function, but should concurrent .set() invocation ever be possible, we are ready!”…”�”}”(hj'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:401: ./kernel/rcu/tree.c”h´M£hj…&ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&synchronize_rcu_expedited (C function)”Œc.synchronize_rcu_expedited”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%void synchronize_rcu_expedited (void)”h]”j)�”}”(hŒ$void synchronize_rcu_expedited(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjH'h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjD'h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW'h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjD'h²hh³jV'h´MŽubj{)�”}”(hŒsynchronize_rcu_expedited”h]”j�)�”}”(hŒsynchronize_rcu_expedited”h]”hŒsynchronize_rcu_expedited”…”�”}”(hji'h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hje'ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjD'h²hh³jV'h´MŽubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj…'h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�'ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj}'ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjD'h²hh³jV'h´MŽubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj@'h²hh³jV'h´MŽubah}”(h]”j;'ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jV'h´MŽhj='h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒBrute-force RCU grace period”h]”hŒBrute-force RCU grace period”…”�”}”(hj¯'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MŽhj¬'h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj='h²hh³jV'h´MŽubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÇ'jæjÇ'jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXÂ**Parameters** ``void`` no arguments **Description** Wait for an RCU grace period, but expedite it. The basic idea is to IPI all non-idle non-nohz online CPUs. The IPI handler checks whether the CPU is in an RCU critical section, and if so, it sets a flag that causes the outermost rcu_read_unlock() to report the quiescent state for RCU-preempt or asks the scheduler for help for RCU-sched. On the other hand, if the CPU is not in an RCU read-side critical section, the IPI handler reports the quiescent state immediately. Although this is a great improvement over previous expedited implementations, it is still unfriendly to real-time workloads, so is thus not recommended for any sort of common-case code. In fact, if you are using synchronize_rcu_expedited() in a loop, please restructure your code to batch your updates, and then use a single synchronize_rcu() instead. This has the same semantics as (but is more brutal than) synchronize_rcu().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÑ'h]”hŒ Parameters”…”�”}”(hjÓ'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÏ'ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M’hjË'ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjð'h]”hŒvoid”…”�”}”(hjò'h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjî'ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´Khjê'ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj (h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(h´Khj(ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjê'ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(h´Khjç'ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjË'ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj+(h]”hŒ Description”…”�”}”(hj-(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)(ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´KhjË'ubhÝ)�”}”(hXÙWait for an RCU grace period, but expedite it. The basic idea is to IPI all non-idle non-nohz online CPUs. The IPI handler checks whether the CPU is in an RCU critical section, and if so, it sets a flag that causes the outermost rcu_read_unlock() to report the quiescent state for RCU-preempt or asks the scheduler for help for RCU-sched. On the other hand, if the CPU is not in an RCU read-side critical section, the IPI handler reports the quiescent state immediately.”h]”hXÙWait for an RCU grace period, but expedite it. The basic idea is to IPI all non-idle non-nohz online CPUs. The IPI handler checks whether the CPU is in an RCU critical section, and if so, it sets a flag that causes the outermost rcu_read_unlock() to report the quiescent state for RCU-preempt or asks the scheduler for help for RCU-sched. On the other hand, if the CPU is not in an RCU read-side critical section, the IPI handler reports the quiescent state immediately.”…”�”}”(hjA(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M�hjË'ubhÝ)�”}”(hX`Although this is a great improvement over previous expedited implementations, it is still unfriendly to real-time workloads, so is thus not recommended for any sort of common-case code. In fact, if you are using synchronize_rcu_expedited() in a loop, please restructure your code to batch your updates, and then use a single synchronize_rcu() instead.”h]”hX`Although this is a great improvement over previous expedited implementations, it is still unfriendly to real-time workloads, so is thus not recommended for any sort of common-case code. In fact, if you are using synchronize_rcu_expedited() in a loop, please restructure your code to batch your updates, and then use a single synchronize_rcu() instead.”…”�”}”(hjP(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M—hjË'ubhÝ)�”}”(hŒKThis has the same semantics as (but is more brutal than) synchronize_rcu().”h]”hŒKThis has the same semantics as (but is more brutal than) synchronize_rcu().”…”�”}”(hj_(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MžhjË'ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ1start_poll_synchronize_rcu_expedited (C function)”Œ&c.start_poll_synchronize_rcu_expedited”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9unsigned long start_poll_synchronize_rcu_expedited (void)”h]”j)�”}”(hŒ8unsigned long start_poll_synchronize_rcu_expedited(void)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŽ(h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŠ(h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´Müubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŠ(h²hh³jœ(h´Müubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj«(h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŠ(h²hh³jœ(h´Müubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¹(h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŠ(h²hh³jœ(h´Müubj{)�”}”(hŒ$start_poll_synchronize_rcu_expedited”h]”j�)�”}”(hŒ$start_poll_synchronize_rcu_expedited”h]”hŒ$start_poll_synchronize_rcu_expedited”…”�”}”(hjË(h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇ(ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŠ(h²hh³jœ(h´Müubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjç(h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjã(ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjß(ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjŠ(h²hh³jœ(h´Müubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj†(h²hh³jœ(h´Müubah}”(h]”j�(ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jœ(h´Mühjƒ(h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ;Snapshot current RCU state and start expedited grace period”h]”hŒ;Snapshot current RCU state and start expedited grace period”…”�”}”(hj)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´Mühj)h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjƒ(h²hh³jœ(h´Müubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj))jæj))jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX}**Parameters** ``void`` no arguments **Description** Returns a cookie to pass to a call to cond_synchronize_rcu(), cond_synchronize_rcu_expedited(), or poll_state_synchronize_rcu(), allowing them to determine whether or not any sort of grace period has elapsed in the meantime. If the needed expedited grace period is not already slated to start, initiates that grace period.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj3)h]”hŒ Parameters”…”�”}”(hj5)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´Mhj-)ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjR)h]”hŒvoid”…”�”}”(hjT)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjP)ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´KhjL)ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjk)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jg)h´Khjh)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjL)ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jg)h´KhjI)ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj-)ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�)h]”hŒ Description”…”�”}”(hj�)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´Khj-)ubhÝ)�”}”(hXCReturns a cookie to pass to a call to cond_synchronize_rcu(), cond_synchronize_rcu_expedited(), or poll_state_synchronize_rcu(), allowing them to determine whether or not any sort of grace period has elapsed in the meantime. If the needed expedited grace period is not already slated to start, initiates that grace period.”h]”hXCReturns a cookie to pass to a call to cond_synchronize_rcu(), cond_synchronize_rcu_expedited(), or poll_state_synchronize_rcu(), allowing them to determine whether or not any sort of grace period has elapsed in the meantime. If the needed expedited grace period is not already slated to start, initiates that grace period.”…”�”}”(hj£)h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´Mýhj-)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ6start_poll_synchronize_rcu_expedited_full (C function)”Œ+c.start_poll_synchronize_rcu_expedited_full”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGvoid start_poll_synchronize_rcu_expedited_full (struct rcu_gp_seq *gsp)”h]”j)�”}”(hŒFvoid start_poll_synchronize_rcu_expedited_full(struct rcu_gp_seq *gsp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÒ)h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÎ)h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjá)h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎ)h²hh³jà)h´Mubj{)�”}”(hŒ)start_poll_synchronize_rcu_expedited_full”h]”j�)�”}”(hŒ)start_poll_synchronize_rcu_expedited_full”h]”hŒ)start_poll_synchronize_rcu_expedited_full”…”�”}”(hjó)h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjï)ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÎ)h²hh³jà)h´Mubjœ)�”}”(hŒ(struct rcu_gp_seq *gsp)”h]”j¢)�”}”(hŒstruct rcu_gp_seq *gsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj *ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj *ubh)�”}”(hhh]”j�)�”}”(hŒ rcu_gp_seq”h]”hŒ rcu_gp_seq”…”�”}”(hj-*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj**ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j/*Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jõ)sbŒ+c.start_poll_synchronize_rcu_expedited_full”†”asbuh1hhj *ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjM*h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj *ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj[*h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj *ubj�)�”}”(hŒgsp”h]”hŒgsp”…”�”}”(hjh*h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj *ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÎ)h²hh³jà)h´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÊ)h²hh³jà)h´Mubah}”(h]”jÅ)ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jà)h´MhjÇ)h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5Take a full snapshot and start expedited grace period”h]”hŒ5Take a full snapshot and start expedited grace period”…”�”}”(hj’*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´Mhj�*h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÇ)h²hh³jà)h´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjª*jæjª*jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXâ**Parameters** ``struct rcu_gp_seq *gsp`` Place to put snapshot of grace-period state **Description** Places the normal and expedited grace-period states in gsp. This state value can be passed to a later call to cond_synchronize_rcu_full() or poll_state_synchronize_rcu_full() to determine whether or not a grace period (whether normal or expedited) has elapsed in the meantime. If the needed expedited grace period is not already slated to start, initiates that grace period.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj´*h]”hŒ Parameters”…”�”}”(hj¶*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²*ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M"hj®*ubj )�”}”(hhh]”j)�”}”(hŒG``struct rcu_gp_seq *gsp`` Place to put snapshot of grace-period state ”h]”(j)�”}”(hŒ``struct rcu_gp_seq *gsp``”h]”j)�”}”(hjÓ*h]”hŒstruct rcu_gp_seq *gsp”…”�”}”(hjÕ*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MhjÍ*ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+Place to put snapshot of grace-period state”h]”hŒ+Place to put snapshot of grace-period state”…”�”}”(hjì*h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jè*h´Mhjé*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍ*ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jè*h´MhjÊ*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj®*ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj+h]”hŒ Description”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj +ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M!hj®*ubhÝ)�”}”(hXwPlaces the normal and expedited grace-period states in gsp. This state value can be passed to a later call to cond_synchronize_rcu_full() or poll_state_synchronize_rcu_full() to determine whether or not a grace period (whether normal or expedited) has elapsed in the meantime. If the needed expedited grace period is not already slated to start, initiates that grace period.”h]”hXwPlaces the normal and expedited grace-period states in gsp. This state value can be passed to a later call to cond_synchronize_rcu_full() or poll_state_synchronize_rcu_full() to determine whether or not a grace period (whether normal or expedited) has elapsed in the meantime. If the needed expedited grace period is not already slated to start, initiates that grace period.”…”�”}”(hj$+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M hj®*ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ+cond_synchronize_rcu_expedited (C function)”Œ c.cond_synchronize_rcu_expedited”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒah"]”h$]”h&]”uh1j1hjO+h²hh³ja+h´M0ubj{)�”}”(hŒcond_synchronize_rcu_expedited”h]”j�)�”}”(hŒcond_synchronize_rcu_expedited”h]”hŒcond_synchronize_rcu_expedited”…”�”}”(hjt+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjp+ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjO+h²hh³ja+h´M0ubjœ)�”}”(hŒ(unsigned long oldstate)”h]”j¢)�”}”(hŒunsigned long oldstate”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj�+h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŒ+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŒ+ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¬+h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŒ+ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjº+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŒ+ubj�)�”}”(hŒoldstate”h]”hŒoldstate”…”�”}”(hjÈ+h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŒ+ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjˆ+ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjO+h²hh³ja+h´M0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjK+h²hh³ja+h´M0ubah}”(h]”jF+ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³ja+h´M0hjH+h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4Conditionally wait for an expedited RCU grace period”h]”hŒ4Conditionally wait for an expedited RCU grace period”…”�”}”(hjò+h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M0hjï+h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjH+h²hh³ja+h´M0ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj ,jæj ,jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX±**Parameters** ``unsigned long oldstate`` value from get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited() **Description** If any type of full RCU grace period has elapsed since the earlier call to get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited(), just return. Otherwise, invoke synchronize_rcu_expedited() to wait for a full grace period. Yes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine. This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **oldstate** and that returned at the end of this function.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj,h]”hŒ Parameters”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M4hj,ubj )�”}”(hhh]”j)�”}”(hŒ‹``unsigned long oldstate`` value from get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited() ”h]”(j)�”}”(hŒ``unsigned long oldstate``”h]”j)�”}”(hj3,h]”hŒunsigned long oldstate”…”�”}”(hj5,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1,ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M2hj-,ubj2)�”}”(hhh]”hÝ)�”}”(hŒovalue from get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited()”h]”hŒovalue from get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited()”…”�”}”(hjL,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jH,h´M2hjI,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj-,ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jH,h´M2hj*,ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj,ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjn,h]”hŒ Description”…”�”}”(hjp,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjl,ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M4hj,ubhÝ)�”}”(hX If any type of full RCU grace period has elapsed since the earlier call to get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited(), just return. Otherwise, invoke synchronize_rcu_expedited() to wait for a full grace period.”h]”hX If any type of full RCU grace period has elapsed since the earlier call to get_state_synchronize_rcu(), start_poll_synchronize_rcu(), or start_poll_synchronize_rcu_expedited(), just return. Otherwise, invoke synchronize_rcu_expedited() to wait for a full grace period.”…”�”}”(hj„,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M3hj,ubhÝ)�”}”(hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine.”h]”hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine.”…”�”}”(hj“,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M8hj,ubhÝ)�”}”(hŒßThis function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **oldstate** and that returned at the end of this function.”h]”(hŒ¤This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided ”…”�”}”(hj¢,h²hh³Nh´Nubjõ)�”}”(hŒ **oldstate**”h]”hŒoldstate”…”�”}”(hjª,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¢,ubhŒ/ and that returned at the end of this function.”…”�”}”(hj¢,h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´M=hj,ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ0cond_synchronize_rcu_expedited_full (C function)”Œ%c.cond_synchronize_rcu_expedited_full”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒAvoid cond_synchronize_rcu_expedited_full (struct rcu_gp_seq *gsp)”h]”j)�”}”(hŒ@void cond_synchronize_rcu_expedited_full(struct rcu_gp_seq *gsp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjã,h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjß,h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjò,h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjß,h²hh³jñ,h´MKubj{)�”}”(hŒ#cond_synchronize_rcu_expedited_full”h]”j�)�”}”(hŒ#cond_synchronize_rcu_expedited_full”h]”hŒ#cond_synchronize_rcu_expedited_full”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjß,h²hh³jñ,h´MKubjœ)�”}”(hŒ(struct rcu_gp_seq *gsp)”h]”j¢)�”}”(hŒstruct rcu_gp_seq *gsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj -h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj--h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-ubh)�”}”(hhh]”j�)�”}”(hŒ rcu_gp_seq”h]”hŒ rcu_gp_seq”…”�”}”(hj>-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;-ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j@-Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j-sbŒ%c.cond_synchronize_rcu_expedited_full”†”asbuh1hhj-ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^-h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjl-h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj-ubj�)�”}”(hŒgsp”h]”hŒgsp”…”�”}”(hjy-h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj-ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj-ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjß,h²hh³jñ,h´MKubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÛ,h²hh³jñ,h´MKubah}”(h]”jÖ,ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jñ,h´MKhjØ,h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4Conditionally wait for an expedited RCU grace period”h]”hŒ4Conditionally wait for an expedited RCU grace period”…”�”}”(hj£-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MKhj -h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjØ,h²hh³jñ,h´MKubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj»-jæj»-jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXØ**Parameters** ``struct rcu_gp_seq *gsp`` value from get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() **Description** If a full RCU grace period has elapsed since the call to get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() from which **gsp** was obtained, just return. Otherwise, invoke synchronize_rcu_expedited() to wait for a full grace period. Yes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine. This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **gsp** and that returned at the end of this function.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÅ-h]”hŒ Parameters”…”�”}”(hjÇ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MOhj¿-ubj )�”}”(hhh]”j)�”}”(hŒš``struct rcu_gp_seq *gsp`` value from get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() ”h]”(j)�”}”(hŒ``struct rcu_gp_seq *gsp``”h]”j)�”}”(hjä-h]”hŒstruct rcu_gp_seq *gsp”…”�”}”(hjæ-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MLhjÞ-ubj2)�”}”(hhh]”hÝ)�”}”(hŒ~value from get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full()”h]”hŒ~value from get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full()”…”�”}”(hjý-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jù-h´MLhjú-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÞ-ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jù-h´MLhjÛ-ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¿-ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj.h]”hŒ Description”…”�”}”(hj!.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MNhj¿-ubhÝ)�”}”(hX*If a full RCU grace period has elapsed since the call to get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() from which **gsp** was obtained, just return. Otherwise, invoke synchronize_rcu_expedited() to wait for a full grace period.”h]”(hŒ¸If a full RCU grace period has elapsed since the call to get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or start_poll_synchronize_rcu_expedited_full() from which ”…”�”}”(hj5.h²hh³Nh´Nubjõ)�”}”(hŒ**gsp**”h]”hŒgsp”…”�”}”(hj=.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5.ubhŒk was obtained, just return. Otherwise, invoke synchronize_rcu_expedited() to wait for a full grace period.”…”�”}”(hj5.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MMhj¿-ubhÝ)�”}”(hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine.”h]”hXYes, this function does not take counter wrap into account. But counter wrap is harmless. If the counter wraps, we have waited for more than 2 billion grace periods (and way more on a 64-bit system!), so waiting for a couple of additional grace periods should be just fine.”…”�”}”(hjV.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MShj¿-ubhÝ)�”}”(hŒÚThis function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided **gsp** and that returned at the end of this function.”h]”(hŒ¤This function provides the same memory-ordering guarantees that would be provided by a synchronize_rcu() that was invoked at the call to the function that provided ”…”�”}”(hje.h²hh³Nh´Nubjõ)�”}”(hŒ**gsp**”h]”hŒgsp”…”�”}”(hjm.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhje.ubhŒ/ and that returned at the end of this function.”…”�”}”(hje.h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:403: ./kernel/rcu/tree_exp.h”h´MXhj¿-ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&rcu_read_lock_held_common (C function)”Œc.rcu_read_lock_held_common”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ*bool rcu_read_lock_held_common (bool *ret)”h]”j)�”}”(hŒ)bool rcu_read_lock_held_common(bool *ret)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj¦.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¢.h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KDubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj´.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢.h²hh³j³.h´KDubj{)�”}”(hŒrcu_read_lock_held_common”h]”j�)�”}”(hŒrcu_read_lock_held_common”h]”hŒrcu_read_lock_held_common”…”�”}”(hjÆ.h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂ.ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¢.h²hh³j³.h´KDubjœ)�”}”(hŒ (bool *ret)”h]”j¢)�”}”(hŒ bool *ret”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjâ.h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÞ.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjï.h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÞ.ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjý.h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÞ.ubj�)�”}”(hŒret”h]”hŒret”…”�”}”(hj /h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÞ.ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÚ.ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¢.h²hh³j³.h´KDubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjž.h²hh³j³.h´KDubah}”(h]”j™.ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j³.h´KDhj›.h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4might we be in RCU-sched read-side critical section?”h]”hŒ4might we be in RCU-sched read-side critical section?”…”�”}”(hj4/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KDhj1/h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj›.h²hh³j³.h´KDubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjL/jæjL/jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX÷**Parameters** ``bool *ret`` Best guess answer if lockdep cannot be relied on **Description** Returns true if lockdep must be ignored, in which case ``*ret`` contains the best guess described below. Otherwise returns false, in which case ``*ret`` tells the caller nothing and the caller should instead consult lockdep. If CONFIG_DEBUG_LOCK_ALLOC is selected, set ``*ret`` to nonzero iff in an RCU-sched read-side critical section. In absence of CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an RCU-sched read-side critical section unless it can prove otherwise. Note that disabling of preemption (including disabling irqs) counts as an RCU-sched read-side critical section. This is useful for debug checks in functions that required that they be called within an RCU-sched read-side critical section. Check debug_lockdep_rcu_enabled() to prevent false positives during boot and while lockdep is disabled. Note that if the CPU is in the idle loop from an RCU point of view (ie: that we are in the section between ct_idle_enter() and ct_idle_exit()) then rcu_read_lock_held() sets ``*ret`` to false even if the CPU did an rcu_read_lock(). The reason for this is that RCU ignores CPUs that are in such a section, considering these as in extended quiescent state, so such a CPU is effectively never in an RCU read-side critical section regardless of what RCU primitives it invokes. This state of affairs is required --- we need to keep an RCU-free window in idle where the CPU may possibly enter into low power mode. This way we can notice an extended quiescent state to other CPUs that started a grace period. Otherwise we would delay any grace period as long as we run in the idle task. Similarly, we avoid claiming an RCU read lock held if the current CPU is offline.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjV/h]”hŒ Parameters”…”�”}”(hjX/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjT/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KHhjP/ubj )�”}”(hhh]”j)�”}”(hŒ?``bool *ret`` Best guess answer if lockdep cannot be relied on ”h]”(j)�”}”(hŒ ``bool *ret``”h]”j)�”}”(hju/h]”hŒ bool *ret”…”�”}”(hjw/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjs/ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KEhjo/ubj2)�”}”(hhh]”hÝ)�”}”(hŒ0Best guess answer if lockdep cannot be relied on”h]”hŒ0Best guess answer if lockdep cannot be relied on”…”�”}”(hjŽ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠ/h´KEhj‹/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjo/ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠ/h´KEhjl/ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjP/ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj°/h]”hŒ Description”…”�”}”(hj²/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®/ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KGhjP/ubhÝ)�”}”(hŒáReturns true if lockdep must be ignored, in which case ``*ret`` contains the best guess described below. Otherwise returns false, in which case ``*ret`` tells the caller nothing and the caller should instead consult lockdep.”h]”(hŒ7Returns true if lockdep must be ignored, in which case ”…”�”}”(hjÆ/h²hh³Nh´Nubj)�”}”(hŒ``*ret``”h]”hŒ*ret”…”�”}”(hjÎ/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ/ubhŒR contains the best guess described below. Otherwise returns false, in which case ”…”�”}”(hjÆ/h²hh³Nh´Nubj)�”}”(hŒ``*ret``”h]”hŒ*ret”…”�”}”(hjà/h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÆ/ubhŒH tells the caller nothing and the caller should instead consult lockdep.”…”�”}”(hjÆ/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KFhjP/ubhÝ)�”}”(hXæIf CONFIG_DEBUG_LOCK_ALLOC is selected, set ``*ret`` to nonzero iff in an RCU-sched read-side critical section. In absence of CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an RCU-sched read-side critical section unless it can prove otherwise. Note that disabling of preemption (including disabling irqs) counts as an RCU-sched read-side critical section. This is useful for debug checks in functions that required that they be called within an RCU-sched read-side critical section.”h]”(hŒ,If CONFIG_DEBUG_LOCK_ALLOC is selected, set ”…”�”}”(hjù/h²hh³Nh´Nubj)�”}”(hŒ``*ret``”h]”hŒ*ret”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjù/ubhX² to nonzero iff in an RCU-sched read-side critical section. In absence of CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an RCU-sched read-side critical section unless it can prove otherwise. Note that disabling of preemption (including disabling irqs) counts as an RCU-sched read-side critical section. This is useful for debug checks in functions that required that they be called within an RCU-sched read-side critical section.”…”�”}”(hjù/h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KKhjP/ubhÝ)�”}”(hŒgCheck debug_lockdep_rcu_enabled() to prevent false positives during boot and while lockdep is disabled.”h]”hŒgCheck debug_lockdep_rcu_enabled() to prevent false positives during boot and while lockdep is disabled.”…”�”}”(hj0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KThjP/ubhÝ)�”}”(hX Note that if the CPU is in the idle loop from an RCU point of view (ie: that we are in the section between ct_idle_enter() and ct_idle_exit()) then rcu_read_lock_held() sets ``*ret`` to false even if the CPU did an rcu_read_lock(). The reason for this is that RCU ignores CPUs that are in such a section, considering these as in extended quiescent state, so such a CPU is effectively never in an RCU read-side critical section regardless of what RCU primitives it invokes. This state of affairs is required --- we need to keep an RCU-free window in idle where the CPU may possibly enter into low power mode. This way we can notice an extended quiescent state to other CPUs that started a grace period. Otherwise we would delay any grace period as long as we run in the idle task.”h]”(hŒ®Note that if the CPU is in the idle loop from an RCU point of view (ie: that we are in the section between ct_idle_enter() and ct_idle_exit()) then rcu_read_lock_held() sets ”…”�”}”(hj)0h²hh³Nh´Nubj)�”}”(hŒ``*ret``”h]”hŒ*ret”…”�”}”(hj10h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj)0ubhXW to false even if the CPU did an rcu_read_lock(). The reason for this is that RCU ignores CPUs that are in such a section, considering these as in extended quiescent state, so such a CPU is effectively never in an RCU read-side critical section regardless of what RCU primitives it invokes. This state of affairs is required --- we need to keep an RCU-free window in idle where the CPU may possibly enter into low power mode. This way we can notice an extended quiescent state to other CPUs that started a grace period. Otherwise we would delay any grace period as long as we run in the idle task.”…”�”}”(hj)0h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KWhjP/ubhÝ)�”}”(hŒQSimilarly, we avoid claiming an RCU read lock held if the current CPU is offline.”h]”hŒQSimilarly, we avoid claiming an RCU read lock held if the current CPU is offline.”…”�”}”(hjJ0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KchjP/ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_async_hurry (C function)”Œc.rcu_async_hurry”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_async_hurry (void)”h]”j)�”}”(hŒvoid rcu_async_hurry(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjy0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhju0h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´K¡ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆ0h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hju0h²hh³j‡0h´K¡ubj{)�”}”(hŒrcu_async_hurry”h]”j�)�”}”(hŒrcu_async_hurry”h]”hŒrcu_async_hurry”…”�”}”(hjš0h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj–0ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhju0h²hh³j‡0h´K¡ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¶0h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj²0ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj®0ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hju0h²hh³j‡0h´K¡ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjq0h²hh³j‡0h´K¡ubah}”(h]”jl0ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‡0h´K¡hjn0h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Make future async RCU callbacks not lazy.”h]”hŒ)Make future async RCU callbacks not lazy.”…”�”}”(hjà0h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´K¡hjÝ0h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjn0h²hh³j‡0h´K¡ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjø0jæjø0jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒš**Parameters** ``void`` no arguments **Description** After a call to this function, future calls to call_rcu() will be processed in a timely fashion.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj1h]”hŒ Parameters”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´K¥hjü0ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj!1h]”hŒvoid”…”�”}”(hj#1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khj1ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj:1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j61h´Khj71ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j61h´Khj1ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjü0ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj\1h]”hŒ Description”…”�”}”(hj^1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjZ1ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khjü0ubhÝ)�”}”(hŒ`After a call to this function, future calls to call_rcu() will be processed in a timely fashion.”h]”hŒ`After a call to this function, future calls to call_rcu() will be processed in a timely fashion.”…”�”}”(hjr1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´K¢hjü0ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_async_relax (C function)”Œc.rcu_async_relax”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_async_relax (void)”h]”j)�”}”(hŒvoid rcu_async_relax(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¡1h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj�1h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´K®ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°1h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�1h²hh³j¯1h´K®ubj{)�”}”(hŒrcu_async_relax”h]”j�)�”}”(hŒrcu_async_relax”h]”hŒrcu_async_relax”…”�”}”(hjÂ1h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾1ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�1h²hh³j¯1h´K®ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÞ1h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚ1ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÖ1ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj�1h²hh³j¯1h´K®ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj™1h²hh³j¯1h´K®ubah}”(h]”j”1ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¯1h´K®hj–1h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Make future async RCU callbacks lazy.”h]”hŒ%Make future async RCU callbacks lazy.”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´K®hj2h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj–1h²hh³j¯1h´K®ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj 2jæj 2jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒ˜**Parameters** ``void`` no arguments **Description** After a call to this function, future calls to call_rcu() will be processed in a lazy fashion.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj*2h]”hŒ Parameters”…”�”}”(hj,2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj(2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´K²hj$2ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjI2h]”hŒvoid”…”�”}”(hjK2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG2ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KhjC2ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjb2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j^2h´Khj_2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjC2ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j^2h´Khj@2ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj$2ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj„2h]”hŒ Description”…”�”}”(hj†2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‚2ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khj$2ubhÝ)�”}”(hŒ^After a call to this function, future calls to call_rcu() will be processed in a lazy fashion.”h]”hŒ^After a call to this function, future calls to call_rcu() will be processed in a lazy fashion.”…”�”}”(hjš2h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´K¯hj$2ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_expedite_gp (C function)”Œc.rcu_expedite_gp”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_expedite_gp (void)”h]”j)�”}”(hŒvoid rcu_expedite_gp(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÉ2h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÅ2h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KÉubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjØ2h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÅ2h²hh³j×2h´KÉubj{)�”}”(hŒrcu_expedite_gp”h]”j�)�”}”(hŒrcu_expedite_gp”h]”hŒrcu_expedite_gp”…”�”}”(hjê2h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæ2ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÅ2h²hh³j×2h´KÉubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj3ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjþ2ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÅ2h²hh³j×2h´KÉubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÁ2h²hh³j×2h´KÉubah}”(h]”j¼2ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j×2h´KÉhj¾2h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!Expedite future RCU grace periods”h]”hŒ!Expedite future RCU grace periods”…”�”}”(hj03h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KÉhj-3h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¾2h²hh³j×2h´KÉubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjH3jæjH3jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒÝ**Parameters** ``void`` no arguments **Description** After a call to this function, future calls to synchronize_rcu() and friends act as the corresponding synchronize_rcu_expedited() function had instead been called.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjR3h]”hŒ Parameters”…”�”}”(hjT3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjP3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KÍhjL3ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjq3h]”hŒvoid”…”�”}”(hjs3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjo3ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khjk3ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjŠ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†3h´Khj‡3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjk3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†3h´Khjh3ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjL3ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¬3h]”hŒ Description”…”�”}”(hj®3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjª3ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KhjL3ubhÝ)�”}”(hŒ£After a call to this function, future calls to synchronize_rcu() and friends act as the corresponding synchronize_rcu_expedited() function had instead been called.”h]”hŒ£After a call to this function, future calls to synchronize_rcu() and friends act as the corresponding synchronize_rcu_expedited() function had instead been called.”…”�”•}”(hjÂ3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KÊhjL3ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_unexpedite_gp (C function)”Œc.rcu_unexpedite_gp”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_unexpedite_gp (void)”h]”j)�”}”(hŒvoid rcu_unexpedite_gp(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjñ3h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjí3h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KÖubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjí3h²hh³jÿ3h´KÖubj{)�”}”(hŒrcu_unexpedite_gp”h]”j�)�”}”(hŒrcu_unexpedite_gp”h]”hŒrcu_unexpedite_gp”…”�”}”(hj4h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjí3h²hh³jÿ3h´KÖubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj.4h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj*4ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj&4ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjí3h²hh³jÿ3h´KÖubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjé3h²hh³jÿ3h´KÖubah}”(h]”jä3ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÿ3h´KÖhjæ3h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)Cancel prior rcu_expedite_gp() invocation”h]”hŒ)Cancel prior rcu_expedite_gp() invocation”…”�”}”(hjX4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KÖhjU4h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjæ3h²hh³jÿ3h´KÖubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjp4jæjp4jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXk**Parameters** ``void`` no arguments **Description** Undo a prior call to rcu_expedite_gp(). If all prior calls to rcu_expedite_gp() are undone by a subsequent call to rcu_unexpedite_gp(), and if the rcu_expedited sysfs/boot parameter is not set, then all subsequent calls to synchronize_rcu() and friends will return to their normal non-expedited behavior.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjz4h]”hŒ Parameters”…”�”}”(hj|4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KÚhjt4ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj™4h]”hŒvoid”…”�”}”(hj›4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khj“4ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj²4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j®4h´Khj¯4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj“4ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j®4h´Khj�4ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjt4ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÔ4h]”hŒ Description”…”�”}”(hjÖ4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÒ4ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khjt4ubhÝ)�”}”(hX1Undo a prior call to rcu_expedite_gp(). If all prior calls to rcu_expedite_gp() are undone by a subsequent call to rcu_unexpedite_gp(), and if the rcu_expedited sysfs/boot parameter is not set, then all subsequent calls to synchronize_rcu() and friends will return to their normal non-expedited behavior.”h]”hX1Undo a prior call to rcu_expedite_gp(). If all prior calls to rcu_expedite_gp() are undone by a subsequent call to rcu_unexpedite_gp(), and if the rcu_expedited sysfs/boot parameter is not set, then all subsequent calls to synchronize_rcu() and friends will return to their normal non-expedited behavior.”…”�”}”(hjê4h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´K×hjt4ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_read_lock_held (C function)”Œc.rcu_read_lock_held”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ%int notrace rcu_read_lock_held (void)”h]”j)�”}”(hŒ$int notrace rcu_read_lock_held(void)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj5h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5h²hh³j'5h´MFubhŒnotrace”…”�”}”(hj5h²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:5h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5h²hh³j'5h´MFubj{)�”}”(hŒrcu_read_lock_held”h]”j�)�”}”(hŒrcu_read_lock_held”h]”hŒrcu_read_lock_held”…”�”}”(hjL5h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjH5ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj5h²hh³j'5h´MFubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjh5h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjd5ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj`5ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj5h²hh³j'5h´MFubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj5h²hh³j'5h´MFubah}”(h]”j 5ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j'5h´MFhj5h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.might we be in RCU read-side critical section?”h]”hŒ.might we be in RCU read-side critical section?”…”�”}”(hj’5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MFhj�5h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj5h²hh³j'5h´MFubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjª5jæjª5jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXq**Parameters** ``void`` no arguments **Description** If CONFIG_DEBUG_LOCK_ALLOC is selected, returns nonzero iff in an RCU read-side critical section. In absence of CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an RCU read-side critical section unless it can prove otherwise. This is useful for debug checks in functions that require that they be called within an RCU read-side critical section. Checks debug_lockdep_rcu_enabled() to prevent false positives during boot and while lockdep is disabled. Note that rcu_read_lock() and the matching rcu_read_unlock() must occur in the same context, for example, it is illegal to invoke rcu_read_unlock() in process context if the matching rcu_read_lock() was invoked from within an irq handler. Note that rcu_read_lock() is disallowed if the CPU is either idle or offline from an RCU perspective, so check for those as well.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj´5h]”hŒ Parameters”…”�”}”(hj¶5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²5ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MJhj®5ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjÓ5h]”hŒvoid”…”�”}”(hjÕ5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´KhjÍ5ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjì5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jè5h´Khjé5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍ5ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jè5h´KhjÊ5ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj®5ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj6h]”hŒ Description”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj 6ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khj®5ubhÝ)�”}”(hXZIf CONFIG_DEBUG_LOCK_ALLOC is selected, returns nonzero iff in an RCU read-side critical section. In absence of CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an RCU read-side critical section unless it can prove otherwise. This is useful for debug checks in functions that require that they be called within an RCU read-side critical section.”h]”hXZIf CONFIG_DEBUG_LOCK_ALLOC is selected, returns nonzero iff in an RCU read-side critical section. In absence of CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an RCU read-side critical section unless it can prove otherwise. This is useful for debug checks in functions that require that they be called within an RCU read-side critical section.”…”�”}”(hj$6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MGhj®5ubhÝ)�”}”(hŒhChecks debug_lockdep_rcu_enabled() to prevent false positives during boot and while lockdep is disabled.”h]”hŒhChecks debug_lockdep_rcu_enabled() to prevent false positives during boot and while lockdep is disabled.”…”�”}”(hj36h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MMhj®5ubhÝ)�”}”(hŒîNote that rcu_read_lock() and the matching rcu_read_unlock() must occur in the same context, for example, it is illegal to invoke rcu_read_unlock() in process context if the matching rcu_read_lock() was invoked from within an irq handler.”h]”hŒîNote that rcu_read_lock() and the matching rcu_read_unlock() must occur in the same context, for example, it is illegal to invoke rcu_read_unlock() in process context if the matching rcu_read_lock() was invoked from within an irq handler.”…”�”}”(hjB6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MPhj®5ubhÝ)�”}”(hŒ�Note that rcu_read_lock() is disallowed if the CPU is either idle or offline from an RCU perspective, so check for those as well.”h]”hŒ�Note that rcu_read_lock() is disallowed if the CPU is either idle or offline from an RCU perspective, so check for those as well.”…”�”}”(hjQ6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MUhj®5ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"rcu_read_lock_bh_held (C function)”Œc.rcu_read_lock_bh_held”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(int notrace rcu_read_lock_bh_held (void)”h]”j)�”}”(hŒ'int notrace rcu_read_lock_bh_held(void)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj€6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj|6h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mdubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|6h²hh³jŽ6h´MdubhŒnotrace”…”�”}”(hj|6h²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡6h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj|6h²hh³jŽ6h´Mdubj{)�”}”(hŒrcu_read_lock_bh_held”h]”j�)�”}”(hŒrcu_read_lock_bh_held”h]”hŒrcu_read_lock_bh_held”…”�”}”(hj³6h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¯6ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj|6h²hh³jŽ6h´Mdubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÏ6h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjË6ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÇ6ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj|6h²hh³jŽ6h´Mdubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjx6h²hh³jŽ6h´Mdubah}”(h]”js6ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŽ6h´Mdhju6h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1might we be in RCU-bh read-side critical section?”h]”hŒ1might we be in RCU-bh read-side critical section?”…”�”}”(hjù6h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mdhjö6h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhju6h²hh³jŽ6h´Mdubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj7jæj7jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXW**Parameters** ``void`` no arguments **Description** Check for bottom half being disabled, which covers both the CONFIG_PROVE_RCU and not cases. Note that if someone uses rcu_read_lock_bh(), but then later enables BH, lockdep (if enabled) will show the situation. This is useful for debug checks in functions that require that they be called within an RCU read-side critical section. Check debug_lockdep_rcu_enabled() to prevent false positives during boot. Note that rcu_read_lock_bh() is disallowed if the CPU is either idle or offline from an RCU perspective, so check for those as well.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj7h]”hŒ Parameters”…”�”}”(hj7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mhhj7ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj:7h]”hŒvoid”…”�”}”(hj<7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj87ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khj47ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjS7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jO7h´KhjP7ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj47ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jO7h´Khj17ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj7ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hju7h]”hŒ Description”…”�”}”(hjw7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjs7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khj7ubhÝ)�”}”(hXLCheck for bottom half being disabled, which covers both the CONFIG_PROVE_RCU and not cases. Note that if someone uses rcu_read_lock_bh(), but then later enables BH, lockdep (if enabled) will show the situation. This is useful for debug checks in functions that require that they be called within an RCU read-side critical section.”h]”hXLCheck for bottom half being disabled, which covers both the CONFIG_PROVE_RCU and not cases. Note that if someone uses rcu_read_lock_bh(), but then later enables BH, lockdep (if enabled) will show the situation. This is useful for debug checks in functions that require that they be called within an RCU read-side critical section.”…”�”}”(hj‹7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mehj7ubhÝ)�”}”(hŒICheck debug_lockdep_rcu_enabled() to prevent false positives during boot.”h]”hŒICheck debug_lockdep_rcu_enabled() to prevent false positives during boot.”…”�”}”(hjš7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mlhj7ubhÝ)�”}”(hŒ„Note that rcu_read_lock_bh() is disallowed if the CPU is either idle or offline from an RCU perspective, so check for those as well.”h]”hŒ„Note that rcu_read_lock_bh() is disallowed if the CPU is either idle or offline from an RCU perspective, so check for those as well.”…”�”}”(hj©7h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mnhj7ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œwakeme_after_rcu (C function)”Œc.wakeme_after_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ-void wakeme_after_rcu (struct rcu_head *head)”h]”j)�”}”(hŒ,void wakeme_after_rcu(struct rcu_head *head)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjØ7h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÔ7h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´M�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç7h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔ7h²hh³jæ7h´M�ubj{)�”}”(hŒwakeme_after_rcu”h]”j�)�”}”(hŒwakeme_after_rcu”h]”hŒwakeme_after_rcu”…”�”}”(hjù7h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõ7ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÔ7h²hh³jæ7h´M�ubjœ)�”}”(hŒ(struct rcu_head *head)”h]”j¢)�”}”(hŒstruct rcu_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj8ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj8ubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hj38h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj08ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j58Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jû7sbŒc.wakeme_after_rcu”†”asbuh1hhj8ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjS8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj8ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hja8h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj8ubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hjn8h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj 8ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÔ7h²hh³jæ7h´M�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÐ7h²hh³jæ7h´M�ubah}”(h]”jË7ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jæ7h´M�hjÍ7h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ5Callback function to awaken a task after grace period”h]”hŒ5Callback function to awaken a task after grace period”…”�”}”(hj˜8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´M�hj•8h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÍ7h²hh³jæ7h´M�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj°8jæj°8jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒ¼**Parameters** ``struct rcu_head *head`` Pointer to rcu_head member within rcu_synchronize structure **Description** Awaken the corresponding task now that a grace period has elapsed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjº8h]”hŒ Parameters”…”�”}”(hj¼8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¸8ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´M‘hj´8ubj )�”}”(hhh]”j)�”}”(hŒV``struct rcu_head *head`` Pointer to rcu_head member within rcu_synchronize structure ”h]”(j)�”}”(hŒ``struct rcu_head *head``”h]”j)�”}”(hjÙ8h]”hŒstruct rcu_head *head”…”�”}”(hjÛ8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×8ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MŽhjÓ8ubj2)�”}”(hhh]”hÝ)�”}”(hŒ;Pointer to rcu_head member within rcu_synchronize structure”h]”hŒ;Pointer to rcu_head member within rcu_synchronize structure”…”�”}”(hjò8h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jî8h´MŽhjï8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓ8ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jî8h´MŽhjÐ8ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj´8ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj9h]”hŒ Description”…”�”}”(hj9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´M�hj´8ubhÝ)�”}”(hŒBAwaken the corresponding task now that a grace period has elapsed.”h]”hŒBAwaken the corresponding task now that a grace period has elapsed.”…”�”}”(hj*9h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´M�hj´8ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#init_rcu_head_on_stack (C function)”Œc.init_rcu_head_on_stack”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3void init_rcu_head_on_stack (struct rcu_head *head)”h]”j)�”}”(hŒ2void init_rcu_head_on_stack(struct rcu_head *head)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjY9h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjU9h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MÜubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjU9h²hh³jg9h´MÜubj{)�”}”(hŒinit_rcu_head_on_stack”h]”j�)�”}”(hŒinit_rcu_head_on_stack”h]”hŒinit_rcu_head_on_stack”…”�”}”(hjz9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjv9ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjU9h²hh³jg9h´MÜubjœ)�”}”(hŒ(struct rcu_head *head)”h]”j¢)�”}”(hŒstruct rcu_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj–9h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj’9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj£9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’9ubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hj´9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj±9ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¶9Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j|9sbŒc.init_rcu_head_on_stack”†”asbuh1hhj’9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ9h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’9ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjâ9h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj’9ubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hjï9h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj’9ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjŽ9ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjU9h²hh³jg9h´MÜubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjQ9h²hh³jg9h´MÜubah}”(h]”jL9ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jg9h´MÜhjN9h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-initialize on-stack rcu_head for debugobjects”h]”hŒ-initialize on-stack rcu_head for debugobjects”…”�”}”(hj:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MÜhj:h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjN9h²hh³jg9h´MÜubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj1:jæj1:jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX·**Parameters** ``struct rcu_head *head`` pointer to rcu_head structure to be initialized **Description** This function informs debugobjects of a new rcu_head structure that has been allocated as an auto variable on the stack. This function is not required for rcu_head structures that are statically defined or that are dynamically allocated on the heap. This function has no effect for !CONFIG_DEBUG_OBJECTS_RCU_HEAD kernel builds.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj;:h]”hŒ Parameters”…”�”}”(hj=:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj9:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Màhj5:ubj )�”}”(hhh]”j)�”}”(hŒJ``struct rcu_head *head`` pointer to rcu_head structure to be initialized ”h]”(j)�”}”(hŒ``struct rcu_head *head``”h]”j)�”}”(hjZ:h]”hŒstruct rcu_head *head”…”�”}”(hj\:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjX:ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MÝhjT:ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/pointer to rcu_head structure to be initialized”h]”hŒ/pointer to rcu_head structure to be initialized”…”�”}”(hjs:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jo:h´MÝhjp:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjT:ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jo:h´MÝhjQ:ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj5:ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj•:h]”hŒ Description”…”�”}”(hj—:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“:ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mßhj5:ubhÝ)�”}”(hXIThis function informs debugobjects of a new rcu_head structure that has been allocated as an auto variable on the stack. This function is not required for rcu_head structures that are statically defined or that are dynamically allocated on the heap. This function has no effect for !CONFIG_DEBUG_OBJECTS_RCU_HEAD kernel builds.”h]”hXIThis function informs debugobjects of a new rcu_head structure that has been allocated as an auto variable on the stack. This function is not required for rcu_head structures that are statically defined or that are dynamically allocated on the heap. This function has no effect for !CONFIG_DEBUG_OBJECTS_RCU_HEAD kernel builds.”…”�”}”(hj«:h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MÞhj5:ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&destroy_rcu_head_on_stack (C function)”Œc.destroy_rcu_head_on_stack”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6void destroy_rcu_head_on_stack (struct rcu_head *head)”h]”j)�”}”(hŒ5void destroy_rcu_head_on_stack(struct rcu_head *head)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÚ:h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÖ:h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé:h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖ:h²hh³jè:h´Mìubj{)�”}”(hŒdestroy_rcu_head_on_stack”h]”j�)�”}”(hŒdestroy_rcu_head_on_stack”h]”hŒdestroy_rcu_head_on_stack”…”�”}”(hjû:h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷:ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÖ:h²hh³jè:h´Mìubjœ)�”}”(hŒ(struct rcu_head *head)”h]”j¢)�”}”(hŒstruct rcu_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;ubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hj5;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2;ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j7;Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jý:sbŒc.destroy_rcu_head_on_stack”†”asbuh1hhj;ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjU;h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjc;h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;ubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hjp;h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj;ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÖ:h²hh³jè:h´Mìubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÒ:h²hh³jè:h´Mìubah}”(h]”jÍ:ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jè:h´MìhjÏ:h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*destroy on-stack rcu_head for debugobjects”h]”hŒ*destroy on-stack rcu_head for debugobjects”…”�”}”(hjš;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mìhj—;h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÏ:h²hh³jè:h´Mìubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj²;jæj²;jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXë**Parameters** ``struct rcu_head *head`` pointer to rcu_head structure to be initialized **Description** This function informs debugobjects that an on-stack rcu_head structure is about to go out of scope. As with init_rcu_head_on_stack(), this function is not required for rcu_head structures that are statically defined or that are dynamically allocated on the heap. Also as with init_rcu_head_on_stack(), this function has no effect for !CONFIG_DEBUG_OBJECTS_RCU_HEAD kernel builds.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¼;h]”hŒ Parameters”…”�”}”(hj¾;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjº;ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mðhj¶;ubj )�”}”(hhh]”j)�”}”(hŒJ``struct rcu_head *head`` pointer to rcu_head structure to be initialized ”h]”(j)�”}”(hŒ``struct rcu_head *head``”h]”j)�”}”(hjÛ;h]”hŒstruct rcu_head *head”…”�”}”(hjÝ;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MíhjÕ;ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/pointer to rcu_head structure to be initialized”h]”hŒ/pointer to rcu_head structure to be initialized”…”�”}”(hjô;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jð;h´Míhjñ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕ;ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð;h´MíhjÒ;ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj¶;ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj<h]”hŒ Description”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mïhj¶;ubhÝ)�”}”(hX}This function informs debugobjects that an on-stack rcu_head structure is about to go out of scope. As with init_rcu_head_on_stack(), this function is not required for rcu_head structures that are statically defined or that are dynamically allocated on the heap. Also as with init_rcu_head_on_stack(), this function has no effect for !CONFIG_DEBUG_OBJECTS_RCU_HEAD kernel builds.”h]”hX}This function informs debugobjects that an on-stack rcu_head structure is about to go out of scope. As with init_rcu_head_on_stack(), this function is not required for rcu_head structures that are statically defined or that are dynamically allocated on the heap. Also as with init_rcu_head_on_stack(), this function has no effect for !CONFIG_DEBUG_OBJECTS_RCU_HEAD kernel builds.”…”�”}”(hj,<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Mîhj¶;ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*get_completed_synchronize_rcu (C function)”Œc.get_completed_synchronize_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2unsigned long get_completed_synchronize_rcu (void)”h]”j)�”}”(hŒ1unsigned long get_completed_synchronize_rcu(void)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj[<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjW<h²hh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MPubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjj<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjW<h²hh³ji<h´MPubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjx<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjW<h²hh³ji<h´MPubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†<h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjW<h²hh³ji<h´MPubj{)�”}”(hŒget_completed_synchronize_rcu”h]”j�)�”}”(hŒget_completed_synchronize_rcu”h]”hŒget_completed_synchronize_rcu”…”�”}”(hj˜<h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”<ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjW<h²hh³ji<h´MPubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj´<h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj°<ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¬<ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjW<h²hh³ji<h´MPubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjS<h²hh³ji<h´MPubah}”(h]”jN<ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³ji<h´MPhjP<h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Return a pre-completed polled state cookie”h]”hŒ*Return a pre-completed polled state cookie”…”�”}”(hjÞ<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MPhjÛ<h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjP<h²hh³ji<h´MPubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjö<jæjö<jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒÊ**Parameters** ``void`` no arguments **Description** Returns a value that will always be treated by functions like poll_state_synchronize_rcu() as a cookie whose grace period has already completed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj=h]”hŒ Parameters”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþ<ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MThjú<ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj=h]”hŒvoid”…”�”}”(hj!=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khj=ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj8=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j4=h´Khj5=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj=ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j4=h´Khj=ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjú<ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjZ=h]”hŒ Description”…”�”}”(hj\=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjX=ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´Khjú<ubhÝ)�”}”(hŒ�Returns a value that will always be treated by functions like poll_state_synchronize_rcu() as a cookie whose grace period has already completed.”h]”hŒ�Returns a value that will always be treated by functions like poll_state_synchronize_rcu() as a cookie whose grace period has already completed.”…”�”}”(hjp=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒX/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:405: ./kernel/rcu/update.c”h´MQhjú<ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ+get_completed_synchronize_srcu (C function)”Œ c.get_completed_synchronize_srcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3unsigned long get_completed_synchronize_srcu (void)”h]”j)�”}”(hŒ2unsigned long get_completed_synchronize_srcu(void)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjŸ=h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›=h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Kmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj®=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›=h²hh³j­=h´Kmubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj¼=h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj›=h²hh³j­=h´Kmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊ=h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj›=h²hh³j­=h´Kmubj{)�”}”(hŒget_completed_synchronize_srcu”h]”j�)�”}”(hŒget_completed_synchronize_srcu”h]”hŒget_completed_synchronize_srcu”…”�”}”(hjÜ=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØ=ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj›=h²hh³j­=h´Kmubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjø=h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjô=ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjð=ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj›=h²hh³j­=h´Kmubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj—=h²hh³j­=h´Kmubah}”(h]”j’=ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­=h´Kmhj”=h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Return a pre-completed polled state cookie”h]”hŒ*Return a pre-completed polled state cookie”…”�”}”(hj">h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Kmhj>h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj”=h²hh³j­=h´Kmubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj:>jæj:>jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒ´**Parameters** ``void`` no arguments **Description** Returns a value that poll_state_synchronize_srcu() will always treat as a cookie whose grace period has already completed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjD>h]”hŒ Parameters”…”�”}”(hjF>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjB>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Kqhj>>ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjc>h]”hŒvoid”…”�”}”(hje>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhja>ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Khj]>ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj|>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jx>h´Khjy>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj]>ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jx>h´KhjZ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj>>ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjž>h]”hŒ Description”…”�”}”(hj >h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjœ>ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Khj>>ubhÝ)�”}”(hŒzReturns a value that poll_state_synchronize_srcu() will always treat as a cookie whose grace period has already completed.”h]”hŒzReturns a value that poll_state_synchronize_srcu() will always treat as a cookie whose grace period has already completed.”…”�”}”(hj´>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Knhj>>ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(same_state_synchronize_srcu (C function)”Œc.same_state_synchronize_srcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒSbool same_state_synchronize_srcu (unsigned long oldstate1, unsigned long oldstate2)”h]”j)�”}”(hŒRbool same_state_synchronize_srcu(unsigned long oldstate1, unsigned long oldstate2)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjã>h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjß>h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjñ>h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjß>h²hh³jð>h´K€ubj{)�”}”(hŒsame_state_synchronize_srcu”h]”j�)�”}”(hŒsame_state_synchronize_srcu”h]”hŒsame_state_synchronize_srcu”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÿ>ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjß>h²hh³jð>h´K€ubjœ)�”}”(hŒ2(unsigned long oldstate1, unsigned long oldstate2)”h]”(j¢)�”}”(hŒunsigned long oldstate1”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj;?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjI?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj?ubj�)�”}”(hŒ oldstate1”h]”hŒ oldstate1”…”�”}”(hjW?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj?ubj¢)�”}”(hŒunsigned long oldstate2”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjp?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjl?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl?ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjŒ?h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjl?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjš?h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjl?ubj�)�”}”(hŒ oldstate2”h]”hŒ oldstate2”…”�”}”(hj¨?h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjl?ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj?ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjß>h²hh³jð>h´K€ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÛ>h²hh³jð>h´K€ubah}”(h]”jÖ>ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jð>h´K€hjØ>h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Are two old-state values identical?”h]”hŒ#Are two old-state values identical?”…”�”}”(hjÒ?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K€hjÏ?h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjØ>h²hh³jð>h´K€ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjê?jæjê?jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``unsigned long oldstate1`` First old-state value. ``unsigned long oldstate2`` Second old-state value. **Description** The two old-state values must have been obtained from either get_state_synchronize_srcu(), start_poll_synchronize_srcu(), or get_completed_synchronize_srcu(). Returns **true** if the two values are identical and **false** otherwise. This allows structures whose lifetimes are tracked by old-state values to push these values to a list header, allowing those structures to be slightly smaller.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjô?h]”hŒ Parameters”…”�”}”(hjö?h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjò?ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K„hjî?ubj )�”}”(hhh]”(j)�”}”(hŒ3``unsigned long oldstate1`` First old-state value. ”h]”(j)�”}”(hŒ``unsigned long oldstate1``”h]”j)�”}”(hj@h]”hŒunsigned long oldstate1”…”�”}”(hj@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K�hj @ubj2)�”}”(hhh]”hÝ)�”}”(hŒFirst old-state value.”h]”hŒFirst old-state value.”…”�”}”(hj,@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(@h´K�hj)@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj @ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(@h´K�hj @ubj)�”}”(hŒ4``unsigned long oldstate2`` Second old-state value. ”h]”(j)�”}”(hŒ``unsigned long oldstate2``”h]”j)�”}”(hjL@h]”hŒunsigned long oldstate2”…”�”}”(hjN@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJ@ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K‚hjF@ubj2)�”}”(hhh]”hÝ)�”}”(hŒSecond old-state value.”h]”hŒSecond old-state value.”…”�”}”(hje@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ja@h´K‚hjb@ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjF@ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³ja@h´K‚hj @ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjî?ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‡@h]”hŒ Description”…”�”}”(hj‰@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…@ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K„hjî?ubhÝ)�”}”(hXŠThe two old-state values must have been obtained from either get_state_synchronize_srcu(), start_poll_synchronize_srcu(), or get_completed_synchronize_srcu(). Returns **true** if the two values are identical and **false** otherwise. This allows structures whose lifetimes are tracked by old-state values to push these values to a list header, allowing those structures to be slightly smaller.”h]”(hŒ¨The two old-state values must have been obtained from either get_state_synchronize_srcu(), start_poll_synchronize_srcu(), or get_completed_synchronize_srcu(). Returns ”…”�”}”(hj�@h²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hj¥@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�@ubhŒ% if the two values are identical and ”…”�”}”(hj�@h²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hj·@h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�@ubhŒ¬ otherwise. This allows structures whose lifetimes are tracked by old-state values to push these values to a list header, allowing those structures to be slightly smaller.”…”�”}”(hj�@h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Kƒhjî?ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ srcu_read_lock_held (C function)”Œc.srcu_read_lock_held”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ7int srcu_read_lock_held (const struct srcu_struct *ssp)”h]”j)�”}”(hŒ6int srcu_read_lock_held(const struct srcu_struct *ssp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjð@h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjì@h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K¥ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿ@h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjì@h²hh³jþ@h´K¥ubj{)�”}”(hŒsrcu_read_lock_held”h]”j�)�”}”(hŒsrcu_read_lock_held”h]”hŒsrcu_read_lock_held”…”�”}”(hjAh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Aubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjì@h²hh³jþ@h´K¥ubjœ)�”}”(hŒ(const struct srcu_struct *ssp)”h]”j¢)�”}”(hŒconst struct srcu_struct *ssp”h]”(j¨)�”}”(hj«h]”hŒconst”…”�”}”(hj-Ah²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)Aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj:Ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)Aubj¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjHAh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj)Aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjUAh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)Aubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjfAh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjcAubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jhAŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jAsbŒc.srcu_read_lock_held”†”asbuh1hhj)Aubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†Ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj)Aubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj”Ah²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj)Aubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hj¡Ah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj)Aubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj%Aubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjì@h²hh³jþ@h´K¥ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjè@h²hh³jþ@h´K¥ubah}”(h]”jã@ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jþ@h´K¥hjå@h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ/might we be in SRCU read-side critical section?”h]”hŒ/might we be in SRCU read-side critical section?”…”�”}”(hjËAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K¥hjÈAh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjå@h²hh³jþ@h´K¥ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjãAjæjãAjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXj**Parameters** ``const struct srcu_struct *ssp`` The srcu_struct structure to check **Description** If CONFIG_DEBUG_LOCK_ALLOC is selected, returns nonzero iff in an SRCU read-side critical section. In absence of CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an SRCU read-side critical section unless it can prove otherwise. Checks debug_lockdep_rcu_enabled() to prevent false positives during boot and while lockdep is disabled. Note that SRCU is based on its own statemachine and it doesn't relies on normal RCU, it can be called from the CPU which is in the idle loop from an RCU point of view or offline.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjíAh]”hŒ Parameters”…”�”}”(hjïAh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjëAubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K©hjçAubj )�”}”(hhh]”j)�”}”(hŒE``const struct srcu_struct *ssp`` The srcu_struct structure to check ”h]”(j)�”}”(hŒ!``const struct srcu_struct *ssp``”h]”j)�”}”(hj Bh]”hŒconst struct srcu_struct *ssp”…”�”}”(hjBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Bubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K¦hjBubj2)�”}”(hhh]”hÝ)�”}”(hŒ"The srcu_struct structure to check”h]”hŒ"The srcu_struct structure to check”…”�”}”(hj%Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!Bh´K¦hj"Bubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjBubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!Bh´K¦hjBubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjçAubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjGBh]”hŒ Description”…”�”}”(hjIBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEBubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K¨hjçAubhÝ)�”}”(hŒãIf CONFIG_DEBUG_LOCK_ALLOC is selected, returns nonzero iff in an SRCU read-side critical section. In absence of CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an SRCU read-side critical section unless it can prove otherwise.”h]”hŒãIf CONFIG_DEBUG_LOCK_ALLOC is selected, returns nonzero iff in an SRCU read-side critical section. In absence of CONFIG_DEBUG_LOCK_ALLOC, this assumes we are in an SRCU read-side critical section unless it can prove otherwise.”…”�”}”(hj]Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K§hjçAubhÝ)�”}”(hŒhChecks debug_lockdep_rcu_enabled() to prevent false positives during boot and while lockdep is disabled.”h]”hŒhChecks debug_lockdep_rcu_enabled() to prevent false positives during boot and while lockdep is disabled.”…”�”}”(hjlBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K¬hjçAubhÝ)�”}”(hŒ²Note that SRCU is based on its own statemachine and it doesn't relies on normal RCU, it can be called from the CPU which is in the idle loop from an RCU point of view or offline.”h]”hŒ´Note that SRCU is based on its own statemachine and it doesn’t relies on normal RCU, it can be called from the CPU which is in the idle loop from an RCU point of view or offline.”…”�”}”(hj{Bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´K¯hjçAubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ srcu_dereference_check (C macro)”Œc.srcu_dereference_check”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒsrcu_dereference_check”h]”j)�”}”(hŒsrcu_dereference_check”h]”j{)�”}”(hŒsrcu_dereference_check”h]”j�)�”}”(hj¤Bh]”hŒsrcu_dereference_check”…”�”}”(hj®Bh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjªBubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¦Bh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Kìubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¢Bh²hh³jÁBh´Kìubah}”(h]”j�Bah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÁBh´KìhjŸBh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŸBh²hh³jÁBh´Kìubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÚBjæjÚBjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ&``srcu_dereference_check (p, ssp, c)``”h]”j)�”}”(hjàBh]”hŒ"srcu_dereference_check (p, ssp, c)”…”�”}”(hjâBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞBubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´KîhjôÖh²hubj•)�”}”(hŒ5fetch SRCU-protected pointer for later dereferencing ”h]”hÝ)�”}”(hŒ4fetch SRCU-protected pointer for later dereferencing”h]”hŒ4fetch SRCU-protected pointer for later dereferencing”…”�”}”(hjúBh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´KìhjöBubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jCh´KìhjôÖh²hubjë)�”}”(hX**Parameters** ``p`` the pointer to fetch and protect for later dereferencing ``ssp`` pointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section. ``c`` condition to check for update-side use **Description** If PROVE_RCU is enabled, invoking this outside of an RCU read-side critical section will result in an RCU-lockdep splat, unless **c** evaluates to 1. The **c** argument will normally be a logical expression containing lockdep_is_held() calls.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjCh]”hŒ Parameters”…”�”}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjCubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´KðhjCubj )�”}”(hhh]”(j)�”}”(hŒ?``p`` the pointer to fetch and protect for later dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hj4Ch]”hŒp”…”�”}”(hj6Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Kíhj.Cubj2)�”}”(hhh]”hÝ)�”}”(hŒ8the pointer to fetch and protect for later dereferencing”h]”hŒ8the pointer to fetch and protect for later dereferencing”…”�”}”(hjMCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jICh´KíhjJCubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jICh´Kíhj+Cubj)�”}”(hŒu``ssp`` pointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section. ”h]”(j)�”}”(hŒ``ssp``”h]”j)�”}”(hjmCh]”hŒssp”…”�”}”(hjoCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjkCubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´KïhjgCubj2)�”}”(hhh]”hÝ)�”}”(hŒlpointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section.”h]”hŒlpointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section.”…”�”}”(hj†Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´KîhjƒCubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjgCubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‚Ch´Kïhj+Cubj)�”}”(hŒ-``c`` condition to check for update-side use ”h]”(j)�”}”(hŒ``c``”h]”j)�”}”(hj§Ch]”hŒc”…”�”}”(hj©Ch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥Cubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Kðhj¡Cubj2)�”}”(hhh]”hÝ)�”}”(hŒ&condition to check for update-side use”h]”hŒ&condition to check for update-side use”…”�”}”(hjÀCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼Ch´Kðhj½Cubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼Ch´Kðhj+Cubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjCubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjâCh]”hŒ Description”…”�”}”(hjäCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjàCubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´KòhjCubhÝ)�”}”(hŒóIf PROVE_RCU is enabled, invoking this outside of an RCU read-side critical section will result in an RCU-lockdep splat, unless **c** evaluates to 1. The **c** argument will normally be a logical expression containing lockdep_is_held() calls.”h]”(hŒ€If PROVE_RCU is enabled, invoking this outside of an RCU read-side critical section will result in an RCU-lockdep splat, unless ”…”�”}”(hjøCh²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøCubhŒ evaluates to 1. The ”…”�”}”(hjøCh²hh³Nh´Nubjõ)�”}”(hŒ**c**”h]”hŒc”…”�”}”(hjDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøCubhŒS argument will normally be a logical expression containing lockdep_is_held() calls.”…”�”}”(hjøCh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´KñhjCubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsrcu_dereference (C macro)”Œc.srcu_dereference”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒsrcu_dereference”h]”j)�”}”(hŒsrcu_dereference”h]”j{)�”}”(hŒsrcu_dereference”h]”j�)�”}”(hjEDh]”hŒsrcu_dereference”…”�”}”(hjODh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKDubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjGDh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjCDh²hh³jbDh´Mubah}”(h]”j>Dah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jbDh´Mhj@Dh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj@Dh²hh³jbDh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj{Djæj{Djç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``srcu_dereference (p, ssp)``”h]”j)�”}”(hj�Dh]”hŒsrcu_dereference (p, ssp)”…”�”}”(hjƒDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjDubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjôÖh²hubj•)�”}”(hŒ5fetch SRCU-protected pointer for later dereferencing ”h]”hÝ)�”}”(hŒ4fetch SRCU-protected pointer for later dereferencing”h]”hŒ4fetch SRCU-protected pointer for later dereferencing”…”�”}”(hj›Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj—Dubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j©Dh´MhjôÖh²hubjë)�”}”(hX‡**Parameters** ``p`` the pointer to fetch and protect for later dereferencing ``ssp`` pointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section. **Description** Makes rcu_dereference_check() do the dirty work. If PROVE_RCU is enabled, invoking this outside of an RCU read-side critical section will result in an RCU-lockdep splat.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¶Dh]”hŒ Parameters”…”�”}”(hj¸Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj´Dubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj°Dubj )�”}”(hhh]”(j)�”}”(hŒ?``p`` the pointer to fetch and protect for later dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjÕDh]”hŒp”…”�”}”(hj×Dh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÓDubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjÏDubj2)�”}”(hhh]”hÝ)�”}”(hŒ8the pointer to fetch and protect for later dereferencing”h]”hŒ8the pointer to fetch and protect for later dereferencing”…”�”}”(hjîDh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jêDh´MhjëDubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÏDubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jêDh´MhjÌDubj)�”}”(hŒu``ssp`` pointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section. ”h]”(j)�”}”(hŒ``ssp``”h]”j)�”}”(hjEh]”hŒssp”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Eubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjEubj2)�”}”(hhh]”hÝ)�”}”(hŒlpointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section.”h]”hŒlpointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section.”…”�”}”(hj'Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj$Eubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjEubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j#Eh´MhjÌDubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj°DubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjJEh]”hŒ Description”…”�”}”(hjLEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjHEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj°DubhÝ)�”}”(hŒªMakes rcu_dereference_check() do the dirty work. If PROVE_RCU is enabled, invoking this outside of an RCU read-side critical section will result in an RCU-lockdep splat.”h]”hŒªMakes rcu_dereference_check() do the dirty work. If PROVE_RCU is enabled, invoking this outside of an RCU read-side critical section will result in an RCU-lockdep splat.”…”�”}”(hj`Eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj°Dubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"srcu_dereference_notrace (C macro)”Œc.srcu_dereference_notrace”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒsrcu_dereference_notrace”h]”j)�”}”(hŒsrcu_dereference_notrace”h]”j{)�”}”(hŒsrcu_dereference_notrace”h]”j�)�”}”(hj‰Eh]”hŒsrcu_dereference_notrace”…”�”}”(hj“Eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�Eubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‹Eh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‡Eh²hh³j¦Eh´Mubah}”(h]”j‚Eah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¦Eh´Mhj„Eh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj„Eh²hh³j¦Eh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj¿Ejæj¿Ejç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ%``srcu_dereference_notrace (p, ssp)``”h]”j)�”}”(hjÅEh]”hŒ!srcu_dereference_notrace (p, ssp)”…”�”}”(hjÇEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjôÖh²hubj•)�”}”(hŒ*no tracing and no lockdep calls from here ”h]”hÝ)�”}”(hŒ)no tracing and no lockdep calls from here”h]”hŒ)no tracing and no lockdep calls from here”…”�”•}”(hjßEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjÛEubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jíEh´MhjôÖh²hubjë)�”}”(hŒÊ**Parameters** ``p`` the pointer to fetch and protect for later dereferencing ``ssp`` pointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjúEh]”hŒ Parameters”…”�”}”(hjüEh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjøEubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjôEubj )�”}”(hhh]”(j)�”}”(hŒ?``p`` the pointer to fetch and protect for later dereferencing ”h]”(j)�”}”(hŒ``p``”h]”j)�”}”(hjFh]”hŒp”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjFubj2)�”}”(hhh]”hÝ)�”}”(hŒ8the pointer to fetch and protect for later dereferencing”h]”hŒ8the pointer to fetch and protect for later dereferencing”…”�”}”(hj2Fh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j.Fh´Mhj/Fubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j.Fh´MhjFubj)�”}”(hŒt``ssp`` pointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section.”h]”(j)�”}”(hŒ``ssp``”h]”j)�”}”(hjRFh]”hŒssp”…”�”}”(hjTFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjPFubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjLFubj2)�”}”(hhh]”hÝ)�”}”(hŒlpointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section.”h]”hŒlpointer to the srcu_struct, which is used to check that we really are in an SRCU read-side critical section.”…”�”}”(hjkFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jgFh´MhjhFubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjLFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jgFh´MhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjôEubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsrcu_read_lock (C function)”Œc.srcu_read_lock”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,int srcu_read_lock (struct srcu_struct *ssp)”h]”j)�”}”(hŒ+int srcu_read_lock(struct srcu_struct *ssp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj«Fh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj§Fh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjºFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§Fh²hh³j¹Fh´Mubj{)�”}”(hŒsrcu_read_lock”h]”j�)�”}”(hŒsrcu_read_lock”h]”hŒsrcu_read_lock”…”�”}”(hjÌFh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈFubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj§Fh²hh³j¹Fh´Mubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjèFh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjäFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõFh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäFubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjGubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jGŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÎFsbŒc.srcu_read_lock”†”asbuh1hhjäFubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&Gh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjäFubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj4Gh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjäFubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjAGh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjäFubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjàFubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj§Fh²hh³j¹Fh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj£Fh²hh³j¹Fh´Mubah}”(h]”jžFah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¹Fh´Mhj Fh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6register a new reader for an SRCU-protected structure.”h]”hŒ6register a new reader for an SRCU-protected structure.”…”�”}”(hjkGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjhGh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj Fh²hh³j¹Fh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjƒGjæjƒGjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXý**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. **Description** Enter an SRCU read-side critical section. Note that SRCU read-side critical sections may be nested. However, it is illegal to call anything that waits on an SRCU grace period for the same srcu_struct, whether directly or indirectly. Please note that one way to indirectly wait on an SRCU grace period is to acquire a mutex that is held elsewhere while calling synchronize_srcu() or synchronize_srcu_expedited(). The return value from srcu_read_lock() is guaranteed to be non-negative. This value must be passed unaltered to the matching srcu_read_unlock(). Note that srcu_read_lock() and the matching srcu_read_unlock() must occur in the same context, for example, it is illegal to invoke srcu_read_unlock() in an irq handler if the matching srcu_read_lock() was invoked in process context. Or, for that matter to invoke srcu_read_unlock() from one task and the matching srcu_read_lock() from another.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�Gh]”hŒ Parameters”…”�”}”(hj�Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‹Gubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj‡Gubj )�”}”(hhh]”j)�”}”(hŒM``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj¬Gh]”hŒstruct srcu_struct *ssp”…”�”}”(hj®Gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªGubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj¦Gubj2)�”}”(hhh]”hÝ)�”}”(hŒ0srcu_struct in which to register the new reader.”h]”hŒ0srcu_struct in which to register the new reader.”…”�”}”(hjÅGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁGh´MhjÂGubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦Gubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁGh´Mhj£Gubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‡GubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjçGh]”hŒ Description”…”�”}”(hjéGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjåGubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj‡GubhÝ)�”}”(hXžEnter an SRCU read-side critical section. Note that SRCU read-side critical sections may be nested. However, it is illegal to call anything that waits on an SRCU grace period for the same srcu_struct, whether directly or indirectly. Please note that one way to indirectly wait on an SRCU grace period is to acquire a mutex that is held elsewhere while calling synchronize_srcu() or synchronize_srcu_expedited().”h]”hXžEnter an SRCU read-side critical section. Note that SRCU read-side critical sections may be nested. However, it is illegal to call anything that waits on an SRCU grace period for the same srcu_struct, whether directly or indirectly. Please note that one way to indirectly wait on an SRCU grace period is to acquire a mutex that is held elsewhere while calling synchronize_srcu() or synchronize_srcu_expedited().”…”�”}”(hjýGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj‡GubhÝ)�”}”(hXìThe return value from srcu_read_lock() is guaranteed to be non-negative. This value must be passed unaltered to the matching srcu_read_unlock(). Note that srcu_read_lock() and the matching srcu_read_unlock() must occur in the same context, for example, it is illegal to invoke srcu_read_unlock() in an irq handler if the matching srcu_read_lock() was invoked in process context. Or, for that matter to invoke srcu_read_unlock() from one task and the matching srcu_read_lock() from another.”h]”hXìThe return value from srcu_read_lock() is guaranteed to be non-negative. This value must be passed unaltered to the matching srcu_read_unlock(). Note that srcu_read_lock() and the matching srcu_read_unlock() must occur in the same context, for example, it is illegal to invoke srcu_read_unlock() in an irq handler if the matching srcu_read_lock() was invoked in process context. Or, for that matter to invoke srcu_read_unlock() from one task and the matching srcu_read_lock() from another.”…”�”}”(hj Hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M hj‡Gubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ srcu_read_lock_fast (C function)”Œc.srcu_read_lock_fast”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHstruct srcu_ctr __percpu * srcu_read_lock_fast (struct srcu_struct *ssp)”h]”j)�”}”(hŒFstruct srcu_ctr __percpu *srcu_read_lock_fast(struct srcu_struct *ssp)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj;Hh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj7Hh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7Hh²hh³jHHh´M6ubh)�”}”(hhh]”j�)�”}”(hŒsrcu_ctr”h]”hŒsrcu_ctr”…”�”}”(hjZHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjWHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j\HŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œsrcu_read_lock_fast”sbŒc.srcu_read_lock_fast”†”asbuh1hhj7Hh²hh³jHHh´M6ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj{Hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7Hh²hh³jHHh´M6ubhŒ__percpu”…”�”}”(hj7Hh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Hh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj7Hh²hh³jHHh´M6ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj›Hh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj7Hh²hh³jHHh´M6ubj{)�”}”(hŒsrcu_read_lock_fast”h]”j�)�”}”(hjxHh]”hŒsrcu_read_lock_fast”…”�”}”(hj¬Hh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨Hubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj7Hh²hh³jHHh´M6ubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÇHh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÃHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔHh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃHubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjåHh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâHubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jçHŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jvHŒc.srcu_read_lock_fast”†”asbuh1hhjÃHubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÃHubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÃHubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÃHubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¿Hubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj7Hh²hh³jHHh´M6ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj3Hh²hh³jHHh´M6ubah}”(h]”j.Hah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jHHh´M6hj0Hh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6register a new reader for an SRCU-protected structure.”h]”hŒ6register a new reader for an SRCU-protected structure.”…”�”}”(hjHIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M6hjEIh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj0Hh²hh³jHHh´M6ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj`Ijæj`Ijç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXõ**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. **Description** Enter an SRCU read-side critical section, but for a light-weight smp_mb()-free reader. See srcu_read_lock() for more information. This function is NMI-safe, in a manner similar to srcu_read_lock_nmisafe(). For srcu_read_lock_fast() to be used on an srcu_struct structure, that structure must have been defined using either DEFINE_SRCU_FAST() or DEFINE_STATIC_SRCU_FAST() on the one hand or initialized with init_srcu_struct_fast() on the other. Such an srcu_struct structure cannot be passed to any non-fast variant of srcu_read_{,un}lock() or srcu_{down,up}_read(). In kernels built with CONFIG_PROVE_RCU=y, __srcu_check_read_flavor() will complain bitterly if you ignore this restriction. Grace-period auto-expediting is disabled for SRCU-fast srcu_struct structures because SRCU-fast expedited grace periods invoke synchronize_rcu_expedited(), IPIs and all. If you need expedited SRCU-fast grace periods, use synchronize_srcu_expedited(). The srcu_read_lock_fast() function can be invoked only from those contexts where RCU is watching, that is, from contexts where it would be legal to invoke rcu_read_lock(). Otherwise, lockdep will complain.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjjIh]”hŒ Parameters”…”�”}”(hjlIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjhIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M:hjdIubj )�”}”(hhh]”j)�”}”(hŒM``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj‰Ih]”hŒstruct srcu_struct *ssp”…”�”}”(hj‹Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡Iubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M7hjƒIubj2)�”}”(hhh]”hÝ)�”}”(hŒ0srcu_struct in which to register the new reader.”h]”hŒ0srcu_struct in which to register the new reader.”…”�”}”(hj¢Ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jžIh´M7hjŸIubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjƒIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jžIh´M7hj€Iubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjdIubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÄIh]”hŒ Description”…”�”}”(hjÆIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÂIubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M9hjdIubhÝ)�”}”(hŒÏEnter an SRCU read-side critical section, but for a light-weight smp_mb()-free reader. See srcu_read_lock() for more information. This function is NMI-safe, in a manner similar to srcu_read_lock_nmisafe().”h]”hŒÏEnter an SRCU read-side critical section, but for a light-weight smp_mb()-free reader. See srcu_read_lock() for more information. This function is NMI-safe, in a manner similar to srcu_read_lock_nmisafe().”…”�”}”(hjÚIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M8hjdIubhÝ)�”}”(hXæFor srcu_read_lock_fast() to be used on an srcu_struct structure, that structure must have been defined using either DEFINE_SRCU_FAST() or DEFINE_STATIC_SRCU_FAST() on the one hand or initialized with init_srcu_struct_fast() on the other. Such an srcu_struct structure cannot be passed to any non-fast variant of srcu_read_{,un}lock() or srcu_{down,up}_read(). In kernels built with CONFIG_PROVE_RCU=y, __srcu_check_read_flavor() will complain bitterly if you ignore this restriction.”h]”hXæFor srcu_read_lock_fast() to be used on an srcu_struct structure, that structure must have been defined using either DEFINE_SRCU_FAST() or DEFINE_STATIC_SRCU_FAST() on the one hand or initialized with init_srcu_struct_fast() on the other. Such an srcu_struct structure cannot be passed to any non-fast variant of srcu_read_{,un}lock() or srcu_{down,up}_read(). In kernels built with CONFIG_PROVE_RCU=y, __srcu_check_read_flavor() will complain bitterly if you ignore this restriction.”…”�”}”(hjéIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M<hjdIubhÝ)�”}”(hŒûGrace-period auto-expediting is disabled for SRCU-fast srcu_struct structures because SRCU-fast expedited grace periods invoke synchronize_rcu_expedited(), IPIs and all. If you need expedited SRCU-fast grace periods, use synchronize_srcu_expedited().”h]”hŒûGrace-period auto-expediting is disabled for SRCU-fast srcu_struct structures because SRCU-fast expedited grace periods invoke synchronize_rcu_expedited(), IPIs and all. If you need expedited SRCU-fast grace periods, use synchronize_srcu_expedited().”…”�”}”(hjøIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MEhjdIubhÝ)�”}”(hŒÎThe srcu_read_lock_fast() function can be invoked only from those contexts where RCU is watching, that is, from contexts where it would be legal to invoke rcu_read_lock(). Otherwise, lockdep will complain.”h]”hŒÎThe srcu_read_lock_fast() function can be invoked only from those contexts where RCU is watching, that is, from contexts where it would be legal to invoke rcu_read_lock(). Otherwise, lockdep will complain.”…”�”}”(hjJh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MJhjdIubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'srcu_read_lock_fast_updown (C function)”Œc.srcu_read_lock_fast_updown”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOstruct srcu_ctr __percpu * srcu_read_lock_fast_updown (struct srcu_struct *ssp)”h]”j)�”}”(hŒMstruct srcu_ctr __percpu *srcu_read_lock_fast_updown(struct srcu_struct *ssp)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj6Jh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj2Jh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2Jh²hh³jCJh´M\ubh)�”}”(hhh]”j�)�”}”(hŒsrcu_ctr”h]”hŒsrcu_ctr”…”�”}”(hjUJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jWJŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œsrcu_read_lock_fast_updown”sbŒc.srcu_read_lock_fast_updown”†”asbuh1hhj2Jh²hh³jCJh´M\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2Jh²hh³jCJh´M\ubhŒ__percpu”…”�”}”(hj2Jh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2Jh²hh³jCJh´M\ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj–Jh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj2Jh²hh³jCJh´M\ubj{)�”}”(hŒsrcu_read_lock_fast_updown”h]”j�)�”}”(hjsJh]”hŒsrcu_read_lock_fast_updown”…”�”}”(hj§Jh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£Jubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj2Jh²hh³jCJh´M\ubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÂJh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¾Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÏJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾Jubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjàJh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝJubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jâJŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jqJŒc.srcu_read_lock_fast_updown”†”asbuh1hhj¾Jubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþJh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¾Jubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj Kh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¾Jubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjKh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¾Jubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjºJubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj2Jh²hh³jCJh´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj.Jh²hh³jCJh´M\ubah}”(h]”j)Jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jCJh´M\hj+Jh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ8register a new reader for an SRCU-fast-updown structure.”h]”hŒ8register a new reader for an SRCU-fast-updown structure.”…”�”}”(hjCKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M\hj@Kh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj+Jh²hh³jCJh´M\ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj[Kjæj[Kjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX5**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. **Description** Enter an SRCU read-side critical section, but for a light-weight smp_mb()-free reader. See srcu_read_lock() for more information. This function is compatible with srcu_down_read_fast(), but is not NMI-safe. For srcu_read_lock_fast_updown() to be used on an srcu_struct structure, that structure must have been defined using either DEFINE_SRCU_FAST_UPDOWN() or DEFINE_STATIC_SRCU_FAST_UPDOWN() on the one hand or initialized with init_srcu_struct_fast_updown() on the other. Such an srcu_struct structure cannot be passed to any non-fast-updown variant of srcu_read_{,un}lock() or srcu_{down,up}_read(). In kernels built with CONFIG_PROVE_RCU=y, __srcu_check_read_flavor() will complain bitterly if you ignore this * restriction. Grace-period auto-expediting is disabled for SRCU-fast-updown srcu_struct structures because SRCU-fast-updown expedited grace periods invoke synchronize_rcu_expedited(), IPIs and all. If you need expedited SRCU-fast-updown grace periods, use synchronize_srcu_expedited(). The srcu_read_lock_fast_updown() function can be invoked only from those contexts where RCU is watching, that is, from contexts where it would be legal to invoke rcu_read_lock(). Otherwise, lockdep will complain.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjeKh]”hŒ Parameters”…”�”}”(hjgKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcKubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M`hj_Kubj )�”}”(hhh]”j)�”}”(hŒM``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj„Kh]”hŒstruct srcu_struct *ssp”…”�”}”(hj†Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚Kubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M]hj~Kubj2)�”}”(hhh]”hÝ)�”}”(hŒ0srcu_struct in which to register the new reader.”h]”hŒ0srcu_struct in which to register the new reader.”…”�”}”(hj�Kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™Kh´M]hjšKubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~Kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™Kh´M]hj{Kubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj_KubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¿Kh]”hŒ Description”…”�”}”(hjÁKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½Kubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M_hj_KubhÝ)�”}”(hŒÏEnter an SRCU read-side critical section, but for a light-weight smp_mb()-free reader. See srcu_read_lock() for more information. This function is compatible with srcu_down_read_fast(), but is not NMI-safe.”h]”hŒÏEnter an SRCU read-side critical section, but for a light-weight smp_mb()-free reader. See srcu_read_lock() for more information. This function is compatible with srcu_down_read_fast(), but is not NMI-safe.”…”�”}”(hjÕKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M^hj_KubhÝ)�”}”(hX For srcu_read_lock_fast_updown() to be used on an srcu_struct structure, that structure must have been defined using either DEFINE_SRCU_FAST_UPDOWN() or DEFINE_STATIC_SRCU_FAST_UPDOWN() on the one hand or initialized with init_srcu_struct_fast_updown() on the other. Such an srcu_struct structure cannot be passed to any non-fast-updown variant of srcu_read_{,un}lock() or srcu_{down,up}_read(). In kernels built with CONFIG_PROVE_RCU=y, __srcu_check_read_flavor() will complain bitterly if you ignore this * restriction.”h]”hX For srcu_read_lock_fast_updown() to be used on an srcu_struct structure, that structure must have been defined using either DEFINE_SRCU_FAST_UPDOWN() or DEFINE_STATIC_SRCU_FAST_UPDOWN() on the one hand or initialized with init_srcu_struct_fast_updown() on the other. Such an srcu_struct structure cannot be passed to any non-fast-updown variant of srcu_read_{,un}lock() or srcu_{down,up}_read(). In kernels built with CONFIG_PROVE_RCU=y, __srcu_check_read_flavor() will complain bitterly if you ignore this * restriction.”…”�”}”(hjäKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mchj_KubhÝ)�”}”(hXGrace-period auto-expediting is disabled for SRCU-fast-updown srcu_struct structures because SRCU-fast-updown expedited grace periods invoke synchronize_rcu_expedited(), IPIs and all. If you need expedited SRCU-fast-updown grace periods, use synchronize_srcu_expedited().”h]”hXGrace-period auto-expediting is disabled for SRCU-fast-updown srcu_struct structures because SRCU-fast-updown expedited grace periods invoke synchronize_rcu_expedited(), IPIs and all. If you need expedited SRCU-fast-updown grace periods, use synchronize_srcu_expedited().”…”�”}”(hjóKh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mlhj_KubhÝ)�”}”(hŒÕThe srcu_read_lock_fast_updown() function can be invoked only from those contexts where RCU is watching, that is, from contexts where it would be legal to invoke rcu_read_lock(). Otherwise, lockdep will complain.”h]”hŒÕThe srcu_read_lock_fast_updown() function can be invoked only from those contexts where RCU is watching, that is, from contexts where it would be legal to invoke rcu_read_lock(). Otherwise, lockdep will complain.”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mqhj_Kubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ srcu_down_read_fast (C function)”Œc.srcu_down_read_fast”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒHstruct srcu_ctr __percpu * srcu_down_read_fast (struct srcu_struct *ssp)”h]”j)�”}”(hŒFstruct srcu_ctr __percpu *srcu_down_read_fast(struct srcu_struct *ssp)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj1Lh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj-Lh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?Lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-Lh²hh³j>Lh´M’ubh)�”}”(hhh]”j�)�”}”(hŒsrcu_ctr”h]”hŒsrcu_ctr”…”�”}”(hjPLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jRLŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œsrcu_down_read_fast”sbŒc.srcu_down_read_fast”†”asbuh1hhj-Lh²hh³j>Lh´M’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjqLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-Lh²hh³j>Lh´M’ubhŒ__percpu”…”�”}”(hj-Lh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj-Lh²hh³j>Lh´M’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‘Lh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj-Lh²hh³j>Lh´M’ubj{)�”}”(hŒsrcu_down_read_fast”h]”j�)�”}”(hjnLh]”hŒsrcu_down_read_fast”…”�”}”(hj¢Lh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžLubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj-Lh²hh³j>Lh´M’ubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj½Lh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¹Lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹Lubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjÛLh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjØLubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÝLŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jlLŒc.srcu_down_read_fast”†”asbuh1hhj¹Lubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¹Lubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¹Lubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjMh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹Lubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjµLubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj-Lh²hh³j>Lh´M’ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj)Lh²hh³j>Lh´M’ubah}”(h]”j$Lah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j>Lh´M’hj&Lh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6register a new reader for an SRCU-protected structure.”h]”hŒ6register a new reader for an SRCU-protected structure.”…”�”}”(hj>Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M’hj;Mh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj&Lh²hh³j>Lh´M’ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjVMjæjVMjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXë**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. **Description** Enter a semaphore-like SRCU read-side critical section, but for a light-weight smp_mb()-free reader. See srcu_read_lock_fast() and srcu_down_read() for more information. The same srcu_struct may be used concurrently by srcu_down_read_fast() and srcu_read_lock_fast(). However, the same definition/initialization requirements called out for srcu_read_lock_fast_updown() apply.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj`Mh]”hŒ Parameters”…”�”}”(hjbMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M–hjZMubj )�”}”(hhh]”j)�”}”(hŒM``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjMh]”hŒstruct srcu_struct *ssp”…”�”}”(hj�Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}Mubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M“hjyMubj2)�”}”(hhh]”hÝ)�”}”(hŒ0srcu_struct in which to register the new reader.”h]”hŒ0srcu_struct in which to register the new reader.”…”�”}”(hj˜Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j”Mh´M“hj•Mubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjyMubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j”Mh´M“hjvMubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjZMubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjºMh]”hŒ Description”…”�”}”(hj¼Mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¸Mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M•hjZMubhÝ)�”}”(hŒªEnter a semaphore-like SRCU read-side critical section, but for a light-weight smp_mb()-free reader. See srcu_read_lock_fast() and srcu_down_read() for more information.”h]”hŒªEnter a semaphore-like SRCU read-side critical section, but for a light-weight smp_mb()-free reader. See srcu_read_lock_fast() and srcu_down_read() for more information.”…”�”}”(hjÐMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M”hjZMubhÝ)�”}”(hŒÎThe same srcu_struct may be used concurrently by srcu_down_read_fast() and srcu_read_lock_fast(). However, the same definition/initialization requirements called out for srcu_read_lock_fast_updown() apply.”h]”hŒÎThe same srcu_struct may be used concurrently by srcu_down_read_fast() and srcu_read_lock_fast(). However, the same definition/initialization requirements called out for srcu_read_lock_fast_updown() apply.”…”�”}”(hjßMh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M˜hjZMubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#srcu_read_lock_nmisafe (C function)”Œc.srcu_read_lock_nmisafe”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4int srcu_read_lock_nmisafe (struct srcu_struct *ssp)”h]”j)�”}”(hŒ3int srcu_read_lock_nmisafe(struct srcu_struct *ssp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Nh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Nh²hh³jNh´M¦ubj{)�”}”(hŒsrcu_read_lock_nmisafe”h]”j�)�”}”(hŒsrcu_read_lock_nmisafe”h]”hŒsrcu_read_lock_nmisafe”…”�”}”(hj/Nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+Nubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Nh²hh³jNh´M¦ubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjKNh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjGNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXNh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGNubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjiNh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfNubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jkNŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j1NsbŒc.srcu_read_lock_nmisafe”†”asbuh1hhjGNubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰Nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjGNubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj—Nh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjGNubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hj¤Nh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjGNubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjCNubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Nh²hh³jNh´M¦ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjNh²hh³jNh´M¦ubah}”(h]”jNah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jNh´M¦hjNh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6register a new reader for an SRCU-protected structure.”h]”hŒ6register a new reader for an SRCU-protected structure.”…”�”}”(hjÎNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M¦hjËNh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjNh²hh³jNh´M¦ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjæNjæjæNjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXu**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. **Description** Enter an SRCU read-side critical section, but in an NMI-safe manner. See srcu_read_lock() for more information. If srcu_read_lock_nmisafe() is ever used on an srcu_struct structure, then none of the other flavors may be used, whether before, during, or after.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjðNh]”hŒ Parameters”…”�”}”(hjòNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjîNubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MªhjêNubj )�”}”(hhh]”j)�”}”(hŒM``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjOh]”hŒstruct srcu_struct *ssp”…”�”}”(hjOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Oubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M§hj Oubj2)�”}”(hhh]”hÝ)�”}”(hŒ0srcu_struct in which to register the new reader.”h]”hŒ0srcu_struct in which to register the new reader.”…”�”}”(hj(Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j$Oh´M§hj%Oubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Oubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j$Oh´M§hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjêNubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjJOh]”hŒ Description”…”�”}”(hjLOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjHOubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M©hjêNubhÝ)�”}”(hŒoEnter an SRCU read-side critical section, but in an NMI-safe manner. See srcu_read_lock() for more information.”h]”hŒoEnter an SRCU read-side critical section, but in an NMI-safe manner. See srcu_read_lock() for more information.”…”�”}”(hj`Oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M¨hjêNubhÝ)�”}”(hŒ“If srcu_read_lock_nmisafe() is ever used on an srcu_struct structure, then none of the other flavors may be used, whether before, during, or after.”h]”hŒ“If srcu_read_lock_nmisafe() is ever used on an srcu_struct structure, then none of the other flavors may be used, whether before, during, or after.”…”�”}”(hjoOh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M«hjêNubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsrcu_down_read (C function)”Œc.srcu_down_read”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,int srcu_down_read (struct srcu_struct *ssp)”h]”j)�”}”(hŒ+int srcu_down_read(struct srcu_struct *ssp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjžOh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjšOh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­Oh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjšOh²hh³j¬Oh´MÈubj{)�”}”(hŒsrcu_down_read”h]”j�)�”}”(hŒsrcu_down_read”h]”hŒsrcu_down_read”…”�”}”(hj¿Oh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj»Oubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjšOh²hh³j¬Oh´MÈubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÛOh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj×Oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèOh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×Oubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjùOh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöOubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jûOŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÁOsbŒc.srcu_down_read”†”asbuh1hhj×Oubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×Oubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj'Ph²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj×Oubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hj4Ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×Oubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÓOubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjšOh²hh³j¬Oh´MÈubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj–Oh²hh³j¬Oh´MÈubah}”(h]”j‘Oah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¬Oh´MÈhj“Oh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6register a new reader for an SRCU-protected structure.”h]”hŒ6register a new reader for an SRCU-protected structure.”…”�”}”(hj^Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MÈhj[Ph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj“Oh²hh³j¬Oh´MÈubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjvPjæjvPjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX]**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. **Description** Enter a semaphore-like SRCU read-side critical section. Note that SRCU read-side critical sections may be nested. However, it is illegal to call anything that waits on an SRCU grace period for the same srcu_struct, whether directly or indirectly. Please note that one way to indirectly wait on an SRCU grace period is to acquire a mutex that is held elsewhere while calling synchronize_srcu() or synchronize_srcu_expedited(). But if you want lockdep to help you keep this stuff straight, you should instead use srcu_read_lock(). The semaphore-like nature of srcu_down_read() means that the matching srcu_up_read() can be invoked from some other context, for example, from some other task or from an irq handler. However, neither srcu_down_read() nor srcu_up_read() may be invoked from an NMI handler. Calls to srcu_down_read() may be nested, similar to the manner in which calls to down_read() may be nested. The same srcu_struct may be used concurrently by srcu_down_read() and srcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj€Ph]”hŒ Parameters”…”�”}”(hj‚Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~Pubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MÌhjzPubj )�”}”(hhh]”j)�”}”(hŒM``struct srcu_struct *ssp`` srcu_struct in which to register the new reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjŸPh]”hŒstruct srcu_struct *ssp”…”�”}”(hj¡Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Pubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MÉhj™Pubj2)�”}”(hhh]”hÝ)�”}”(hŒ0srcu_struct in which to register the new reader.”h]”hŒ0srcu_struct in which to register the new reader.”…”�”}”(hj¸Ph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j´Ph´MÉhjµPubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™Pubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´Ph´MÉhj–Pubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjzPubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÚPh]”hŒ Description”…”�”}”(hjÜPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjØPubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MËhjzPubhÝ)�”}”(hXEnter a semaphore-like SRCU read-side critical section. Note that SRCU read-side critical sections may be nested. However, it is illegal to call anything that waits on an SRCU grace period for the same srcu_struct, whether directly or indirectly. Please note that one way to indirectly wait on an SRCU grace period is to acquire a mutex that is held elsewhere while calling synchronize_srcu() or synchronize_srcu_expedited(). But if you want lockdep to help you keep this stuff straight, you should instead use srcu_read_lock().”h]”hXEnter a semaphore-like SRCU read-side critical section. Note that SRCU read-side critical sections may be nested. However, it is illegal to call anything that waits on an SRCU grace period for the same srcu_struct, whether directly or indirectly. Please note that one way to indirectly wait on an SRCU grace period is to acquire a mutex that is held elsewhere while calling synchronize_srcu() or synchronize_srcu_expedited(). But if you want lockdep to help you keep this stuff straight, you should instead use srcu_read_lock().”…”�”}”(hjðPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MÊhjzPubhÝ)�”}”(hXThe semaphore-like nature of srcu_down_read() means that the matching srcu_up_read() can be invoked from some other context, for example, from some other task or from an irq handler. However, neither srcu_down_read() nor srcu_up_read() may be invoked from an NMI handler.”h]”hXThe semaphore-like nature of srcu_down_read() means that the matching srcu_up_read() can be invoked from some other context, for example, from some other task or from an irq handler. However, neither srcu_down_read() nor srcu_up_read() may be invoked from an NMI handler.”…”�”}”(hjÿPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MÓhjzPubhÝ)�”}”(hŒÄCalls to srcu_down_read() may be nested, similar to the manner in which calls to down_read() may be nested. The same srcu_struct may be used concurrently by srcu_down_read() and srcu_read_lock().”h]”hŒÄCalls to srcu_down_read() may be nested, similar to the manner in which calls to down_read() may be nested. The same srcu_struct may be used concurrently by srcu_down_read() and srcu_read_lock().”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MØhjzPubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsrcu_read_unlock (C function)”Œc.srcu_read_unlock”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ8void srcu_read_unlock (struct srcu_struct *ssp, int idx)”h]”j)�”}”(hŒ7void srcu_read_unlock(struct srcu_struct *ssp, int idx)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj=Qh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj9Qh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mæubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj9Qh²hh³jKQh´Mæubj{)�”}”(hŒsrcu_read_unlock”h]”j�)�”}”(hŒsrcu_read_unlock”h]”hŒsrcu_read_unlock”…”�”}”(hj^Qh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZQubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj9Qh²hh³jKQh´Mæubjœ)�”}”(hŒ"(struct srcu_struct *ssp, int idx)”h]”(j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjzQh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjvQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‡Qh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvQubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj˜Qh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•Qubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jšQŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j`QsbŒc.srcu_read_unlock”†”asbuh1hhjvQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸Qh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvQubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÆQh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjvQubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjÓQh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvQubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjrQubj¢)�”}”(hŒint idx”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjìQh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjèQubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjúQh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèQubj�)�”}”(hŒidx”h]”hŒidx”…”�”}”(hjRh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèQubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjrQubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj9Qh²hh³jKQh´Mæubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj5Qh²hh³jKQh´Mæubah}”(h]”j0Qah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jKQh´Mæhj2Qh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9unregister a old reader from an SRCU-protected structure.”h]”hŒ9unregister a old reader from an SRCU-protected structure.”…”�”}”(hj2Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mæhj/Rh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj2Qh²hh³jKQh´Mæubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjJRjæjJRjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒÜ**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ``int idx`` return value from corresponding srcu_read_lock(). **Description** Exit an SRCU read-side critical section.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjTRh]”hŒ Parameters”…”�”}”(hjVRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRRubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MêhjNRubj )�”}”(hhh]”(j)�”}”(hŒO``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjsRh]”hŒstruct srcu_struct *ssp”…”�”}”(hjuRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqRubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MçhjmRubj2)�”}”(hhh]”hÝ)�”}”(hŒ2srcu_struct in which to unregister the old reader.”h]”hŒ2srcu_struct in which to unregister the old reader.”…”�”}”(hjŒRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jˆRh´Mçhj‰Rubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjmRubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jˆRh´MçhjjRubj)�”}”(hŒ>``int idx`` return value from corresponding srcu_read_lock(). ”h]”(j)�”}”(hŒ ``int idx``”h]”j)�”}”(hj¬Rh]”hŒint idx”…”�”}”(hj®Rh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjªRubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mèhj¦Rubj2)�”}”(hhh]”hÝ)�”}”(hŒ1return value from corresponding srcu_read_lock().”h]”hŒ1return value from corresponding srcu_read_lock().”…”�”}”(hjÅRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÁRh´MèhjÂRubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¦Rubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÁRh´MèhjjRubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjNRubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjçRh]”hŒ Description”…”�”}”(hjéRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjåRubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MêhjNRubhÝ)�”}”(hŒ(Exit an SRCU read-side critical section.”h]”hŒ(Exit an SRCU read-side critical section.”…”�”}”(hjýRh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MéhjNRubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"srcu_read_unlock_fast (C function)”Œc.srcu_read_unlock_fast”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒSvoid srcu_read_unlock_fast (struct srcu_struct *ssp, struct srcu_ctr __percpu *scp)”h]”j)�”}”(hŒRvoid srcu_read_unlock_fast(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj,Sh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj(Sh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Möubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;Sh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(Sh²hh³j:Sh´Möubj{)�”}”(hŒsrcu_read_unlock_fast”h]”j�)�”}”(hŒsrcu_read_unlock_fast”h]”hŒsrcu_read_unlock_fast”…”�”}”(hjMSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjISubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj(Sh²hh³j:Sh´Möubjœ)�”}”(hŒ8(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp)”h]”(j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjiSh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjeSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjvSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeSubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj‡Sh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„Subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‰SŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jOSsbŒc.srcu_read_unlock_fast”†”asbuh1hhjeSubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§Sh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjeSubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjµSh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjeSubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjÂSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeSubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjaSubj¢)�”}”(hŒstruct srcu_ctr __percpu *scp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÛSh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj×Subj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjèSh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×Subh)�”}”(hhh]”j�)�”}”(hŒsrcu_ctr”h]”hŒsrcu_ctr”…”�”}”(hjùSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjöSubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jûSŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j£SŒc.srcu_read_unlock_fast”†”asbuh1hhj×Subj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×SubhŒ__percpu”…”�”}”(hj×Sh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj)Th²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj×Subjã)�”}”(hjæh]”hŒ*”…”�”}”(hj7Th²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj×Subj�)�”}”(hŒscp”h]”hŒscp”…”�”}”(hjDTh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj×Subeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjaSubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj(Sh²hh³j:Sh´Möubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj$Sh²hh³j:Sh´Möubah}”(h]”jSah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j:Sh´Möhj!Sh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9unregister a old reader from an SRCU-protected structure.”h]”hŒ9unregister a old reader from an SRCU-protected structure.”…”�”}”(hjnTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MöhjkTh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj!Sh²hh³j:Sh´Möubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj†Tjæj†Tjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ``struct srcu_ctr __percpu *scp`` return value from corresponding srcu_read_lock_fast(). **Description** Exit a light-weight SRCU read-side critical section.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�Th]”hŒ Parameters”…”�”}”(hj’Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŽTubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MúhjŠTubj )�”}”(hhh]”(j)�”}”(hŒO``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj¯Th]”hŒstruct srcu_struct *ssp”…”�”}”(hj±Th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj­Tubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M÷hj©Tubj2)�”}”(hhh]”hÝ)�”}”(hŒ2srcu_struct in which to unregister the old reader.”h]”hŒ2srcu_struct in which to unregister the old reader.”…”�”}”(hjÈTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÄTh´M÷hjÅTubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj©Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÄTh´M÷hj¦Tubj)�”}”(hŒY``struct srcu_ctr __percpu *scp`` return value from corresponding srcu_read_lock_fast(). ”h]”(j)�”}”(hŒ!``struct srcu_ctr __percpu *scp``”h]”j)�”}”(hjèTh]”hŒstruct srcu_ctr __percpu *scp”…”�”}”(hjêTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjæTubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MøhjâTubj2)�”}”(hhh]”hÝ)�”}”(hŒ6return value from corresponding srcu_read_lock_fast().”h]”hŒ6return value from corresponding srcu_read_lock_fast().”…”�”}”(hjUh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jýTh´MøhjþTubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjâTubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jýTh´Møhj¦Tubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjŠTubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj#Uh]”hŒ Description”…”�”}”(hj%Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj!Uubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MúhjŠTubhÝ)�”}”(hŒ4Exit a light-weight SRCU read-side critical section.”h]”hŒ4Exit a light-weight SRCU read-side critical section.”…”�”}”(hj9Uh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MùhjŠTubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)srcu_read_unlock_fast_updown (C function)”Œc.srcu_read_unlock_fast_updown”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒZvoid srcu_read_unlock_fast_updown (struct srcu_struct *ssp, struct srcu_ctr __percpu *scp)”h]”j)�”}”(hŒYvoid srcu_read_unlock_fast_updown(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjhUh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjdUh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjwUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjdUh²hh³jvUh´Mubj{)�”}”(hŒsrcu_read_unlock_fast_updown”h]”j�)�”}”(hŒsrcu_read_unlock_fast_updown”h]”hŒsrcu_read_unlock_fast_updown”…”�”}”(hj‰Uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj…Uubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjdUh²hh³jvUh´Mubjœ)�”}”(hŒ8(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp)”h]”(j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¥Uh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¡Uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²Uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡Uubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjÃUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÀUubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÅUŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‹UsbŒc.srcu_read_unlock_fast_updown”†”asbuh1hhj¡Uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjãUh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¡Uubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjñUh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¡Uubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjþUh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡Uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�Uubj¢)�”}”(hŒstruct srcu_ctr __percpu *scp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjVh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$Vh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVubh)�”}”(hhh]”j�)�”}”(hŒsrcu_ctr”h]”hŒsrcu_ctr”…”�”}”(hj5Vh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2Vubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j7VŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jßUŒc.srcu_read_unlock_fast_updown”†”asbuh1hhjVubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjSVh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVubhŒ__percpu”…”�”}”(hjVh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeVh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjVubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjsVh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjVubj�)�”}”(hŒscp”h]”hŒscp”…”�”}”(hj€Vh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjVubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj�Uubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjdUh²hh³jvUh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj`Uh²hh³jvUh´Mubah}”(h]”j[Uah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jvUh´Mhj]Uh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ;unregister a old reader from an SRCU-fast-updown structure.”h]”hŒ;unregister a old reader from an SRCU-fast-updown structure.”…”�”}”(hjªVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mhj§Vh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj]Uh²hh³jvUh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÂVjæjÂVjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX **Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ``struct srcu_ctr __percpu *scp`` return value from corresponding srcu_read_lock_fast_updown(). **Description** Exit an SRCU-fast-updown read-side critical section.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÌVh]”hŒ Parameters”…”�”}”(hjÎVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÊVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M hjÆVubj )�”}”(hhh]”(j)�”}”(hŒO``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjëVh]”hŒstruct srcu_struct *ssp”…”�”}”(hjíVh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjéVubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjåVubj2)�”}”(hhh]”hÝ)�”}”(hŒ2srcu_struct in which to unregister the old reader.”h]”hŒ2srcu_struct in which to unregister the old reader.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jWh´MhjWubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjåVubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jWh´MhjâVubj)�”}”(hŒ```struct srcu_ctr __percpu *scp`` return value from corresponding srcu_read_lock_fast_updown(). ”h]”(j)�”}”(hŒ!``struct srcu_ctr __percpu *scp``”h]”j)�”}”(hj$Wh]”hŒstruct srcu_ctr __percpu *scp”…”�”}”(hj&Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj"Wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MhjWubj2)�”}”(hh•h]”hÝ)�”}”(hŒ=return value from corresponding srcu_read_lock_fast_updown().”h]”hŒ=return value from corresponding srcu_read_lock_fast_updown().”…”�”}”(hj=Wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j9Wh´Mhj:Wubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjWubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j9Wh´MhjâVubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÆVubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj_Wh]”hŒ Description”…”�”}”(hjaWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj]Wubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M hjÆVubhÝ)�”}”(hŒ4Exit an SRCU-fast-updown read-side critical section.”h]”hŒ4Exit an SRCU-fast-updown read-side critical section.”…”�”}”(hjuWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M hjÆVubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsrcu_up_read_fast (C function)”Œc.srcu_up_read_fast”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒOvoid srcu_up_read_fast (struct srcu_struct *ssp, struct srcu_ctr __percpu *scp)”h]”j)�”}”(hŒNvoid srcu_up_read_fast(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¤Wh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Wh²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M"ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³Wh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Wh²hh³j²Wh´M"ubj{)�”}”(hŒsrcu_up_read_fast”h]”j�)�”}”(hŒsrcu_up_read_fast”h]”hŒsrcu_up_read_fast”…”�”}”(hjÅWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁWubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Wh²hh³j²Wh´M"ubjœ)�”}”(hŒ8(struct srcu_struct *ssp, struct srcu_ctr __percpu *scp)”h]”(j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjáWh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÝWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîWh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝWubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjÿWh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjüWubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jXŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÇWsbŒc.srcu_up_read_fast”†”asbuh1hhjÝWubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÝWubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj-Xh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÝWubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hj:Xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÝWubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙWubj¢)�”}”(hŒstruct srcu_ctr __percpu *scp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjSXh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjOXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj`Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOXubh)�”}”(hhh]”j�)�”}”(hŒsrcu_ctr”h]”hŒsrcu_ctr”…”�”}”(hjqXh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjnXubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jsXŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jXŒc.srcu_up_read_fast”†”asbuh1hhjOXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOXubhŒ__percpu”…”�”}”(hjOXh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¡Xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjOXubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¯Xh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjOXubj�)�”}”(hŒscp”h]”hŒscp”…”�”}”(hj¼Xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOXubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÙWubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Wh²hh³j²Wh´M"ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjœWh²hh³j²Wh´M"ubah}”(h]”j—Wah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²Wh´M"hj™Wh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9unregister a old reader from an SRCU-protected structure.”h]”hŒ9unregister a old reader from an SRCU-protected structure.”…”�”}”(hjæXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M"hjãXh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj™Wh²hh³j²Wh´M"ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjþXjæjþXjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXG**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ``struct srcu_ctr __percpu *scp`` return value from corresponding srcu_read_lock_fast(). **Description** Exit an SRCU read-side critical section, but not necessarily from the same context as the maching srcu_down_read_fast().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjYh]”hŒ Parameters”…”�”}”(hj Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjYubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M&hjYubj )�”}”(hhh]”(j)�”}”(hŒO``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj'Yh]”hŒstruct srcu_struct *ssp”…”�”}”(hj)Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%Yubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M#hj!Yubj2)�”}”(hhh]”hÝ)�”}”(hŒ2srcu_struct in which to unregister the old reader.”h]”hŒ2srcu_struct in which to unregister the old reader.”…”�”}”(hj@Yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jah"]”h$]”h&]”uh1j1hjÜYh²hh³jîYh´M3ubj{)�”}”(hŒsrcu_read_unlock_nmisafe”h]”j�)�”}”(hŒsrcu_read_unlock_nmisafe”h]”hŒsrcu_read_unlock_nmisafe”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjýYubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÜYh²hh³jîYh´M3ubjœ)�”}”(hŒ"(struct srcu_struct *ssp, int idx)”h]”(j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj;Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8Zubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j=ZŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jZsbŒc.srcu_read_unlock_nmisafe”†”asbuh1hhjZubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj[Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjiZh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjvZh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjZubj¢)�”}”(hŒint idx”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj�Zh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‹Zubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Zh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‹Zubj�)�”}”(hŒidx”h]”hŒidx”…”�”}”(hj«Zh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹Zubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjZubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÜYh²hh³jîYh´M3ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjØYh²hh³jîYh´M3ubah}”(h]”jÓYah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jîYh´M3hjÕYh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9unregister a old reader from an SRCU-protected structure.”h]”hŒ9unregister a old reader from an SRCU-protected structure.”…”�”}”(hjÕZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M3hjÒZh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÕYh²hh³jîYh´M3ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjíZjæjíZjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒÿ**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ``int idx`` return value from corresponding srcu_read_lock_nmisafe(). **Description** Exit an SRCU read-side critical section, but in an NMI-safe manner.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj÷Zh]”hŒ Parameters”…”�”}”(hjùZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõZubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M7hjñZubj )�”}”(hhh]”(j)�”}”(hŒO``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj[h]”hŒstruct srcu_struct *ssp”…”�”}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M4hj[ubj2)�”}”(hhh]”hÝ)�”}”(hŒ2srcu_struct in which to unregister the old reader.”h]”hŒ2srcu_struct in which to unregister the old reader.”…”�”}”(hj/[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j+[h´M4hj,[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j+[h´M4hj [ubj)�”}”(hŒF``int idx`` return value from corresponding srcu_read_lock_nmisafe(). ”h]”(j)�”}”(hŒ ``int idx``”h]”j)�”}”(hjO[h]”hŒint idx”…”�”}”(hjQ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjM[ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M5hjI[ubj2)�”}”(hhh]”hÝ)�”}”(hŒ9return value from corresponding srcu_read_lock_nmisafe().”h]”hŒ9return value from corresponding srcu_read_lock_nmisafe().”…”�”}”(hjh[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jd[h´M5hje[ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjI[ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jd[h´M5hj [ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjñZubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjŠ[h]”hŒ Description”…”�”}”(hjŒ[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˆ[ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M7hjñZubhÝ)�”}”(hŒCExit an SRCU read-side critical section, but in an NMI-safe manner.”h]”hŒCExit an SRCU read-side critical section, but in an NMI-safe manner.”…”�”}”(hj [h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M6hjñZubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsrcu_up_read (C function)”Œc.srcu_up_read”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4void srcu_up_read (struct srcu_struct *ssp, int idx)”h]”j)�”}”(hŒ3void srcu_up_read(struct srcu_struct *ssp, int idx)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÏ[h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjË[h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MKubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞ[h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjË[h²hh³jÝ[h´MKubj{)�”}”(hŒ srcu_up_read”h]”j�)�”}”(hŒ srcu_up_read”h]”hŒ srcu_up_read”…”�”}”(hjð[h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjì[ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjË[h²hh³jÝ[h´MKubjœ)�”}”(hŒ"(struct srcu_struct *ssp, int idx)”h]”(j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj \h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\ubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj*\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'\ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j,\Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jò[sbŒc.srcu_up_read”†”asbuh1hhj\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJ\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjX\h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\ubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hje\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj\ubj¢)�”}”(hŒint idx”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj~\h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjz\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ\h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjz\ubj�)�”}”(hŒidx”h]”hŒidx”…”�”}”(hjš\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjz\ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjË[h²hh³jÝ[h´MKubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÇ[h²hh³jÝ[h´MKubah}”(h]”jÂ[ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÝ[h´MKhjÄ[h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9unregister a old reader from an SRCU-protected structure.”h]”hŒ9unregister a old reader from an SRCU-protected structure.”…”�”}”(hjÄ\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MKhjÁ\h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÄ[h²hh³jÝ[h´MKubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÜ\jæjÜ\jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX'**Parameters** ``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ``int idx`` return value from corresponding srcu_read_lock(). **Description** Exit an SRCU read-side critical section, but not necessarily from the same context as the maching srcu_down_read().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjæ\h]”hŒ Parameters”…”�”}”(hjè\h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjä\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MOhjà\ubj )�”}”(hhh]”(j)�”}”(hŒO``struct srcu_struct *ssp`` srcu_struct in which to unregister the old reader. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj]h]”hŒstruct srcu_struct *ssp”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MLhjÿ\ubj2)�”}”(hhh]”hÝ)�”}”(hŒ2srcu_struct in which to unregister the old reader.”h]”hŒ2srcu_struct in which to unregister the old reader.”…”�”}”(hj]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j]h´MLhj]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÿ\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j]h´MLhjü\ubj)�”}”(hŒ>``int idx`` return value from corresponding srcu_read_lock(). ”h]”(j)�”}”(hŒ ``int idx``”h]”j)�”}”(hj>]h]”hŒint idx”…”�”}”(hj@]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj<]ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MMhj8]ubj2)�”}”(hhh]”hÝ)�”}”(hŒ1return value from corresponding srcu_read_lock().”h]”hŒ1return value from corresponding srcu_read_lock().”…”�”}”(hjW]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jS]h´MMhjT]ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj8]ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jS]h´MMhjü\ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjà\ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjy]h]”hŒ Description”…”�”}”(hj{]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjw]ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MOhjà\ubhÝ)�”}”(hŒsExit an SRCU read-side critical section, but not necessarily from the same context as the maching srcu_down_read().”h]”hŒsExit an SRCU read-side critical section, but not necessarily from the same context as the maching srcu_down_read().”…”�”}”(hj�]h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MNhjà\ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ+smp_mb__after_srcu_read_unlock (C function)”Œ c.smp_mb__after_srcu_read_unlock”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ*void smp_mb__after_srcu_read_unlock (void)”h]”j)�”}”(hŒ)void smp_mb__after_srcu_read_unlock(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¾]h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjº]h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍ]h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjº]h²hh³jÌ]h´M\ubj{)�”}”(hŒsmp_mb__after_srcu_read_unlock”h]”j�)�”}”(hŒsmp_mb__after_srcu_read_unlock”h]”hŒsmp_mb__after_srcu_read_unlock”…”�”}”(hjß]h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ]ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjº]h²hh³jÌ]h´M\ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjû]h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj÷]ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjó]ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjº]h²hh³jÌ]h´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¶]h²hh³jÌ]h´M\ubah}”(h]”j±]ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÌ]h´M\hj³]h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ+ensure full ordering after srcu_read_unlock”h]”hŒ+ensure full ordering after srcu_read_unlock”…”�”}”(hj%^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M\hj"^h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj³]h²hh³jÌ]h´M\ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj=^jæj=^jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX7**Parameters** ``void`` no arguments **Description** Converts the preceding srcu_read_unlock into a two-way memory barrier. Call this after srcu_read_unlock, to guarantee that all memory operations that occur after smp_mb__after_srcu_read_unlock will appear to happen after the preceding srcu_read_unlock.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjG^h]”hŒ Parameters”…”�”}”(hjI^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjE^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M`hjA^ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjf^h]”hŒvoid”…”�”}”(hjh^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjd^ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Khj`^ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{^h´Khj|^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`^ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{^h´Khj]^ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjA^ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¡^h]”hŒ Description”…”�”}”(hj£^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸ^ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´KhjA^ubhÝ)�”}”(hŒFConverts the preceding srcu_read_unlock into a two-way memory barrier.”h]”hŒFConverts the preceding srcu_read_unlock into a two-way memory barrier.”…”�”}”(hj·^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M]hjA^ubhÝ)�”}”(hŒµCall this after srcu_read_unlock, to guarantee that all memory operations that occur after smp_mb__after_srcu_read_unlock will appear to happen after the preceding srcu_read_unlock.”h]”hŒµCall this after srcu_read_unlock, to guarantee that all memory operations that occur after smp_mb__after_srcu_read_unlock will appear to happen after the preceding srcu_read_unlock.”…”�”}”(hjÆ^h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´M_hjA^ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)smp_mb__after_srcu_read_lock (C function)”Œc.smp_mb__after_srcu_read_lock”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(void smp_mb__after_srcu_read_lock (void)”h]”j)�”}”(hŒ'void smp_mb__after_srcu_read_lock(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjõ^h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjñ^h²hh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjñ^h²hh³j_h´Mjubj{)�”}”(hŒsmp_mb__after_srcu_read_lock”h]”j�)�”}”(hŒsmp_mb__after_srcu_read_lock”h]”hŒsmp_mb__after_srcu_read_lock”…”�”}”(hj_h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj_ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjñ^h²hh³j_h´Mjubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj2_h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj._ubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj*_ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjñ^h²hh³j_h´Mjubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjí^h²hh³j_h´Mjubah}”(h]”jè^ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j_h´Mjhjê^h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ)ensure full ordering after srcu_read_lock”h]”hŒ)ensure full ordering after srcu_read_lock”…”�”}”(hj\_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´MjhjY_h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjê^h²hh³j_h´Mjubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjt_jæjt_jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX/**Parameters** ``void`` no arguments **Description** Converts the preceding srcu_read_lock into a two-way memory barrier. Call this after srcu_read_lock, to guarantee that all memory operations that occur after smp_mb__after_srcu_read_lock will appear to happen after the preceding srcu_read_lock.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj~_h]”hŒ Parameters”…”�”}”(hj€_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj|_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mnhjx_ubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj�_h]”hŒvoid”…”�”}”(hjŸ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›_ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Khj—_ubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj¶_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j²_h´Khj³_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj—_ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²_h´Khj”_ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjx_ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjØ_h]”hŒ Description”…”�”}”(hjÚ_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖ_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Khjx_ubhÝ)�”}”(hŒDConverts the preceding srcu_read_lock into a two-way memory barrier.”h]”hŒDConverts the preceding srcu_read_lock into a two-way memory barrier.”…”�”}”(hjî_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mkhjx_ubhÝ)�”}”(hŒ¯Call this after srcu_read_lock, to guarantee that all memory operations that occur after smp_mb__after_srcu_read_lock will appear to happen after the preceding srcu_read_lock.”h]”hŒ¯Call this after srcu_read_lock, to guarantee that all memory operations that occur after smp_mb__after_srcu_read_lock will appear to happen after the preceding srcu_read_lock.”…”�”}”(hjý_h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒY/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:407: ./include/linux/srcu.h”h´Mmhjx_ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%init_srcu_struct_generic (C function)”Œc.init_srcu_struct_generic”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ6int init_srcu_struct_generic (struct srcu_struct *ssp)”h]”j)�”}”(hŒ5int init_srcu_struct_generic(struct srcu_struct *ssp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj,`h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj(`h²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M'ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(`h²hh³j:`h´M'ubj{)�”}”(hŒinit_srcu_struct_generic”h]”j�)�”}”(hŒinit_srcu_struct_generic”h]”hŒinit_srcu_struct_generic”…”�”}”(hjM`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjI`ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj(`h²hh³j:`h´M'ubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hji`h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hje`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje`ubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj‡`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„`ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‰`Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jO`sbŒc.init_srcu_struct_generic”†”asbuh1hhje`ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§`h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje`ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjµ`h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhje`ubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjÂ`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hje`ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hja`ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj(`h²hh³j:`h´M'ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj$`h²hh³j:`h´M'ubah}”(h]”j`ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j:`h´M'hj!`h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ initialize a sleep-RCU structure”h]”hŒ initialize a sleep-RCU structure”…”�”}”(hjì`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M'hjé`h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj!`h²hh³j:`h´M'ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjajæjajç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX½**Parameters** ``struct srcu_struct *ssp`` structure to initialize. **Description** Use this in place of DEFINE_SRCU() and DEFINE_STATIC_SRCU() for non-static srcu_struct structures that are to be passed to srcu_read_lock(), srcu_read_lock_nmisafe(), and friends. It is necessary to invoke this on a given srcu_struct before passing that srcu_struct to any other function. Each srcu_struct represents a separate domain of SRCU protection.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjah]”hŒ Parameters”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj aubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M+hjaubj )�”}”(hhh]”j)�”}”(hŒ5``struct srcu_struct *ssp`` structure to initialize. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj-ah]”hŒstruct srcu_struct *ssp”…”�”}”(hj/ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj+aubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M(hj'aubj2)�”}”(hhh]”hÝ)�”}”(hŒstructure to initialize.”h]”hŒstructure to initialize.”…”�”}”(hjFah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jBah´M(hjCaubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj'aubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jBah´M(hj$aubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjaubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjhah]”hŒ Description”…”�”}”(hjjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfaubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M*hjaubhÝ)�”}”(hXdUse this in place of DEFINE_SRCU() and DEFINE_STATIC_SRCU() for non-static srcu_struct structures that are to be passed to srcu_read_lock(), srcu_read_lock_nmisafe(), and friends. It is necessary to invoke this on a given srcu_struct before passing that srcu_struct to any other function. Each srcu_struct represents a separate domain of SRCU protection.”h]”hXdUse this in place of DEFINE_SRCU() and DEFINE_STATIC_SRCU() for non-static srcu_struct structures that are to be passed to srcu_read_lock(), srcu_read_lock_nmisafe(), and friends. It is necessary to invoke this on a given srcu_struct before passing that srcu_struct to any other function. Each srcu_struct represents a separate domain of SRCU protection.”…”�”}”(hj~ah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M)hjaubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"init_srcu_struct_fast (C function)”Œc.init_srcu_struct_fast”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ3int init_srcu_struct_fast (struct srcu_struct *ssp)”h]”j)�”}”(hŒ2int init_srcu_struct_fast(struct srcu_struct *ssp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj­ah²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj©ah²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M9ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¼ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj©ah²hh³j»ah´M9ubj{)�”}”(hŒinit_srcu_struct_fast”h]”j�)�”}”(hŒinit_srcu_struct_fast”h]”hŒinit_srcu_struct_fast”…”�”}”(hjÎah²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊaubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj©ah²hh³j»ah´M9ubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjêah²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjæaubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷ah²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæaubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j bŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÐasbŒc.init_srcu_struct_fast”†”asbuh1hhjæaubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(bh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjæaubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj6bh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjæaubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjCbh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæaubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjâaubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj©ah²hh³j»ah´M9ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¥ah²hh³j»ah´M9ubah}”(h]”j aah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j»ah´M9hj¢ah²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ,initialize a fast-reader sleep-RCU structure”h]”hŒ,initialize a fast-reader sleep-RCU structure”…”�”}”(hjmbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M9hjjbh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¢ah²hh³j»ah´M9ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj…bjæj…bjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX°**Parameters** ``struct srcu_struct *ssp`` structure to initialize. **Description** Use this in place of DEFINE_SRCU_FAST() and DEFINE_STATIC_SRCU_FAST() for non-static srcu_struct structures that are to be passed to srcu_read_lock_fast() and friends. It is necessary to invoke this on a given srcu_struct before passing that srcu_struct to any other function. Each srcu_struct represents a separate domain of SRCU protection.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj�bh]”hŒ Parameters”…”�”}”(hj‘bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�bubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M=hj‰bubj )�”}”(hhh]”j)�”}”(hŒ5``struct srcu_struct *ssp`` structure to initialize. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj®bh]”hŒstruct srcu_struct *ssp”…”�”}”(hj°bh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬bubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M:hj¨bubj2)�”}”(hhh]”hÝ)�”}”(hŒstructure to initialize.”h]”hŒstructure to initialize.”…”�”}”(hjÇbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÃbh´M:hjÄbubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¨bubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÃbh´M:hj¥bubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‰bubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjébh]”hŒ Description”…”�”}”(hjëbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjçbubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M<hj‰bubhÝ)�”}”(hXWUse this in place of DEFINE_SRCU_FAST() and DEFINE_STATIC_SRCU_FAST() for non-static srcu_struct structures that are to be passed to srcu_read_lock_fast() and friends. It is necessary to invoke this on a given srcu_struct before passing that srcu_struct to any other function. Each srcu_struct represents a separate domain of SRCU protection.”h]”hXWUse this in place of DEFINE_SRCU_FAST() and DEFINE_STATIC_SRCU_FAST() for non-static srcu_struct structures that are to be passed to srcu_read_lock_fast() and friends. It is necessary to invoke this on a given srcu_struct before passing that srcu_struct to any other function. Each srcu_struct represents a separate domain of SRCU protection.”…”�”}”(hjÿbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M;hj‰bubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)init_srcu_struct_fast_updown (C function)”Œc.init_srcu_struct_fast_updown”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:int init_srcu_struct_fast_updown (struct srcu_struct *ssp)”h]”j)�”}”(hŒ9int init_srcu_struct_fast_updown(struct srcu_struct *ssp)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hj.ch²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj*ch²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MJubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj=ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj*ch²hh³jah"]”h$]”h&]”uh1j1hjgcubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj‰ch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†cubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‹cŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jQcsbŒc.init_srcu_struct_fast_updown”†”asbuh1hhjgcubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj©ch²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjgcubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj·ch²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjgcubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjÄch²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjgcubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjccubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj*ch²hh³jah"]”h$]”h&]”uh1j1hj«dh²hh³j½dh´M§ubj{)�”}”(hŒcleanup_srcu_struct”h]”j�)�”}”(hŒcleanup_srcu_struct”h]”hŒcleanup_srcu_struct”…”�”}”(hjÐdh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÌdubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj«dh²hh³j½dh´M§ubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjìdh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjèdubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjùdh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèdubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj eh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j eŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÒdsbŒc.cleanup_srcu_struct”†”asbuh1hhjèdubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*eh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèdubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj8eh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjèdubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjEeh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjèdubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjädubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj«dh²hh³j½dh´M§ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj§dh²hh³j½dh´M§ubah}”(h]”j¢dah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j½dh´M§hj¤dh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!deconstruct a sleep-RCU structure”h]”hŒ!deconstruct a sleep-RCU structure”…”�”}”(hjoeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M§hjleh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¤dh²hh³j½dh´M§ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj‡ejæj‡ejç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒÛ**Parameters** ``struct srcu_struct *ssp`` structure to clean up. **Description** Must invoke this after you are finished using a given srcu_struct that was initialized via init_srcu_struct(), else you leak memory.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‘eh]”hŒ Parameters”…”�”}”(hj“eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�eubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M«hj‹eubj )�”}”(hhh]”j)�”}”(hŒ3``struct srcu_struct *ssp`` structure to clean up. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj°eh]”hŒstruct srcu_struct *ssp”…”�”}”(hj²eh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj®eubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M¨hjªeubj2)�”}”(hhh]”hÝ)�”}”(hŒstructure to clean up.”h]”hŒstructure to clean up.”…”�”}”(hjÉeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÅeh´M¨hjÆeubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjªeubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÅeh´M¨hj§eubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj‹eubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjëeh]”hŒ Description”…”�”}”(hjíeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjéeubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Mªhj‹eubhÝ)�”}”(hŒ„Must invoke this after you are finished using a given srcu_struct that was initialized via init_srcu_struct(), else you leak memory.”h]”hŒ„Must invoke this after you are finished using a given srcu_struct that was initialized via init_srcu_struct(), else you leak memory.”…”�”}”(hjfh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M©hj‹eubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcall_srcu (C function)”Œ c.call_srcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒSvoid call_srcu (struct srcu_struct *ssp, struct rcu_head *rhp, rcu_callback_t func)”h]”j)�”}”(hŒRvoid call_srcu(struct srcu_struct *ssp, struct rcu_head *rhp, rcu_callback_t func)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj0fh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj,fh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M”ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,fh²hh³j>fh´M”ubj{)�”}”(hŒ call_srcu”h]”j�)�”}”(hŒ call_srcu”h]”hŒ call_srcu”…”�”}”(hjQfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMfubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj,fh²hh³j>fh´M”ubjœ)�”}”(hŒD(struct srcu_struct *ssp, struct rcu_head *rhp, rcu_callback_t func)”h]”(j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjmfh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjifubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjzfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjifubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj‹fh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�fŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jSfsbŒ c.call_srcu”†”asbuh1hhjifubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«fh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjifubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¹fh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjifubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjÆfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjifubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjefubj¢)�”}”(hŒstruct rcu_head *rhp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjßfh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÛfubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìfh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛfubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hjýfh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúfubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÿfŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j§fŒ c.call_srcu”†”asbuh1hhjÛfubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛfubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj)gh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÛfubj�)�”}”(hŒrhp”h]”hŒrhp”…”�”}”(hj6gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛfubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjefubj¢)�”}”(hŒrcu_callback_t func”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcu_callback_t”h]”hŒrcu_callback_t”…”�”}”(hjRgh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjOgubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jTgŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j§fŒ c.call_srcu”†”asbuh1hhjKgubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjpgh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjKgubj�)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hj~gh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjKgubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjefubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj,fh²hh³j>fh´M”ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj(fh²hh³j>fh´M”ubah}”(h]”j#fah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j>fh´M”hj%fh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ:Queue a callback for invocation after an SRCU grace period”h]”hŒ:Queue a callback for invocation after an SRCU grace period”…”�”}”(hj¨gh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M”hj¥gh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj%fh²hh³j>fh´M”ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÀgjæjÀgjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX¢**Parameters** ``struct srcu_struct *ssp`` srcu_struct in queue the callback ``struct rcu_head *rhp`` structure to be used for queueing the SRCU callback. ``rcu_callback_t func`` function to be invoked after the SRCU grace period **Description** The callback function will be invoked some time after a full SRCU grace period elapses, in other words after all pre-existing SRCU read-side critical sections have completed. However, the callback function might well execute concurrently with other SRCU read-side critical sections that started after call_srcu() was invoked. SRCU read-side critical sections are delimited by srcu_read_lock() and srcu_read_unlock(), and may be nested. The callback will be invoked from process context, but with bh disabled. The callback function must therefore be fast and must not block. See the description of call_rcu() for more detailed information on memory ordering guarantees.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÊgh]”hŒ Parameters”…”�”}”(hjÌgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÈgubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M˜hjÄgubj )�”}”(hhh]”(j)�”}”(hŒ>``struct srcu_struct *ssp`` srcu_struct in queue the callback ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjégh]”hŒstruct srcu_struct *ssp”…”�”}”(hjëgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjçgubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M•hjãgubj2)�”}”(hhh]”hÝ)�”}”(hŒ!srcu_struct in queue the callback”h]”hŒ!srcu_struct in queue the callback”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jþgh´M•hjÿgubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjãgubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jþgh´M•hjàgubj)�”}”(hŒN``struct rcu_head *rhp`` structure to be used for queueing the SRCU callback. ”h]”(j)�”}”(hŒ``struct rcu_head *rhp``”h]”j)�”}”(hj"hh]”hŒstruct rcu_head *rhp”…”�”}”(hj$hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj hubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M–hjhubj2)�”}”(hhh]”hÝ)�”}”(hŒ4structure to be used for queueing the SRCU callback.”h]”hŒ4structure to be used for queueing the SRCU callback.”…”�”}”(hj;hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j7hh´M–hj8hubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7hh´M–hjàgubj)�”}”(hŒK``rcu_callback_t func`` function to be invoked after the SRCU grace period ”h]”(j)�”}”(hŒ``rcu_callback_t func``”h]”j)�”}”(hj[hh]”hŒrcu_callback_t func”…”�”}”(hj]hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjYhubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M—hjUhubj2)�”}”(hhh]”hÝ)�”}”(hŒ2function to be invoked after the SRCU grace period”h]”hŒ2function to be invoked after the SRCU grace period”…”�”}”(hjthh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jphh´M—hjqhubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjUhubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jphh´M—hjàgubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÄgubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj–hh]”hŒ Description”…”�”}”(hj˜hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”hubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M™hjÄgubhÝ)�”}”(hXµThe callback function will be invoked some time after a full SRCU grace period elapses, in other words after all pre-existing SRCU read-side critical sections have completed. However, the callback function might well execute concurrently with other SRCU read-side critical sections that started after call_srcu() was invoked. SRCU read-side critical sections are delimited by srcu_read_lock() and srcu_read_unlock(), and may be nested.”h]”hXµThe callback function will be invoked some time after a full SRCU grace period elapses, in other words after all pre-existing SRCU read-side critical sections have completed. However, the callback function might well execute concurrently with other SRCU read-side critical sections that started after call_srcu() was invoked. SRCU read-side critical sections are delimited by srcu_read_lock() and srcu_read_unlock(), and may be nested.”…”�”}”(hj¬hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M˜hjÄgubhÝ)�”}”(hŒŠThe callback will be invoked from process context, but with bh disabled. The callback function must therefore be fast and must not block.”h]”hŒŠThe callback will be invoked from process context, but with bh disabled. The callback function must therefore be fast and must not block.”…”�”}”(hj»hh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M hjÄgubhÝ)�”}”(hŒ^See the description of call_rcu() for more detailed information on memory ordering guarantees.”h]”hŒ^See the description of call_rcu() for more detailed information on memory ordering guarantees.”…”�”}”(hjÊhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M¤hjÄgubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'synchronize_srcu_expedited (C function)”Œc.synchronize_srcu_expedited”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ9void synchronize_srcu_expedited (struct srcu_struct *ssp)”h]”j)�”}”(hŒ8void synchronize_srcu_expedited(struct srcu_struct *ssp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjùhh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjõhh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÓubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjõhh²hh³jih´MÓubj{)�”}”(hŒsynchronize_srcu_expedited”h]”j�)�”}”(hŒsynchronize_srcu_expedited”h]”hŒsynchronize_srcu_expedited”…”�”}”(hjih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjiubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjõhh²hh³jih´MÓubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj6ih²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj2iubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2iubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjTih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQiubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jViŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jisbŒc.synchronize_srcu_expedited”†”asbuh1hhj2iubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtih²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2iubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‚ih²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj2iubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hj�ih²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2iubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj.iubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjõhh²hh³jih´MÓubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjñhh²hh³jih´MÓubah}”(h]”jìhah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jih´MÓhjîhh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒBrute-force SRCU grace period”h]”hŒBrute-force SRCU grace period”…”�”}”(hj¹ih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÓhj¶ih²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjîhh²hh³jih´MÓubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÑijæjÑijç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXQ**Parameters** ``struct srcu_struct *ssp`` srcu_struct with which to synchronize. **Description** Wait for an SRCU grace period to elapse, but be more aggressive about spinning rather than blocking when waiting. Note that synchronize_srcu_expedited() has the same deadlock and memory-ordering properties as does synchronize_srcu().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÛih]”hŒ Parameters”…”�”}”(hjÝih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÙiubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M×hjÕiubj )�”}”(hhh]”j)�”}”(hŒC``struct srcu_struct *ssp`` srcu_struct with which to synchronize. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjúih]”hŒstruct srcu_struct *ssp”…”�”}”(hjüih²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjøiubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÔhjôiubj2)�”}”(hhh]”hÝ)�”}”(hŒ&srcu_struct with which to synchronize.”h]”hŒ&srcu_struct with which to synchronize.”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jjh´MÔhjjubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjôiubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jjh´MÔhjñiubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÕiubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj5jh]”hŒ Description”…”�”}”(hj7jh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj3jubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÖhjÕiubhÝ)�”}”(hŒqWait for an SRCU grace period to elapse, but be more aggressive about spinning rather than blocking when waiting.”h]”hŒqWait for an SRCU grace period to elapse, but be more aggressive about spinning rather than blocking when waiting.”…”�”}”(hjKjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÕhjÕiubhÝ)�”}”(hŒwNote that synchronize_srcu_expedited() has the same deadlock and memory-ordering properties as does synchronize_srcu().”h]”hŒwNote that synchronize_srcu_expedited() has the same deadlock and memory-ordering properties as does synchronize_srcu().”…”�”}”(hjZjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MØhjÕiubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsynchronize_srcu (C function)”Œc.synchronize_srcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ/void synchronize_srcu (struct srcu_struct *ssp)”h]”j)�”}”(hŒ.void synchronize_srcu(struct srcu_struct *ssp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj‰jh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj…jh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Mãubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜jh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj…jh²hh³j—jh´Mãubj{)�”}”(hŒsynchronize_srcu”h]”j�)�”}”(hŒsynchronize_srcu”h]”hŒsynchronize_srcu”…”�”}”(hjªjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦jubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj…jh²hh³j—jh´Mãubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÆjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÂjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂjubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjäjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjájubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jæjŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¬jsbŒc.synchronize_srcu”†”asbuh1hhjÂjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÂjubjã•)�”}”(hjæh]”hŒ*”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÂjubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÂjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¾jubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj…jh²hh³j—jh´Mãubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�jh²hh³j—jh´Mãubah}”(h]”j|jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j—jh´Mãhj~jh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ9wait for prior SRCU read-side critical-section completion”h]”hŒ9wait for prior SRCU read-side critical-section completion”…”�”}”(hjIkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MãhjFkh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj~jh²hh³j—jh´Mãubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjakjæjakjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX€ **Parameters** ``struct srcu_struct *ssp`` srcu_struct with which to synchronize. **Description** Wait for the count to drain to zero of both indexes. To avoid the possible starvation of synchronize_srcu(), it waits for the count of the index=!(ssp->srcu_ctrp - :c:type:`ssp->sda `->srcu_ctrs[0]) to drain to zero at first, and then flip the ->srcu_ctrp and wait for the count of the other index. Can block; must be called from process context. Note that it is illegal to call synchronize_srcu() from the corresponding SRCU read-side critical section; doing so will result in deadlock. However, it is perfectly legal to call synchronize_srcu() on one srcu_struct from some other srcu_struct's read-side critical section, as long as the resulting graph of srcu_structs is acyclic. There are memory-ordering constraints implied by synchronize_srcu(). On systems with more than one CPU, when synchronize_srcu() returns, each CPU is guaranteed to have executed a full memory barrier since the end of its last corresponding SRCU read-side critical section whose beginning preceded the call to synchronize_srcu(). In addition, each CPU having an SRCU read-side critical section that extends beyond the return from synchronize_srcu() is guaranteed to have executed a full memory barrier after the beginning of synchronize_srcu() and before the beginning of that SRCU read-side critical section. Note that these guarantees include CPUs that are offline, idle, or executing in user mode, as well as CPUs that are executing in the kernel. Furthermore, if CPU A invoked synchronize_srcu(), which returned to its caller on CPU B, then both CPU A and CPU B are guaranteed to have executed a full memory barrier during the execution of synchronize_srcu(). This guarantee applies even if CPU A and CPU B are the same CPU, but again only if the system has more than one CPU. Of course, these memory-ordering guarantees apply only when synchronize_srcu(), srcu_read_lock(), and srcu_read_unlock() are passed the same srcu_struct structure. Implementation of these memory-ordering guarantees is similar to that of synchronize_rcu(). If SRCU is likely idle as determined by srcu_should_expedite(), expedite the first request. This semantic was provided by Classic SRCU, and is relied upon by its users, so TREE SRCU must also provide it. Note that detecting idleness is heuristic and subject to both false positives and negatives.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjkkh]”hŒ Parameters”…”�”}”(hjmkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjikubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Mçhjekubj )�”}”(hhh]”j)�”}”(hŒC``struct srcu_struct *ssp`` srcu_struct with which to synchronize. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjŠkh]”hŒstruct srcu_struct *ssp”…”�”}”(hjŒkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆkubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Mähj„kubj2)�”}”(hhh]”hÝ)�”}”(hŒ&srcu_struct with which to synchronize.”h]”hŒ&srcu_struct with which to synchronize.”…”�”}”(hj£kh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸkh´Mähj kubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„kubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸkh´Mähj�kubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjekubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÅkh]”hŒ Description”…”�”}”(hjÇkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÃkubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MæhjekubhÝ)�”}”(hX/Wait for the count to drain to zero of both indexes. To avoid the possible starvation of synchronize_srcu(), it waits for the count of the index=!(ssp->srcu_ctrp - :c:type:`ssp->sda `->srcu_ctrs[0]) to drain to zero at first, and then flip the ->srcu_ctrp and wait for the count of the other index.”h]”(hŒ¤Wait for the count to drain to zero of both indexes. To avoid the possible starvation of synchronize_srcu(), it waits for the count of the index=!(ssp->srcu_ctrp - ”…”�”}”(hjÛkh²hh³Nh´Nubh)�”}”(hŒ:c:type:`ssp->sda `”h]”j)�”}”(hjåkh]”hŒssp->sda”…”�”}”(hjçkh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjãkubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œssp”uh1hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MåhjÛkubhŒs->srcu_ctrs[0]) to drain to zero at first, and then flip the ->srcu_ctrp and wait for the count of the other index.”…”�”}”(hjÛkh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jlh´MåhjekubhÝ)�”}”(hŒ/Can block; must be called from process context.”h]”hŒ/Can block; must be called from process context.”…”�”}”(hj lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MëhjekubhÝ)�”}”(hXNNote that it is illegal to call synchronize_srcu() from the corresponding SRCU read-side critical section; doing so will result in deadlock. However, it is perfectly legal to call synchronize_srcu() on one srcu_struct from some other srcu_struct's read-side critical section, as long as the resulting graph of srcu_structs is acyclic.”h]”hXPNote that it is illegal to call synchronize_srcu() from the corresponding SRCU read-side critical section; doing so will result in deadlock. However, it is perfectly legal to call synchronize_srcu() on one srcu_struct from some other srcu_struct’s read-side critical section, as long as the resulting graph of srcu_structs is acyclic.”…”�”}”(hjlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MíhjekubhÝ)�”}”(hXîThere are memory-ordering constraints implied by synchronize_srcu(). On systems with more than one CPU, when synchronize_srcu() returns, each CPU is guaranteed to have executed a full memory barrier since the end of its last corresponding SRCU read-side critical section whose beginning preceded the call to synchronize_srcu(). In addition, each CPU having an SRCU read-side critical section that extends beyond the return from synchronize_srcu() is guaranteed to have executed a full memory barrier after the beginning of synchronize_srcu() and before the beginning of that SRCU read-side critical section. Note that these guarantees include CPUs that are offline, idle, or executing in user mode, as well as CPUs that are executing in the kernel.”h]”hXîThere are memory-ordering constraints implied by synchronize_srcu(). On systems with more than one CPU, when synchronize_srcu() returns, each CPU is guaranteed to have executed a full memory barrier since the end of its last corresponding SRCU read-side critical section whose beginning preceded the call to synchronize_srcu(). In addition, each CPU having an SRCU read-side critical section that extends beyond the return from synchronize_srcu() is guaranteed to have executed a full memory barrier after the beginning of synchronize_srcu() and before the beginning of that SRCU read-side critical section. Note that these guarantees include CPUs that are offline, idle, or executing in user mode, as well as CPUs that are executing in the kernel.”…”�”}”(hj+lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MóhjekubhÝ)�”}”(hXJFurthermore, if CPU A invoked synchronize_srcu(), which returned to its caller on CPU B, then both CPU A and CPU B are guaranteed to have executed a full memory barrier during the execution of synchronize_srcu(). This guarantee applies even if CPU A and CPU B are the same CPU, but again only if the system has more than one CPU.”h]”hXJFurthermore, if CPU A invoked synchronize_srcu(), which returned to its caller on CPU B, then both CPU A and CPU B are guaranteed to have executed a full memory barrier during the execution of synchronize_srcu(). This guarantee applies even if CPU A and CPU B are the same CPU, but again only if the system has more than one CPU.”…”�”}”(hj:lh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÿhjekubhÝ)�”}”(hŒ£Of course, these memory-ordering guarantees apply only when synchronize_srcu(), srcu_read_lock(), and srcu_read_unlock() are passed the same srcu_struct structure.”h]”hŒ£Of course, these memory-ordering guarantees apply only when synchronize_srcu(), srcu_read_lock(), and srcu_read_unlock() are passed the same srcu_struct structure.”…”�”}”(hjIlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MhjekubhÝ)�”}”(hŒ[Implementation of these memory-ordering guarantees is similar to that of synchronize_rcu().”h]”hŒ[Implementation of these memory-ordering guarantees is similar to that of synchronize_rcu().”…”�”}”(hjXlh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M hjekubhÝ)�”}”(hX)If SRCU is likely idle as determined by srcu_should_expedite(), expedite the first request. This semantic was provided by Classic SRCU, and is relied upon by its users, so TREE SRCU must also provide it. Note that detecting idleness is heuristic and subject to both false positives and negatives.”h]”hX)If SRCU is likely idle as determined by srcu_should_expedite(), expedite the first request. This semantic was provided by Classic SRCU, and is relied upon by its users, so TREE SRCU must also provide it. Note that detecting idleness is heuristic and subject to both false positives and negatives.”…”�”}”(hjglh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M hjekubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'get_state_synchronize_srcu (C function)”Œc.get_state_synchronize_srcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBunsigned long get_state_synchronize_srcu (struct srcu_struct *ssp)”h]”j)�”}”(hŒAunsigned long get_state_synchronize_srcu(struct srcu_struct *ssp)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj–lh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj’lh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¥lh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’lh²hh³j¤lh´Mubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hj³lh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj’lh²hh³j¤lh´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÁlh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’lh²hh³j¤lh´Mubj{)�”}”(hŒget_state_synchronize_srcu”h]”j�)�”}”(hŒget_state_synchronize_srcu”h]”hŒget_state_synchronize_srcu”…”�”}”(hjÓlh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÏlubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj’lh²hh³j¤lh´Mubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjïlh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjëlubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjülh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëlubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj mh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj mubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jmŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÕlsbŒc.get_state_synchronize_srcu”†”asbuh1hhjëlubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj-mh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjëlubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj;mh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjëlubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjHmh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjëlubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjçlubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj’lh²hh³j¤lh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŽlh²hh³j¤lh´Mubah}”(h]”j‰lah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¤lh´Mhj‹lh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Provide an end-of-grace-period cookie”h]”hŒ%Provide an end-of-grace-period cookie”…”�”}”(hjrmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Mhjomh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‹lh²hh³j¤lh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŠmjæjŠmjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX¡**Parameters** ``struct srcu_struct *ssp`` srcu_struct to provide cookie for. **Description** This function returns a cookie that can be passed to poll_state_synchronize_srcu(), which will return true if a full grace period has elapsed in the meantime. It is the caller's responsibility to make sure that grace period happens, for example, by invoking call_srcu() after return from get_state_synchronize_srcu().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj”mh]”hŒ Parameters”…”�”}”(hj–mh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj’mubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M!hjŽmubj )�”}”(hhh]”j)�”}”(hŒ?``struct srcu_struct *ssp`` srcu_struct to provide cookie for. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj³mh]”hŒstruct srcu_struct *ssp”…”�”}”(hjµmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj±mubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Mhj­mubj2)�”}”(hhh]”hÝ)�”}”(hŒ"srcu_struct to provide cookie for.”h]”hŒ"srcu_struct to provide cookie for.”…”�”}”(hjÌmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÈmh´MhjÉmubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj­mubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÈmh´Mhjªmubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjŽmubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjîmh]”hŒ Description”…”�”}”(hjðmh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjìmubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M hjŽmubhÝ)�”}”(hX>This function returns a cookie that can be passed to poll_state_synchronize_srcu(), which will return true if a full grace period has elapsed in the meantime. It is the caller's responsibility to make sure that grace period happens, for example, by invoking call_srcu() after return from get_state_synchronize_srcu().”h]”hX@This function returns a cookie that can be passed to poll_state_synchronize_srcu(), which will return true if a full grace period has elapsed in the meantime. It is the caller’s responsibility to make sure that grace period happens, for example, by invoking call_srcu() after return from get_state_synchronize_srcu().”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MhjŽmubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(start_poll_synchronize_srcu (C function)”Œc.start_poll_synchronize_srcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒCunsigned long start_poll_synchronize_srcu (struct srcu_struct *ssp)”h]”j)�”}”(hŒBunsigned long start_poll_synchronize_srcu(struct srcu_struct *ssp)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj3nh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj/nh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjBnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/nh²hh³jAnh´M0ubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjPnh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj/nh²hh³jAnh´M0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj/nh²hh³jAnh´M0ubj{)�”}”(hŒstart_poll_synchronize_srcu”h]”j�)�”}”(hŒstart_poll_synchronize_srcu”h]”hŒstart_poll_synchronize_srcu”…”�”}”(hjpnh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlnubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj/nh²hh³jAnh´M0ubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjŒnh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjˆnubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™nh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆnubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjªnh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§nubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¬nŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jrnsbŒc.start_poll_synchronize_srcu”†”asbuh1hhjˆnubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊnh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjˆnubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjØnh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjˆnubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjånh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆnubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj„nubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj/nh²hh³jAnh´M0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj+nh²hh³jAnh´M0ubah}”(h]”j&nah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jAnh´M0hj(nh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%Provide cookie and start grace period”h]”hŒ%Provide cookie and start grace period”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M0hj oh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj(nh²hh³jAnh´M0ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj'ojæj'ojç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXµ**Parameters** ``struct srcu_struct *ssp`` srcu_struct to provide cookie for. **Description** This function returns a cookie that can be passed to poll_state_synchronize_srcu(), which will return true if a full grace period has elapsed in the meantime. Unlike get_state_synchronize_srcu(), this function also ensures that any needed SRCU grace period will be started. This convenience does come at a cost in terms of CPU overhead.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj1oh]”hŒ Parameters”…”�”}”(hj3oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj/oubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M4hj+oubj )�”}”(hhh]”j)�”}”(hŒ?``struct srcu_struct *ssp`` srcu_struct to provide cookie for. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjPoh]”hŒstruct srcu_struct *ssp”…”�”}”(hjRoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjNoubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M1hjJoubj2)�”}”(hhh]”hÝ)�”}”(hŒ"srcu_struct to provide cookie for.”h]”hŒ"srcu_struct to provide cookie for.”…”�”}”(hjioh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jeoh´M1hjfoubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjJoubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jeoh´M1hjGoubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj+oubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‹oh]”hŒ Description”…”�”}”(hj�oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‰oubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M3hj+oubhÝ)�”}”(hXRThis function returns a cookie that can be passed to poll_state_synchronize_srcu(), which will return true if a full grace period has elapsed in the meantime. Unlike get_state_synchronize_srcu(), this function also ensures that any needed SRCU grace period will be started. This convenience does come at a cost in terms of CPU overhead.”h]”hXRThis function returns a cookie that can be passed to poll_state_synchronize_srcu(), which will return true if a full grace period has elapsed in the meantime. Unlike get_state_synchronize_srcu(), this function also ensures that any needed SRCU grace period will be started. This convenience does come at a cost in terms of CPU overhead.”…”�”}”(hj¡oh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M2hj+oubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(poll_state_synchronize_srcu (C function)”Œc.poll_state_synchronize_srcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒPbool poll_state_synchronize_srcu (struct srcu_struct *ssp, unsigned long cookie)”h]”j)�”}”(hŒObool poll_state_synchronize_srcu(struct srcu_struct *ssp, unsigned long cookie)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjÐoh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÌoh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M@ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÞoh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÌoh²hh³jÝoh´M@ubj{)�”}”(hŒpoll_state_synchronize_srcu”h]”j�)�”}”(hŒpoll_state_synchronize_srcu”h]”hŒpoll_state_synchronize_srcu”…”�”}”(hjðoh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjìoubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÌoh²hh³jÝoh´M@ubjœ)�”}”(hŒ/(struct srcu_struct *ssp, unsigned long cookie)”h]”(j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj ph²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj*ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'pubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j,pŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jòosbŒc.poll_state_synchronize_srcu”†”asbuh1hhjpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjJph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjpubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjXph²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjpubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjeph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjpubj¢)�”}”(hŒunsigned long cookie”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj~ph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjzpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjzpubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjšph²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjzpubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¨ph²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjzpubj�)�”}”(hŒcookie”h]”hŒcookie”…”�”}”(hj¶ph²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjzpubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjpubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÌoh²hh³jÝoh´M@ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÈoh²hh³jÝoh´M@ubah}”(h]”jÃoah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÝoh´M@hjÅoh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ Has cookie's grace period ended?”h]”hŒ"Has cookie’s grace period ended?”…”�”}”(hjàph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M@hjÝph²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÅoh²hh³jÝoh´M@ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjøpjæjøpjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXí**Parameters** ``struct srcu_struct *ssp`` srcu_struct to provide cookie for. ``unsigned long cookie`` Return value from get_state_synchronize_srcu() or start_poll_synchronize_srcu(). **Description** This function takes the cookie that was returned from either get_state_synchronize_srcu() or start_poll_synchronize_srcu(), and returns **true** if an SRCU grace period elapsed since the time that the cookie was created. Because cookies are finite in size, wrapping/overflow is possible. This is more pronounced on 32-bit systems where cookies are 32 bits, where in theory wrapping could happen in about 14 hours assuming 25-microsecond expedited SRCU grace periods. However, a more likely overflow lower bound is on the order of 24 days in the case of one-millisecond SRCU grace periods. Of course, wrapping in a 64-bit system requires geologic timespans, as in more than seven million years even for expedited SRCU grace periods. Wrapping/overflow is much more of an issue for CONFIG_SMP=n systems that also have CONFIG_PREEMPTION=n, which selects Tiny SRCU. This uses a 16-bit cookie, which rcutorture routinely wraps in a matter of a few minutes. If this proves to be a problem, this counter will be expanded to the same size as for Tree SRCU.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjqh]”hŒ Parameters”…”�”}”(hjqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MDhjüpubj )�”}”(hhh]”(j)�”}”(hŒ?``struct srcu_struct *ssp`` srcu_struct to provide cookie for. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj!qh]”hŒstruct srcu_struct *ssp”…”�”}”(hj#qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjqubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MAhjqubj2)�”}”(hhh]”hÝ)�”}”(hŒ"srcu_struct to provide cookie for.”h]”hŒ"srcu_struct to provide cookie for.”…”�”}”(hj:qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j6qh´MAhj7qubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j6qh´MAhjqubj)�”}”(hŒj``unsigned long cookie`` Return value from get_state_synchronize_srcu() or start_poll_synchronize_srcu(). ”h]”(j)�”}”(hŒ``unsigned long cookie``”h]”j)�”}”(hjZqh]”hŒunsigned long cookie”…”�”}”(hj\qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjXqubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MBhjTqubj2)�”}”(hhh]”hÝ)�”}”(hŒPReturn value from get_state_synchronize_srcu() or start_poll_synchronize_srcu().”h]”hŒPReturn value from get_state_synchronize_srcu() or start_poll_synchronize_srcu().”…”�”}”(hjsqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³joqh´MBhjpqubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjTqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³joqh´MBhjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjüpubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj•qh]”hŒ Description”…”�”}”(hj—qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj“qubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MDhjüpubhÝ)�”}”(hŒÜThis function takes the cookie that was returned from either get_state_synchronize_srcu() or start_poll_synchronize_srcu(), and returns **true** if an SRCU grace period elapsed since the time that the cookie was created.”h]”(hŒˆThis function takes the cookie that was returned from either get_state_synchronize_srcu() or start_poll_synchronize_srcu(), and returns ”…”�”}”(hj«qh²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hj³qh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj«qubhŒL if an SRCU grace period elapsed since the time that the cookie was created.”…”�”}”(hj«qh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MChjüpubhÝ)�”}”(hXBecause cookies are finite in size, wrapping/overflow is possible. This is more pronounced on 32-bit systems where cookies are 32 bits, where in theory wrapping could happen in about 14 hours assuming 25-microsecond expedited SRCU grace periods. However, a more likely overflow lower bound is on the order of 24 days in the case of one-millisecond SRCU grace periods. Of course, wrapping in a 64-bit system requires geologic timespans, as in more than seven million years even for expedited SRCU grace periods.”h]”hXBecause cookies are finite in size, wrapping/overflow is possible. This is more pronounced on 32-bit systems where cookies are 32 bits, where in theory wrapping could happen in about 14 hours assuming 25-microsecond expedited SRCU grace periods. However, a more likely overflow lower bound is on the order of 24 days in the case of one-millisecond SRCU grace periods. Of course, wrapping in a 64-bit system requires geologic timespans, as in more than seven million years even for expedited SRCU grace periods.”…”�”}”(hjÌqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MHhjüpubhÝ)�”}”(hX=Wrapping/overflow is much more of an issue for CONFIG_SMP=n systems that also have CONFIG_PREEMPTION=n, which selects Tiny SRCU. This uses a 16-bit cookie, which rcutorture routinely wraps in a matter of a few minutes. If this proves to be a problem, this counter will be expanded to the same size as for Tree SRCU.”h]”hX=Wrapping/overflow is much more of an issue for CONFIG_SMP=n systems that also have CONFIG_PREEMPTION=n, which selects Tiny SRCU. This uses a 16-bit cookie, which rcutorture routinely wraps in a matter of a few minutes. If this proves to be a problem, this counter will be expanded to the same size as for Tree SRCU.”…”�”}”(hjÛqh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MQhjüpubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsrcu_barrier (C function)”Œc.srcu_barrier”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+void srcu_barrier (struct srcu_struct *ssp)”h]”j)�”}”(hŒ*void srcu_barrier(struct srcu_struct *ssp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjrh²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MŠubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjrh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjrh²hh³jrh´MŠubj{)�”}”(hŒ srcu_barrier”h]”j�)�”}”(hŒ srcu_barrier”h]”hŒ srcu_barrier”…”�”}”(hj+rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'rubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjrh²hh³jrh´MŠubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjGrh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjCrubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjTrh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjCrubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjerh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjbrubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jgrŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j-rsbŒc.srcu_barrier”†”asbuh1hhjCrubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj…rh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjCrubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj“rh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjCrubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hj rh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCrubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj?rubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjrh²hh³jrh´MŠubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjrh²hh³jrh´MŠubah}”(h]”jýqah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jrh´MŠhjÿqh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ8Wait until all in-flight call_srcu() callbacks complete.”h]”hŒ8Wait until all in-flight call_srcu() callbacks complete.”…”�”}”(hjÊrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MŠhjÇrh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÿqh²hh³jrh´MŠubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjârjæjârjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒc**Parameters** ``struct srcu_struct *ssp`` srcu_struct on which to wait for in-flight callbacks.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjìrh]”hŒ Parameters”…”�”}”(hjîrh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjêrubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MŽhjærubj )�”}”(hhh]”j)�”}”(hŒQ``struct srcu_struct *ssp`` srcu_struct on which to wait for in-flight callbacks.”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hj sh]”hŒstruct srcu_struct *ssp”…”�”}”(hj sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj subah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M�hjsubj2)�”}”(hhh]”hÝ)�”}”(hŒ5srcu_struct on which to wait for in-flight callbacks.”h]”hŒ5srcu_struct on which to wait for in-flight callbacks.”…”�”}”(hj$sh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´M‹hj!subah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjsubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j sh´M�hjsubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjærubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"srcu_expedite_current (C function)”Œc.srcu_expedite_current”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ4void srcu_expedite_current (struct srcu_struct *ssp)”h]”j)�”}”(hŒ3void srcu_expedite_current(struct srcu_struct *ssp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjesh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjash²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjtsh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjash²hh³jssh´MÊubj{)�”}”(hŒsrcu_expedite_current”h]”j�)�”}”(hŒsrcu_expedite_current”h]”hŒsrcu_expedite_current”…”�”}”(hj†sh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚subah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjash²hh³jssh´MÊubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¢sh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjžsubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¯sh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžsubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hjÀsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½subah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÂsŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jˆssbŒc.srcu_expedite_current”†”asbuh1hhjžsubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjàsh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžsubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjîsh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjžsubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hjûsh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjžsubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjšsubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjash²hh³jssh´MÊubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj]sh²hh³jssh´MÊubah}”(h]”jXsah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jssh´MÊhjZsh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&Expedite the current SRCU grace period”h]”hŒ&Expedite the current SRCU grace period”…”�”}”(hj%th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÊhj"th²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjZsh²hh³jssh´MÊubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj=tjæj=tjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXƒ**Parameters** ``struct srcu_struct *ssp`` srcu_struct to expedite. **Description** Cause the current SRCU grace period to become expedited. The grace period following the current one might also be expedited. If there is no current grace period, one might be created. If the current grace period is currently sleeping, that sleep will complete before expediting will take effect.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjGth]”hŒ Parameters”…”�”}”(hjIth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEtubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÎhjAtubj )�”}”(hhh]”j)�”}”(hŒ5``struct srcu_struct *ssp`` srcu_struct to expedite. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjfth]”hŒstruct srcu_struct *ssp”…”�”}”(hjhth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjdtubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MËhj`tubj2)�”}”(hhh]”hÝ)�”}”(hŒsrcu_struct to expedite.”h]”hŒsrcu_struct to expedite.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j{th´MËhj|tubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj`tubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j{th´MËhj]tubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjAtubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¡th]”hŒ Description”…”�”}”(hj£th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŸtubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÍhjAtubhÝ)�”}”(hX*Cause the current SRCU grace period to become expedited. The grace period following the current one might also be expedited. If there is no current grace period, one might be created. If the current grace period is currently sleeping, that sleep will complete before expediting will take effect.”h]”hX*Cause the current SRCU grace period to become expedited. The grace period following the current one might also be expedited. If there is no current grace period, one might be created. If the current grace period is currently sleeping, that sleep will complete before expediting will take effect.”…”�”}”(hj·th²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MÌhjAtubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#srcu_batches_completed (C function)”Œc.srcu_batches_completed”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ>unsigned long srcu_batches_completed (struct srcu_struct *ssp)”h]”j)�”}”(hŒ=unsigned long srcu_batches_completed(struct srcu_struct *ssp)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hjæth²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjâth²hh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Míubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõth²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâth²hh³jôth´Míubj )�”}”(hŒlong”h]”hŒlong”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjâth²hh³jôth´Míubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjâth²hh³jôth´Míubj{)�”}”(hŒsrcu_batches_completed”h]”j�)�”}”(hŒsrcu_batches_completed”h]”hŒsrcu_batches_completed”…”�”}”(hj#uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjâth²hh³jôth´Míubjœ)�”}”(hŒ(struct srcu_struct *ssp)”h]”j¢)�”}”(hŒstruct srcu_struct *ssp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj?uh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj;uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLuh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;uubh)�”}”(hhh]”j�)�”}”(hŒ srcu_struct”h]”hŒ srcu_struct”…”�”}”(hj]uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZuubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j_uŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j%usbŒc.srcu_batches_completed”†”asbuh1hhj;uubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}uh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj;uubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj‹uh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj;uubj�)�”}”(hŒssp”h]”hŒssp”…”�”}”(hj˜uh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj;uubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj7uubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjâth²hh³jôth´Míubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÞth²hh³jôth´Míubah}”(h]”jÙtah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jôth´MíhjÛth²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒreturn batches completed.”h]”hŒreturn batches completed.”…”�”}”(hjÂuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Míhj¿uh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÛth²hh³jôth´Míubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÚujæjÚujç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒù**Parameters** ``struct srcu_struct *ssp`` srcu_struct on which to report batch completion. **Description** Report the number of batches, correlated with, but not necessarily precisely the same as, the number of grace periods that have elapsed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjäuh]”hŒ Parameters”…”�”}”(hjæuh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâuubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´MñhjÞuubj )�”}”(hhh]”j)�”}”(hŒM``struct srcu_struct *ssp`` srcu_struct on which to report batch completion. ”h]”(j)�”}”(hŒ``struct srcu_struct *ssp``”h]”j)�”}”(hjvh]”hŒstruct srcu_struct *ssp”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒZ/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:409: ./kernel/rcu/srcutree.c”h´Mîhjýuubj2)�”}”(hhh]”hÝ)�”}”(hŒ0srcu_struct on which to report batch completion.”h]”hŒ0srcu_struct on which to report batch completion.”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jvh´Mîhjvubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýuubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jvh´Mîhjúuubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÞuubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj>vh]”hŒ Description”…”�”}”(hj@vh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjah"]”h$]”h&]”uh1j1hjvh²hh³j‘vh´K&ubj{)�”}”(hŒhlist_bl_del_rcu”h]”j�)�”}”(hŒhlist_bl_del_rcu”h]”hŒhlist_bl_del_rcu”…”�”}”(hj¤vh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj vubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjvh²hh³j‘vh´K&ubjœ)�”}”(hŒ(struct hlist_bl_node *n)”h]”j¢)�”}”(hŒstruct hlist_bl_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÀvh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¼vubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼vubh)�”}”(hhh]”j�)�”}”(hŒ hlist_bl_node”h]”hŒ hlist_bl_node”…”�”}”(hjÞvh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛvubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jàvŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¦vsbŒc.hlist_bl_del_rcu”†”asbuh1hhj¼vubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþvh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¼vubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj wh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¼vubj�)�”}”(hj�h]”hŒn”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼vubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¸vubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjvh²hh³j‘vh´K&ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj{vh²hh³j‘vh´K&ubah}”(h]”jvvah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‘vh´K&hjxvh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6deletes entry from hash list without re-initialization”h]”hŒ6deletes entry from hash list without re-initialization”…”�”}”(hjBwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´K&hj?wh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjxvh²hh³j‘vh´K&ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjZwjæjZwjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXÎ**Parameters** ``struct hlist_bl_node *n`` the element to delete from the hash list. **Note** hlist_bl_unhashed() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal. In particular, it means that we can not poison the forward pointers that may still be used for walking the hash list. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_bl_add_head_rcu() or hlist_bl_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_bl_for_each_entry().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjdwh]”hŒ Parameters”…”�”}”(hjfwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjbwubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´K*hj^wubj )�”}”(hhh]”j)�”}”(hŒF``struct hlist_bl_node *n`` the element to delete from the hash list. ”h]”(j)�”}”(hŒ``struct hlist_bl_node *n``”h]”j)�”}”(hjƒwh]”hŒstruct hlist_bl_node *n”…”�”}”(hj…wh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�wubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´K'hj}wubj2)�”}”(hhh]”hÝ)�”}”(hŒ)the element to delete from the hash list.”h]”hŒ)the element to delete from the hash list.”…”�”}”(hjœwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j˜wh´K'hj™wubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj}wubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˜wh´K'hjzwubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj^wubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj¾wh]”hŒNote”…”�”}”(hjÀwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¼wubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´K)hj^wubhÝ)�”}”(hŒ�hlist_bl_unhashed() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal.”h]”hŒ�hlist_bl_unhashed() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal.”…”�”}”(hjÔwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´K)hj^wubhÝ)�”}”(hŒuIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list.”h]”hŒuIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list.”…”�”}”(hjãwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´K-hj^wubhÝ)�”}”(hXbThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_bl_add_head_rcu() or hlist_bl_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_bl_for_each_entry().”h]”hXbThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_bl_add_head_rcu() or hlist_bl_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_bl_for_each_entry().”…”�”}”(hjòwh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´K0hj^wubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"hlist_bl_add_head_rcu (C function)”Œc.hlist_bl_add_head_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒMvoid hlist_bl_add_head_rcu (struct hlist_bl_node *n, struct hlist_bl_head *h)”h]”j)�”}”(hŒLvoid hlist_bl_add_head_rcu(struct hlist_bl_node *n, struct hlist_bl_head *h)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj!xh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjxh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´K?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj0xh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjxh²hh³j/xh´K?ubj{)�”}”(hŒhlist_bl_add_head_rcu”h]”j�)�”}”(hŒhlist_bl_add_head_rcu”h]”hŒhlist_bl_add_head_rcu”…”�”}”(hjBxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj>xubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjxh²hh³j/xh´K?ubjœ)�”}”(hŒ2(struct hlist_bl_node *n, struct hlist_bl_head *h)”h]”(j¢)�”}”(hŒstruct hlist_bl_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj^xh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjZxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjkxh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZxubh)�”}”(hhh]”j�)�”}”(hŒ hlist_bl_node”h]”hŒ hlist_bl_node”…”�”}”(hj|xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjyxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j~xŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jDxsbŒc.hlist_bl_add_head_rcu”†”asbuh1hhjZxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjœxh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjZxubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjªxh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjZxubj�)�”}”(hj�h]”hŒn”…”�”}”(hj·xh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVxubj¢)�”}”(hŒstruct hlist_bl_head *h”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÏxh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjËxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÜxh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjËxubh)�”}”(hhh]”j�)�”}”(hŒ hlist_bl_head”h]”hŒ hlist_bl_head”…”�”}”(hjíxh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjêxubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jïxŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j˜xŒc.hlist_bl_add_head_rcu”†”asbuh1hhjËxubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj yh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjËxubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjËxubj�)�”}”(hŒh”h]”hŒh”…”�”}”(hj&yh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjËxubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjVxubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjxh²hh³j/xh´K?ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjxh²hh³j/xh´K?ubah}”(h]”jxah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j/xh´K?hjxh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjxh²hh³j/xh´K?ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjYyjæjYyjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXõ**Parameters** ``struct hlist_bl_node *n`` the element to add to the hash list. ``struct hlist_bl_head *h`` the list to add to. **Description** Adds the specified element to the specified hlist_bl, while permitting racing traversals. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_bl_add_head_rcu() or hlist_bl_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_bl_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjcyh]”hŒ Parameters”…”�”}”(hjeyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjayubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´KChj]yubj )�”}”(hhh]”(j)�”}”(hŒA``struct hlist_bl_node *n`` the element to add to the hash list. ”h]”(j)�”}”(hŒ``struct hlist_bl_node *n``”h]”j)�”}”(hj‚yh]”hŒstruct hlist_bl_node *n”…”�”}”(hj„yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj€yubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´K@hj|yubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the element to add to the hash list.”h]”hŒ$the element to add to the hash list.”…”�”}”(hj›yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j—yh´K@hj˜yubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|yubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—yh´K@hjyyubj)�”}”(hŒ0``struct hlist_bl_head *h`` the list to add to. ”h]”(j)�”}”(hŒ``struct hlist_bl_head *h``”h]”j)�”}”(hj»yh]”hŒstruct hlist_bl_head *h”…”�”}”(hj½yh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¹yubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´KAhjµyubj2)�”}”(hhh]”hÝ)�”}”(hŒthe list to add to.”h]”hŒthe list to add to.”…”�”}”(hjÔyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÐyh´KAhjÑyubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµyubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÐyh´KAhjyyubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj]yubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjöyh]”hŒ Description”…”�”}”(hjøyh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjôyubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´KChj]yubhÝ)�”}”(hŒYAdds the specified element to the specified hlist_bl, while permitting racing traversals.”h]”hŒYAdds the specified element to the specified hlist_bl, while permitting racing traversals.”…”�”}”(hj zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´KChj]yubhÝ)�”}”(hXThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_bl_add_head_rcu() or hlist_bl_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_bl_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”hXThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_bl_add_head_rcu() or hlist_bl_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_bl_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´KFhj]yubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%hlist_bl_for_each_entry_rcu (C macro)”Œc.hlist_bl_for_each_entry_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_bl_for_each_entry_rcu”h]”j)�”}”(hŒhlist_bl_for_each_entry_rcu”h]”j{)�”}”(hŒhlist_bl_for_each_entry_rcu”h]”j�)�”}”(hjDzh]”hŒhlist_bl_for_each_entry_rcu”…”�”}”(hjNzh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjJzubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjFzh²hh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kbubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjBzh²hh³jazh´Kbubah}”(h]”j=zah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jazh´Kbhj?zh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj?zh²hh³jazh´Kbubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjzzjæjzzjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ9``hlist_bl_for_each_entry_rcu (tpos, pos, head, member)``”h]”j)�”}”(hj€zh]”hŒ5hlist_bl_for_each_entry_rcu (tpos, pos, head, member)”…”�”}”(hj‚zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj~zubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´KdhjôÖh²hubj•)�”}”(hŒ$iterate over rcu list of given type ”h]”hÝ)�”}”(hŒ#iterate over rcu list of given type”h]”hŒ#iterate over rcu list of given type”…”�”}”(hjšzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kbhj–zubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¨zh´KbhjôÖh²hubjë)�”}”(hŒø**Parameters** ``tpos`` the type * to use as a loop cursor. ``pos`` the :c:type:`struct hlist_bl_node ` to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the hlist_bl_node within the struct.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjµzh]”hŒ Parameters”…”�”}”(hj·zh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj³zubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kfhj¯zubj )�”}”(hhh]”(j)�”}”(hŒ-``tpos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``tpos``”h]”j)�”}”(hjÔzh]”hŒtpos”…”�”}”(hjÖzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÒzubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´KchjÎzubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjízh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jézh´Kchjêzubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÎzubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jézh´KchjËzubj)�”}”(hŒT``pos`` the :c:type:`struct hlist_bl_node ` to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj {h]”hŒpos”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj {ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kdhj{ubj2)�”}”(hhh]”hÝ)�”}”(hŒKthe :c:type:`struct hlist_bl_node ` to use as a loop cursor.”h]”(hŒthe ”…”�”}”(hj&{h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct hlist_bl_node `”h]”j)�”}”(hj0{h]”hŒstruct hlist_bl_node”…”�”}”(hj2{h²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhj.{ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œ hlist_bl_node”uh1hh³j"{h´Kdhj&{ubhŒ to use as a loop cursor.”…”�”}”(hj&{h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j"{h´Kdhj#{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j"{h´KdhjËzubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hji{h]”hŒhead”…”�”}”(hjk{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjg{ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kehjc{ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hj‚{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j~{h´Kehj{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjc{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~{h´KehjËzubj)�”}”(hŒ;``member`` the name of the hlist_bl_node within the struct.”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj¢{h]”hŒmember”…”�”}”(hj¤{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj {ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”•h´Kghjœ{ubj2)�”}”(hhh]”hÝ)�”}”(hŒ0the name of the hlist_bl_node within the struct.”h]”hŒ0the name of the hlist_bl_node within the struct.”…”�”}”(hj»{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kfhj¸{ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœ{ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·{h´KghjËzubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¯zubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ.hlist_bl_for_each_entry_continue_rcu (C macro)”Œ&c.hlist_bl_for_each_entry_continue_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ$hlist_bl_for_each_entry_continue_rcu”h]”j)�”}”(hŒ$hlist_bl_for_each_entry_continue_rcu”h]”j{)�”}”(hŒ$hlist_bl_for_each_entry_continue_rcu”h]”j�)�”}”(hjö{h]”hŒ$hlist_bl_for_each_entry_continue_rcu”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjü{ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjø{h²hh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kpubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjô{h²hh³j|h´Kpubah}”(h]”jï{ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j|h´Kphjñ{h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjñ{h²hh³j|h´Kpubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj,|jæj,|jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ<``hlist_bl_for_each_entry_continue_rcu (tpos, pos, member)``”h]”j)�”}”(hj2|h]”hŒ8hlist_bl_for_each_entry_continue_rcu (tpos, pos, member)”…”�”}”(hj4|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj0|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´KrhjôÖh²hubj•)�”}”(hŒ+continue iteration over list of given type ”h]”hÝ)�”}”(hŒ*continue iteration over list of given type”h]”hŒ*continue iteration over list of given type”…”�”}”(hjL|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´KphjH|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jZ|h´KphjôÖh²hubjë)�”}”(hX~**Parameters** ``tpos`` the type * to use as a loop cursor. ``pos`` the :c:type:`struct hlist_bl_node ` to use as a loop cursor. ``member`` the name of the hlist_bl_node within the struct. **Description** Continue to iterate over list of given type, continuing after the current position which must have been in the list when the RCU read lock was taken. This would typically require either that you obtained the node from a previous walk of the list in the same RCU read-side critical section, or that you held some sort of non-RCU reference (such as a reference count) to keep the node alive *and* in the list.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjg|h]”hŒ Parameters”…”�”}”(hji|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhje|ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kthja|ubj )�”}”(hhh]”(j)�”}”(hŒ-``tpos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``tpos``”h]”j)�”}”(hj†|h]”hŒtpos”…”�”}”(hjˆ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Krhj€|ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjŸ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›|h´Krhjœ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›|h´Krhj}|ubj)�”}”(hŒT``pos`` the :c:type:`struct hlist_bl_node ` to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj¿|h]”hŒpos”…”�”}”(hjÁ|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kshj¹|ubj2)�”}”(hhh]”hÝ)�”}”(hŒKthe :c:type:`struct hlist_bl_node ` to use as a loop cursor.”h]”(hŒthe ”…”�”}”(hjØ|h²hh³Nh´Nubh)�”}”(hŒ.:c:type:`struct hlist_bl_node `”h]”j)�”}”(hjâ|h]”hŒstruct hlist_bl_node”…”�”}”(hjä|h²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjà|ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œ hlist_bl_node”uh1hh³jÔ|h´KshjØ|ubhŒ to use as a loop cursor.”…”�”}”(hjØ|h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÔ|h´KshjÕ|ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔ|h´Kshj}|ubj)�”}”(hŒ<``member`` the name of the hlist_bl_node within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj}h]”hŒmember”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kthj}ubj2)�”}”(hhh]”hÝ)�”}”(hŒ0the name of the hlist_bl_node within the struct.”h]”hŒ0the name of the hlist_bl_node within the struct.”…”�”}”(hj4}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j0}h´Kthj1}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj}ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j0}h´Kthj}|ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hja|ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjV}h]”hŒ Description”…”�”}”(hjX}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjT}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kvhja|ubhÝ)�”}”(hX—Continue to iterate over list of given type, continuing after the current position which must have been in the list when the RCU read lock was taken. This would typically require either that you obtained the node from a previous walk of the list in the same RCU read-side critical section, or that you held some sort of non-RCU reference (such as a reference count) to keep the node alive *and* in the list.”h]”(hX…Continue to iterate over list of given type, continuing after the current position which must have been in the list when the RCU read lock was taken. This would typically require either that you obtained the node from a previous walk of the list in the same RCU read-side critical section, or that you held some sort of non-RCU reference (such as a reference count) to keep the node alive ”…”�”}”(hjl}h²hh³Nh´Nubjp‡)�”}”(hŒ*and*”h]”hŒand”…”�”}”(hjt}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hjl}ubhŒ in the list.”…”�”}”(hjl}h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ_/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:411: ./include/linux/rculist_bl.h”h´Kuhja|ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_for_each_rcu (C macro)”Œc.list_for_each_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlist_for_each_rcu”h]”j)�”}”(hŒlist_for_each_rcu”h]”j{)�”}”(hŒlist_for_each_rcu”h]”j�)�”}”(hj§}h]”hŒlist_for_each_rcu”…”�”}”(hj±}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­}ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj©}h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K.ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¥}h²hh³jÄ}h´K.ubah}”(h]”j }ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÄ}h´K.hj¢}h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¢}h²hh³jÄ}h´K.ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÝ}jæjÝ}jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ!``list_for_each_rcu (pos, head)``”h]”j)�”}”(hjã}h]”hŒlist_for_each_rcu (pos, head)”…”�”}”(hjå}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjá}ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K0hjôÖh²hubj•)�”}”(hŒ+Iterate over a list in an RCU-safe fashion ”h]”hÝ)�”}”(hŒ*Iterate over a list in an RCU-safe fashion”h]”hŒ*Iterate over a list in an RCU-safe fashion”…”�”}”(hjý}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K.hjù}ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j ~h´K.hjôÖh²hubjë)�”}”(hŒ�**Parameters** ``pos`` the :c:type:`struct list_head ` to use as a loop cursor. ``head`` the head for your list.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj~h]”hŒ Parameters”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K2hj~ubj )�”}”(hhh]”(j)�”}”(hŒL``pos`` the :c:type:`struct list_head ` to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj7~h]”hŒpos”…”�”}”(hj9~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K/hj1~ubj2)�”}”(hhh]”hÝ)�”}”(hŒCthe :c:type:`struct list_head ` to use as a loop cursor.”h]”(hŒthe ”…”�”}”(hjP~h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct list_head `”h]”j)�”}”(hjZ~h]”hŒstruct list_head”…”�”}”(hj\~h²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjX~ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œ list_head”uh1hh³jL~h´K/hjP~ubhŒ to use as a loop cursor.”…”�”}”(hjP~h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jL~h´K/hjM~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jL~h´K/hj.~ubj)�”}”(hŒ ``head`` the head for your list.”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hj“~h]”hŒhead”…”�”}”(hj•~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘~ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K1hj�~ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hj¬~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K0hj©~ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¨~h´K1hj.~ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj~ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_tail_rcu (C macro)”Œc.list_tail_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ list_tail_rcu”h]”j)�”}”(hŒ list_tail_rcu”h]”j{)�”}”(hŒ list_tail_rcu”h]”j�)�”}”(hjç~h]”hŒ list_tail_rcu”…”�”}”(hjñ~h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjí~ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjé~h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K8ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjå~h²hh³jh´K8ubah}”(h]”jà~ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh´K8hjâ~h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjâ~h²hh³jh´K8ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjjæjjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``list_tail_rcu (head)``”h]”j)�”}”(hj#h]”hŒlist_tail_rcu (head)”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K:hjôÖh²hubj•)�”}”(hŒ1returns the prev pointer of the head of the list ”h]”hÝ)�”}”(hŒ0returns the prev pointer of the head of the list”h]”hŒ0returns the prev pointer of the head of the list”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K8hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jKh´K8hjôÖh²hubjë)�”}”(hŒÇ**Parameters** ``head`` the head of the list **Note** This should only be used with the list header, and even then only if list_del() and similar primitives are not also used on the list header.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjXh]”hŒ Parameters”…”�”}”(hjZh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjVubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Kah"]”h$]”h&]”uh1j1hjóh²hh³j€h´Knubj{)�”}”(hŒ list_add_rcu”h]”j�)�”}”(hŒ list_add_rcu”h]”hŒ list_add_rcu”…”�”}”(hj€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj€ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjóh²hh³j€h´Knubjœ)�”}”(hŒ/(struct list_head *new, struct list_head *head)”h]”(j¢)�”}”(hŒstruct list_head *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj4€h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj0€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjA€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0€ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjR€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjO€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jT€Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j€sbŒc.list_add_rcu”†”asbuh1hhj0€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjr€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0€ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj€€h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj0€ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj�€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,€ubj¢)�”}”(hŒstruct list_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¦€h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¢€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢€ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjÄ€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁ€ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÆ€Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jn€Œc.list_add_rcu”†”asbuh1hhj¢€ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjâ€h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢€ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjð€h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¢€ubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hjý€h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢€ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj,€ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjóh²hh³j€h´Knubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjïh²hh³j€h´Knubah}”(h]”jêah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j€h´Knhjìh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%add a new entry to rcu-protected list”h]”hŒ%add a new entry to rcu-protected list”…”�”}”(hj'�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Knhj$�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjìh²hh³j€h´Knubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj?�jæj?�jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX5**Parameters** ``struct list_head *new`` new entry to be added ``struct list_head *head`` list head to add it after **Description** Insert a new entry after the specified head. This is good for implementing stacks. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_add_rcu() or list_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjI�h]”hŒ Parameters”…”�”}”(hjK�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjG�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KrhjC�ubj )�”}”(hhh]”(j)�”}”(hŒ0``struct list_head *new`` new entry to be added ”h]”(j)�”}”(hŒ``struct list_head *new``”h]”j)�”}”(hjh�h]”hŒstruct list_head *new”…”�”}”(hjj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjf�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Kohjb�ubj2)�”}”(hhh]”hÝ)�”}”(hŒnew entry to be added”h]”hŒnew entry to be added”…”�”}”(hj��h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}�h´Kohj~�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjb�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}�h´Kohj_�ubj)�”}”(hŒ5``struct list_head *head`` list head to add it after ”h]”(j)�”}”(hŒ``struct list_head *head``”h]”j)�”}”(hj¡�h]”hŒstruct list_head *head”…”�”}”(hj£�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Kphj›�ubj2)�”}”(hhh]”hÝ)�”}”(hŒlist head to add it after”h]”hŒlist head to add it after”…”�”}”(hjº�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶�h´Kphj·�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶�h´Kphj_�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjC�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÜ�h]”hŒ Description”…”�”}”(hjÞ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KrhjC�ubhÝ)�”}”(hŒRInsert a new entry after the specified head. This is good for implementing stacks.”h]”hŒRInsert a new entry after the specified head. This is good for implementing stacks.”…”�”}”(hjò�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KqhjC�ubhÝ)�”}”(hXUThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_add_rcu() or list_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”h]”hXUThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_add_rcu() or list_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”…”�”}”(hj‚h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KthjC�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_add_tail_rcu (C function)”Œc.list_add_tail_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒFvoid list_add_tail_rcu (struct list_head *new, struct list_head *head)”h]”j)�”}”(hŒEvoid list_add_tail_rcu(struct list_head *new, struct list_head *head)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj0‚h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj,‚h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Kƒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj?‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj,‚h²hh³j>‚h´Kƒubj{)�”}”(hŒlist_add_tail_rcu”h]”j�)�”}”(hŒlist_add_tail_rcu”h]”hŒlist_add_tail_rcu”…”�”}”(hjQ‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjM‚ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj,‚h²hh³j>‚h´Kƒubjœ)�”}”(hŒ/(struct list_head *new, struct list_head *head)”h]”(j¢)�”}”(hŒstruct list_head *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjm‚h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hji‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjz‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hji‚ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj‹‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjˆ‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�‚Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jS‚sbŒc.list_add_tail_rcu”†”asbuh1hhji‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj«‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hji‚ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¹‚h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhji‚ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjÆ‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hji‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hje‚ubj¢)�”}”(hŒstruct list_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjß‚h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÛ‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjì‚h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ‚ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjý‚h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjú‚ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÿ‚Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j§‚Œc.list_add_tail_rcu”†”asbuh1hhjÛ‚ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛ‚ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj)ƒh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÛ‚ubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hj6ƒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛ‚ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hje‚ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj,‚h²hh³j>‚h´Kƒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj(‚h²hh³j>‚h´Kƒubah}”(h]”j#‚ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j>‚h´Kƒhj%‚h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ%add a new entry to rcu-protected list”h]”hŒ%add a new entry to rcu-protected list”…”�”}”(hj`ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Kƒhj]ƒh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj%‚h²hh³j>‚h´Kƒubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjxƒjæjxƒjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX>**Parameters** ``struct list_head *new`` new entry to be added ``struct list_head *head`` list head to add it before **Description** Insert a new entry before the specified head. This is useful for implementing queues. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_add_tail_rcu() or list_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‚ƒh]”hŒ Parameters”…”�”}”(hj„ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K‡hj|ƒubj )�”}”(hhh]”(j)�”}”(hŒ0``struct list_head *new`` new entry to be added ”h]”(j)�”}”(hŒ``struct list_head *new``”h]”j)�”}”(hj¡ƒh]”hŒstruct list_head *new”…”�”}”(hj£ƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸƒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K„hj›ƒubj2)�”}”(hhh]”hÝ)�”}”(hŒnew entry to be added”h]”hŒnew entry to be added”…”�”}”(hjºƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶ƒh´K„hj·ƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶ƒh´K„hj˜ƒubj)�”}”(hŒ6``struct list_head *head`` list head to add it before ”h]”(j)�”}”(hŒ``struct list_head *head``”h]”j)�”}”(hjÚƒh]”hŒstruct list_head *head”…”�”}”(hj܃h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj؃ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K…hjÔƒubj2)�”}”(hhh]”hÝ)�”}”(hŒlist head to add it before”h]”hŒlist head to add it before”…”�”}”(hjóƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïƒh´K…hjðƒubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïƒh´K…hj˜ƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj|ƒubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj„h]”hŒ Description”…”�”}”(hj„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj„ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K‡hj|ƒubhÝ)�”}”(hŒUInsert a new entry before the specified head. This is useful for implementing queues.”h]”hŒUInsert a new entry before the specified head. This is useful for implementing queues.”…”�”}”(hj+„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K†hj|ƒubhÝ)�”}”(hXZThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_add_tail_rcu() or list_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”h]”hXZThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_add_tail_rcu() or list_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”…”�”}”(hj:„h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K‰hj|ƒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_del_rcu (C function)”Œc.list_del_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ+void list_del_rcu (struct list_head *entry)”h]”j)�”}”(hŒ*void list_del_rcu(struct list_head *entry)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hji„h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhje„h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjx„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje„h²hh³jw„h´K™ubj{)�”}”(hŒ list_del_rcu”h]”j�)�”}”(hŒ list_del_rcu”h]”hŒ list_del_rcu”…”�”}”(hjŠ„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj†„ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhje„h²hh³jw„h´K™ubjœ)�”}”(hŒ(struct list_head *entry)”h]”j¢)�”}”(hŒstruct list_head *entry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¦„h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¢„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj³„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢„ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjÄ„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÁ„ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÆ„Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jŒ„sbŒc.list_del_rcu”†”asbuh1hhj¢„ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjä„h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¢„ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjò„h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¢„ubj�)�”}”(hŒentry”h]”hŒentry”…”�”}”(hjÿ„h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢„ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjž„ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hje„h²hh³jw„h´K™ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hja„h²hh³jw„h´K™ubah}”(h]”j\„ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jw„h´K™hj^„h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1deletes entry from list without re-initialization”h]”hŒ1deletes entry from list without re-initialization”…”�”}”(hj)…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K™hj&…h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj^„h²hh³jw„h´K™ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjA…jæjA…jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXz**Parameters** ``struct list_head *entry`` the element to delete from the list. **Note** list_empty() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal. In particular, it means that we can not poison the forward pointers that may still be used for walking the list. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_del_rcu() or list_add_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu(). Note that the caller is not permitted to immediately free the newly deleted entry. Instead, either synchronize_rcu() or call_rcu() must be used to defer freeing until an RCU grace period has elapsed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjK…h]”hŒ Parameters”…”�”}”(hjM…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjI…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K�hjE…ubj )�”}”(hhh]”j)�”}”(hŒA``struct list_head *entry`` the element to delete from the list. ”h]”(j)�”}”(hŒ``struct list_head *entry``”h]”j)�”}”(hjj…h]”hŒstruct list_head *entry”…”�”}”(hjl…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh…ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Kšhjd…ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the element to delete from the list.”h]”hŒ$the element to delete from the list.”…”�”}”(hjƒ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j…h´Kšhj€…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjd…ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…h´Kšhja…ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjE…ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj¥…h]”hŒNote”…”�”}”(hj§…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj£…ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KœhjE…ubhÝ)�”}”(hŒ‰list_empty() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal.”h]”hŒ‰list_empty() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal.”…”�”}”(hj»…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KœhjE…ubhÝ)�”}”(hŒpIn particular, it means that we can not poison the forward pointers that may still be used for walking the list.”h]”hŒpIn particular, it means that we can not poison the forward pointers that may still be used for walking the list.”…”�”}”(hjÊ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K hjE…ubhÝ)�”}”(hXUThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_del_rcu() or list_add_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”h]”hXUThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_del_rcu() or list_add_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”…”�”}”(hjÙ…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K£hjE…ubhÝ)�”}”(hŒÈNote that the caller is not permitted to immediately free the newly deleted entry. Instead, either synchronize_rcu() or call_rcu() must be used to defer freeing until an RCU grace period has elapsed.”h]”hŒÈNote that the caller is not permitted to immediately free the newly deleted entry. Instead, either synchronize_rcu() or call_rcu() must be used to defer freeing until an RCU grace period has elapsed.”…”�”}”(hjè…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K«hjE…ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_bidir_del_rcu (C function)”Œc.list_bidir_del_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ1void list_bidir_del_rcu (struct list_head *entry)”h]”j)�”}”(hŒ0void list_bidir_del_rcu(struct list_head *entry)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj†h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K·ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†h²hh³j%†h´K·ubj{)�”}”(hŒlist_bidir_del_rcu”h]”j�)�”}”(hŒlist_bidir_del_rcu”h]”hŒlist_bidir_del_rcu”…”�”}”(hj8†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4†ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj†h²hh³j%†h´K·ubjœ)�”}”(hŒ(struct list_head *entry)”h]”j¢)�”}”(hŒstruct list_head *entry”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjT†h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjP†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hja†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjP†ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjr†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjo†ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jt†Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j:†sbŒc.list_bidir_del_rcu”†”asbuh1hhjP†ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj’†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjP†ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj †h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjP†ubj�)�”}”(hŒentry”h]”hŒentry”…”�”}”(hj­†h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjP†ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjL†ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj†h²hh³j%†h´K·ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj†h²hh³j%†h´K·ubah}”(h]”j †ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j%†h´K·hj †h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1deletes entry from list without re-initialization”h]”hŒ1deletes entry from list without re-initialization”…”�”}”(hj׆h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K·hjÔ†h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj †h²hh³j%†h´K·ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjï†jæjï†jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX‚**Parameters** ``struct list_head *entry`` the element to delete from the list. **Description** In contrast to list_del_rcu() doesn't poison the prev pointer thus allowing backwards traversal via list_bidir_prev_rcu(). **Note** list_empty() on entry does not return true after this because the entry is in a special undefined state that permits RCU-based lockfree reverse traversal. In particular this means that we can not poison the forward and backwards pointers that may still be used for walking the list. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_bidir_del_rcu() or list_add_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu(). Note that list_del_rcu() and list_bidir_del_rcu() must not be used on the same list. Note that the caller is not permitted to immediately free the newly deleted entry. Instead, either synchronize_rcu() or call_rcu() must be used to defer freeing until an RCU grace period has elapsed.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjù†h]”hŒ Parameters”…”�”}”(hjû†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷†ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K»hjó†ubj )�”}”(hhh]”j)�”}”(hŒA``struct list_head *entry`` the element to delete from the list. ”h]”(j)�”}”(hŒ``struct list_head *entry``”h]”j)�”}”(hj‡h]”hŒstruct list_head *entry”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K¸hj‡ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the element to delete from the list.”h]”hŒ$the element to delete from the list.”…”�”}”(hj1‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j-‡h´K¸hj.‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-‡h´K¸hj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjó†ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjS‡h]”hŒ Description”…”�”}”(hjU‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjQ‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Kºhjó†ubhÝ)�”}”(hŒzIn contrast to list_del_rcu() doesn't poison the prev pointer thus allowing backwards traversal via list_bidir_prev_rcu().”h]”hŒ|In contrast to list_del_rcu() doesn’t poison the prev pointer thus allowing backwards traversal via list_bidir_prev_rcu().”…”�”}”(hji‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K¹hjó†ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjz‡h]”hŒNote”…”�”}”(hj|‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjx‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K¼hjó†ubhÝ)�”}”(hXlist_empty() on entry does not return true after this because the entry is in a special undefined state that permits RCU-based lockfree reverse traversal. In particular this means that we can not poison the forward and backwards pointers that may still be used for walking the list.”h]”hXlist_empty() on entry does not return true after this because the entry is in a special undefined state that permits RCU-based lockfree reverse traversal. In particular this means that we can not poison the forward and backwards pointers that may still be used for walking the list.”…”�”}”(hj�‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K½hjó†ubhÝ)�”}”(hX[The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_bidir_del_rcu() or list_add_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”h]”hX[The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as list_bidir_del_rcu() or list_add_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as list_for_each_entry_rcu().”…”�”}”(hjŸ‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KÃhjó†ubhÝ)�”}”(hŒTNote that list_del_rcu() and list_bidir_del_rcu() must not be used on the same list.”h]”hŒTNote that list_del_rcu() and list_bidir_del_rcu() must not be used on the same list.”…”�”}”(hj®‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KÊhjó†ubhÝ)�”}”(hŒÈNote that the caller is not permitted to immediately free the newly deleted entry. Instead, either synchronize_rcu() or call_rcu() must be used to defer freeing until an RCU grace period has elapsed.”h]”hŒÈNote that the caller is not permitted to immediately free the newly deleted entry. Instead, either synchronize_rcu() or call_rcu() must be used to defer freeing until an RCU grace period has elapsed.”…”�”}”(hj½‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KÍhjó†ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œhlist_del_init_rcu (C function)”Œc.hlist_del_init_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ.void hlist_del_init_rcu (struct hlist_node *n)”h]”j)�”}”(hŒ-void hlist_del_init_rcu(struct hlist_node *n)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjì‡h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjè‡h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjû‡h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjè‡h²hh³jú‡h´KØubj{)�”}”(hŒhlist_del_init_rcu”h]”j�)�”}”(hŒhlist_del_init_rcu”h]”hŒhlist_del_init_rcu”…”�”}”(hj ˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ˆubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjè‡h²hh³jú‡h´KØubjœ)�”}”(hŒ(struct hlist_node *n)”h]”j¢)�”}”(hŒstruct hlist_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj)ˆh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj%ˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6ˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%ˆubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hjGˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDˆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jIˆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jˆsbŒc.hlist_del_init_rcu”†”asbuh1hhj%ˆubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgˆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%ˆubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjuˆh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj%ˆubj�)�”}”(hj�h]”hŒn”…”�”}”(hj‚ˆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%ˆubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!ˆubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjè‡h²hh³jú‡h´KØubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjä‡h²hh³jú‡h´KØubah}”(h]”j߇ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jú‡h´KØhjá‡h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3deletes entry from hash list with re-initialization”h]”hŒ3deletes entry from hash list with re-initialization”…”�”}”(hj«ˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KØhj¨ˆh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjá‡h²hh³jú‡h´KØubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÈjæjÈjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXG**Parameters** ``struct hlist_node *n`` the element to delete from the hash list. **Note** list_unhashed() on the node return true after this. It is useful for RCU based read lockfree traversal if the writer side must know if the list entry is still hashed or already unhashed. In particular, it means that we can not poison the forward pointers that may still be used for walking the hash list and we can only zero the pprev pointer so list_unhashed() will return true after this. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj͈h]”hŒ Parameters”…”�”}”(hjψh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjˈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KÜhjLjubj )�”}”(hhh]”j)�”}”(hŒC``struct hlist_node *n`` the element to delete from the hash list. ”h]”(j)�”}”(hŒ``struct hlist_node *n``”h]”j)�”}”(hjìˆh]”hŒstruct hlist_node *n”…”�”}”(hjîˆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêˆubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KÙhjæˆubj2)�”}”(hhh]”hÝ)�”}”(hŒ)the element to delete from the hash list.”h]”hŒ)the element to delete from the hash list.”…”�”}”(hj‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰h´KÙhj‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæˆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰h´KÙhjãˆubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjLjubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj'‰h]”hŒNote”…”�”}”(hj)‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%‰ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KÛhjLjubhÝ)�”}”(hŒºlist_unhashed() on the node return true after this. It is useful for RCU based read lockfree traversal if the writer side must know if the list entry is still hashed or already unhashed.”h]”hŒºlist_unhashed() on the node return true after this. It is useful for RCU based read lockfree traversal if the writer side must know if the list entry is still hashed or already unhashed.”…”�”}”(hj=‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KÛhjLjubhÝ)�”}”(hŒËIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list and we can only zero the pprev pointer so list_unhashed() will return true after this.”h]”hŒËIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list and we can only zero the pprev pointer so list_unhashed() will return true after this.”…”�”}”(hjL‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KßhjLjubhÝ)�”}”(hX^The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu().”h]”hX^The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu().”…”�”}”(hj[‰h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KähjLjubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_replace_rcu (C function)”Œc.list_replace_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDvoid list_replace_rcu (struct list_head *old, struct list_head *new)”h]”j)�”}”(hŒCvoid list_replace_rcu(struct list_head *old, struct list_head *new)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjЉh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj†‰h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Kôubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj™‰h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj†‰h²hh³j˜‰h´Kôubj{)�”}”(hŒlist_replace_rcu”h]”j�)�”}”(hŒlist_replace_rcu”h]”hŒlist_replace_rcu”…”�”}”(hj«‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§‰ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj†‰h²hh³j˜‰h´Kôubjœ)�”}”(hŒ.(struct list_head *old, struct list_head *new)”h]”(j¢)�”}”(hŒstruct list_head *old”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjljh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÉubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÔ‰h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjå‰h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjâ‰ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j牌modname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j­‰sbŒc.list_replace_rcu”†”asbuh1hhjÉubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÉubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÉubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hj Šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÉubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¿‰ubj¢)�”}”(hŒstruct list_head *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj9Šh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj5Šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjFŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5Šubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjWŠh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjTŠubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jYŠŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jŠŒc.list_replace_rcu”†”asbuh1hhj5Šubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuŠh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj5Šubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒŠh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj5Šubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj�Šh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj5Šubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¿‰ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj†‰h²hh³j˜‰h´Kôubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj‚‰h²hh³j˜‰h´Kôubah}”(h]”j}‰ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j˜‰h´Kôhj‰h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒreplace old entry by new one”h]”hŒreplace old entry by new one”…”�”}”(hjºŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Kôhj·Šh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‰h²hh³j˜‰h´Kôubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÒŠjæjÒŠjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX|**Parameters** ``struct list_head *old`` the element to be replaced ``struct list_head *new`` the new element to insert **Description** The **old** entry will be replaced with the **new** entry atomically from the perspective of concurrent readers. It is the caller's responsibility to synchronize with concurrent updaters, if any. **Note** **old** should not be empty.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÜŠh]”hŒ Parameters”…”�”}”(hjÞŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚŠubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KøhjÖŠubj )�”}”(hhh]”(j)�”}”(hŒ5``struct list_head *old`` the element to be replaced ”h]”(j)�”}”(hŒ``struct list_head *old``”h]”j)�”}”(hjûŠh]”hŒstruct list_head *old”…”�”}”(hjýŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùŠubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KõhjõŠubj2)�”}”(hhh]”hÝ)�”}”(hŒthe element to be replaced”h]”hŒthe element to be replaced”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‹h´Kõhj‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‹h´KõhjòŠubj)�”}”(hŒ4``struct list_head *new`` the new element to insert ”h]”(j)�”}”(hŒ``struct list_head *new``”h]”j)�”}”(hj4‹h]”hŒstruct list_head *new”…”�”}”(hj6‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Köhj.‹ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe new element to insert”h]”hŒthe new element to insert”…”�”}”(hjM‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jI‹h´KöhjJ‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.‹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jI‹h´KöhjòŠubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖŠubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjo‹h]”hŒ Description”…”�”}”(hjq‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjm‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KøhjÖŠubhÝ)�”}”(hŒÄThe **old** entry will be replaced with the **new** entry atomically from the perspective of concurrent readers. It is the caller's responsibility to synchronize with concurrent updaters, if any.”h]”(hŒThe ”…”�”}”(hj…‹h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj�‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…‹ubhŒ! entry will be replaced with the ”…”�”}”(hj…‹h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hjŸ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj…‹ubhŒ“ entry atomically from the perspective of concurrent readers. It is the caller’s responsibility to synchronize with concurrent updaters, if any.”…”�”}”(hj…‹h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´K÷hjÖŠubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjº‹h]”hŒNote”…”�”}”(hj¼‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¸‹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KûhjÖŠubhÝ)�”}”(hŒ**old** should not be empty.”h]”(jõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjÔ‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjЋubhŒ should not be empty.”…”�”}”(hjЋh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´KühjÖŠubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_splice_rcu (C function)”Œc.list_splice_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEvoid list_splice_rcu (struct list_head *list, struct list_head *head)”h]”j)�”}”(hŒDvoid list_splice_rcu(struct list_head *list, struct list_head *head)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj Œh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj Œh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj Œh²hh³jŒh´Mubj{)�”}”(hŒlist_splice_rcu”h]”j�)�”}”(hŒlist_splice_rcu”h]”hŒlist_splice_rcu”…”�”}”(hj.Œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj*Œubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj Œh²hh³jŒh´Mubjœ)�”}”(hŒ0(struct list_head *list, struct list_head *head)”h]”(j¢)�”}”(hŒstruct list_head *list”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjJŒh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjFŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFŒubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjhŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjeŒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jjŒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j0ŒsbŒc.list_splice_rcu”†”asbuh1hhjFŒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjˆŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjFŒubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj–Œh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjFŒubj�)�”}”(hŒlist”h]”hŒlist”…”�”}”(hj£Œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjFŒubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjBŒubj¢)�”}”(hŒstruct list_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¼Œh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¸Œubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÉŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸Œubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjÚŒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj׌ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÜŒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j„ŒŒc.list_splice_rcu”†”asbuh1hhj¸Œubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjøŒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸Œubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¸Œubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¸Œubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjBŒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj Œh²hh³jŒh´Mubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŒh²hh³jŒh´Mubah}”(h]”jŒah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jŒh´MhjŒh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒFsplice a non-RCU list into an RCU-protected list, designed for stacks.”h]”hŒFsplice a non-RCU list into an RCU-protected list, designed for stacks.”…”�”}”(hj=�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj:�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŒh²hh³jŒh´Mubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjU�jæjU�jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``struct list_head *list`` the non RCU-protected list to splice ``struct list_head *head`` the place in the existing RCU-protected list to splice **Description** The list pointed to by **head** can be RCU-read traversed concurrently with this function.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj_�h]”hŒ Parameters”…”�”}”(hja�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj]�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjY�ubj )�”}”(hhh]”(j)�”}”(hŒ@``struct list_head *list`` the non RCU-protected list to splice ”h]”(j)�”}”(hŒ``struct list_head *list``”h]”j)�”}”(hj~�h]”hŒstruct list_head *list”…”�”}”(hj€�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj|�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhjx�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the non RCU-protected list to splice”h]”hŒ$the non RCU-protected list to splice”…”�”}”(hj—�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j“�h´Mhj”�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjx�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j“�h´Mhju�ubj)�”}”(hŒR``struct list_head *head`` the place in the existing RCU-protected list to splice ”h]”(j)�”}”(hŒ``struct list_head *head``”h]”j)�”}”(hj·�h]”hŒstruct list_head *head”…”�”}”(hj¹�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj±�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ6the place in the existing RCU-protected list to splice”h]”hŒ6the place in the existing RCU-protected list to splice”…”�”}”(hjÐ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÌ�h´MhjÍ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj±�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÌ�h´Mhju�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjY�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjò�h]”hŒ Description”…”�”}”(hjô�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjð�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjY�ubhÝ)�”}”(hŒZThe list pointed to by **head** can be RCU-read traversed concurrently with this function.”h]”(hŒThe list pointed to by ”…”�”}”(hjŽh²hh³Nh´Nubjõ)�”}”(hŒ**head**”h]”hŒhead”…”�”}”(•£hjŽh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjŽubhŒ; can be RCU-read traversed concurrently with this function.”…”�”}”(hjŽh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjY�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#__list_splice_init_rcu (C function)”Œc.__list_splice_init_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒxvoid __list_splice_init_rcu (struct list_head *list, struct list_head *prev, struct list_head *next, void (*sync)(void))”h]”j)�”}”(hŒwvoid __list_splice_init_rcu(struct list_head *list, struct list_head *prev, struct list_head *next, void (*sync)(void))”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjIŽh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjEŽh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjXŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjEŽh²hh³jWŽh´M&ubj{)�”}”(hŒ__list_splice_init_rcu”h]”j�)�”}”(hŒ__list_splice_init_rcu”h]”hŒ__list_splice_init_rcu”…”�”}”(hjjŽh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjfŽubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjEŽh²hh³jWŽh´M&ubjœ)�”}”(hŒ\(struct list_head *list, struct list_head *prev, struct list_head *next, void (*sync)(void))”h]”(j¢)�”}”(hŒstruct list_head *list”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj†Žh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‚Žubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Žh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚Žubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj¤Žh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡Žubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j¦ŽŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jlŽsbŒc.__list_splice_init_rcu”†”asbuh1hhj‚Žubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄŽh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚Žubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÒŽh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‚Žubj�)�”}”(hŒlist”h]”hŒlist”…”�”}”(hjߎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚Žubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj~Žubj¢)�”}”(hŒstruct list_head *prev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjøŽh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjôŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôŽubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÀŽŒc.__list_splice_init_rcu”†”asbuh1hhjôŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj4�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjôŽubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjB�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjôŽubj�)�”}”(hŒprev”h]”hŒprev”…”�”}”(hjO�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjôŽubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj~Žubj¢)�”}”(hŒstruct list_head *next”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh�h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjd�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hju�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjd�ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj†�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ�ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jˆ�Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jÀŽŒc.__list_splice_init_rcu”†”asbuh1hhjd�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjd�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj²�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjd�ubj�)�”}”(hŒnext”h]”hŒnext”…”�”}”(hj¿�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjd�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj~Žubj¢)�”}”(hŒvoid (*sync)(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjØ�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÔ�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjæ�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÔ�ubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hjô�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔ�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔ�ubj�)�”}”(hŒsync”h]”hŒsync”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÔ�ubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔ�ubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hj)�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔ�ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj6�h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÔ�ubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hjD�h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÔ�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj~Žubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjEŽh²hh³jWŽh´M&ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjAŽh²hh³jWŽh´M&ubah}”(h]”j<Žah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jWŽh´M&hj>Žh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1join an RCU-protected list into an existing list.”h]”hŒ1join an RCU-protected list into an existing list.”…”�”}”(hjm�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M&hjj�h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj>Žh²hh³jWŽh´M&ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj…�jæj…�jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXI**Parameters** ``struct list_head *list`` the RCU-protected list to splice ``struct list_head *prev`` points to the last element of the existing list ``struct list_head *next`` points to the first element of the existing list ``void (*sync)(void)`` synchronize_rcu, synchronize_rcu_expedited, ... **Description** The list pointed to by **prev** and **next** can be RCU-read traversed concurrently with this function. Note that this function blocks. Important note: the caller must take whatever action is necessary to prevent any other updates to the existing list. In principle, it is possible to modify the list as soon as sync() begins execution. If this sort of thing becomes necessary, an alternative version based on call_rcu() could be created. But only if -really- needed -- there is no shortage of RCU API members.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj��h]”hŒ Parameters”…”�”}”(hj‘�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M*hj‰�ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct list_head *list`` the RCU-protected list to splice ”h]”(j)�”}”(hŒ``struct list_head *list``”h]”j)�”}”(hj®�h]”hŒstruct list_head *list”…”�”}”(hj°�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¬�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M'hj¨�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ the RCU-protected list to splice”h]”hŒ the RCU-protected list to splice”…”�”}”(hjÇ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÃ�h´M'hjÄ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¨�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÃ�h´M'hj¥�ubj)�”}”(hŒK``struct list_head *prev`` points to the last element of the existing list ”h]”(j)�”}”(hŒ``struct list_head *prev``”h]”j)�”}”(hjç�h]”hŒstruct list_head *prev”…”�”}”(hjé�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjå�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M(hjá�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/points to the last element of the existing list”h]”hŒ/points to the last element of the existing list”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jü�h´M(hjý�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjá�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jü�h´M(hj¥�ubj)�”}”(hŒL``struct list_head *next`` points to the first element of the existing list ”h]”(j)�”}”(hŒ``struct list_head *next``”h]”j)�”}”(hj ‘h]”hŒstruct list_head *next”…”�”}”(hj"‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M)hj‘ubj2)�”}”(hhh]”hÝ)�”}”(hŒ0points to the first element of the existing list”h]”hŒ0points to the first element of the existing list”…”�”}”(hj9‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j5‘h´M)hj6‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j5‘h´M)hj¥�ubj)�”}”(hŒG``void (*sync)(void)`` synchronize_rcu, synchronize_rcu_expedited, ... ”h]”(j)�”}”(hŒ``void (*sync)(void)``”h]”j)�”}”(hjY‘h]”hŒvoid (*sync)(void)”…”�”}”(hj[‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M*hjS‘ubj2)�”}”(hhh]”hÝ)�”}”(hŒ/synchronize_rcu, synchronize_rcu_expedited, ...”h]”hŒ/synchronize_rcu, synchronize_rcu_expedited, ...”…”�”}”(hjr‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jn‘h´M*hjo‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjS‘ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jn‘h´M*hj¥�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‰�ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj”‘h]”hŒ Description”…”�”}”(hj–‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj’‘ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M,hj‰�ubhÝ)�”}”(hŒgThe list pointed to by **prev** and **next** can be RCU-read traversed concurrently with this function.”h]”(hŒThe list pointed to by ”…”�”}”(hjª‘h²hh³Nh´Nubjõ)�”}”(hŒ**prev**”h]”hŒprev”…”�”}”(hj²‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjª‘ubhŒ and ”…”�”}”(hjª‘h²hh³Nh´Nubjõ)�”}”(hŒ**next**”h]”hŒnext”…”�”}”(hjÄ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjª‘ubhŒ; can be RCU-read traversed concurrently with this function.”…”�”}”(hjª‘h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M+hj‰�ubhÝ)�”}”(hŒNote that this function blocks.”h]”hŒNote that this function blocks.”…”�”}”(hjÝ‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M.hj‰�ubhÝ)�”}”(hXxImportant note: the caller must take whatever action is necessary to prevent any other updates to the existing list. In principle, it is possible to modify the list as soon as sync() begins execution. If this sort of thing becomes necessary, an alternative version based on call_rcu() could be created. But only if -really- needed -- there is no shortage of RCU API members.”h]”hXxImportant note: the caller must take whatever action is necessary to prevent any other updates to the existing list. In principle, it is possible to modify the list as soon as sync() begins execution. If this sort of thing becomes necessary, an alternative version based on call_rcu() could be created. But only if -really- needed -- there is no shortage of RCU API members.”…”�”}”(hjì‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M0hj‰�ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!list_splice_init_rcu (C function)”Œc.list_splice_init_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ^void list_splice_init_rcu (struct list_head *list, struct list_head *head, void (*sync)(void))”h]”j)�”}”(hŒ]void list_splice_init_rcu(struct list_head *list, struct list_head *head, void (*sync)(void))”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj’h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj’h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mbubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj*’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj’h²hh³j)’h´Mbubj{)�”}”(hŒlist_splice_init_rcu”h]”j�)�”}”(hŒlist_splice_init_rcu”h]”hŒlist_splice_init_rcu”…”�”}”(hj<’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj8’ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj’h²hh³j)’h´Mbubjœ)�”}”(hŒD(struct list_head *list, struct list_head *head, void (*sync)(void))”h]”(j¢)�”}”(hŒstruct list_head *list”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjX’h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjT’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hje’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjT’ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjv’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjs’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jx’Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j>’sbŒc.list_splice_init_rcu”†”asbuh1hhjT’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj–’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjT’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¤’h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjT’ubj�)�”}”(hŒlist”h]”hŒlist”…”�”}”(hj±’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjT’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjP’ubj¢)�”}”(hŒstruct list_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÊ’h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÆ’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj×’h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆ’ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hjè’h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjå’ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jê’Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j’’Œc.list_splice_init_rcu”†”asbuh1hhjÆ’ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆ’ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÆ’ubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hj!“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆ’ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjP’ubj¢)�”}”(hŒvoid (*sync)(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj:“h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6“ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjH“h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj6“ubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hjV“h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj6“ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjc“h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj6“ubj�)�”}”(hŒsync”h]”hŒsync”…”�”}”(hjp“h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6“ubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hj~“h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj6“ubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hj‹“h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj6“ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj˜“h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj6“ubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hj¦“h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj6“ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjP’ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj’h²hh³j)’h´Mbubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj’h²hh³j)’h´Mbubah}”(h]”j’ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j)’h´Mbhj’h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒHsplice an RCU-protected list into an existing list, designed for stacks.”h]”hŒHsplice an RCU-protected list into an existing list, designed for stacks.”…”�”}”(hjÏ“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MbhjÌ“h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj’h²hh³j)’h´Mbubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjç“jæjç“jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒò**Parameters** ``struct list_head *list`` the RCU-protected list to splice ``struct list_head *head`` the place in the existing list to splice the first list into ``void (*sync)(void)`` synchronize_rcu, synchronize_rcu_expedited, ...”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjñ“h]”hŒ Parameters”…”�”}”(hjó“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjï“ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mfhjë“ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct list_head *list`` the RCU-protected list to splice ”h]”(j)�”}”(hŒ``struct list_head *list``”h]”j)�”}”(hj”h]”hŒstruct list_head *list”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mdhj ”ubj2)�”}”(hhh]”hÝ)�”}”(hŒ the RCU-protected list to splice”h]”hŒ the RCU-protected list to splice”…”�”}”(hj)”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j%”h´Mdhj&”ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj ”ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j%”h´Mdhj”ubj)�”}”(hŒX``struct list_head *head`` the place in the existing list to splice the first list into ”h]”(j)�”}”(hŒ``struct list_head *head``”h]”j)�”}”(hjI”h]”hŒstruct list_head *head”…”�”}”(hjK”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjG”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MehjC”ubj2)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjØ”h²hh³jê”h´Mqubj{)�”}”(hŒlist_splice_tail_init_rcu”h]”j�)�”}”(hŒlist_splice_tail_init_rcu”h]”hŒlist_splice_tail_init_rcu”…”�”}”(hjý”h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjù”ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjØ”h²hh³jê”h´Mqubjœ)�”}”(hŒD(struct list_head *list, struct list_head *head, void (*sync)(void))”h]”(j¢)�”}”(hŒstruct list_head *list”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj•h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj•ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj7•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j9•Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÿ”sbŒc.list_splice_tail_init_rcu”†”asbuh1hhj•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjW•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj•ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hje•h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj•ubj�)�”}”(hŒlist”h]”hŒlist”…”�”}”(hjr•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•ubj¢)�”}”(hŒstruct list_head *head”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‹•h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‡•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj˜•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡•ubh)�”}”(hhh]”j�)�”}”(hŒ list_head”h]”hŒ list_head”…”�”}”(hj©•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦•ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j«•Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jS•Œc.list_splice_tail_init_rcu”†”asbuh1hhj‡•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÇ•h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‡•ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÕ•h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‡•ubj�)�”}”(hŒhead”h]”hŒhead”…”�”}”(hjâ•h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‡•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•ubj¢)�”}”(hŒvoid (*sync)(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjû•h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj÷•ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj –h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷•ubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷•ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷•ubj�)�”}”(hŒsync”h]”hŒsync”…”�”}”(hj1–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj÷•ubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hj?–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷•ubjã)�”}”(hjj?h]”hŒ(”…”�”}”(hjL–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷•ubj )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjY–h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj÷•ubjã)�”}”(hj“?h]”hŒ)”…”�”}”(hjg–h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj÷•ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj•ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjØ”h²hh³jê”h´Mqubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÔ”h²hh³jê”h´Mqubah}”(h]”jÏ”ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jê”h´MqhjÑ”h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒHsplice an RCU-protected list into an existing list, designed for queues.”h]”hŒHsplice an RCU-protected list into an existing list, designed for queues.”…”�”}”(hj�–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mqhj�–h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÑ”h²hh³jê”h´Mqubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj¨–jæj¨–jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒò**Parameters** ``struct list_head *list`` the RCU-protected list to splice ``struct list_head *head`` the place in the existing list to splice the first list into ``void (*sync)(void)`` synchronize_rcu, synchronize_rcu_expedited, ...”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj²–h]”hŒ Parameters”…”�”}”(hj´–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj°–ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Muhj¬–ubj )�”}”(hhh]”(j)�”}”(hŒ<``struct list_head *list`` the RCU-protected list to splice ”h]”(j)�”}”(hŒ``struct list_head *list``”h]”j)�”}”(hjÑ–h]”hŒstruct list_head *list”…”�”}”(hjÓ–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÏ–ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MshjË–ubj2)�”}”(hhh]”hÝ)�”}”(hŒ the RCU-protected list to splice”h]”hŒ the RCU-protected list to splice”…”�”}”(hjê–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jæ–h´Mshjç–ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjË–ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jæ–h´MshjÈ–ubj)�”}”(hŒX``struct list_head *head`` the place in the existing list to splice the first list into ”h]”(j)�”}”(hŒ``struct list_head *head``”h]”j)�”}”(hj —h]”hŒstruct list_head *head”…”�”}”(hj —h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj—ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mthj—ubj2)�”}”(hhh]”hÝ)�”}”(hŒ` pointer. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct. **Description** This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj˜h]”hŒ Parameters”…”�”}”(hj ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M„hj˜ubj )�”}”(hhh]”(j)�”}”(hŒ<``ptr`` the :c:type:`struct list_head ` pointer. ”h]”(j)�”}”(hŒ``ptr``”h]”j)�”}”(hj'˜h]”hŒptr”…”�”}”(hj)˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj%˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M�hj!˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒ3the :c:type:`struct list_head ` pointer.”h]”(hŒthe ”…”�”}”(hj@˜h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct list_head `”h]”j)�”}”(hjJ˜h]”hŒstruct list_head”…”�”}”(hjL˜h²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjH˜ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œ list_head”uh1hh³j<˜h´M�hj@˜ubhŒ pointer.”…”�”}”(hj@˜h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j<˜h´M�hj=˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj!˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j<˜h´M�hj˜ubj)�”}”(hŒ5``type`` the type of the struct this is embedded in. ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hjƒ˜h]”hŒtype”…”�”}”(hj…˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M‚hj}˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+the type of the struct this is embedded in.”h]”hŒ+the type of the struct this is embedded in.”…”�”}”(hjœ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j˜˜h´M‚hj™˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj}˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˜˜h´M‚hj˜ubj)�”}”(hŒ8``member`` the name of the list_head within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj¼˜h]”hŒmember”…”�”}”(hj¾˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjº˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mƒhj¶˜ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the name of the list_head within the struct.”h]”hŒ,the name of the list_head within the struct.”…”�”}”(hjÕ˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jјh´MƒhjÒ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¶˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jјh´Mƒhj˜ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj˜ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj÷˜h]”hŒ Description”…”�”}”(hjù˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjõ˜ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M…hj˜ubhÝ)�”}”(hŒ”This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().”h]”hŒ–This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as it’s guarded by rcu_read_lock().”…”�”}”(hj ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M„hj˜ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ list_first_or_null_rcu (C macro)”Œc.list_first_or_null_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlist_first_or_null_rcu”h]”j)�”}”(hŒlist_first_or_null_rcu”h]”j{)�”}”(hŒlist_first_or_null_rcu”h]”j�)�”}”(hj6™h]”hŒlist_first_or_null_rcu”…”�”}”(hj@™h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<™ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj8™h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mªubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj4™h²hh³jS™h´Mªubah}”(h]”j/™ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jS™h´Mªhj1™h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj1™h²hh³jS™h´Mªubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjl™jæjl™jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ.``list_first_or_null_rcu (ptr, type, member)``”h]”j)�”}”(hjr™h]”hŒ*list_first_or_null_rcu (ptr, type, member)”…”�”}”(hjt™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjp™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M¬hjôÖh²hubj•)�”}”(hŒ"get the first element from a list ”h]”hÝ)�”}”(hŒ!get the first element from a list”h]”hŒ!get the first element from a list”…”�”}”(hjŒ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mªhjˆ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jš™h´MªhjôÖh²hubjë)�”}”(hX�**Parameters** ``ptr`` the list head to take the element from. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct. **Description** Note that if the list is empty, it returns NULL. This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj§™h]”hŒ Parameters”…”�”}”(hj©™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥™ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M®hj¡™ubj )�”}”(hhh]”(j)�”}”(hŒ0``ptr`` the list head to take the element from. ”h]”(j)�”}”(hŒ``ptr``”h]”j)�”}”(hjÆ™h]”hŒptr”…”�”}”(hjÈ™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÄ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M«hjÀ™ubj2)�”}”(hhh]”hÝ)�”}”(hŒ'the list head to take the element from.”h]”hŒ'the list head to take the element from.”…”�”}”(hjß™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÛ™h´M«hjÜ™ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÀ™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÛ™h´M«hj½™ubj)�”}”(hŒ5``type`` the type of the struct this is embedded in. ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hjÿ™h]”hŒtype”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjý™ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M¬hjù™ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+the type of the struct this is embedded in.”h]”hŒ+the type of the struct this is embedded in.”…”�”}”(hjšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jšh´M¬hjšubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjù™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jšh´M¬hj½™ubj)�”}”(hŒ8``member`` the name of the list_head within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj8šh]”hŒmember”…”�”}”(hj:šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6šubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M­hj2šubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the name of the list_head within the struct.”h]”hŒ,the name of the list_head within the struct.”…”�”}”(hjQšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jMšh´M­hjNšubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2šubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jMšh´M­hj½™ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¡™ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjsšh]”hŒ Description”…”�”}”(hjušh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjqšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M¯hj¡™ubhÝ)�”}”(hŒ0Note that if the list is empty, it returns NULL.”h]”hŒ0Note that if the list is empty, it returns NULL.”…”�”}”(hj‰šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M®hj¡™ubhÝ)�”}”(hŒ”This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().”h]”hŒ–This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as it’s guarded by rcu_read_lock().”…”�”}”(hj˜šh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M°hj¡™ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_next_or_null_rcu (C macro)”Œc.list_next_or_null_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlist_next_or_null_rcu”h]”j)�”}”(hŒlist_next_or_null_rcu”h]”j{)�”}”(hŒlist_next_or_null_rcu”h]”j�)�”}”(hjÁšh]”hŒlist_next_or_null_rcu”…”�”}”(hjËšh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÇšubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÚh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M¼ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¿šh²hh³jÞšh´M¼ubah}”(h]”jºšah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÞšh´M¼hj¼šh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¼šh²hh³jÞšh´M¼ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj÷šjæj÷šjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ3``list_next_or_null_rcu (head, ptr, type, member)``”h]”j)�”}”(hjýšh]”hŒ/list_next_or_null_rcu (head, ptr, type, member)”…”�”}”(hjÿšh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjûšubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M¾hjôÖh²hubj•)�”}”(hŒ!get the next element from a list ”h]”hÝ)�”}”(hŒ get the next element from a list”h]”hŒ get the next element from a list”…”�”}”(hj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M¼hj›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j%›h´M¼hjôÖh²hubjë)�”}”(hXÆ**Parameters** ``head`` the head for the list. ``ptr`` the list head to take the next element from. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct. **Description** Note that if the ptr is at the end of the list, NULL is returned. This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj2›h]”hŒ Parameters”…”�”}”(hj4›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj0›ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÀhj,›ubj )�”}”(hhh]”(j)�”}”(hŒ ``head`` the head for the list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hjQ›h]”hŒhead”…”�”}”(hjS›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjO›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M½hjK›ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for the list.”h]”hŒthe head for the list.”…”�”}”(hjj›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jf›h´M½hjg›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjK›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jf›h´M½hjH›ubj)�”}”(hŒ5``ptr`` the list head to take the next element from. ”h]”(j)�”}”(hŒ``ptr``”h]”j)�”}”(hjŠ›h]”hŒptr”…”�”}”(hjŒ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjˆ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M¾hj„›ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the list head to take the next element from.”h]”hŒ,the list head to take the next element from.”…”�”}”(hj£›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸ›h´M¾hj ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj„›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸ›h´M¾hjH›ubj)�”}”(hŒ5``type`` the type of the struct this is embedded in. ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hjÛh]”hŒtype”…”�”}”(hjÅ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÁ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M¿hj½›ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+the type of the struct this is embedded in.”h]”hŒ+the type of the struct this is embedded in.”…”�”}”(hjÜ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jØ›h´M¿hjÙ›ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj½›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jØ›h´M¿hjH›ubj)�”}”(hŒ8``member`` the name of the list_head within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hjü›h]”hŒmember”…”�”}”(hjþ›h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjú›ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÀhjö›ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the name of the list_head within the struct.”h]”hŒ,the name of the list_head within the struct.”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœh´MÀhjœubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjö›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœh´MÀhjH›ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj,›ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj7œh]”hŒ Description”…”�”}”(hj9œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj5œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÂhj,›ubhÝ)�”}”(hŒANote that if the ptr is at the end of the list, NULL is returned.”h]”hŒANote that if the ptr is at the end of the list, NULL is returned.”…”�”}”(hjMœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÁhj,›ubhÝ)�”}”(hŒ”This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as it's guarded by rcu_read_lock().”h]”hŒ–This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as it’s guarded by rcu_read_lock().”…”�”}”(hj\œh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÃhj,›ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!list_for_each_entry_rcu (C macro)”Œc.list_for_each_entry_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlist_for_each_entry_rcu”h]”j)�”}”(hŒlist_for_each_entry_rcu”h]”j{)�”}”(hŒlist_for_each_entry_rcu”h]”j�)�”}”(hj…œh]”hŒlist_for_each_entry_rcu”…”�”}”(hj�œh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹œubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‡œh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÑubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjƒœh²hh³j¢œh´MÑubah}”(h]”j~œah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¢œh´MÑhj€œh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj€œh²hh³j¢œh´MÑubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj»œjæj»œjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ8``list_for_each_entry_rcu (pos, head, member, cond...)``”h]”j)�”}”(hjÁœh]”hŒ4list_for_each_entry_rcu (pos, head, member, cond...)”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿œubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÓhjôÖh²hubj•)�”}”(hŒ$iterate over rcu list of given type ”h]”hÝ)�”}”(hŒ#iterate over rcu list of given type”h]”hŒ#iterate over rcu list of given type”…”�”}”(hjÛœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÑhjלubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jéœh´MÑhjôÖh²hubjë)�”}”(hX¬**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. ``cond...`` optional lockdep expression if called from non-RCU protection. **Description** This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as the traversal is guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjöœh]”hŒ Parameters”…”�”}”(hjøœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjôœubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÕhjðœubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj�h]”hŒpos”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÒhj�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hj.�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j*�h´MÒhj+�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j*�h´MÒhj �ubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hjN�h]”hŒhead”…”�”}”(hjP�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjL�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÓhjH�ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hjg�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jc�h´MÓhjd�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjH�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jc�h´MÓhj �ubj)�”}”(hŒ8``member`` the name of the list_head within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj‡�h]”hŒmember”…”�”}”(hj‰�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÔhj��ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the name of the list_head within the struct.”h]”hŒ,the name of the list_head within the struct.”…”�”}”(hj �h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jœ�h´MÔhj��ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj��ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jœ�h´MÔhj �ubj)�”}”(hŒK``cond...`` optional lockdep expression if called from non-RCU protection. ”h]”(j)�”}”(hŒ ``cond...``”h]”j)�”}”(hjÀ�h]”hŒcond...”…”�”}”(hjÂ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¾�ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÕhjº�ubj2)�”}”(hhh]”hÝ)�”}”(hŒ>optional lockdep expression if called from non-RCU protection.”h]”hŒ>optional lockdep expression if called from non-RCU protection.”…”�”}”(hjÙ�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÕ�h´MÕhjÖ�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjº�ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÕ�h´MÕhj �ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjðœubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjû�h]”hŒ Description”…”�”}”(hjý�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjù�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M×hjðœubhÝ)�”}”(hŒ¯This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as the traversal is guarded by rcu_read_lock().”h]”hŒ¯This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as the traversal is guarded by rcu_read_lock().”…”�”}”(hjžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÖhjðœubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"list_for_each_entry_srcu (C macro)”Œc.list_for_each_entry_srcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlist_for_each_entry_srcu”h]”j)�”}”(hŒlist_for_each_entry_srcu”h]”j{)�”}”(hŒlist_for_each_entry_srcu”h]”j�)�”}”(hj:žh]”hŒlist_for_each_entry_srcu”…”�”}”(hjDžh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@žubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj<žh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mâubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj8žh²hh³jWžh´Mâubah}”(h]”j3žah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jWžh´Mâhj5žh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj5žh²hh³jWžh´Mâubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjpžjæjpžjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ6``list_for_each_entry_srcu (pos, head, member, cond)``”h]”j)�”}”(hjvžh]”hŒ2list_for_each_entry_srcu (pos, head, member, cond)”…”�”}”(hjxžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjtžubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MähjôÖh²hubj•)�”}”(hŒ$iterate over rcu list of given type ”h]”hÝ)�”}”(hŒ#iterate over rcu list of given type”h]”hŒ#iterate over rcu list of given type”…”�”}”(hj�žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MâhjŒžubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jžžh´MâhjôÖh²hubjë)�”}”(hX **Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. ``cond`` lockdep expression for the lock required to traverse the list. **Description** This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as the traversal is guarded by srcu_read_lock(). The lockdep expression srcu_read_lock_held() can be passed as the cond argument from read side.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj«žh]”hŒ Parameters”…”�”}”(hj­žh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj©žubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mæhj¥žubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hjÊžh]”hŒpos”…”�”}”(hjÌžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈžubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MãhjÄžubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjãžh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jßžh´Mãhjàžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÄžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jßžh´MãhjÁžubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hjŸh]”hŒhead”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mähjýžubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŸh´MähjŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjýžubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŸh´MähjÁžubj)�”}”(hŒ8``member`` the name of the list_head within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj<Ÿh]”hŒmember”…”�”}”(hj>Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj:Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Måhj6Ÿubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the name of the list_head within the struct.”h]”hŒ,the name of the list_head within the struct.”…”�”}”(hjUŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jQŸh´MåhjRŸubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj6Ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jQŸh´MåhjÁžubj)�”}”(hŒH``cond`` lockdep expression for the lock required to traverse the list. ”h]”(j)�”}”(hŒ``cond``”h]”j)�”}”(hjuŸh]”hŒcond”…”�”}”(hjwŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjsŸubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MæhjoŸubj2)�”}”(hhh]”hÝ)�”}”(hŒ>lockdep expression for the lock required to traverse the list.”h]”hŒ>lockdep expression for the lock required to traverse the list.”…”�”}”(hjŽŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jŠŸh´Mæhj‹Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjoŸubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jŠŸh´MæhjÁžubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¥žubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj°Ÿh]”hŒ Description”…”�”}”(hj²Ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj®Ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mèhj¥žubhÝ)�”}”(hXThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as the traversal is guarded by srcu_read_lock(). The lockdep expression srcu_read_lock_held() can be passed as the cond argument from read side.”h]”hXThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu() as long as the traversal is guarded by srcu_read_lock(). The lockdep expression srcu_read_lock_held() can be passed as the cond argument from read side.”…”�”}”(hjÆŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mçhj¥žubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œlist_entry_lockless (C macro)”Œc.list_entry_lockless”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlist_entry_lockless”h]”j)�”}”(hŒlist_entry_lockless”h]”j{)�”}”(hŒlist_entry_lockless”h]”j�)�”}”(hjïŸh]”hŒlist_entry_lockless”…”�”}”(hjùŸh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõŸubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjñŸh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mõubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjíŸh²hh³j  h´Mõubah}”(h]”jèŸah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j  h´MõhjêŸh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjêŸh²hh³j  h´Mõubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj% jæj% jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ+``list_entry_lockless (ptr, type, member)``”h]”j)�”}”(hj+ h]”hŒ'list_entry_lockless (ptr, type, member)”…”�”}”(hj- h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj) ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M÷hjôÖh²hubj•)�”}”(hŒget the struct for this entry ”h]”hÝ)�”}”(hŒget the struct for this entry”h]”hŒget the struct for this entry”…”�”}”(hjE h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MõhjA ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jS h´MõhjôÖh²hubjë)�”}”(hX>**Parameters** ``ptr`` the :c:type:`struct list_head ` pointer. ``type`` the type of the struct this is embedded in. ``member`` the name of the list_head within the struct. **Description** This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu(), but requires some implicit RCU read-side guarding. One example is running within a special exception-time environment where preemption is disabled and where lockdep cannot be invoked. Another example is when items are added to the list, but never deleted.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj` h]”hŒ Parameters”…”�”}”(hjb h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj^ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MùhjZ ubj )�”}”(hhh]”(j)�”}”(hŒ<``ptr`` the :c:type:`struct list_head ` pointer. ”h]”(j)�”}”(hŒ``ptr``”h]”j)�”}”(hj h]”hŒptr”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj} ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Möhjy ubj2)�”}”(hhh]”hÝ)�”}”(hŒ3the :c:type:`struct list_head ` pointer.”h]”(hŒthe ”…”�”}”(hj˜ h²hh³Nh´Nubh)�”}”(hŒ&:c:type:`struct list_head `”h]”j)�”}”(hj¢ h]”hŒstruct list_head”…”�”}”(hj¤ h²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhj  ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œ list_head”uh1hh³j” h´Möhj˜ ubhŒ pointer.”…”�”}”(hj˜ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j” h´Möhj• ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjy ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j” h´Möhjv ubj)�”}”(hŒ5``type`` the type of the struct this is embedded in. ”h]”(j)�”}”(hŒ``type``”h]”j)�”}”(hjÛ h]”hŒtype”…”�”}”(hjÝ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M÷hjÕ ubj2)�”}”(hhh]”hÝ)�”}”(hŒ+the type of the struct this is embedded in.”h]”hŒ+the type of the struct this is embedded in.”…”�”}”(hjô h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jð h´M÷hjñ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð h´M÷hjv ubj)�”}”(hŒ8``member`` the name of the list_head within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj¡h]”hŒmember”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Møhj¡ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the name of the list_head within the struct.”h]”hŒ,the name of the list_head within the struct.”…”�”}”(hj-¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j)¡h´Møhj*¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)¡h´Møhjv ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjZ ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjO¡h]”hŒ Description”…”�”}”(hjQ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjM¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MúhjZ ubhÝ)�”}”(hXkThis primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu(), but requires some implicit RCU read-side guarding. One example is running within a special exception-time environment where preemption is disabled and where lockdep cannot be invoked. Another example is when items are added to the list, but never deleted.”h]”hXkThis primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu(), but requires some implicit RCU read-side guarding. One example is running within a special exception-time environment where preemption is disabled and where lockdep cannot be invoked. Another example is when items are added to the list, but never deleted.”…”�”}”(hje¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MùhjZ ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&list_for_each_entry_lockless (C macro)”Œc.list_for_each_entry_lockless”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlist_for_each_entry_lockless”h]”j)�”}”(hŒlist_for_each_entry_lockless”h]”j{)�”}”(hŒlist_for_each_entry_lockless”h]”j�)�”}”(hjŽ¡h]”hŒlist_for_each_entry_lockless”…”�”}”(hj˜¡h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”¡ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj�¡h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjŒ¡h²hh³j«¡h´Mubah}”(h]”j‡¡ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j«¡h´Mhj‰¡h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‰¡h²hh³j«¡h´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÄ¡jæjÄ¡jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ4``list_for_each_entry_lockless (pos, head, member)``”h]”j)�”}”(hjÊ¡h]”hŒ0list_for_each_entry_lockless (pos, head, member)”…”�”}”(hjÌ¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÈ¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjôÖh²hubj•)�”}”(hŒ$iterate over rcu list of given type ”h]”hÝ)�”}”(hŒ#iterate over rcu list of given type”h]”hŒ#iterate over rcu list of given type”…”�”}”(hjä¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhjà¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jò¡h´MhjôÖh²hubjë)�”}”(hX**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_struct within the struct. **Description** This primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu(), but requires some implicit RCU read-side guarding. One example is running within a special exception-time environment where preemption is disabled and where lockdep cannot be invoked. Another example is when items are added to the list, but never deleted.”•.h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÿ¡h]”hŒ Parameters”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjý¡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M hjù¡ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj¢h]”hŒpos”…”�”}”(hj ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj¢ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hj7¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3¢h´Mhj4¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3¢h´Mhj¢ubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hjW¢h]”hŒhead”…”�”}”(hjY¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjU¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjQ¢ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hjp¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jl¢h´Mhjm¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQ¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jl¢h´Mhj¢ubj)�”}”(hŒ:``member`` the name of the list_struct within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj�¢h]”hŒmember”…”�”}”(hj’¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjŠ¢ubj2)�”}”(hhh]”hÝ)�”}”(hŒ.the name of the list_struct within the struct.”h]”hŒ.the name of the list_struct within the struct.”…”�”}”(hj©¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥¢h´Mhj¦¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠ¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥¢h´Mhj¢ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjù¡ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjË¢h]”hŒ Description”…”�”}”(hjÍ¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÉ¢ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M hjù¡ubhÝ)�”}”(hXkThis primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu(), but requires some implicit RCU read-side guarding. One example is running within a special exception-time environment where preemption is disabled and where lockdep cannot be invoked. Another example is when items are added to the list, but never deleted.”h]”hXkThis primitive may safely run concurrently with the _rcu list-mutation primitives such as list_add_rcu(), but requires some implicit RCU read-side guarding. One example is running within a special exception-time environment where preemption is disabled and where lockdep cannot be invoked. Another example is when items are added to the list, but never deleted.”…”�”}”(hjá¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M hjù¡ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*list_for_each_entry_continue_rcu (C macro)”Œ"c.list_for_each_entry_continue_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ list_for_each_entry_continue_rcu”h]”j)�”}”(hŒ list_for_each_entry_continue_rcu”h]”j{)�”}”(hŒ list_for_each_entry_continue_rcu”h]”j�)�”}”(hj £h]”hŒ list_for_each_entry_continue_rcu”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj£ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj £h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj£h²hh³j'£h´Mubah}”(h]”j£ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j'£h´Mhj£h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj£h²hh³j'£h´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj@£jæj@£jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ8``list_for_each_entry_continue_rcu (pos, head, member)``”h]”j)�”}”(hjF£h]”hŒ4list_for_each_entry_continue_rcu (pos, head, member)”…”�”}”(hjH£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjôÖh²hubj•)�”}”(hŒ+continue iteration over list of given type ”h]”hÝ)�”}”(hŒ*continue iteration over list of given type”h]”hŒ*continue iteration over list of given type”…”�”}”(hj`£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj\£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jn£h´MhjôÖh²hubjë)�”}”(hXÙ**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_head within the struct. **Description** Continue to iterate over list of given type, continuing after the current position which must have been in the list when the RCU read lock was taken. This would typically require either that you obtained the node from a previous walk of the list in the same RCU read-side critical section, or that you held some sort of non-RCU reference (such as a reference count) to keep the node alive *and* in the list. This iterator is similar to list_for_each_entry_from_rcu() except this starts after the given position and that one starts at the given position.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj{£h]”hŒ Parameters”…”�”}”(hj}£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjy£ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhju£ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hjš£h]”hŒpos”…”�”}”(hjœ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj”£ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hj³£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¯£h´Mhj°£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj”£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¯£h´Mhj‘£ubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hjÓ£h]”hŒhead”…”�”}”(hjÕ£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑ£ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjÍ£ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hjì£h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jè£h´Mhjé£ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍ£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jè£h´Mhj‘£ubj)�”}”(hŒ8``member`` the name of the list_head within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj ¤h]”hŒmember”…”�”}”(hj¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj¤ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the name of the list_head within the struct.”h]”hŒ,the name of the list_head within the struct.”…”�”}”(hj%¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!¤h´Mhj"¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¤ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!¤h´Mhj‘£ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hju£ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjG¤h]”hŒ Description”…”�”}”(hjI¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjE¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhju£ubhÝ)�”}”(hX—Continue to iterate over list of given type, continuing after the current position which must have been in the list when the RCU read lock was taken. This would typically require either that you obtained the node from a previous walk of the list in the same RCU read-side critical section, or that you held some sort of non-RCU reference (such as a reference count) to keep the node alive *and* in the list.”h]”(hX…Continue to iterate over list of given type, continuing after the current position which must have been in the list when the RCU read lock was taken. This would typically require either that you obtained the node from a previous walk of the list in the same RCU read-side critical section, or that you held some sort of non-RCU reference (such as a reference count) to keep the node alive ”…”�”}”(hj]¤h²hh³Nh´Nubjp‡)�”}”(hŒ*and*”h]”hŒand”…”�”}”(hje¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hj]¤ubhŒ in the list.”…”�”}”(hj]¤h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhju£ubhÝ)�”}”(hŒ‘This iterator is similar to list_for_each_entry_from_rcu() except this starts after the given position and that one starts at the given position.”h]”hŒ‘This iterator is similar to list_for_each_entry_from_rcu() except this starts after the given position and that one starts at the given position.”…”�”}”(hj~¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M#hju£ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&list_for_each_entry_from_rcu (C macro)”Œc.list_for_each_entry_from_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒlist_for_each_entry_from_rcu”h]”j)�”}”(hŒlist_for_each_entry_from_rcu”h]”j{)�”}”(hŒlist_for_each_entry_from_rcu”h]”j�)�”}”(hj§¤h]”hŒlist_for_each_entry_from_rcu”…”�”}”(hj±¤h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj­¤ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj©¤h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M.ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¥¤h²hh³jĤh´M.ubah}”(h]”j ¤ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jĤh´M.hj¢¤h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¢¤h²hh³jĤh´M.ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjݤjæjݤjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ4``list_for_each_entry_from_rcu (pos, head, member)``”h]”j)�”}”(hjã¤h]”hŒ0list_for_each_entry_from_rcu (pos, head, member)”…”�”}”(hjå¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjá¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M0hjôÖh²hubj•)�”}”(hŒ'iterate over a list from current point ”h]”hÝ)�”}”(hŒ&iterate over a list from current point”h]”hŒ&iterate over a list from current point”…”�”}”(hjý¤h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M.hjù¤ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j ¥h´M.hjôÖh²hubjë)�”}”(hXÞ**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the list_node within the struct. **Description** Iterate over the tail of a list starting from a given position, which must have been in the list when the RCU read lock was taken. This would typically require either that you obtained the node from a previous walk of the list in the same RCU read-side critical section, or that you held some sort of non-RCU reference (such as a reference count) to keep the node alive *and* in the list. This iterator is similar to list_for_each_entry_continue_rcu() except this starts from the given position and that one starts from the position after the given position.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¥h]”hŒ Parameters”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M2hj¥ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj7¥h]”hŒpos”…”�”}”(hj9¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj5¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M/hj1¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjP¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jL¥h´M/hjM¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj1¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jL¥h´M/hj.¥ubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hjp¥h]”hŒhead”…”�”}”(hjr¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjn¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M0hjj¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hj‰¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j…¥h´M0hj†¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjj¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j…¥h´M0hj.¥ubj)�”}”(hŒ8``member`` the name of the list_node within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj©¥h]”hŒmember”…”�”}”(hj«¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj§¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M1hj£¥ubj2)�”}”(hhh]”hÝ)�”}”(hŒ,the name of the list_node within the struct.”h]”hŒ,the name of the list_node within the struct.”…”�”}”(hjÂ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¾¥h´M1hj¿¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj£¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¾¥h´M1hj.¥ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¥ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjä¥h]”hŒ Description”…”�”}”(hjæ¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjâ¥ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M3hj¥ubhÝ)�”}”(hX„Iterate over the tail of a list starting from a given position, which must have been in the list when the RCU read lock was taken. This would typically require either that you obtained the node from a previous walk of the list in the same RCU read-side critical section, or that you held some sort of non-RCU reference (such as a reference count) to keep the node alive *and* in the list.”h]”(hXrIterate over the tail of a list starting from a given position, which must have been in the list when the RCU read lock was taken. This would typically require either that you obtained the node from a previous walk of the list in the same RCU read-side critical section, or that you held some sort of non-RCU reference (such as a reference count) to keep the node alive ”…”�”}”(hjú¥h²hh³Nh´Nubjp‡)�”}”(hŒ*and*”h]”hŒand”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jo‡hjú¥ubhŒ in the list.”…”�”}”(hjú¥h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M2hj¥ubhÝ)�”}”(hŒ©This iterator is similar to list_for_each_entry_continue_rcu() except this starts from the given position and that one starts from the position after the given position.”h]”hŒ©This iterator is similar to list_for_each_entry_continue_rcu() except this starts from the given position and that one starts from the position after the given position.”…”�”}”(hj¦h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M9hj¥ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œhlist_del_rcu (C function)”Œc.hlist_del_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)void hlist_del_rcu (struct hlist_node *n)”h]”j)�”}”(hŒ(void hlist_del_rcu(struct hlist_node *n)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjJ¦h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjF¦h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MCubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjY¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjF¦h²hh³jX¦h´MCubj{)�”}”(hŒ hlist_del_rcu”h]”j�)�”}”(hŒ hlist_del_rcu”h]”hŒ hlist_del_rcu”…”�”}”(hjk¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjg¦ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjF¦h²hh³jX¦h´MCubjœ)�”}”(hŒ(struct hlist_node *n)”h]”j¢)�”}”(hŒstruct hlist_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‡¦h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjƒ¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”¦h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ¦ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hj¥¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¢¦ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j§¦Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jm¦sbŒc.hlist_del_rcu”†”asbuh1hhjƒ¦ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŦh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjƒ¦ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÓ¦h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjƒ¦ubj�)�”}”(hj�h]”hŒn”…”�”}”(hjà¦h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjƒ¦ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¦ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjF¦h²hh³jX¦h´MCubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjB¦h²hh³jX¦h´MCubah}”(h]”j=¦ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jX¦h´MChj?¦h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6deletes entry from hash list without re-initialization”h]”hŒ6deletes entry from hash list without re-initialization”…”�”}”(hj §h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MChj§h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj?¦h²hh³jX¦h´MCubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj!§jæj!§jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX¾**Parameters** ``struct hlist_node *n`` the element to delete from the hash list. **Note** list_unhashed() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal. In particular, it means that we can not poison the forward pointers that may still be used for walking the hash list. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj+§h]”hŒ Parameters”…”�”}”(hj-§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MGhj%§ubj )�”}”(hhh]”j)�”}”(hŒC``struct hlist_node *n`` the element to delete from the hash list. ”h]”(j)�”}”(hŒ``struct hlist_node *n``”h]”j)�”}”(hjJ§h]”hŒstruct hlist_node *n”…”�”}”(hjL§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjH§ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MDhjD§ubj2)�”}”(hhh]”hÝ)�”}”(hŒ)the element to delete from the hash list.”h]”hŒ)the element to delete from the hash list.”…”�”}”(hjc§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j_§h´MDhj`§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjD§ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j_§h´MDhjA§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj%§ubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj…§h]”hŒNote”…”�”}”(hj‡§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒ§ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MFhj%§ubhÝ)�”}”(hŒŒlist_unhashed() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal.”h]”hŒŒlist_unhashed() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal.”…”�”}”(hj›§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MFhj%§ubhÝ)�”}”(hŒuIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list.”h]”hŒuIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list.”…”�”}”(hjª§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MJhj%§ubhÝ)�”}”(hXYThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry().”h]”hXYThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry().”…”�”}”(hj¹§h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MMhj%§ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œhlist_replace_rcu (C function)”Œc.hlist_replace_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒGvoid hlist_replace_rcu (struct hlist_node *old, struct hlist_node *new)”h]”j)�”}”(hŒFvoid hlist_replace_rcu(struct hlist_node *old, struct hlist_node *new)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjè§h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjä§h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M\ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj÷§h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjä§h²hh³jö§h´M\ubj{)�”}”(hŒhlist_replace_rcu”h]”j�)�”}”(hŒhlist_replace_rcu”h]”hŒhlist_replace_rcu”…”�”}”(hj ¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¨ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjä§h²hh³jö§h´M\ubjœ)�”}”(hŒ0(struct hlist_node *old, struct hlist_node *new)”h]”(j¢)�”}”(hŒstruct hlist_node *old”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj%¨h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj!¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!¨ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hjC¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jE¨Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j ¨sbŒc.hlist_replace_rcu”†”asbuh1hhj!¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj!¨ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjq¨h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj!¨ubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hj~¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨ubj¢)�”}”(hŒstruct hlist_node *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj—¨h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj“¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“¨ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hjµ¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²¨ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j·¨Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j_¨Œc.hlist_replace_rcu”†”asbuh1hhj“¨ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÓ¨h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj“¨ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjá¨h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj“¨ubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjî¨h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“¨ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¨ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjä§h²hh³jö§h´M\ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjà§h²hh³jö§h´M\ubah}”(h]”jÛ§ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jö§h´M\hjݧh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒreplace old entry by new one”h]”hŒreplace old entry by new one”…”�”}”(hj©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M\hj©h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjݧh²hh³jö§h´M\ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj0©jæj0©jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXV**Parameters** ``struct hlist_node *old`` the element to be replaced ``struct hlist_node *new`` the new element to insert **Description** The **old** entry will be replaced with the **new** entry atomically from the perspective of concurrent readers. It is the caller's responsibility to synchronize with concurrent updaters, if any.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj:©h]”hŒ Parameters”…”�”}”(hj<©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M`hj4©ubj )�”}”(hhh]”(j)�”}”(hŒ6``struct hlist_node *old`` the element to be replaced ”h]”(j)�”}”(hŒ``struct hlist_node *old``”h]”j)�”}”(hjY©h]”hŒstruct hlist_node *old”…”�”}”(hj[©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjW©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M]hjS©ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe element to be replaced”h]”hŒthe element to be replaced”…”�”}”(hjr©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jn©h´M]hjo©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjS©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jn©h´M]hjP©ubj)�”}”(hŒ5``struct hlist_node *new`` the new element to insert ”h]”(j)�”}”(hŒ``struct hlist_node *new``”h]”j)�”}”(hj’©h]”hŒstruct hlist_node *new”…”�”}”(hj”©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�©ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M^hjŒ©ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe new element to insert”h]”hŒthe new element to insert”…”�”}”(hj«©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j§©h´M^hj¨©ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŒ©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j§©h´M^hjP©ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj4©ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÍ©h]”hŒ Description”…”�”}”(hjÏ©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjË©ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M`hj4©ubhÝ)�”}”(hŒÄThe **old** entry will be replaced with the **new** entry atomically from the perspective of concurrent readers. It is the caller's responsibility to synchronize with concurrent updaters, if any.”h]”(hŒThe ”…”�”}”(hjã©h²hh³Nh´Nubjõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hjë©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã©ubhŒ! entry will be replaced with the ”…”�”}”(hjã©h²hh³Nh´Nubjõ)�”}”(hŒ**new**”h]”hŒnew”…”�”}”(hjý©h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjã©ubhŒ“ entry atomically from the perspective of concurrent readers. It is the caller’s responsibility to synchronize with concurrent updaters, if any.”…”�”}”(hjã©h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M_hj4©ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"hlists_swap_heads_rcu (C function)”Œc.hlists_swap_heads_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNvoid hlists_swap_heads_rcu (struct hlist_head *left, struct hlist_head *right)”h]”j)�”}”(hŒMvoid hlists_swap_heads_rcu(struct hlist_head *left, struct hlist_head *right)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj6ªh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj2ªh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mrubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj2ªh²hh³jDªh´Mrubj{)�”}”(hŒhlists_swap_heads_rcu”h]”j�)�”}”(hŒhlists_swap_heads_rcu”h]”hŒhlists_swap_heads_rcu”…”�”}”(hjWªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjSªubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj2ªh²hh³jDªh´Mrubjœ)�”}”(hŒ3(struct hlist_head *left, struct hlist_head *right)”h]”(j¢)�”}”(hŒstruct hlist_head *left”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjsªh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjoªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj€ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoªubh)�”}”(hhh]”j�)�”}”(hŒ hlist_head”h]”hŒ hlist_head”…”�”}”(hj‘ªh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjŽªubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j“ªŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jYªsbŒc.hlists_swap_heads_rcu”†”asbuh1hhjoªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±ªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjoªubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¿ªh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjoªubj�)�”}”(hŒleft”h]”hŒleft”…”�”}”(hj̪h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjoªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjkªubj¢)�”}”(hŒstruct hlist_head *right”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjåªh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjáªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjòªh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáªubh)�”}”(hhh]”j�)�”}”(hŒ hlist_head”h]”hŒ hlist_head”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj«ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j«Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j­ªŒc.hlists_swap_heads_rcu”†”asbuh1hhjáªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj!«h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjáªubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj/«h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjáªubj�)�”}”(hŒright”h]”hŒright”…”�”}”(hj<«h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjáªubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjkªubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj2ªh²hh³jDªh´Mrubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj.ªh²hh³jDªh´Mrubah}”(h]”j)ªah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jDªh´Mrhj+ªh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'swap the lists the hlist heads point to”h]”hŒ'swap the lists the hlist heads point to”…”�”}”(hjf«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mrhjc«h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj+ªh²hh³jDªh´Mrubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj~«jæj~«jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXZ**Parameters** ``struct hlist_head *left`` The hlist head on the left ``struct hlist_head *right`` The hlist head on the right **Description** The lists start out as [**left** ][node1 ... ] and [**right** ][node2 ... ] The lists end up as [**left** ][node2 ... ] [**right** ][node1 ... ]”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjˆ«h]”hŒ Parameters”…”�”}”(hjŠ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj†«ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mvhj‚«ubj )�”}”(hhh]”(j)�”}”(hŒ7``struct hlist_head *left`` The hlist head on the left ”h]”(j)�”}”(hŒ``struct hlist_head *left``”h]”j)�”}”(hj§«h]”hŒstruct hlist_head *left”…”�”}”(hj©«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mshj¡«ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe hlist head on the left”h]”hŒThe hlist head on the left”…”�”}”(hjÀ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¼«h´Mshj½«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¡«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¼«h´Mshjž«ubj)�”}”(hŒ9``struct hlist_head *right`` The hlist head on the right ”h]”(j)�”}”(hŒ``struct hlist_head *right``”h]”j)�”}”(hjà«h]”hŒstruct hlist_head *right”…”�”}”(hjâ«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞ«ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MthjÚ«ubj2)�”}”(hhh]”hÝ)�”}”(hŒThe hlist head on the right”h]”hŒThe hlist head on the right”…”�”}”(hjù«h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jõ«h´Mthjö«ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÚ«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jõ«h´Mthjž«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‚«ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¬h]”hŒ Description”…”�”}”(hj¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mvhj‚«ubj )�”}”(hhh]”(j)�”}”(hŒLThe lists start out as [**left** ][node1 ... ] and [**right** ][node2 ... ]”h]”(j)�”}”(hŒ3The lists start out as [**left** ][node1 ... ] and”h]”(hŒThe lists start out as [”…”�”}”(hj8¬h²hh³Nh´Nubjõ)�”}”(hŒ**left**”h]”hŒleft”…”�”}”(hj@¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj8¬ubhŒ ][node1 ... ] and”…”�”}”(hj8¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Muhj4¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒ[**right** ][node2 ... ]”h]”(hŒ[”…”�”}”(hj\¬h²hh³Nh´Nubjõ)�”}”(hŒ **right**”h]”hŒright”…”�”}”(hjd¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\¬ubhŒ ][node2 ... ]”…”�”}”(hj\¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MvhjY¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj4¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jX¬h´Muhj1¬ubj)�”}”(hŒHThe lists end up as [**left** ][node2 ... ] [**right** ][node1 ... ]”h]”(j)�”}”(hŒ/The lists end up as [**left** ][node2 ... ]”h]”(hŒThe lists end up as [”…”�”}”(hj�¬h²hh³Nh´Nubjõ)�”}”(hŒ**left**”h]”hŒleft”…”�”}”(hj•¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�¬ubhŒ ][node2 ... ]”…”�”}”(hj�¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mwhj‰¬ubj2)�”}”(hhh]”hÝ)�”}”(hŒ[**right** ][node1 ... ]”h]”(hŒ[”…”�”}”(hj±¬h²hh³Nh´Nubjõ)�”}”(hŒ **right**”h]”hŒright”…”�”}”(hj¹¬h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±¬ubhŒ ][node1 ... ]”…”�”}”(hj±¬h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mxhj®¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‰¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j­¬h´Mwhj1¬ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj‚«ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œhlist_add_head_rcu (C function)”Œc.hlist_add_head_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDvoid hlist_add_head_rcu (struct hlist_node *n, struct hlist_head *h)”h]”j)�”}”(hŒCvoid hlist_add_head_rcu(struct hlist_node *n, struct hlist_head *h)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj­h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MŽubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj­h²hh³j­h´MŽubj{)�”}”(hŒhlist_add_head_rcu”h]”j�)�”}”(hŒhlist_add_head_rcu”h]”hŒhlist_add_head_rcu”…”�”}”(hj%­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj!­ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj­h²hh³j­h´MŽubjœ)�”}”(hŒ,(struct hlist_node *n, struct hlist_head *h)”h]”(j¢)�”}”(hŒstruct hlist_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjA­h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj=­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjN­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj=­ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hj_­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”ja­Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j'­sbŒc.hlist_add_head_rcu”†”asbuh1hhj=­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj=­ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�­h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj=­ubj�)�”}”(hj�h]”hŒn”…”�”}”(hjš­h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj=­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj9­ubj¢)�”}”(hŒstruct hlist_head *h”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj²­h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®­ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_head”h]”hŒ hlist_head”…”�”}”(hjЭh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍ­ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÒ­Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j{­Œc.hlist_add_head_rcu”†”asbuh1hhj®­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjî­h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®­ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjü­h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj®­ubj�)�”}”(hj(yh]”hŒh”…”�”}”(hj ®h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®­ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj9­ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj­h²hh³j­h´MŽubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjü¬h²hh³j­h´MŽubah}”(h]”j÷¬ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j­h´MŽhjù¬h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjù¬h²hh³j­h´MŽubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj;®jæj;®jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXã**Parameters** ``struct hlist_node *n`` the element to add to the hash list. ``struct hlist_head *h`` the list to add to. **Description** Adds the specified element to the specified hlist, while permitting racing traversals. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjE®h]”hŒ Parameters”…”�”}”(hjG®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjC®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M’hj?®ubj )�”}”(hhh]”(j)�”}”(hŒ>``struct hlist_node *n`` the element to add to the hash list. ”h]”(j)�”}”(hŒ``struct hlist_node *n``”h]”j)�”}”(hjd®h]”hŒstruct hlist_node *n”…”�”}”(hjf®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjb®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M�hj^®ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the element to add to the hash list.”h]”hŒ$the element to add to the hash list.”…”�”}”(hj}®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jy®h´M�hjz®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj^®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jy®h´M�hj[®ubj)�”}”(hŒ-``struct hlist_head *h`` the list to add to. ”h]”(j)�”}”(hŒ``struct hlist_head *h``”h]”j)�”}”(hj�®h]”hŒstruct hlist_head *h”…”�”}”(hjŸ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj›®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M�hj—®ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe list to add to.”h]”hŒthe list to add to.”…”�”}”(hj¶®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j²®h´M�hj³®ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj—®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j²®h´M�hj[®ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj?®ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjØ®h]”hŒ Description”…”�”}”(hjÚ®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖ®ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M’hj?®ubhÝ)�”}”(hŒVAdds the specified element to the specified hlist, while permitting racing traversals.”h]”hŒVAdds the specified element to the specified hlist, while permitting racing traversals.”…”�”}”(hjî®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M’hj?®ubhÝ)�”}”(hXùThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”hXùThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”…”�”}”(hjý®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M•hj?®ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œhlist_add_tail_rcu (C function)”Œc.hlist_add_tail_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒDvoid hlist_add_tail_rcu (struct hlist_node *n, struct hlist_head *h)”h]”j)�”}”(hŒCvoid hlist_add_tail_rcu(struct hlist_node *n, struct hlist_head *h)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj,¯h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj(¯h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M­ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj;¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj(¯h²hh³j:¯h´M­ubj{)�”}”(hŒhlist_add_tail_rcu”h]”j�)�”}”(hŒhlist_add_tail_rcu”h]”hŒhlist_add_tail_rcu”…”�”}”(hjM¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjI¯ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj(¯h²hh³j:¯h´M­ubjœ)�”}”(hŒ,(struct hlist_node *n, struct hlist_head *h)”h]”(j¢)�”}”(hŒstruct hlist_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hji¯h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hje¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjv¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje¯ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hj‡¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj„¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j‰¯Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jO¯sbŒc.hlist_add_tail_rcu”†”asbuh1hhje¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hje¯ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjµ¯h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhje¯ubj�)�”}”(hj�h]”hŒn”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hje¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hja¯ubj¢)�”}”(hŒstruct hlist_head *h”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÚ¯h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÖ¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjç¯h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖ¯ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_head”h]”hŒ hlist_head”…”�”}”(hjø¯h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõ¯ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jú¯Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j£¯Œc.hlist_add_tail_rcu”†”asbuh1hhjÖ¯ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÖ¯ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj$°h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÖ¯ubj�)�”}”(hj(yh]”hŒh”…”�”}”(hj1°h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÖ¯ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hja¯ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj(¯h²hh³j:¯h´M­ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj$¯h²hh³j:¯h´M­ubah}”(h]”j¯ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j:¯h´M­hj!¯h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj!¯h²hh³j:¯h´M­ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjc°jæjc°jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXã**Parameters** ``struct hlist_node *n`` the element to add to the hash list. ``struct hlist_head *h`` the list to add to. **Description** Adds the specified element to the specified hlist, while permitting racing traversals. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjm°h]”hŒ Parameters”…”�”}”(hjo°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjk°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M±hjg°ubj )�”}”(hhh]”(j)�”}”(hŒ>``struct hlist_node *n`` the element to add to the hash list. ”h]”(j)�”}”(hŒ``struct hlist_node *n``”h]”j)�”}”(hjŒ°h]”hŒstruct hlist_node *n”…”�”}”(hjްh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjаubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M®hj†°ubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the element to add to the hash list.”h]”hŒ$the element to add to the hash list.”…”�”}”(hj¥°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¡°h´M®hj¢°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj†°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡°h´M®hjƒ°ubj)�”}”(hŒ-``struct hlist_head *h`` the list to add to. ”h]”(j)�”}”(hŒ``struct hlist_head *h``”h]”j)�”}”(hjŰh]”hŒstruct hlist_head *h”…”�”}”(hjǰh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M¯hj¿°ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe list to add to.”h]”hŒthe list to add to.”…”�”}”(hjÞ°h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÚ°h´M¯hjÛ°ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÚ°h´M¯hjƒ°ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjg°ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj±h]”hŒ Description”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjþ°ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M±hjg°ubhÝ)�”}”(hŒVAdds the specified element to the specified hlist, while permitting racing traversals.”h]”hŒVAdds the specified element to the specified hlist, while permitting racing traversals.”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M±hjg°ubhÝ)�”}”(hXùThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”hXùThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”…”�”}”(hj%±h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M´hjg°ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!hlist_add_before_rcu (C function)”Œc.hlist_add_before_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIvoid hlist_add_before_rcu (struct hlist_node *n, struct hlist_node *next)”h]”j)�”}”(hŒHvoid hlist_add_before_rcu(struct hlist_node *n, struct hlist_node *next)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjT±h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjP±h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÒubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjc±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjP±h²hh³jb±h´MÒubj{)�”}”(hŒhlist_add_before_rcu”h]”j�)�”}”(hŒhlist_add_before_rcu”h]”hŒhlist_add_before_rcu”…”�”}”(hju±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjq±ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjP±h²hh³jb±h´MÒubjœ)�”}”(hŒ/(struct hlist_node *n, struct hlist_node *next)”h]”(j¢)�”}”(hŒstruct hlist_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj‘±h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj�±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�±ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hj¯±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¬±ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j±±Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jw±sbŒc.hlist_add_before_rcu”†”asbuh1hhj�±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjϱh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�±ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjݱh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�±ubj�)�”}”(hj�h]”hŒn”…”�”}”(hjê±h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‰±ubj¢)�”}”(hŒstruct hlist_node *next”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjþ±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj²h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ±ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hj ²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j"²Œmodname”NŒ classname”Nj] j` )�”}”jc ]”j˱Œc.hlist_add_before_rcu”†”asbuh1hhjþ±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj>²h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjþ±ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjL²h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjþ±ubj�)�”}”(hŒnext”h]”hŒnext”…”�”}”(hjY²h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþ±ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‰±ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjP±h²hh³jb±h´MÒubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjL±h²hh³jb±h´MÒubah}”(h]”jG±ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jb±h´MÒhjI±h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjI±h²hh³jb±h´MÒubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjŒ²jæjŒ²jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXÂ**Parameters** ``struct hlist_node *n`` the new element to add to the hash list. ``struct hlist_node *next`` the existing element to add the new element before. **Description** Adds the specified element to the specified hlist before the specified node while permitting racing traversals. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj–²h]”hŒ Parameters”…”�”}”(hj˜²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj”²ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÖhj�²ubj )�”}”(hhh]”(j)�”}”(hŒB``struct hlist_node *n`` the new element to add to the hash list. ”h]”(j)�”}”(hŒ``struct hlist_node *n``”h]”j)�”}”(hjµ²h]”hŒstruct hlist_node *n”…”�”}”(hj·²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj³²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÓhj¯²ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(the new element to add to the hash list.”h]”hŒ(the new element to add to the hash list.”…”�”}”(hjβh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jʲh´MÓhj˲ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¯²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jʲh´MÓhj¬²ubj)�”}”(hŒP``struct hlist_node *next`` the existing element to add the new element before. ”h]”(j)�”}”(hŒ``struct hlist_node *next``”h]”j)�”}”(hjî²h]”hŒstruct hlist_node *next”…”�”}”(hjð²h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjì²ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÔhjè²ubj2)�”}”(hhh]”hÝ)�”}”(hŒ3the existing element to add the new element before.”h]”hŒ3the existing element to add the new element before.”…”�”}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j³h´MÔhj³ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjè²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j³h´MÔhj¬²ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj�²ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj)³h]”hŒ Description”…”�”}”(hj+³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj'³ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÖhj�²ubhÝ)�”}”(hŒoAdds the specified element to the specified hlist before the specified node while permitting racing traversals.”h]”hŒoAdds the specified element to the specified hlist before the specified node while permitting racing traversals.”…”�”}”(hj?³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÖhj�²ubhÝ)�”}”(hX˜The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs.”h]”hX˜The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs.”…”�”}”(hjN³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MÙhj�²ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!hlist_add_behind_rcu (C function)”Œc.hlist_add_behind_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒIvoid hlist_add_behind_rcu (struct hlist_node *n, struct hlist_node *prev)”h]”j)�”}”(hŒHvoid hlist_add_behind_rcu(struct hlist_node *n, struct hlist_node *prev)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj}³h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjy³h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Míubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒ³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjy³h²hh³j‹³h´Míubj{)�”}”(hŒhlist_add_behind_rcu”h]”j�)�”}”(hŒhlist_add_behind_rcu”h]”hŒhlist_add_behind_rcu”…”�”}”(hjž³h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjš³ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjy³h²hh³j‹³h´Míubjœ)�”}”(hŒ/(struct hlist_node *n, struct hlist_node *prev)”h]”(j¢)�”}”(hŒstruct hlist_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjº³h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj¶³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdzh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶³ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hjسh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕ³ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÚ³Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j ³sbŒc.hlist_add_behind_rcu”†”asbuh1hhj¶³ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjø³h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¶³ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj¶³ubj�)�”}”(hj�h]”hŒn”…”�”}”(hj´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¶³ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²³ubj¢)�”}”(hŒstruct hlist_node *prev”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj+´h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj'´ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'´ubh)�”}”(hhh]”j�)�”}”(hŒ hlist_node”h]”hŒ hlist_node”…”�”}”(hjI´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjF´ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jK´Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jô³Œc.hlist_add_behind_rcu”†”asbuh1hhj'´ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjg´h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj'´ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hju´h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj'´ubj�)�”}”(hŒprev”h]”hŒprev”…”�”}”(hj‚´h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj'´ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj²³ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjy³h²hh³j‹³h´Míubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hju³h²hh³j‹³h´Míubah}”(h]”jp³ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‹³h´Míhjr³h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjr³h²hh³j‹³h´Míubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjµ´jæjµ´jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXÀ**Parameters** ``struct hlist_node *n`` the new element to add to the hash list. ``struct hlist_node *prev`` the existing element to add the new element after. **Description** Adds the specified element to the specified hlist after the specified node while permitting racing traversals. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¿´h]”hŒ Parameters”…”�”}”(hjÁ´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½´ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mñhj¹´ubj )�”}”(hhh]”(j)�”}”(hŒB``struct hlist_node *n`` the new element to add to the hash list. ”•h]”(j)�”}”(hŒ``struct hlist_node *n``”h]”j)�”}”(hjÞ´h]”hŒstruct hlist_node *n”…”�”}”(hjà´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜ´ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MîhjØ´ubj2)�”}”(hhh]”hÝ)�”}”(hŒ(the new element to add to the hash list.”h]”hŒ(the new element to add to the hash list.”…”�”}”(hj÷´h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jó´h´Mîhjô´ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjØ´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jó´h´MîhjÕ´ubj)�”}”(hŒO``struct hlist_node *prev`` the existing element to add the new element after. ”h]”(j)�”}”(hŒ``struct hlist_node *prev``”h]”j)�”}”(hjµh]”hŒstruct hlist_node *prev”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjµubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mïhjµubj2)�”}”(hhh]”hÝ)�”}”(hŒ2the existing element to add the new element after.”h]”hŒ2the existing element to add the new element after.”…”�”}”(hj0µh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j,µh´Mïhj-µubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjµubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j,µh´MïhjÕ´ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¹´ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjRµh]”hŒ Description”…”�”}”(hjTµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjPµubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mñhj¹´ubhÝ)�”}”(hŒnAdds the specified element to the specified hlist after the specified node while permitting racing traversals.”h]”hŒnAdds the specified element to the specified hlist after the specified node while permitting racing traversals.”…”�”}”(hjhµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mñhj¹´ubhÝ)�”}”(hX˜The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs.”h]”hX˜The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_add_head_rcu() or hlist_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs.”…”�”}”(hjwµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Môhj¹´ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"hlist_for_each_entry_rcu (C macro)”Œc.hlist_for_each_entry_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_for_each_entry_rcu”h]”j)�”}”(hŒhlist_for_each_entry_rcu”h]”j{)�”}”(hŒhlist_for_each_entry_rcu”h]”j�)�”}”(hj µh]”hŒhlist_for_each_entry_rcu”…”�”}”(hjªµh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¦µubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¢µh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjžµh²hh³j½µh´Mubah}”(h]”j™µah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j½µh´Mhj›µh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj›µh²hh³j½µh´Mubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÖµjæjÖµjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ9``hlist_for_each_entry_rcu (pos, head, member, cond...)``”h]”j)�”}”(hjܵh]”hŒ5hlist_for_each_entry_rcu (pos, head, member, cond...)”…”�”}”(hjÞµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚµubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjôÖh²hubj•)�”}”(hŒ$iterate over rcu list of given type ”h]”hÝ)�”}”(hŒ#iterate over rcu list of given type”h]”hŒ#iterate over rcu list of given type”…”�”}”(hjöµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhjòµubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¶h´MhjôÖh²hubjë)�”}”(hX³**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the hlist_node within the struct. ``cond...`` optional lockdep expression if called from non-RCU protection. **Description** This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¶h]”hŒ Parameters”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj ¶ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj0¶h]”hŒpos”…”�”}”(hj2¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj*¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjI¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jE¶h´MhjF¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj*¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jE¶h´Mhj'¶ubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hji¶h]”hŒhead”…”�”}”(hjk¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjg¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhjc¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hj‚¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j~¶h´Mhj¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjc¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~¶h´Mhj'¶ubj)�”}”(hŒ9``member`` the name of the hlist_node within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj¢¶h]”hŒmember”…”�”}”(hj¤¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhjœ¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-the name of the hlist_node within the struct.”h]”hŒ-the name of the hlist_node within the struct.”…”�”}”(hj»¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·¶h´Mhj¸¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœ¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·¶h´Mhj'¶ubj)�”}”(hŒK``cond...`` optional lockdep expression if called from non-RCU protection. ”h]”(j)�”}”(hŒ ``cond...``”h]”j)�”}”(hjÛ¶h]”hŒcond...”…”�”}”(hjݶh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MhjÕ¶ubj2)�”}”(hhh]”hÝ)�”}”(hŒ>optional lockdep expression if called from non-RCU protection.”h]”hŒ>optional lockdep expression if called from non-RCU protection.”…”�”}”(hjô¶h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jð¶h´Mhjñ¶ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕ¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð¶h´Mhj'¶ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ¶ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj·h]”hŒ Description”…”�”}”(hj·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj ¶ubhÝ)�”}”(hŒµThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().”h]”hŒµThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().”…”�”}”(hj,·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhj ¶ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ#hlist_for_each_entry_srcu (C macro)”Œc.hlist_for_each_entry_srcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_for_each_entry_srcu”h]”j)�”}”(hŒhlist_for_each_entry_srcu”h]”j{)�”}”(hŒhlist_for_each_entry_srcu”h]”j�)�”}”(hjU·h]”hŒhlist_for_each_entry_srcu”…”�”}”(hj_·h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[·ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjW·h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M!ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjS·h²hh³jr·h´M!ubah}”(h]”jN·ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jr·h´M!hjP·h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjP·h²hh³jr·h´M!ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj‹·jæj‹·jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ7``hlist_for_each_entry_srcu (pos, head, member, cond)``”h]”j)�”}”(hj‘·h]”hŒ3hlist_for_each_entry_srcu (pos, head, member, cond)”…”�”}”(hj“·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M#hjôÖh²hubj•)�”}”(hŒ$iterate over rcu list of given type ”h]”hÝ)�”}”(hŒ#iterate over rcu list of given type”h]”hŒ#iterate over rcu list of given type”…”�”}”(hj«·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M!hj§·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¹·h´M!hjôÖh²hubjë)�”}”(hX**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the hlist_node within the struct. ``cond`` lockdep expression for the lock required to traverse the list. **Description** This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by srcu_read_lock(). The lockdep expression srcu_read_lock_held() can be passed as the cond argument from read side.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÆ·h]”hŒ Parameters”…”�”}”(hjÈ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÄ·ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M%hjÀ·ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hjå·h]”hŒpos”…”�”}”(hjç·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjã·ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M"hjß·ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjþ·h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jú·h´M"hjû·ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjß·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jú·h´M"hjÜ·ubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hj¸h]”hŒhead”…”�”}”(hj ¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M#hj¸ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hj7¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j3¸h´M#hj4¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j3¸h´M#hjÜ·ubj)�”}”(hŒ9``member`` the name of the hlist_node within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hjW¸h]”hŒmember”…”�”}”(hjY¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjU¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M$hjQ¸ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-the name of the hlist_node within the struct.”h]”hŒ-the name of the hlist_node within the struct.”…”�”}”(hjp¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jl¸h´M$hjm¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjQ¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jl¸h´M$hjÜ·ubj)�”}”(hŒH``cond`` lockdep expression for the lock required to traverse the list. ”h]”(j)�”}”(hŒ``cond``”h]”j)�”}”(hj�¸h]”hŒcond”…”�”}”(hj’¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjޏubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M%hjЏubj2)�”}”(hhh]”hÝ)�”}”(hŒ>lockdep expression for the lock required to traverse the list.”h]”hŒ>lockdep expression for the lock required to traverse the list.”…”�”}”(hj©¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥¸h´M%hj¦¸ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjЏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥¸h´M%hjÜ·ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÀ·ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj˸h]”hŒ Description”…”�”}”(hj͸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjɸubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M'hjÀ·ubhÝ)�”}”(hXThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by srcu_read_lock(). The lockdep expression srcu_read_lock_held() can be passed as the cond argument from read side.”h]”hXThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by srcu_read_lock(). The lockdep expression srcu_read_lock_held() can be passed as the cond argument from read side.”…”�”}”(hjá¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M&hjÀ·ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ*hlist_for_each_entry_rcu_notrace (C macro)”Œ"c.hlist_for_each_entry_rcu_notrace”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ hlist_for_each_entry_rcu_notrace”h]”j)�”}”(hŒ hlist_for_each_entry_rcu_notrace”h]”j{)�”}”(hŒ hlist_for_each_entry_rcu_notrace”h]”j�)�”}”(hj ¹h]”hŒ hlist_for_each_entry_rcu_notrace”…”�”}”(hj¹h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¹ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj ¹h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M6ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¹h²hh³j'¹h´M6ubah}”(h]”j¹ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j'¹h´M6hj¹h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¹h²hh³j'¹h´M6ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj@¹jæj@¹jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ8``hlist_for_each_entry_rcu_notrace (pos, head, member)``”h]”j)�”}”(hjF¹h]”hŒ4hlist_for_each_entry_rcu_notrace (pos, head, member)”…”�”}”(hjH¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjD¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M8hjôÖh²hubj•)�”}”(hŒ2iterate over rcu list of given type (for tracing) ”h]”hÝ)�”}”(hŒ1iterate over rcu list of given type (for tracing)”h]”hŒ1iterate over rcu list of given type (for tracing)”…”�”}”(hj`¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M6hj\¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jn¹h´M6hjôÖh²hubjë)�”}”(hXÎ**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the hlist_node within the struct. **Description** This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock(). This is the same as hlist_for_each_entry_rcu() except that it does not do any RCU debugging or tracing.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj{¹h]”hŒ Parameters”…”�”}”(hj}¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjy¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M:hju¹ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hjš¹h]”hŒpos”…”�”}”(hjœ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj˜¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M7hj”¹ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hj³¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¯¹h´M7hj°¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj”¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¯¹h´M7hj‘¹ubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hjÓ¹h]”hŒhead”…”�”}”(hjÕ¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjѹubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M8hj͹ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hjì¹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jè¹h´M8hjé¹ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj͹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jè¹h´M8hj‘¹ubj)�”}”(hŒ9``member`` the name of the hlist_node within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj ºh]”hŒmember”…”�”}”(hjºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ºubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M9hjºubj2)�”}”(hhh]”hÝ)�”}”(hŒ-the name of the hlist_node within the struct.”h]”hŒ-the name of the hlist_node within the struct.”…”�”}”(hj%ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!ºh´M9hj"ºubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjºubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!ºh´M9hj‘¹ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hju¹ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjGºh]”hŒ Description”…”�”}”(hjIºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjEºubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M;hju¹ubhÝ)�”}”(hŒµThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().”h]”hŒµThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().”…”�”}”(hj]ºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M:hju¹ubhÝ)�”}”(hŒgThis is the same as hlist_for_each_entry_rcu() except that it does not do any RCU debugging or tracing.”h]”hŒgThis is the same as hlist_for_each_entry_rcu() except that it does not do any RCU debugging or tracing.”…”�”}”(hjlºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M>hju¹ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%hlist_for_each_entry_rcu_bh (C macro)”Œc.hlist_for_each_entry_rcu_bh”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_for_each_entry_rcu_bh”h]”j)�”}”(hŒhlist_for_each_entry_rcu_bh”h]”j{)�”}”(hŒhlist_for_each_entry_rcu_bh”h]”j�)�”}”(hj•ºh]”hŒhlist_for_each_entry_rcu_bh”…”�”}”(hjŸºh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj›ºubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj—ºh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MJubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj“ºh²hh³j²ºh´MJubah}”(h]”jŽºah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j²ºh´MJhj�ºh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�ºh²hh³j²ºh´MJubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj˺jæj˺jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ3``hlist_for_each_entry_rcu_bh (pos, head, member)``”h]”j)�”}”(hjѺh]”hŒ/hlist_for_each_entry_rcu_bh (pos, head, member)”…”�”}”(hjÓºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjϺubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MLhjôÖh²hubj•)�”}”(hŒ$iterate over rcu list of given type ”h]”hÝ)�”}”(hŒ#iterate over rcu list of given type”h]”hŒ#iterate over rcu list of given type”…”�”}”(hjëºh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MJhjçºubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jùºh´MJhjôÖh²hubjë)�”}”(hXe**Parameters** ``pos`` the type * to use as a loop cursor. ``head`` the head for your list. ``member`` the name of the hlist_node within the struct. **Description** This list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj»h]”hŒ Parameters”…”�”}”(hj»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MNhj»ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj%»h]”hŒpos”…”�”}”(hj'»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj#»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MKhj»ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hj>»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j:»h´MKhj;»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j:»h´MKhj»ubj)�”}”(hŒ!``head`` the head for your list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hj^»h]”hŒhead”…”�”}”(hj`»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj\»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MLhjX»ubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head for your list.”h]”hŒthe head for your list.”…”�”}”(hjw»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³js»h´MLhjt»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjX»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³js»h´MLhj»ubj)�”}”(hŒ9``member`` the name of the hlist_node within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj—»h]”hŒmember”…”�”}”(hj™»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj•»ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MMhj‘»ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-the name of the hlist_node within the struct.”h]”hŒ-the name of the hlist_node within the struct.”…”�”}”(hj°»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¬»h´MMhj­»ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‘»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¬»h´MMhj»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj»ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÒ»h]”hŒ Description”…”�”}”(hjÔ»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjлubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MOhj»ubhÝ)�”}”(hŒµThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().”h]”hŒµThis list-traversal primitive may safely run concurrently with the _rcu list-mutation primitives such as hlist_add_head_rcu() as long as the traversal is guarded by rcu_read_lock().”…”�”}”(hjè»h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MNhj»ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ+hlist_for_each_entry_continue_rcu (C macro)”Œ#c.hlist_for_each_entry_continue_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ!hlist_for_each_entry_continue_rcu”h]”j)�”}”(hŒ!hlist_for_each_entry_continue_rcu”h]”j{)�”}”(hŒ!hlist_for_each_entry_continue_rcu”h]”j�)�”}”(hj¼h]”hŒ!hlist_for_each_entry_continue_rcu”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¼ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¼h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M[ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj¼h²hh³j.¼h´M[ubah}”(h]”j ¼ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j.¼h´M[hj ¼h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj ¼h²hh³j.¼h´M[ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjG¼jæjG¼jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ3``hlist_for_each_entry_continue_rcu (pos, member)``”h]”j)�”}”(hjM¼h]”hŒ/hlist_for_each_entry_continue_rcu (pos, member)”…”�”}”(hjO¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjK¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M]hjôÖh²hubj•)�”}”(hŒ4iterate over a hlist continuing after current point ”h]”hÝ)�”}”(hŒ3iterate over a hlist continuing after current point”h]”hŒ3iterate over a hlist continuing after current point”…”�”}”(hjg¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M[hjc¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³ju¼h´M[hjôÖh²hubjë)�”}”(hŒy**Parameters** ``pos`` the type * to use as a loop cursor. ``member`` the name of the hlist_node within the struct.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj‚¼h]”hŒ Parameters”…”�”}”(hj„¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj€¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M_hj|¼ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj¡¼h]”hŒpos”…”�”}”(hj£¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸ¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M\hj›¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjº¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶¼h´M\hj·¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶¼h´M\hj˜¼ubj)�”}”(hŒ8``member`` the name of the hlist_node within the struct.”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hjÚ¼h]”hŒmember”…”�”}”(hjܼh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjؼubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M^hjÔ¼ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-the name of the hlist_node within the struct.”h]”hŒ-the name of the hlist_node within the struct.”…”�”}”(hjó¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´M]hjð¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔ¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jï¼h´M^hj˜¼ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj|¼ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ.hlist_for_each_entry_continue_rcu_bh (C macro)”Œ&c.hlist_for_each_entry_continue_rcu_bh”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ$hlist_for_each_entry_continue_rcu_bh”h]”j)�”}”(hŒ$hlist_for_each_entry_continue_rcu_bh”h]”j{)�”}”(hŒ$hlist_for_each_entry_continue_rcu_bh”h]”j�)�”}”(hj.½h]”hŒ$hlist_for_each_entry_continue_rcu_bh”…”�”}”(hj8½h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4½ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj0½h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mgubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj,½h²hh³jK½h´Mgubah}”(h]”j'½ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jK½h´Mghj)½h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj)½h²hh³jK½h´Mgubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjd½jæjd½jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ6``hlist_for_each_entry_continue_rcu_bh (pos, member)``”h]”j)�”}”(hjj½h]”hŒ2hlist_for_each_entry_continue_rcu_bh (pos, member)”…”�”}”(hjl½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjh½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MihjôÖh²hubj•)�”}”(hŒ4iterate over a hlist continuing after current point ”h]”hÝ)�”}”(hŒ3iterate over a hlist continuing after current point”h]”hŒ3iterate over a hlist continuing after current point”…”�”}”(hj„½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mghj€½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j’½h´MghjôÖh²hubjë)�”}”(hŒy**Parameters** ``pos`` the type * to use as a loop cursor. ``member`` the name of the hlist_node within the struct.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŸ½h]”hŒ Parameters”…”�”}”(hj¡½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�½ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mkhj™½ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj¾½h]”hŒpos”…”�”}”(hjÀ½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mhhj¸½ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hj×½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÓ½h´MhhjÔ½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓ½h´Mhhjµ½ubj)�”}”(hŒ8``member`` the name of the hlist_node within the struct.”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj÷½h]”hŒmember”…”�”}”(hjù½h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõ½ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mjhjñ½ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-the name of the hlist_node within the struct.”h]”hŒ-the name of the hlist_node within the struct.”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mihj ¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjñ½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ¾h´Mjhjµ½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj™½ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'hlist_for_each_entry_from_rcu (C macro)”Œc.hlist_for_each_entry_from_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_for_each_entry_from_rcu”h]”j)�”}”(hŒhlist_for_each_entry_from_rcu”h]”j{)�”}”(hŒhlist_for_each_entry_from_rcu”h]”j�)�”}”(hjK¾h]”hŒhlist_for_each_entry_from_rcu”…”�”}”(hjU¾h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQ¾ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjM¾h²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Msubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjI¾h²hh³jh¾h´Msubah}”(h]”jD¾ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jh¾h´MshjF¾h²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjF¾h²hh³jh¾h´Msubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj�¾jæj�¾jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ/``hlist_for_each_entry_from_rcu (pos, member)``”h]”j)�”}”(hj‡¾h]”hŒ+hlist_for_each_entry_from_rcu (pos, member)”…”�”}”(hj‰¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj…¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MuhjôÖh²hubj•)�”}”(hŒ3iterate over a hlist continuing from current point ”h]”hÝ)�”}”(hŒ2iterate over a hlist continuing from current point”h]”hŒ2iterate over a hlist continuing from current point”…”�”}”(hj¡¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mshj�¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j¯¾h´MshjôÖh²hubjë)�”}”(hŒy**Parameters** ``pos`` the type * to use as a loop cursor. ``member`` the name of the hlist_node within the struct.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¼¾h]”hŒ Parameters”…”�”}”(hj¾¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjº¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mwhj¶¾ubj )�”}”(hhh]”(j)�”}”(hŒ,``pos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hjÛ¾h]”hŒpos”…”�”}”(hjݾh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙ¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´MthjÕ¾ubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjô¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jð¾h´Mthjñ¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕ¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jð¾h´MthjÒ¾ubj)�”}”(hŒ8``member`` the name of the hlist_node within the struct.”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj¿h]”hŒmember”…”�”}”(hj¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Mvhj¿ubj2)�”}”(hhh]”hÝ)�”}”(hŒ-the name of the hlist_node within the struct.”h]”hŒ-the name of the hlist_node within the struct.”…”�”}”(hj-¿h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:413: ./include/linux/rculist.h”h´Muhj*¿ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¿ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)¿h´MvhjÒ¾ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj¶¾ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%hlist_nulls_del_init_rcu (C function)”Œc.hlist_nulls_del_init_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ:void hlist_nulls_del_init_rcu (struct hlist_nulls_node *n)”h]”j)�”}”(hŒ9void hlist_nulls_del_init_rcu(struct hlist_nulls_node *n)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjn¿h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjj¿h²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj}¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjj¿h²hh³j|¿h´Kubj{)�”}”(hŒhlist_nulls_del_init_rcu”h]”j�)�”}”(hŒhlist_nulls_del_init_rcu”h]”hŒhlist_nulls_del_init_rcu”…”�”}”(hj�¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‹¿ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjj¿h²hh³j|¿h´Kubjœ)�”}”(hŒ(struct hlist_nulls_node *n)”h]”j¢)�”}”(hŒstruct hlist_nulls_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj«¿h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj§¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¸¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§¿ubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_node”h]”hŒhlist_nulls_node”…”�”}”(hjÉ¿h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÆ¿ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jË¿Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j‘¿sbŒc.hlist_nulls_del_init_rcu”†”asbuh1hhj§¿ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjé¿h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj§¿ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj÷¿h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj§¿ubj�)�”}”(hj�h]”hŒn”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj§¿ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj£¿ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjj¿h²hh³j|¿h´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjf¿h²hh³j|¿h´Kubah}”(h]”ja¿ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j|¿h´Khjc¿h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3deletes entry from hash list with re-initialization”h]”hŒ3deletes entry from hash list with re-initialization”…”�”}”(hj-Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Khj*Àh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjc¿h²hh³j|¿h´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjEÀjæjEÀjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXf**Parameters** ``struct hlist_nulls_node *n`` the element to delete from the hash list. **Note** hlist_nulls_unhashed() on the node return true after this. It is useful for RCU based read lockfree traversal if the writer side must know if the list entry is still hashed or already unhashed. In particular, it means that we can not poison the forward pointers that may still be used for walking the hash list and we can only zero the pprev pointer so list_unhashed() will return true after this. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjOÀh]”hŒ Parameters”…”�”}”(hjQÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMÀubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KhjIÀubj )�”}”(hhh]”j)�”}”(hŒI``struct hlist_nulls_node *n`` the element to delete from the hash list. ”h]”(j)�”}”(hŒ``struct hlist_nulls_node *n``”h]”j)�”}”(hjnÀh]”hŒstruct hlist_nulls_node *n”…”�”}”(hjpÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjlÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KhjhÀubj2)�”}”(hhh]”hÝ)�”}”(hŒ)the element to delete from the hash list.”h]”hŒ)the element to delete from the hash list.”…”�”}”(hj‡Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jƒÀh´Khj„Àubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjhÀubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jƒÀh´KhjeÀubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjIÀubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hj©Àh]”hŒNote”…”�”}”(hj«Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj§Àubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KhjIÀubhÝ)�”}”(hŒÁhlist_nulls_unhashed() on the node return true after this. It is useful for RCU based read lockfree traversal if the writer side must know if the list entry is still hashed or already unhashed.”h]”hŒÁhlist_nulls_unhashed() on the node return true after this. It is useful for RCU based read lockfree traversal if the writer side must know if the list entry is still hashed or already unhashed.”…”�”}”(hj¿Àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KhjIÀubhÝ)�”}”(hŒËIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list and we can only zero the pprev pointer so list_unhashed() will return true after this.”h]”hŒËIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list and we can only zero the pprev pointer so list_unhashed() will return true after this.”…”�”}”(hjÎÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KhjIÀubhÝ)�”}”(hXpThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu().”h]”hXpThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu().”…”�”}”(hjÝÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KhjIÀubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œhlist_nulls_first_rcu (C macro)”Œc.hlist_nulls_first_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_nulls_first_rcu”h]”j)�”}”(hŒhlist_nulls_first_rcu”h]”j{)�”}”(hŒhlist_nulls_first_rcu”h]”j�)�”}”(hjÁh]”hŒhlist_nulls_first_rcu”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Áubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÁh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K*ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÁh²hh³j#Áh´K*ubah}”(h]”jÿÀah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j#Áh´K*hjÁh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÁh²hh³j#Áh´K*ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj<Ájæj<Ájç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ ``hlist_nulls_first_rcu (head)``”h]”j)�”}”(hjBÁh]”hŒhlist_nulls_first_rcu (head)”…”�”}”(hjDÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj@Áubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K,hjôÖh²hubj•)�”}”(hŒ,returns the first element of the hash list. ”h]”hÝ)�”}”(hŒ+returns the first element of the hash list.”h]”hŒ+returns the first element of the hash list.”…”�”}”(hj\Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K*hjXÁubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jjÁh´K*hjôÖh²hubjë)�”}”(hŒ0**Parameters** ``head`` the head of the list.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjwÁh]”hŒ Parameters”…”�”}”(hjyÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjuÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K.hjqÁubj )�”}”(hhh]”j)�”}”(hŒ``head`` the head of the list.”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hj–Áh]”hŒhead”…”�”}”(hj˜Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”Áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K0hj�Áubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head of the list.”h]”hŒthe head of the list.”…”�”}”(hj¯Áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K+hj¬Áubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j«Áh´K0hj�Áubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjqÁubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œhlist_nulls_next_rcu (C macro)”Œc.hlist_nulls_next_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_nulls_next_rcu”h]”j)�”}”(hŒhlist_nulls_next_rcu”h]”j{)�”}”(hŒhlist_nulls_next_rcu”h]”j�)�”}”(hjêÁh]”hŒhlist_nulls_next_rcu”…”�”}”(hjôÁh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjðÁubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjìÁh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K1ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjèÁh²hh³jÂh´K1ubah}”(h]”jãÁah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÂh´K1hjåÁh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjåÁh²hh³jÂh´K1ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj Âjæj Âjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``hlist_nulls_next_rcu (node)``”h]”j)�”}”(hj&Âh]”hŒhlist_nulls_next_rcu (node)”…”�”}”(hj(Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$Âubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K3hjôÖh²hubj•)�”}”(hŒ0returns the element of the list after **node**. ”h]”hÝ)�”}”(hŒ/returns the element of the list after **node**.”h]”(hŒ&returns the element of the list after ”…”�”}”(hj@Âh²hh³Nh´Nubjõ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hjHÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj@ÂubhŒ.”…”�”}”(hj@Âh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K1hj<Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j`Âh´K1hjôÖh²hubjë)�”}”(hŒ/**Parameters** ``node`` element of the list.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjmÂh]”hŒ Parameters”…”�”}”(hjoÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjkÂubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K5hjgÂubj )�”}”(hhh]”j)�”}”(hŒ``node`` element of the list.”h]”(j)�”}”(hŒ``node``”h]”j)�”}”(hjŒÂh]”hŒnode”…”�”}”(hjŽÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŠÂubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K7hj†Âubj2)�”}”(hhh]”hÝ)�”}”(hŒelement of the list.”h]”hŒelement of the list.”…”�”}”(hj¥Âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K2hj¢Âubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj†Âubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¡Âh´K7hjƒÂubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjgÂubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œhlist_nulls_pprev_rcu (C macro)”Œc.hlist_nulls_pprev_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_nulls_pprev_rcu”h]”j)�”}”(hŒhlist_nulls_pprev_rcu”h]”j{)�”}”(hŒhlist_nulls_pprev_rcu”h]”j�)�”}”(hjàÂh]”hŒhlist_nulls_pprev_rcu”…”�”}”(hjêÂh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjæÂubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjâÂh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K8ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÞÂh²hh³jýÂh´K8ubah}”(h]”jÙÂah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jýÂh´K8hjÛÂh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÛÂh²hh³jýÂh´K8ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjÃjæjÃjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ ``hlist_nulls_pprev_rcu (node)``”h]”j)�”}”(hjÃh]”hŒhlist_nulls_pprev_rcu (node)”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K:hjôÖh²hubj•)�”}”(hŒ,returns the dereferenced pprev of **node**. ”h]”hÝ)�”}”(hŒ+returns the dereferenced pprev of **node**.”h]”(hŒ"returns the dereferenced pprev of ”…”�”}”(hj6Ãh²hh³Nh´Nubjõ)�”}”(hŒ**node**”h]”hŒnode”…”�”}”(hj>Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj6ÃubhŒ.”…”�”}”(hj6Ãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K8hj2Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jVÃh´K8hjôÖh²hubjë)�”}”(hŒ/**Parameters** ``node`` element of the list.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjcÃh]”hŒ Parameters”…”�”}”(hjeÃh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjaÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Khj|Ãubj2)�”}”(hhh]”hÝ)�”}”(hŒelement of the list.”h]”hŒelement of the list.”…”�”}”(hj›Ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K9hj˜Ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj|Ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j—Ãh´K>hjyÃubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj]Ãubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ hlist_nulls_del_rcu (C function)”Œc.hlist_nulls_del_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ5void hlist_nulls_del_rcu (struct hlist_nulls_node *n)”h]”j)�”}”(hŒ4void hlist_nulls_del_rcu(struct hlist_nulls_node *n)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÜÃh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjØÃh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K?ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjëÃh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØÃh²hh³jêÃh´K?ubj{)�”}”(hŒhlist_nulls_del_rcu”h]”j�)�”}”(hŒhlist_nulls_del_rcu”h]”hŒhlist_nulls_del_rcu”…”�”}”(hjýÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjùÃubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjØÃh²hh³jêÃh´K?ubjœ)�”}”(hŒ(struct hlist_nulls_node *n)”h]”j¢)�”}”(hŒstruct hlist_nulls_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj&Äh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_node”h]”hŒhlist_nulls_node”…”�”}”(hj7Äh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj4Äubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j9ÄŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÿÃsbŒc.hlist_nulls_del_rcu”†”asbuh1hhjÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjWÄh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjeÄh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÄubj�)�”}”(hj�h]”hŒn”…”�”}”(hjrÄh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÄubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjØÃh²hh³jêÃh´K?ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÔÃh²hh³jêÃh´K?ubah}”(h]”jÏÃah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jêÃh´K?hjÑÃh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6deletes entry from hash list without re-initialization”h]”hŒ6deletes entry from hash list without re-initialization”…”�”}”(hj›Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K?hj˜Äh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÑÃh²hh³jêÃh´K?ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj³Äjæj³Äjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXÝ**Parameters** ``struct hlist_nulls_node *n`` the element to delete from the hash list. **Note** hlist_nulls_unhashed() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal. In particular, it means that we can not poison the forward pointers that may still be used for walking the hash list. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj½Äh]”hŒ Parameters”…”�”}”(hj¿Äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»Äubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KChj·Äubj )�”}”(hhh]”j)�”}”(hŒI``struct hlist_nulls_node *n`` the element to delete from the hash list. ”h]”(j)�”}”(hŒ``struct hlist_nulls_node *n``”h]”j)�”}”(hjÜÄh]”hŒstruct hlist_nulls_node *n”…”�”}”(hjÞÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K@hjÖÄubj2)�”}”(hhh]”hÝ)�”}”(hŒ)the element to delete from the hash list.”h]”hŒ)the element to delete from the hash list.”…”�”}”(hjõÄh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jñÄh´K@hjòÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÖÄubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñÄh´K@hjÓÄubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj·ÄubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjÅh]”hŒNote”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KBhj·ÄubhÝ)�”}”(hŒ“hlist_nulls_unhashed() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal.”h]”hŒ“hlist_nulls_unhashed() on entry does not return true after this, the entry is in an undefined state. It is useful for RCU based lockfree traversal.”…”�”}”(hj-Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KBhj·ÄubhÝ)�”}”(hŒuIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list.”h]”hŒuIn particular, it means that we can not poison the forward pointers that may still be used for walking the hash list.”…”�”}”(hj<Åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KFhj·ÄubhÝ)�”}”(hXkThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry().”h]”hXkThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry().”…”�”}”(hjKÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KIhj·Äubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%hlist_nulls_add_head_rcu (C function)”Œc.hlist_nulls_add_head_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒVvoid hlist_nulls_add_head_rcu (struct hlist_nulls_node *n, struct hlist_nulls_head *h)”h]”j)�”}”(hŒUvoid hlist_nulls_add_head_rcu(struct hlist_nulls_node *n, struct hlist_nulls_head *h)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjzÅh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjvÅh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KXubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰Åh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvÅh²hh³jˆÅh´KXubj{)�”}”(hŒhlist_nulls_add_head_rcu”h]”j�)�”}”(hŒhlist_nulls_add_head_rcu”h]”hŒhlist_nulls_add_head_rcu”…”�”}”(hj›Åh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—Åubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjvÅh²hh³jˆÅh´KXubjœ)�”}”(hŒ8(struct hlist_nulls_node *n, struct hlist_nulls_head *h)”h]”(j¢)�”}”(hŒstruct hlist_nulls_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj·Åh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj³Åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÄÅh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³Åubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_node”h]”hŒhlist_nulls_node”…”�”}”(hjÕÅh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒÅubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j×ÅŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j�ÅsbŒc.hlist_nulls_add_head_rcu”†”asbuh1hhj³Åubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjõÅh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj³Åubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj³Åubj�)�”}”(hj�h]”hŒn”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj³Åubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¯Åubj¢)�”}”(hŒstruct hlist_nulls_head *h”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj(Æh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj$Æubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj5Æh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$Æubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_head”h]”hŒhlist_nulls_head”…”�”}”(hjFÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjCÆubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jHÆŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jñÅŒc.hlist_nulls_add_head_rcu”†”asbuh1hhj$Æubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjdÆh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj$Æubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjrÆh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj$Æubj�)�”}”(hj(yh]”hŒh”…”�”}”(hjÆh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj$Æubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¯Åubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjvÅh²hh³jˆÅh´KXubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjrÅh²hh³jˆÅh´KXubah}”(h]”jmÅah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jˆÅh´KXhjoÅh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjoÅh²hh³jˆÅh´KXubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj±Æjæj±Æjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``struct hlist_nulls_node *n`` the element to add to the hash list. ``struct hlist_nulls_head *h`` the list to add to. **Description** Adds the specified element to the specified hlist_nulls, while permitting racing traversals. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj»Æh]”hŒ Parameters”…”�”}”(hj½Æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¹Æubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K\hjµÆubj )�”}”(hhh]”(j)�”}”(hŒD``struct hlist_nulls_node *n`` the element to add to the hash list. ”h]”(j)�”}”(hŒ``struct hlist_nulls_node *n``”h]”j)�”}”(hjÚÆh]”hŒstruct hlist_nulls_node *n”…”�”}”(hjÜÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KYhjÔÆubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the element to add to the hash list.”h]”hŒ$the element to add to the hash list.”…”�”}”(hjóÆh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïÆh´KYhjðÆubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïÆ•h´KYhjÑÆubj)�”}”(hŒ3``struct hlist_nulls_head *h`` the list to add to. ”h]”(j)�”}”(hŒ``struct hlist_nulls_head *h``”h]”j)�”}”(hjÇh]”hŒstruct hlist_nulls_head *h”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KZhj Çubj2)�”}”(hhh]”hÝ)�”}”(hŒthe list to add to.”h]”hŒthe list to add to.”…”�”}”(hj,Çh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(Çh´KZhj)Çubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Çubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(Çh´KZhjÑÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjµÆubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjNÇh]”hŒ Description”…”�”}”(hjPÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjLÇubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K\hjµÆubhÝ)�”}”(hŒ\Adds the specified element to the specified hlist_nulls, while permitting racing traversals.”h]”hŒ\Adds the specified element to the specified hlist_nulls, while permitting racing traversals.”…”�”}”(hjdÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K\hjµÆubhÝ)�”}”(hX The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”hX The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”…”�”}”(hjsÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K_hjµÆubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ%hlist_nulls_add_tail_rcu (C function)”Œc.hlist_nulls_add_tail_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒVvoid hlist_nulls_add_tail_rcu (struct hlist_nulls_node *n, struct hlist_nulls_head *h)”h]”j)�”}”(hŒUvoid hlist_nulls_add_tail_rcu(struct hlist_nulls_node *n, struct hlist_nulls_head *h)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¢Çh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjžÇh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Kwubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±Çh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžÇh²hh³j°Çh´Kwubj{)�”}”(hŒhlist_nulls_add_tail_rcu”h]”j�)�”}”(hŒhlist_nulls_add_tail_rcu”h]”hŒhlist_nulls_add_tail_rcu”…”�”}”(hjÃÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿Çubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjžÇh²hh³j°Çh´Kwubjœ)�”}”(hŒ8(struct hlist_nulls_node *n, struct hlist_nulls_head *h)”h]”(j¢)�”}”(hŒstruct hlist_nulls_node *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjßÇh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÛÇubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjìÇh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛÇubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_node”h]”hŒhlist_nulls_node”…”�”}”(hjýÇh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúÇubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÿÇŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÅÇsbŒc.hlist_nulls_add_tail_rcu”†”asbuh1hhjÛÇubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛÇubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj+Èh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÛÇubj�)�”}”(hj�h]”hŒn”…”�”}”(hj8Èh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛÇubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×Çubj¢)�”}”(hŒstruct hlist_nulls_head *h”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjPÈh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjLÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]Èh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjLÈubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_head”h]”hŒhlist_nulls_head”…”�”}”(hjnÈh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkÈubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jpÈŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jÈŒc.hlist_nulls_add_tail_rcu”†”asbuh1hhjLÈubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŒÈh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjLÈubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjšÈh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjLÈubj�)�”}”(hj(yh]”hŒh”…”�”}”(hj§Èh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLÈubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×Çubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjžÇh²hh³j°Çh´Kwubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjšÇh²hh³j°Çh´Kwubah}”(h]”j•Çah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j°Çh´Kwhj—Çh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj—Çh²hh³j°Çh´Kwubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÙÈjæjÙÈjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``struct hlist_nulls_node *n`` the element to add to the hash list. ``struct hlist_nulls_head *h`` the list to add to. **Description** Adds the specified element to the specified hlist_nulls, while permitting racing traversals. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjãÈh]”hŒ Parameters”…”�”}”(hjåÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjáÈubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K{hjÝÈubj )�”}”(hhh]”(j)�”}”(hŒD``struct hlist_nulls_node *n`` the element to add to the hash list. ”h]”(j)�”}”(hŒ``struct hlist_nulls_node *n``”h]”j)�”}”(hjÉh]”hŒstruct hlist_nulls_node *n”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KxhjüÈubj2)�”}”(hhh]”hÝ)�”}”(hŒ$the element to add to the hash list.”h]”hŒ$the element to add to the hash list.”…”�”}”(hjÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÉh´KxhjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjüÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÉh´KxhjùÈubj)�”}”(hŒ3``struct hlist_nulls_head *h`` the list to add to. ”h]”(j)�”}”(hŒ``struct hlist_nulls_head *h``”h]”j)�”}”(hj;Éh]”hŒstruct hlist_nulls_head *h”…”�”}”(hj=Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9Éubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Kyhj5Éubj2)�”}”(hhh]”hÝ)�”}”(hŒthe list to add to.”h]”hŒthe list to add to.”…”�”}”(hjTÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jPÉh´KyhjQÉubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj5Éubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jPÉh´KyhjùÈubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÝÈubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjvÉh]”hŒ Description”…”�”}”(hjxÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjtÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K{hjÝÈubhÝ)�”}”(hŒ\Adds the specified element to the specified hlist_nulls, while permitting racing traversals.”h]”hŒ\Adds the specified element to the specified hlist_nulls, while permitting racing traversals.”…”�”}”(hjŒÉh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K{hjÝÈubhÝ)�”}”(hX The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”h]”hX The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu(), used to prevent memory-consistency problems on Alpha CPUs. Regardless of the type of CPU, the list-traversal primitive must be guarded by rcu_read_lock().”…”�”}”(hj›Éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K~hjÝÈubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$hlist_nulls_replace_rcu (C function)”Œc.hlist_nulls_replace_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒYvoid hlist_nulls_replace_rcu (struct hlist_nulls_node *old, struct hlist_nulls_node *new)”h]”j)�”}”(hŒXvoid hlist_nulls_replace_rcu(struct hlist_nulls_node *old, struct hlist_nulls_node *new)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÊÉh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÆÉh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙÉh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÆÉh²hh³jØÉh´K£ubj{)�”}”(hŒhlist_nulls_replace_rcu”h]”j�)�”}”(hŒhlist_nulls_replace_rcu”h]”hŒhlist_nulls_replace_rcu”…”�”}”(hjëÉh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçÉubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÆÉh²hh³jØÉh´K£ubjœ)�”}”(hŒ<(struct hlist_nulls_node *old, struct hlist_nulls_node *new)”h]”(j¢)�”}”(hŒstruct hlist_nulls_node *old”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_node”h]”hŒhlist_nulls_node”…”�”}”(hj%Êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"Êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j'ÊŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jíÉsbŒc.hlist_nulls_replace_rcu”†”asbuh1hhjÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÊubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjSÊh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÊubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hj`Êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÿÉubj¢)�”}”(hŒstruct hlist_nulls_node *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjyÊh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjuÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†Êh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuÊubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_node”h]”hŒhlist_nulls_node”…”�”}”(hj—Êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”Êubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j™ÊŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jAÊŒc.hlist_nulls_replace_rcu”†”asbuh1hhjuÊubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµÊh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuÊubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÃÊh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjuÊubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hjÐÊh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuÊubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÿÉubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÆÉh²hh³jØÉh´K£ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÂÉh²hh³jØÉh´K£ubah}”(h]”j½Éah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jØÉh´K£hj¿Éh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ!replace an old entry by a new one”h]”hŒ!replace an old entry by a new one”…”�”}”(hjúÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K£hj÷Êh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¿Éh²hh³jØÉh´K£ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjËjæjËjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXz**Parameters** ``struct hlist_nulls_node *old`` the element to be replaced ``struct hlist_nulls_node *new`` the new element to insert **Description** Replace the old entry with the new one in a RCU-protected hlist_nulls, while permitting racing traversals. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjËh]”hŒ Parameters”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjËubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K§hjËubj )�”}”(hhh]”(j)�”}”(hŒ<``struct hlist_nulls_node *old`` the element to be replaced ”h]”(j)�”}”(hŒ ``struct hlist_nulls_node *old``”h]”j)�”}”(hj;Ëh]”hŒstruct hlist_nulls_node *old”…”�”}”(hj=Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K¤hj5Ëubj2)�”}”(hhh]”hÝ)�”}”(hŒthe element to be replaced”h]”hŒthe element to be replaced”…”�”}”(hjTËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jPËh´K¤hjQËubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj5Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jPËh´K¤hj2Ëubj)�”}”(hŒ;``struct hlist_nulls_node *new`` the new element to insert ”h]”(j)�”}”(hŒ ``struct hlist_nulls_node *new``”h]”j)�”}”(hjtËh]”hŒstruct hlist_nulls_node *new”…”�”}”(hjvËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrËubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K¥hjnËubj2)�”}”(hhh]”hÝ)�”}”(hŒthe new element to insert”h]”hŒthe new element to insert”…”�”}”(hj�Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰Ëh´K¥hjŠËubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjnËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰Ëh´K¥hj2Ëubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjËubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¯Ëh]”hŒ Description”…”�”}”(hj±Ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­Ëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K§hjËubhÝ)�”}”(hŒjReplace the old entry with the new one in a RCU-protected hlist_nulls, while permitting racing traversals.”h]”hŒjReplace the old entry with the new one in a RCU-protected hlist_nulls, while permitting racing traversals.”…”�”}”(hjÅËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K§hjËubhÝ)�”}”(hXpThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu().”h]”hXpThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu().”…”�”}”(hjÔËh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KªhjËubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)hlist_nulls_replace_init_rcu (C function)”Œc.hlist_nulls_replace_init_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ^void hlist_nulls_replace_init_rcu (struct hlist_nulls_node *old, struct hlist_nulls_node *new)”h]”j)�”}”(hŒ]void hlist_nulls_replace_init_rcu(struct hlist_nulls_node *old, struct hlist_nulls_node *new)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÿËh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K¾ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÿËh²hh³jÌh´K¾ubj{)�”}”(hŒhlist_nulls_replace_init_rcu”h]”j�)�”}”(hŒhlist_nulls_replace_init_rcu”h]”hŒhlist_nulls_replace_init_rcu”…”�”}”(hj$Ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Ìubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÿËh²hh³jÌh´K¾ubjœ)�”}”(hŒ<(struct hlist_nulls_node *old, struct hlist_nulls_node *new)”h]”(j¢)�”}”(hŒstruct hlist_nulls_node *old”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj@Ìh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj<Ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjMÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj<Ìubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_node”h]”hŒhlist_nulls_node”…”�”}”(hj^Ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj[Ìubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j`ÌŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j&ÌsbŒc.hlist_nulls_replace_init_rcu”†”asbuh1hhj<Ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj~Ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj<Ìubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŒÌh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj<Ìubj�)�”}”(hŒold”h]”hŒold”…”�”}”(hj™Ìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj<Ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj8Ìubj¢)�”}”(hŒstruct hlist_nulls_node *new”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj²Ìh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj®Ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¿Ìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®Ìubh)�”}”(hhh]”j�)�”}”(hŒhlist_nulls_node”h]”hŒhlist_nulls_node”…”�”}”(hjÐÌh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÍÌubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÒÌŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jzÌŒc.hlist_nulls_replace_init_rcu”†”asbuh1hhj®Ìubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjîÌh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj®Ìubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjüÌh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj®Ìubj�)�”}”(hŒnew”h]”hŒnew”…”�”}”(hj Íh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj®Ìubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj8Ìubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÿËh²hh³jÌh´K¾ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjûËh²hh³jÌh´K¾ubah}”(h]”jöËah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÌh´K¾hjøËh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ8replace an old entry by a new one and initialize the old”h]”hŒ8replace an old entry by a new one and initialize the old”…”�”}”(hj3Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K¾hj0Íh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjøËh²hh³jÌh´K¾ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjKÍjæjKÍjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX¼**Parameters** ``struct hlist_nulls_node *old`` the element to be replaced ``struct hlist_nulls_node *new`` the new element to insert **Description** Replace the old entry with the new one in a RCU-protected hlist_nulls, while permitting racing traversals, and reinitialize the old entry. **Note** **old** must be hashed. The caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjUÍh]”hŒ Parameters”…”�”}”(hjWÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjSÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÂhjOÍubj )�”}”(hhh]”(j)�”}”(hŒ<``struct hlist_nulls_node *old`` the element to be replaced ”h]”(j)�”}”(hŒ ``struct hlist_nulls_node *old``”h]”j)�”}”(hjtÍh]”hŒstruct hlist_nulls_node *old”…”�”}”(hjvÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjrÍubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÀhjnÍubj2)�”}”(hhh]”hÝ)�”}”(hŒthe element to be replaced”h]”hŒthe element to be replaced”…”�”}”(hj�Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰Íh´KÀhjŠÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjnÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰Íh´KÀhjkÍubj)�”}”(hŒ;``struct hlist_nulls_node *new`` the new element to insert ”h]”(j)�”}”(hŒ ``struct hlist_nulls_node *new``”h]”j)�”}”(hj­Íh]”hŒstruct hlist_nulls_node *new”…”�”}”(hj¯Íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«Íubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÁhj§Íubj2)�”}”(hhh]”hÝ)�”}”(hŒthe new element to insert”h]”hŒthe new element to insert”…”�”}”(hjÆÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÂÍh´KÁhjÃÍubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj§Íubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÂÍh´KÁhjkÍubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjOÍubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjèÍh]”hŒ Description”…”�”}”(hjêÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjæÍubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÃhjOÍubhÝ)�”}”(hŒŠReplace the old entry with the new one in a RCU-protected hlist_nulls, while permitting racing traversals, and reinitialize the old entry.”h]”hŒŠReplace the old entry with the new one in a RCU-protected hlist_nulls, while permitting racing traversals, and reinitialize the old entry.”…”�”}”(hjþÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÃhjOÍubhÝ)�”}”(hŒ**Note**”h]”jõ)�”}”(hjÎh]”hŒNote”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj Îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÆhjOÍubhÝ)�”}”(hŒ**old** must be hashed.”h]”(jõ)�”}”(hŒ**old**”h]”hŒold”…”�”}”(hj)Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%ÎubhŒ must be hashed.”…”�”}”(hj%Îh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÇhjOÍubhÝ)�”}”(hXoThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu().”h]”hXoThe caller must take whatever precautions are necessary (such as holding appropriate locks) to avoid racing with another list-mutation primitive, such as hlist_nulls_add_head_rcu() or hlist_nulls_del_rcu(), running on this same list. However, it is perfectly legal to run concurrently with the _rcu list-traversal primitives, such as hlist_nulls_for_each_entry_rcu().”…”�”}”(hjBÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÉhjOÍubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(hlist_nulls_for_each_entry_rcu (C macro)”Œ c.hlist_nulls_for_each_entry_rcu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_nulls_for_each_entry_rcu”h]”j)�”}”(hŒhlist_nulls_for_each_entry_rcu”h]”j{)�”}”(hŒhlist_nulls_for_each_entry_rcu”h]”j�)�”}”(hjkÎh]”hŒhlist_nulls_for_each_entry_rcu”…”�”}”(hjuÎh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqÎubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjmÎh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K×ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjiÎh²hh³jˆÎh´K×ubah}”(h]”jdÎah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jˆÎh´K×hjfÎh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjfÎh²hh³jˆÎh´K×ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåj¡Îjæj¡Îjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ<``hlist_nulls_for_each_entry_rcu (tpos, pos, head, member)``”h]”j)�”}”(hj§Îh]”hŒ8hlist_nulls_for_each_entry_rcu (tpos, pos, head, member)”…”�”}”(hj©Îh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¥Îubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÙhjôÖh²hubj•)�”}”(hŒ$iterate over rcu list of given type ”h]”hÝ)�”}”(hŒ#iterate over rcu list of given type”h]”hŒ#iterate over rcu list of given type”…”�”}”(hjÁÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´K×hj½Îubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÏÎh´K×hjôÖh²hubjë)�”}”(hXñ**Parameters** ``tpos`` the type * to use as a loop cursor. ``pos`` the :c:type:`struct hlist_nulls_node ` to use as a loop cursor. ``head`` the head of the list. ``member`` the name of the hlist_nulls_node within the struct. **Description** The barrier() is needed to make sure compiler doesn't cache first element [1], as this loop can be restarted [2] [1] Documentation/memory-barriers.txt around line 1533 [2] Documentation/RCU/rculist_nulls.rst around line 146”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÜÎh]”hŒ Parameters”…”�”}”(hjÞÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚÎubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÛhjÖÎubj )�”}”(hhh]”(j)�”}”(hŒ-``tpos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``tpos``”h]”j)�”}”(hjûÎh]”hŒtpos”…”�”}”(hjýÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KØhjõÎubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÏh´KØhjÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÏh´KØhjòÎubj)�”}”(hŒZ``pos`` the :c:type:`struct hlist_nulls_node ` to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj4Ïh]”hŒpos”…”�”}”(hj6Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj2Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÙhj.Ïubj2)�”}”(hhh]”hÝ)�”}”(hŒQthe :c:type:`struct hlist_nulls_node ` to use as a loop cursor.”h]”(hŒthe ”…”�”}”(hjMÏh²hh³Nh´Nubh)�”}”(hŒ4:c:type:`struct hlist_nulls_node `”h]”j)�”}”(hjWÏh]”hŒstruct hlist_nulls_node”…”�”}”(hjYÏh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhjUÏubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œhlist_nulls_node”uh1hh³jIÏh´KÙhjMÏubhŒ to use as a loop cursor.”…”�”}”(hjMÏh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jIÏh´KÙhjJÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj.Ïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jIÏh´KÙhjòÎubj)�”}”(hŒ``head`` the head of the list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hj�Ïh]”hŒhead”…”�”}”(hj’Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŽÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÚhjŠÏubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head of the list.”h]”hŒthe head of the list.”…”�”}”(hj©Ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¥Ïh´KÚhj¦Ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŠÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¥Ïh´KÚhjòÎubj)�”}”(hŒ?``member`` the name of the hlist_nulls_node within the struct. ”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hjÉÏh]”hŒmember”…”�”}”(hjËÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÇÏubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÛhjÃÏubj2)�”}”(hhh]”hÝ)�”}”(hŒ3the name of the hlist_nulls_node within the struct.”h]”hŒ3the name of the hlist_nulls_node within the struct.”…”�”}”(hjâÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÞÏh´KÛhjßÏubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÃÏubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÞÏh´KÛhjòÎubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖÎubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÐh]”hŒ Description”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÝhjÖÎubhÝ)�”}”(hŒßThe barrier() is needed to make sure compiler doesn't cache first element [1], as this loop can be restarted [2] [1] Documentation/memory-barriers.txt around line 1533 [2] Documentation/RCU/rculist_nulls.rst around line 146”h]”hŒáThe barrier() is needed to make sure compiler doesn’t cache first element [1], as this loop can be restarted [2] [1] Documentation/memory-barriers.txt around line 1533 [2] Documentation/RCU/rculist_nulls.rst around line 146”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KÜhjÖÎubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ)hlist_nulls_for_each_entry_safe (C macro)”Œ!c.hlist_nulls_for_each_entry_safe”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒhlist_nulls_for_each_entry_safe”h]”j)�”}”(hŒhlist_nulls_for_each_entry_safe”h]”j{)�”}”(hŒhlist_nulls_for_each_entry_safe”h]”j�)�”}”(hjCÐh]”hŒhlist_nulls_for_each_entry_safe”…”�”}”(hjMÐh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjIÐubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjEÐh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Kêubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjAÐh²hh³j`Ðh´Kêubah}”(h]”j<Ðah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j`Ðh´Kêhj>Ðh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj>Ðh²hh³j`Ðh´Kêubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjyÐjæjyÐjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ=``hlist_nulls_for_each_entry_safe (tpos, pos, head, member)``”h]”j)�”}”(hjÐh]”hŒ9hlist_nulls_for_each_entry_safe (tpos, pos, head, member)”…”�”}”(hj�Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj}Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KìhjôÖh²hubj•)�”}”(hŒCiterate over list of given type safe against removal of list entry ”h]”hÝ)�”}”(hŒBiterate over list of given type safe against removal of list entry”h]”hŒBiterate over list of given type safe against removal of list entry”…”�”}”(hj™Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Kêhj•Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j§Ðh´KêhjôÖh²hubjë)�”}”(hŒÿ**Parameters** ``tpos`` the type * to use as a loop cursor. ``pos`` the :c:type:`struct hlist_nulls_node ` to use as a loop cursor. ``head`` the head of the list. ``member`` the name of the hlist_nulls_node within the struct.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj´Ðh]”hŒ Parameters”…”�”}”(hj¶Ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj²Ðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Kîhj®Ðubj )�”}”(hhh]”(j)�”}”(hŒ-``tpos`` the type * to use as a loop cursor. ”h]”(j)�”}”(hŒ``tpos``”h]”j)�”}”(hjÓÐh]”hŒtpos”…”�”}”(hjÕÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÑÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KìhjÍÐubj2)�”}”(hhh]”hÝ)�”}”(hŒ#the type * to use as a loop cursor.”h]”hŒ#the type * to use as a loop cursor.”…”�”}”(hjìÐh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jèÐh´KìhjéÐubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÍÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jèÐh´KìhjÊÐubj)�”}”(hŒZ``pos`` the :c:type:`struct hlist_nulls_node ` to use as a loop cursor. ”h]”(j)�”}”(hŒ``pos``”h]”j)�”}”(hj Ñh]”hŒpos”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KíhjÑubj2)�”}”(hhh]”hÝ)�”}”(hŒQthe :c:type:`struct hlist_nulls_node ` to use as a loop cursor.”h]”(hŒthe ”…”�”}”(hj%Ñh²hh³Nh´Nubh)�”}”(hŒ4:c:type:`struct hlist_nulls_node `”h]”j)�”}”(hj/Ñh]”hŒstruct hlist_nulls_node”…”�”}”(hj1Ñh²hh³Nh´Nubah}”(h]”h ]”(j¥�jߌc-type”eh"]”h$]”h&]”uh1jhj-Ñubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”jÃ<Œ refdomain”jߌreftype”Œtype”Œ refexplicit”ˆŒrefwarn”‰j] j¶�j¹�Œhlist_nulls_node”uh1hh³j!Ñh´Kíhj%ÑubhŒ to use as a loop cursor.”…”�”}”(hj%Ñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j!Ñh´Kíhj"Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j!Ñh´KíhjÊÐubj)�”}”(hŒ``head`` the head of the list. ”h]”(j)�”}”(hŒ``head``”h]”j)�”}”(hjhÑh]”hŒhead”…”�”}”(hjjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´KîhjbÑubj2)�”}”(hhh]”hÝ)�”}”(hŒthe head of the list.”h]”hŒthe head of the list.”…”�”}”(hj�Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}Ñh´Kîhj~Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjbÑubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}Ñh´KîhjÊÐubj)�”}”(hŒ>``member`` the name of the hlist_nulls_node within the struct.”h]”(j)�”}”(hŒ ``member``”h]”j)�”}”(hj¡Ñh]”hŒmember”…”�”}”(hj£Ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸÑubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Kðhj›Ñubj2)�”}”(hhh]”hÝ)�”}”(hŒ3the name of the hlist_nulls_node within the struct.”h]”hŒ3the name of the hlist_nulls_node within the struct.”…”�”}”(hjºÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:415: ./include/linux/rculist_nulls.h”h´Kïhj·Ñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›Ñubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶Ñh´KðhjÊÐubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj®Ðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_sync_is_idle (C function)”Œc.rcu_sync_is_idle”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,bool rcu_sync_is_idle (struct rcu_sync *rsp)”h]”j)�”}”(hŒ+bool rcu_sync_is_idle(struct rcu_sync *rsp)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjûÑh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj÷Ñh²hh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:417: ./include/linux/rcu_sync.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Òh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷Ñh²hh³jÒh´Kubj{)�”}”(hŒrcu_sync_is_idle”h]”j�)�”}”(hŒrcu_sync_is_idle”h]”hŒrcu_sync_is_idle”…”�”}”(hjÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj÷Ñh²hh³jÒh´Kubjœ)�”}”(hŒ(struct rcu_sync *rsp)”h]”j¢)�”}”(hŒstruct rcu_sync *rsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj7Òh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj3Òubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjDÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3Òubh)�”}”(hhh]”j�)�”}”(hŒrcu_sync”h]”hŒrcu_sync”…”�”}”(hjUÒh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRÒubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jWÒŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÒsbŒc.rcu_sync_is_idle”†”asbuh1hhj3Òubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjuÒh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj3Òubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjƒÒh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj3Òubj�)�”}”(hŒrsp”h]”hŒrsp”…”�”}”(hj�Òh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj3Òubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj/Òubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj÷Ñh²hh³jÒh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjóÑh²hh³jÒh´Kubah}”(h]”jîÑah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÒh´KhjðÑh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ-Are readers permitted to use their fastpaths?”h]”hŒ-Are readers permitted to use their fastpaths?”…”�”}”(hjºÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:417: ./include/linux/rcu_sync.h”h´Khj·Òh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjðÑh²hh³jÒh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÒÒjæjÒÒjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒú**Parameters** ``struct rcu_sync *rsp`` Pointer to rcu_sync structure to use for synchronization **Description** Returns true if readers are permitted to use their fastpaths. Must be invoked within some flavor of RCU read-side critical section.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÜÒh]”hŒ Parameters”…”�”}”(hjÞÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÚÒubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:417: ./include/linux/rcu_sync.h”h´KhjÖÒubj )�”}”(hhh]”j)�”}”(hŒR``struct rcu_sync *rsp`` Pointer to rcu_sync structure to use for synchronization ”h]”(j)�”}”(hŒ``struct rcu_sync *rsp``”h]”j)�”}”(hjûÒh]”hŒstruct rcu_sync *rsp”…”�”}”(hjýÒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjùÒubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:417: ./include/linux/rcu_sync.h”h´KhjõÒubj2)�”}”(hhh]”hÝ)�”}”(hŒ8Pointer to rcu_sync structure to use for synchronization”h]”hŒ8Pointer to rcu_sync structure to use for synchronization”…”�”}”(hjÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÓh´KhjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjõÒubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓh´KhjòÒubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÖÒubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj6Óh]”hŒ Description”…”�”}”(hj8Óh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj4Óubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:417: ./include/linux/rcu_sync.h”h´KhjÖÒubhÝ)�”}”(hŒ„Returns true if readers are permitted to use their fastpaths. Must be invoked within some flavor of RCU read-side critical section.”h]”hŒ„Returns true if readers are permitted to use their fastpaths. Must be invoked within some flavor of RCU read-side critical section.”…”�”}”(hjLÓh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ]/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:417: ./include/linux/rcu_sync.h”h´KhjÖÒubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_sync_init (C function)”Œc.rcu_sync_init”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)void rcu_sync_init (struct rcu_sync *rsp)”h]”j)�”}”(hŒ(void rcu_sync_init(struct rcu_sync *rsp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj{Óh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjwÓh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŠÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjwÓh²hh³j‰Óh´Kubj{)�”}”(hŒ rcu_sync_init”h]”j�)�”}”(hŒ rcu_sync_init”h]”hŒ rcu_sync_init”…”�”}”(hjœÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj˜Óubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjwÓh²hh³j‰Óh´Kubjœ)�”}”(hŒ(struct rcu_sync *rsp)”h]”j¢)�”}”(hŒstruct rcu_sync *rsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj¸Óh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj´Óubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÅÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´Óubh)�”}”(hhh]”j�)�”}”(hŒrcu_sync”h]”hŒrcu_sync”…”�”}”(hjÖÓh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÓÓubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jØÓŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jžÓsbŒc.rcu_sync_init”†”asbuh1hhj´Óubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjöÓh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj´Óubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj´Óubj�)�”}”(hŒrsp”h]”hŒrsp”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj´Óubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj°Óubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjwÓh²hh³j‰Óh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjsÓh²hh³j‰Óh´Kubah}”(h]”jnÓah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j‰Óh´KhjpÓh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ Initialize an rcu_sync structure”h]”hŒ Initialize an rcu_sync structure”…”�”}”(hj;Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´Khj8Ôh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjpÓh²hh³j‰Óh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjSÔjæjSÔjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒZ**Parameters** ``struct rcu_sync *rsp`` Pointer to rcu_sync structure to be initialized”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj]Ôh]”hŒ Parameters”…”�”}”(hj_Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj[Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´KhjWÔubj )�”}”(hhh]”j)�”}”(hŒH``struct rcu_sync *rsp`` Pointer to rcu_sync structure to be initialized”h]”(j)�”}”(hŒ``struct rcu_sync *rsp``”h]”j)�”}”(hj|Ôh]”hŒstruct rcu_sync *rsp”…”�”}”(hj~Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjzÔubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´KhjvÔubj2)�”}”(hhh]”hÝ)�”}”(hŒ/Pointer to rcu_sync structure to be initialized”h]”hŒ/Pointer to rcu_sync structure to be initialized”…”�”}”(hj•Ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´Khj’Ôubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjvÔubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‘Ôh´KhjsÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjWÔubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_sync_func (C function)”Œc.rcu_sync_func”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)void rcu_sync_func (struct rcu_head *rhp)”h]”j)�”}”(hŒ(void rcu_sync_func(struct rcu_head *rhp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÖÔh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÒÔh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K#ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjåÔh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÒÔh²hh³jäÔh´K#ubj{)�”}”(hŒ rcu_sync_func”h]”j�)�”}”(hŒ rcu_sync_func”h]”hŒ rcu_sync_func”…”�”}”(hj÷Ôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjóÔubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÒÔh²hh³jäÔh´K#ubjœ)�”}”(hŒ(struct rcu_head *rhp)”h]”j¢)�”}”(hŒstruct rcu_head *rhp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÕh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj Õh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hj1Õh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj.Õubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j3ÕŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jùÔsbŒc.rcu_sync_func”†”asbuh1hhjÕubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjQÕh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÕubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj_Õh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÕubj�)�”}”(hŒrhp”h]”hŒrhp”…”�”}”(hjlÕh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÕubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj Õubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÒÔh²hh³jäÔh´K#ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÎÔh²hh³jäÔh´K#ubah}”(h]”jÉÔah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jäÔh´K#hjËÔh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4Callback function managing reader access to fastpath”h]”hŒ4Callback function managing reader access to fastpath”…”�”}”(hj–Õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K#hj“Õh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjËÔh²hh³jäÔh´K#ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj®Õjæj®Õjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Parameters** ``struct rcu_head *rhp`` Pointer to rcu_head in rcu_sync structure to use for synchronization **Description** This function is passed to call_rcu() function by rcu_sync_enter() and rcu_sync_exit(), so that it is invoked after a grace period following the that invocation of enter/exit. If it is called by rcu_sync_enter() it signals that all the readers were switched onto slow path. If it is called by rcu_sync_exit() it takes action based on events that have taken place in the meantime, so that closely spaced rcu_sync_enter() and rcu_sync_exit() pairs need not wait for a grace period. If another rcu_sync_enter() is invoked before the grace period ended, reset state to allow the next rcu_sync_exit() to let the readers back onto their fastpaths (after a grace period). If both another rcu_sync_enter() and its matching rcu_sync_exit() are invoked before the grace period ended, re-invoke call_rcu() on behalf of that rcu_sync_exit(). Otherwise, set all state back to idle so that readers can again use their fastpaths.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj¸Õh]”hŒ Parameters”…”�”}”(hjºÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¶Õubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K'hj²Õubj )�”}”(hhh]”j)�”}”(hŒ^``struct rcu_head *rhp`` Pointer to rcu_head in rcu_sync structure to use for synchronization ”h]”(j)�”}”(hŒ``struct rcu_head *rhp``”h]”j)�”}”(hj×Õh]”hŒstruct rcu_head *rhp”…”�”}”(hjÙÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÕÕubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K$hjÑÕubj2)�”}”(hhh]”hÝ)�”}”(hŒDPointer to rcu_head in rcu_sync structure to use for synchronization”h]”hŒDPointer to rcu_head in rcu_sync structure to use for synchronization”…”�”}”(hjðÕh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jìÕh´K$hjíÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÑÕubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jìÕh´K$hjÎÕubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj²ÕubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÖh]”hŒ Description”…”�”}”(hjÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K&hj²ÕubhÝ)�”}”(hŒ¯This function is passed to call_rcu() function by rcu_sync_enter() and rcu_sync_exit(), so that it is invoked after a grace period following the that invocation of enter/exit.”h]”hŒ¯This function is passed to call_rcu() function by rcu_sync_enter() and rcu_sync_exit(), so that it is invoked after a grace period following the that invocation of enter/exit.”…”�”}”(hj(Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K%hj²ÕubhÝ)�”}”(hŒaIf it is called by rcu_sync_enter() it signals that all the readers were switched onto slow path.”h]”hŒaIf it is called by rcu_sync_enter() it signals that all the readers were switched onto slow path.”…”�”}”(hj7Öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K)hj²ÕubhÝ)�”}”(hŒÍIf it is called by rcu_sync_exit() it takes action based on events that have taken place in the meantime, so that closely spaced rcu_sync_enter() and rcu_sync_exit() pairs need not wait for a grace period.”h]”hŒÍIf it is called by rcu_sync_exit() it takes action based on events that have taken place in the meantime, so that closely spaced rcu_sync_enter() and rcu_sync_exit() pairs need not wait for a grace period.”…”�”}”(hjFÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K,hj²ÕubhÝ)�”}”(hX´If another rcu_sync_enter() is invoked before the grace period ended, reset state to allow the next rcu_sync_exit() to let the readers back onto their fastpaths (after a grace period). If both another rcu_sync_enter() and its matching rcu_sync_exit() are invoked before the grace period ended, re-invoke call_rcu() on behalf of that rcu_sync_exit(). Otherwise, set all state back to idle so that readers can again use their fastpaths.”h]”hX´If another rcu_sync_enter() is invoked before the grace period ended, reset state to allow the next rcu_sync_exit() to let the readers back onto their fastpaths (after a grace period). If both another rcu_sync_enter() and its matching rcu_sync_exit() are invoked before the grace period ended, re-invoke call_rcu() on behalf of that rcu_sync_exit(). Otherwise, set all state back to idle so that readers can again use their fastpaths.”…”�”}”(hjUÖh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K0hj²Õubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_sync_enter (C function)”Œc.rcu_sync_enter”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ*void rcu_sync_enter (struct rcu_sync *rsp)”h]”j)�”}”(hŒ)void rcu_sync_enter(struct rcu_sync *rsp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj„Öh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj€Öh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K[ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj“Öh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj€Öh²hh³j’Öh´K[ubj{)�”}”(hŒrcu_sync_enter”h]”j�)�”}”(hŒrcu_sync_enter”h]”hŒrcu_sync_enter”…”�”}”(hj¥Öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¡Öubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj€Öh²hh³j’Öh´K[ubjœ)�”}”(hŒ(struct rcu_sync *rsp)”h]”j¢)�”}”(hŒstruct rcu_sync *rsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÁÖh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj½Öubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÎÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½Öubh)�”}”(hhh]”j�)�”}”(hŒrcu_sync”h]”hŒrcu_sync”…”�”}”(hjßÖh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÜÖubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jáÖŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j§ÖsbŒc.rcu_sync_enter”†”asbuh1hhj½Öubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÿÖh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj½Öubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj ×h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj½Öubj�)�”}”(hŒrsp”h]”hŒrsp”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj½Öubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¹Öubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj€Öh²hh³j’Öh´K[ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj|Öh²hh³j’Öh´K[ubah}”(h]”jwÖah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j’Öh´K[hjyÖh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒForce readers onto slowpath”h]”hŒForce readers onto slowpath”…”�”}”(hjD×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K[hjA×h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjyÖh²hh³j’Öh´K[ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj\×jæj\×jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXŸ**Parameters** ``struct rcu_sync *rsp`` Pointer to rcu_sync structure to use for synchronization **Description** This function is used by updaters who need readers to make use of a slowpath during the update. After this function returns, all subsequent calls to rcu_sync_is_idle() will return false, which tells readers to stay off their fastpaths. A later call to rcu_sync_exit() re-enables reader fastpaths. When called in isolation, rcu_sync_enter() must wait for a grace period, however, closely spaced calls to rcu_sync_enter() can optimize away the grace-period wait via a state machine implemented by rcu_sync_enter(), rcu_sync_exit(), and rcu_sync_func().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjf×h]”hŒ Parameters”…”�”}”(hjh×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjd×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K_hj`×ubj )�”}”(hhh]”j)�”}”(hŒR``struct rcu_sync *rsp`` Pointer to rcu_sync structure to use for synchronization ”h]”(j)�”}”(hŒ``struct rcu_sync *rsp``”h]”j)�”}”(hj…×h]”hŒstruct rcu_sync *rsp”…”�”}”(hj‡×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒ×ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K\hj×ubj2)�”}”(hhh]”hÝ)�”}”(hŒ8Pointer to rcu_sync structure to use for synchronization”h]”hŒ8Pointer to rcu_sync structure to use for synchronization”…”�”}”(hjž×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jš×h´K\hj›×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj×ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jš×h´K\hj|×ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj`×ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÀ×h]”hŒ Description”…”�”}”(hjÂ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¾×ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K^hj`×ubhÝ)�”}”(hX*This function is used by updaters who need readers to make use of a slowpath during the update. After this function returns, all subsequent calls to rcu_sync_is_idle() will return false, which tells readers to stay off their fastpaths. A later call to rcu_sync_exit() re-enables reader fastpaths.”h]”hX*This function is used by updaters who need readers to make use of a slowpath during the update. After this function returns, all subsequent calls to rcu_sync_is_idle() will return false, which tells readers to stay off their fastpaths. A later call to rcu_sync_exit() re-enables reader fastpaths.”…”�”}”(hjÖ×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K]hj`×ubhÝ)�”}”(hŒýWhen called in isolation, rcu_sync_enter() must wait for a grace period, however, closely spaced calls to rcu_sync_enter() can optimize away the grace-period wait via a state machine implemented by rcu_sync_enter(), rcu_sync_exit(), and rcu_sync_func().”h]”hŒýWhen called in isolation, rcu_sync_enter() must wait for a grace period, however, closely spaced calls to rcu_sync_enter() can optimize away the grace-period wait via a state machine implemented by rcu_sync_enter(), rcu_sync_exit(), and rcu_sync_func().”…”�”}”(hjå×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´Kchj`×ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_sync_exit (C function)”Œc.rcu_sync_exit”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)void rcu_sync_exit (struct rcu_sync *rsp)”h]”j)�”}”(hŒ(void rcu_sync_exit(struct rcu_sync *rsp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjØh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjØh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj#Øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjØh²hh³j"Øh´K�ubj{)�”}”(hŒ rcu_sync_exit”h]”j�)�”}”(hŒ rcu_sync_exit”h]”hŒ rcu_sync_exit”…”�”}”(hj5Øh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj1Øubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjØh²hh³j"Øh´K�ubjœ)�”}”(hŒ(struct rcu_sync *rsp)”h]”j¢)�”}”(hŒstruct rcu_sync *rsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjQØh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjMØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj^Øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjMØubh)�”}”(hhh]”j�)�”}”(hŒrcu_sync”h]”hŒrcu_sync”…”�”}”(hjoØh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjlØubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jqØŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j7ØsbŒc.rcu_sync_exit”†”asbuh1hhjMØubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�Øh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjMØubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj�Øh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjMØubj�)�”}”(hŒrsp”h]”hŒrsp”…”�”}”(hjªØh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjMØubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjIØubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjØh²hh³j"Øh´K�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj Øh²hh³j"Øh´K�ubah}”(h]”jØah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j"Øh´K�hj Øh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4Allow readers back onto fast path after grace period”h]”hŒ4Allow readers back onto fast path after grace period”…”�”}”(hjÔØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K�hjÑØh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj Øh²hh³j"Øh´K�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjìØjæjìØjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX·**Parameters** ``struct rcu_sync *rsp`` Pointer to rcu_sync structure to use for synchronization **Description** This function is used by updaters who have completed, and can therefore now allow readers to make use of their fastpaths after a grace period has elapsed. After this grace period has completed, all subsequent calls to rcu_sync_is_idle() will return true, which tells readers that they can once again use their fastpaths.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjöØh]”hŒ Parameters”…”�”}”(hjøØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjôØubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K“hjðØubj )�”}”(hhh]”j)�”}”(hŒR``struct rcu_sync *rsp`` Pointer to rcu_sync structure to use for synchronization ”h]”(j)�”}”(hŒ``struct rcu_sync *rsp``”h]”j)�”}”(hjÙh]”hŒstruct rcu_sync *rsp”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K�hjÙubj2)�”}”(hhh]”hÝ)�”}”(hŒ8Pointer to rcu_sync structure to use for synchronization”h]”hŒ8Pointer to rcu_sync structure to use for synchronization”…”�”}”(hj.Ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j*Ùh´K�hj+Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÙubeh}”(h]”h ]”h"]”h$]”h&]”u•h1jh³j*Ùh´K�hj Ùubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjðØubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjPÙh]”hŒ Description”…”�”}”(hjRÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjNÙubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K’hjðØubhÝ)�”}”(hXAThis function is used by updaters who have completed, and can therefore now allow readers to make use of their fastpaths after a grace period has elapsed. After this grace period has completed, all subsequent calls to rcu_sync_is_idle() will return true, which tells readers that they can once again use their fastpaths.”h]”hXAThis function is used by updaters who have completed, and can therefore now allow readers to make use of their fastpaths after a grace period has elapsed. After this grace period has completed, all subsequent calls to rcu_sync_is_idle() will return true, which tells readers that they can once again use their fastpaths.”…”�”}”(hjfÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K‘hjðØubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_sync_dtor (C function)”Œc.rcu_sync_dtor”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ)void rcu_sync_dtor (struct rcu_sync *rsp)”h]”j)�”}”(hŒ(void rcu_sync_dtor(struct rcu_sync *rsp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj•Ùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‘Ùh²hh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´Kªubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¤Ùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‘Ùh²hh³j£Ùh´Kªubj{)�”}”(hŒ rcu_sync_dtor”h]”j�)�”}”(hŒ rcu_sync_dtor”h]”hŒ rcu_sync_dtor”…”�”}”(hj¶Ùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj²Ùubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‘Ùh²hh³j£Ùh´Kªubjœ)�”}”(hŒ(struct rcu_sync *rsp)”h]”j¢)�”}”(hŒstruct rcu_sync *rsp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjÒÙh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjÎÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎÙubh)�”}”(hhh]”j�)�”}”(hŒrcu_sync”h]”hŒrcu_sync”…”�”}”(hjðÙh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjíÙubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jòÙŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j¸ÙsbŒc.rcu_sync_dtor”†”asbuh1hhjÎÙubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎÙubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÎÙubj�)�”}”(hŒrsp”h]”hŒrsp”…”�”}”(hj+Úh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎÙubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÊÙubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‘Ùh²hh³j£Ùh´Kªubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�Ùh²hh³j£Ùh´Kªubah}”(h]”jˆÙah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j£Ùh´KªhjŠÙh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒClean up an rcu_sync structure”h]”hŒClean up an rcu_sync structure”…”�”}”(hjUÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´KªhjRÚh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjŠÙh²hh³j£Ùh´Kªubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjmÚjæjmÚjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒY**Parameters** ``struct rcu_sync *rsp`` Pointer to rcu_sync structure to be cleaned up”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjwÚh]”hŒ Parameters”…”�”}”(hjyÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjuÚubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K®hjqÚubj )�”}”(hhh]”j)�”}”(hŒG``struct rcu_sync *rsp`` Pointer to rcu_sync structure to be cleaned up”h]”(j)�”}”(hŒ``struct rcu_sync *rsp``”h]”j)�”}”(hj–Úh]”hŒstruct rcu_sync *rsp”…”�”}”(hj˜Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj”Úubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K°hj�Úubj2)�”}”(hhh]”hÝ)�”}”(hŒ.Pointer to rcu_sync structure to be cleaned up”h]”hŒ.Pointer to rcu_sync structure to be cleaned up”…”�”}”(hj¯Úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒV/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:419: ./kernel/rcu/sync.c”h´K«hj¬Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj�Úubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j«Úh´K°hj�Úubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjqÚubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_tasks_percpu (C struct)”Œc.rcu_tasks_percpu”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒrcu_tasks_percpu”h]”j)�”}”(hŒstruct rcu_tasks_percpu”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjðÚh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjìÚh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþÚh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjìÚh²hh³jýÚh´Kubj{)�”}”(hŒrcu_tasks_percpu”h]”j�)�”}”(hjêÚh]”hŒrcu_tasks_percpu”…”�”}”(hjÛh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj Ûubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjìÚh²hh³jýÚh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjèÚh²hh³jýÚh´Kubah}”(h]”jãÚah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jýÚh´KhjåÚh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ?Per-CPU component of definition for a Tasks-RCU-like mechanism.”h]”hŒ?Per-CPU component of definition for a Tasks-RCU-like mechanism.”…”�”}”(hj2Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Khj/Ûh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjåÚh²hh³jýÚh´Kubeh}”(h]”h ]”(jߌstruct”eh"]”h$]”h&]”jäjßjåjJÛjæjJÛjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX**Definition**:: struct rcu_tasks_percpu { struct rcu_segcblist cblist; raw_spinlock_t lock; unsigned long rtp_jiffies; unsigned long rtp_n_lock_retries; struct timer_list lazy_timer; unsigned int urgent_gp; struct work_struct rtp_work; struct irq_work rtp_irq_work; struct rcu_head barrier_q_head; struct list_head rtp_blkd_tasks; struct list_head rtp_exit_list; int cpu; int index; struct rcu_tasks *rtpp; }; **Members** ``cblist`` Callback list. ``lock`` Lock protecting per-CPU callback list. ``rtp_jiffies`` Jiffies counter value for statistics. ``rtp_n_lock_retries`` Rough lock-contention statistic. ``lazy_timer`` Timer to unlazify callbacks. ``urgent_gp`` Number of additional non-lazy grace periods. ``rtp_work`` Work queue for invoking callbacks. ``rtp_irq_work`` IRQ work queue for deferred wakeups. ``barrier_q_head`` RCU callback for barrier operation. ``rtp_blkd_tasks`` List of tasks blocked as readers. ``rtp_exit_list`` List of tasks in the latter portion of do_exit(). ``cpu`` CPU number corresponding to this entry. ``index`` Index of this CPU in rtpcp_array of the rcu_tasks structure. ``rtpp`` Pointer to the rcu_tasks structure.”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jõ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjVÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjRÛubhŒ:”…”�”}”(hjRÛh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KhjNÛubj‘H)�”}”(hXÁstruct rcu_tasks_percpu { struct rcu_segcblist cblist; raw_spinlock_t lock; unsigned long rtp_jiffies; unsigned long rtp_n_lock_retries; struct timer_list lazy_timer; unsigned int urgent_gp; struct work_struct rtp_work; struct irq_work rtp_irq_work; struct rcu_head barrier_q_head; struct list_head rtp_blkd_tasks; struct list_head rtp_exit_list; int cpu; int index; struct rcu_tasks *rtpp; };”h]”hXÁstruct rcu_tasks_percpu { struct rcu_segcblist cblist; raw_spinlock_t lock; unsigned long rtp_jiffies; unsigned long rtp_n_lock_retries; struct timer_list lazy_timer; unsigned int urgent_gp; struct work_struct rtp_work; struct irq_work rtp_irq_work; struct rcu_head barrier_q_head; struct list_head rtp_blkd_tasks; struct list_head rtp_exit_list; int cpu; int index; struct rcu_tasks *rtpp; };”…”�”}”hjoÛsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KhjNÛubhÝ)�”}”(hŒ **Members**”h]”jõ)�”}”(hj€Ûh]”hŒMembers”…”�”}”(hj‚Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj~Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K/hjNÛubj )�”}”(hhh]”(j)�”}”(hŒ``cblist`` Callback list. ”h]”(j)�”}”(hŒ ``cblist``”h]”j)�”}”(hjŸÛh]”hŒcblist”…”�”}”(hj¡Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Khj™Ûubj2)�”}”(hhh]”hÝ)�”}”(hŒCallback list.”h]”hŒCallback list.”…”�”}”(hj¸Ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j´Ûh´KhjµÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj™Ûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j´Ûh´Khj–Ûubj)�”}”(hŒ0``lock`` Lock protecting per-CPU callback list. ”h]”(j)�”}”(hŒ``lock``”h]”j)�”}”(hjØÛh]”hŒlock”…”�”}”(hjÚÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÖÛubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KhjÒÛubj2)�”}”(hhh]”hÝ)�”}”(hŒ&Lock protecting per-CPU callback list.”h]”hŒ&Lock protecting per-CPU callback list.”…”�”}”(hjñÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jíÛh´KhjîÛubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÒÛubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jíÛh´Khj–Ûubj)�”}”(hŒ6``rtp_jiffies`` Jiffies counter value for statistics. ”h]”(j)�”}”(hŒ``rtp_jiffies``”h]”j)�”}”(hjÜh]”hŒ rtp_jiffies”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Khj Üubj2)�”}”(hhh]”hÝ)�”}”(hŒ%Jiffies counter value for statistics.”h]”hŒ%Jiffies counter value for statistics.”…”�”}”(hj*Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j&Üh´Khj'Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j&Üh´Khj–Ûubj)�”}”(hŒ8``rtp_n_lock_retries`` Rough lock-contention statistic. ”h]”(j)�”}”(hŒ``rtp_n_lock_retries``”h]”j)�”}”(hjJÜh]”hŒrtp_n_lock_retries”…”�”}”(hjLÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KhjDÜubj2)�”}”(hhh]”hÝ)�”}”(hŒ Rough lock-contention statistic.”h]”hŒ Rough lock-contention statistic.”…”�”}”(hjcÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j_Üh´Khj`Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjDÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j_Üh´Khj–Ûubj)�”}”(hŒ,``lazy_timer`` Timer to unlazify callbacks. ”h]”(j)�”}”(hŒ``lazy_timer``”h]”j)�”}”(hjƒÜh]”hŒ lazy_timer”…”�”}”(hj…Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj�Üubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Khj}Üubj2)�”}”(hhh]”hÝ)�”}”(hŒTimer to unlazify callbacks.”h]”hŒTimer to unlazify callbacks.”…”�”}”(hjœÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j˜Üh´Khj™Üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj}Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j˜Üh´Khj–Ûubj)�”}”(hŒ;``urgent_gp`` Number of additional non-lazy grace periods. ”h]”(j)�”}”(hŒ ``urgent_gp``”h]”j)�”}”(hj¼Üh]”hŒ urgent_gp”…”�”}”(hj¾Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjºÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Khj¶Üubj2)�”}”(hhh]”hÝ)�”}”(hŒ,Number of additional non-lazy grace periods.”h]”hŒ,Number of additional non-lazy grace periods.”…”�”}”(hjÕÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÑÜh´KhjÒÜubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¶Üubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÑÜh´Khj–Ûubj)�”}”(hŒ0``rtp_work`` Work queue for invoking callbacks. ”h]”(j)�”}”(hŒ ``rtp_work``”h]”j)�”}”(hjõÜh]”hŒrtp_work”…”�”}”(hj÷Üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjóÜubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K hjïÜubj2)�”}”(hhh]”hÝ)�”}”(hŒ"Work queue for invoking callbacks.”h]”hŒ"Work queue for invoking callbacks.”…”�”}”(hjÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j Ýh´K hj Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjïÜubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j Ýh´K hj–Ûubj)�”}”(hŒ6``rtp_irq_work`` IRQ work queue for deferred wakeups. ”h]”(j)�”}”(hŒ``rtp_irq_work``”h]”j)�”}”(hj.Ýh]”hŒ rtp_irq_work”…”�”}”(hj0Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K!hj(Ýubj2)�”}”(hhh]”hÝ)�”}”(hŒ$IRQ work queue for deferred wakeups.”h]”hŒ$IRQ work queue for deferred wakeups.”…”�”}”(hjGÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jCÝh´K!hjDÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj(Ýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jCÝh´K!hj–Ûubj)�”}”(hŒ7``barrier_q_head`` RCU callback for barrier operation. ”h]”(j)�”}”(hŒ``barrier_q_head``”h]”j)�”}”(hjgÝh]”hŒbarrier_q_head”…”�”}”(hjiÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K"hjaÝubj2)�”}”(hhh]”hÝ)�”}”(hŒ#RCU callback for barrier operation.”h]”hŒ#RCU callback for barrier operation.”…”�”}”(hj€Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|Ýh´K"hj}Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjaÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|Ýh´K"hj–Ûubj)�”}”(hŒ5``rtp_blkd_tasks`` List of tasks blocked as readers. ”h]”(j)�”}”(hŒ``rtp_blkd_tasks``”h]”j)�”}”(hj Ýh]”hŒrtp_blkd_tasks”…”�”}”(hj¢Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžÝubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K#hjšÝubj2)�”}”(hhh]”hÝ)�”}”(hŒ!List of tasks blocked as readers.”h]”hŒ!List of tasks blocked as readers.”…”�”}”(hj¹Ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµÝh´K#hj¶Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjšÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµÝh´K#hj–Ûubj)�”}”(hŒD``rtp_exit_list`` List of tasks in the latter portion of do_exit(). ”h]”(j)�”}”(hŒ``rtp_exit_list``”h]”j)�”}”(hjÙÝh]”hŒ rtp_exit_list”…”�”}”(hjÛÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×Ýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K$hjÓÝubj2)�”}”(hhh]”hÝ)�”}”(hŒ1List of tasks in the latter portion of do_exit().”h]”hŒ1List of tasks in the latter portion of do_exit().”…”�”}”(hjòÝh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jîÝh´K$hjïÝubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓÝubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîÝh´K$hj–Ûubj)�”}”(hŒ0``cpu`` CPU number corresponding to this entry. ”h]”(j)�”}”(hŒ``cpu``”h]”j)�”}”(hjÞh]”hŒcpu”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K%hj Þubj2)�”}”(hhh]”hÝ)�”}”(hŒ'CPU number corresponding to this entry.”h]”hŒ'CPU number corresponding to this entry.”…”�”}”(hj+Þh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j'Þh´K%hj(Þubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj Þubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'Þh´K%hj–Ûubj)�”}”(hŒG``index`` Index of this CPU in rtpcp_array of the rcu_tasks structure. ”h]”(j)�”}”(hŒ ``index``”h]”j)�”}”(hjKÞh]”hŒindex”…”�”}”(hjMÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K&hjEÞubj2)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hjÚÞh²hh³jëÞh´K-ubj{)�”}”(hŒ rcu_tasks”h]”j�)�”}”(hjØÞh]”hŒ rcu_tasks”…”�”}”(hjþÞh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúÞubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÚÞh²hh³jëÞh´K-ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÖÞh²hh³jëÞh´K-ubah}”(h]”jÑÞah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jëÞh´K-hjÓÞh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ*Definition for a Tasks-RCU-like mechanism.”h]”hŒ*Definition for a Tasks-RCU-like mechanism.”…”�”}”(hj ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K:hjßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÓÞh²hh³jëÞh´K-ubeh}”(h]”h ]”(jߌstruct”eh"]”h$]”h&]”jäjßjåj8ßjæj8ßjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX= **Definition**:: struct rcu_tasks { struct rcuwait cbs_wait; raw_spinlock_t cbs_gbl_lock; struct mutex tasks_gp_mutex; int gp_state; int gp_sleep; int init_fract; unsigned long gp_jiffies; unsigned long gp_start; unsigned long tasks_gp_seq; unsigned long n_ipis; struct task_struct *kthread_ptr; unsigned long lazy_jiffies; rcu_tasks_gp_func_t gp_func; pregp_func_t pregp_func; pertask_func_t pertask_func; postscan_func_t postscan_func; holdouts_func_t holdouts_func; postgp_func_t postgp_func; call_rcu_func_t call_func; unsigned int wait_state; struct rcu_tasks_percpu __percpu *rtpcpu; struct rcu_tasks_percpu **rtpcp_array; int percpu_enqueue_shift; int percpu_enqueue_lim; int percpu_dequeue_lim; unsigned long percpu_dequeue_gpseq; struct mutex barrier_q_mutex; atomic_t barrier_q_count; struct completion barrier_q_completion; unsigned long barrier_q_seq; unsigned long barrier_q_start; char *name; char *kname; }; **Members** ``cbs_wait`` RCU wait allowing a new callback to get kthread's attention. ``cbs_gbl_lock`` Lock protecting callback list. ``tasks_gp_mutex`` Mutex protecting grace period, needed during mid-boot dead zone. ``gp_state`` Grace period's most recent state transition (debugging). ``gp_sleep`` Per-grace-period sleep to prevent CPU-bound looping. ``init_fract`` Initial backoff sleep interval. ``gp_jiffies`` Time of last **gp_state** transition. ``gp_start`` Most recent grace-period start in jiffies. ``tasks_gp_seq`` Number of grace periods completed since boot in upper bits. ``n_ipis`` Number of IPIs sent to encourage grace periods to end. ``kthread_ptr`` This flavor's grace-period/callback-invocation kthread. ``lazy_jiffies`` Number of jiffies to allow callbacks to be lazy. ``gp_func`` This flavor's grace-period-wait function. ``pregp_func`` This flavor's pre-grace-period function (optional). ``pertask_func`` This flavor's per-task scan function (optional). ``postscan_func`` This flavor's post-task scan function (optional). ``holdouts_func`` This flavor's holdout-list scan function (optional). ``postgp_func`` This flavor's post-grace-period function (optional). ``call_func`` This flavor's call_rcu()-equivalent function. ``wait_state`` Task state for synchronous grace-period waits (default TASK_UNINTERRUPTIBLE). ``rtpcpu`` This flavor's rcu_tasks_percpu structure. ``rtpcp_array`` Array of pointers to rcu_tasks_percpu structure of CPUs in cpu_possible_mask. ``percpu_enqueue_shift`` Shift down CPU ID this much when enqueuing callbacks. ``percpu_enqueue_lim`` Number of per-CPU callback queues in use for enqueuing. ``percpu_dequeue_lim`` Number of per-CPU callback queues in use for dequeuing. ``percpu_dequeue_gpseq`` RCU grace-period number to propagate enqueue limit to dequeuers. ``barrier_q_mutex`` Serialize barrier operations. ``barrier_q_count`` Number of queues being waited on. ``barrier_q_completion`` Barrier wait/wakeup mechanism. ``barrier_q_seq`` Sequence number for barrier operations. ``barrier_q_start`` Most recent barrier start in jiffies. ``name`` This flavor's textual name. ``kname`` This flavor's kthread name.”h]”(hÝ)�”}”(hŒ**Definition**::”h]”(jõ)�”}”(hŒ**Definition**”h]”hŒ Definition”…”�”}”(hjDßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj@ßubhŒ:”…”�”}”(hj@ßh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K>hj<ßubj‘H)�”}”(hX struct rcu_tasks { struct rcuwait cbs_wait; raw_spinlock_t cbs_gbl_lock; struct mutex tasks_gp_mutex; int gp_state; int gp_sleep; int init_fract; unsigned long gp_jiffies; unsigned long gp_start; unsigned long tasks_gp_seq; unsigned long n_ipis; struct task_struct *kthread_ptr; unsigned long lazy_jiffies; rcu_tasks_gp_func_t gp_func; pregp_func_t pregp_func; pertask_func_t pertask_func; postscan_func_t postscan_func; holdouts_func_t holdouts_func; postgp_func_t postgp_func; call_rcu_func_t call_func; unsigned int wait_state; struct rcu_tasks_percpu __percpu *rtpcpu; struct rcu_tasks_percpu **rtpcp_array; int percpu_enqueue_shift; int percpu_enqueue_lim; int percpu_dequeue_lim; unsigned long percpu_dequeue_gpseq; struct mutex barrier_q_mutex; atomic_t barrier_q_count; struct completion barrier_q_completion; unsigned long barrier_q_seq; unsigned long barrier_q_start; char *name; char *kname; };”h]”hX struct rcu_tasks { struct rcuwait cbs_wait; raw_spinlock_t cbs_gbl_lock; struct mutex tasks_gp_mutex; int gp_state; int gp_sleep; int init_fract; unsigned long gp_jiffies; unsigned long gp_start; unsigned long tasks_gp_seq; unsigned long n_ipis; struct task_struct *kthread_ptr; unsigned long lazy_jiffies; rcu_tasks_gp_func_t gp_func; pregp_func_t pregp_func; pertask_func_t pertask_func; postscan_func_t postscan_func; holdouts_func_t holdouts_func; postgp_func_t postgp_func; call_rcu_func_t call_func; unsigned int wait_state; struct rcu_tasks_percpu __percpu *rtpcpu; struct rcu_tasks_percpu **rtpcp_array; int percpu_enqueue_shift; int percpu_enqueue_lim; int percpu_dequeue_lim; unsigned long percpu_dequeue_gpseq; struct mutex barrier_q_mutex; atomic_t barrier_q_count; struct completion barrier_q_completion; unsigned long barrier_q_seq; unsigned long barrier_q_start; char *name; char *kname; };”…”�”}”hj]ßsbah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j�Hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K@hj<ßubhÝ)�”}”(hŒ **Members**”h]”jõ)�”}”(hjnßh]”hŒMembers”…”�”}”(hjpßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjlßubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Kdhj<ßubj )�”}”(hhh]”(j)�”}”(hŒJ``cbs_wait`` RCU wait allowing a new callback to get kthread's attention. ”h]”(j)�”}”(hŒ ``cbs_wait``”h]”j)�”}”(hj�ßh]”hŒcbs_wait”…”�”}”(hj�ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‹ßubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KRCU wait allowing a new callback to get kthread’s attention.”…”�”}”(hj¦ßh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¢ßh´Khjùßubj2)�”}”(hhh]”hÝ)�”}”(hŒ@Mutex protecting grace period, needed during mid-boot dead zone.”h]”hŒ@Mutex protecting grace period, needed during mid-boot dead zone.”…”�”}”(hjàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jàh´K>hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjùßubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jàh´K>hj„ßubj)�”}”(hŒF``gp_state`` Grace period's most recent state transition (debugging). ”h]”(j)�”}”(hŒ ``gp_state``”h]”j)�”}”(hj8àh]”hŒgp_state”…”�”}”(hj:àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj6àubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K@hj2àubj2)�”}”(hhh]”hÝ)�”}”(hŒ8Grace period's most recent state transition (debugging).”h]”hŒ:Grace period’s most recent state transition (debugging).”…”�”}”(hjQàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jMàh´K@hjNàubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj2àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jMàh´K@hj„ßubj)�”}”(hŒB``gp_sleep`` Per-grace-period sleep to prevent CPU-bound looping. ”h]”(j)�”}”(hŒ ``gp_sleep``”h]”j)�”}”(hjqàh]”hŒgp_sleep”…”�”}”(hjsàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjoàubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KAhjkàubj2)�”}”(hhh]”hÝ)�”}”(hŒ4Per-grace-period sleep to prevent CPU-bound looping.”h]”hŒ4Per-grace-period sleep to prevent CPU-bound looping.”…”�”}”(hjŠàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j†àh´KAhj‡àubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjkàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j†àh´KAhj„ßubj)�”}”(hŒ/``init_fract`` Initial backoff sleep interval. ”h]”(j)�”}”(hŒ``init_fract``”h]”j)�”}”(hjªàh]”hŒ init_fract”…”�”}”(hj¬àh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¨àubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KBhj¤àubj2)�”}”(hhh]”hÝ)�”}”(hŒInitial backoff sleep interval.”h]”hŒInitial backoff sleep interval.”…”�”}”(hjÃàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¿àh´KBhjÀàubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¤àubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¿àh´KBhj„ßubj)�”}”(hŒ5``gp_jiffies`` Time of last **gp_state** transition. ”h]”(j)�”}”(hŒ``gp_jiffies``”h]”j)�”}”(hjãàh]”hŒ gp_jiffies”…”�”}”(hjåàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjáàubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KChjÝàubj2)�”}”(hhh]”hÝ)�”}”(hŒ%Time of last **gp_state** transition.”h]”(hŒ Time of last ”…”�”}”(hjüàh²hh³Nh´Nubjõ)�”}”(hŒ **gp_state**”h]”hŒgp_state”…”�”}”(hjáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjüàubhŒ transition.”…”�”}”(hjüàh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jøàh´KChjùàubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÝàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jøàh´KChj„ßubj)�”}”(hŒ8``gp_start`` Most recent grace-period start in jiffies. ”h]”(j)�”}”(hŒ ``gp_start``”h]”j)�”}”(hj.áh]”hŒgp_start”…”�”}”(hj0áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj,áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KDhj(áubj2)�”}”(hhh]”hÝ)�”}”(hŒ*Most recent grace-period start in jiffies.”h]”hŒ*Most recent grace-period start in jiffies.”…”�”}”(hjGáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jCáh´KDhjDáubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj(áubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jCáh´KDhj„ßubj)�”}”(hŒM``tasks_gp_seq`` Number of grace periods completed since boot in upper bits. ”h]”(j)�”}”(hŒ``tasks_gp_seq``”h]”j)�”}”(hjgáh]”hŒ tasks_gp_seq”…”�”}”(hjiáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjeáubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KEhjaáubj2)�”}”(hhh]”hÝ)�”}”(hŒ;Number of grace periods completed since boot in upper bits.”h]”hŒ;Number of grace periods completed since boot in upper bits.”…”�”}”(hj€áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j|áh´KEhj}áubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjaáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j|áh´KEhj„ßubj)�”}”(hŒB``n_ipis`` Number of IPIs sent to encourage grace periods to end. ”h]”(j)�”}”(hŒ ``n_ipis``”h]”j)�”}”(hj áh]”hŒn_ipis”…”�”}”(hj¢áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjžáubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KFhjšáubj2)�”}”(hhh]”hÝ)�”}”(hŒ6Number of IPIs sent to encourage grace periods to end.”h]”hŒ6Number of IPIs sent to encourage grace periods to end.”…”�”}”(hj¹áh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jµáh´KFhj¶áubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjšáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jµáh´KFhj„ßubj)�”}”(hŒH``kthread_ptr`` This flavor's grace-period/callback-invocation kthread. ”h]”(j)�”}”(hŒ``kthread_ptr``”h]”j)�”}”(hjÙáh]”hŒ kthread_ptr”…”�”}”(hjÛáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj×áubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KGhjÓáubj2)�”}”(hhh]”hÝ)�”}”(hŒ7This flavor's grace-period/callback-invocation kthread.”h]”hŒ9This flavor’s grace-period/callback-invocation kthread.”…”�”}”(hjòáh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jîáh´KGhjïáubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÓáubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jîáh´KGhj„ßubj)�”}”(hŒB``lazy_jiffies`` Number of jiffies to allow callbacks to be lazy. ”h]”(j)�”}”(hŒ``lazy_jiffies``”h]”j)�”}”(hjâh]”hŒ lazy_jiffies”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjâubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KHhj âubj2)�”}”(hhh]”hÝ)�”}”(hŒ0Number of jiffies to allow callbacks to be lazy.”h]”hŒ0Number of jiffies to allow callbacks to be lazy.”…”�”}”(hj+âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j'âh´KHhj(âubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj âubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j'âh´KHhj„ßubj)�”}”(hŒ6``gp_func`` This flavor's grace-period-wait function. ”h]”(j)�”}”(hŒ ``gp_func``”h]”j)�”}”(hjKâh]”hŒgp_func”…”�”}”(hjMâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjIâubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K?hjEâubj2)�”}”(hhh]”hÝ)�”}”(hŒ)This flavor's grace-period-wait function.”h]”hŒ+This flavor’s grace-period-wait function.”…”�”}”(hjdâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j`âh´K?hjaâubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjEâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j`âh´K?hj„ßubj)�”}”(hŒC``pregp_func`` This flavor's pre-grace-period function (optional). ”h]”(j)�”}”(hŒ``pregp_func``”h]”j)�”}”(hj„âh]”hŒ pregp_func”…”�”}”(hj†âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚âubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KIhj~âubj2)�”}”(hhh]”hÝ)�”}”(hŒ3This flavor's pre-grace-period function (optional).”h]”hŒ5This flavor’s pre-grace-period function (optional).”…”�”}”(hj�âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™âh´KIhjšâubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~âubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™âh´KIhj„ßubj)�”}”(hŒB``pertask_func`` This flavor's per-task scan function (optional). ”h]”(j)�”}”(hŒ``pertask_func``”h]”j)�”}”(hj½âh]”hŒ pertask_func”…”�”}”(hj¿âh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj»âubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KJhj·âubj2)�”}”(hhh]”hÝ)�”}”(hŒ0This flavor's per-task scan function (optional).”h]”hŒ2This flavor’s per-task scan function (optional).”…”�”}”(hjÖâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÒâh´KJhjÓâubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj·âubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÒâh´KJhj„ßubj)�”}”(hŒD``postscan_func`` This flavor's post-task scan function (optional). ”h]”(j)�”}”(hŒ``postscan_func``”h]”j)�”}”(hjöâh]”hŒ postscan_func”…”�”}”(hjøâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjôâubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KKhjðâubj2)�”}”(hhh]”hÝ)�”}”(hŒ1This flavor's post-task scan function (optional).”h]”hŒ3This flavor’s post-task scan function (optional).”…”�”}”(hjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j ãh´KKhj ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjðâubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j ãh´KKhj„ßubj)�”}”(hŒG``holdouts_func`` This flavor's holdout-list scan function (optional). ”h]”(j)�”}”(hŒ``holdouts_func``”h]”j)�”}”(hj/ãh]”hŒ holdouts_func”…”�”}”(hj1ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj-ãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KLhj)ãubj2)�”}”(hhh]”hÝ)�”}”(hŒ4This flavor's holdout-list scan function (optional).”h]”hŒ6This flavor’s holdout-list scan function (optional).”…”�”}”(hjHãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jDãh´KLhjEãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj)ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jDãh´KLhj„ßubj)�”}”(hŒE``postgp_func`` This flavor's post-grace-period function (optional). ”h]”(j)�”}”(hŒ``postgp_func``”h]”j)�”}”(hjhãh]”hŒ postgp_func”…”�”}”(hjjãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjfãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KMhjbãubj2)�”}”(hhh]”hÝ)�”}”(hŒ4This flavor's post-grace-period function (optional).”h]”hŒ6This flavor’s post-grace-period function (optional).”…”�”}”(hj�ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j}ãh´KMhj~ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjbãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j}ãh´KMhj„ßubj)�”}”(hŒ<``call_func`` This flavor's call_rcu()-equivalent function. ”h]”(j)�”}”(hŒ ``call_func``”h]”j)�”}”(hj¡ãh]”hŒ call_func”…”�”}”(hj£ãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjŸãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KNhj›ãubj2)�”}”(hhh]”hÝ)�”}”(hŒ-This flavor's call_rcu()-equivalent function.”h]”hŒ/This flavor’s call_rcu()-equivalent function.”…”�”}”(hjºãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j¶ãh´KNhj·ãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj›ãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j¶ãh´KNhj„ßubj)�”}”(hŒ]``wait_state`` Task state for synchronous grace-period waits (default TASK_UNINTERRUPTIBLE). ”h]”(j)�”}”(hŒ``wait_state``”h]”j)�”}”(hjÚãh]”hŒ wait_state”…”�”}”(hjÜãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjØãubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KOhjÔãubj2)�”}”(hhh]”hÝ)�”}”(hŒMTask state for synchronous grace-period waits (default TASK_UNINTERRUPTIBLE).”h]”hŒMTask state for synchronous grace-period waits (default TASK_UNINTERRUPTIBLE).”…”�”}”(hjóãh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jïãh´KOhjðãubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÔãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jïãh´KOhj„ßubj)�”}”(hŒ5``rtpcpu`` This flavor's rcu_tasks_percpu structure. ”h]”(j)�”}”(hŒ ``rtpcpu``”h]”j)�”}”(hjäh]”hŒrtpcpu”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KPhj äubj2)�”}”(hhh]”hÝ)�”}”(hŒ)This flavor's rcu_tasks_percpu structure.”h]”hŒ+This flavor’s rcu_tasks_percpu structure.”…”�”}”(hj,äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j(äh´KPhj)äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj äubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j(äh´KPhj„ßubj)�”}”(hŒ^``rtpcp_array`` Array of pointers to rcu_tasks_percpu structure of CPUs in cpu_possible_mask. ”h]”(j)�”}”(hŒ``rtpcp_array``”h]”j)�”}”(hjLäh]”hŒ rtpcp_array”…”�”}”(hjNäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjJäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KQhjFäubj2)�”}”(hhh]”hÝ)�”}”(hŒMArray of pointers to rcu_tasks_percpu structure of CPUs in cpu_possible_mask.”h]”hŒMArray of pointers to rcu_tasks_percpu structure of CPUs in cpu_possible_mask.”…”�”}”(hjeäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jaäh´KQhjbäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjFäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jaäh´KQhj„ßubj)�”}”(hŒO``percpu_enqueue_shift`` Shift down CPU ID this much when enqueuing callbacks. ”h]”(j)�”}”(hŒ``percpu_enqueue_shift``”h]”j)�”}”(hj…äh]”hŒpercpu_enqueue_shift”…”�”}”(hj‡äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjƒäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KRhjäubj2)�”}”(hhh]”hÝ)�”}”(hŒ5Shift down CPU ID this much when enqueuing callbacks.”h]”hŒ5Shift down CPU ID this much when enqueuing callbacks.”…”�”}”(hjžäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jšäh´KRhj›äubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jšäh´KRhj„ßubj)�”}”(hŒO``percpu_enqueue_lim`` Number of per-CPU callback queues in use for enqueuing. ”h]”(j)�”}”(hŒ``percpu_enqueue_lim``”h]”j)�”}”(hj¾äh]”hŒpercpu_enqueue_lim”…”�”}”(hjÀäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼äubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KShj¸äubj2)�”}”(hhh]”hÝ)�”}”(hŒ7Number of per-CPU callback queues in use for enqueuing.”h]”hŒ7Number of per-CPU callback queues in use for enqueuing.”…”�”}”(hj×äh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÓäh´KShjÔäubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸äubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓäh´KShj„ßubj)�”}”(hŒO``percpu_dequeue_lim`` Number of per-CPU callback queues in use for dequeuing. ”h]”(j)�”}”(hŒ``percpu_dequeue_lim``”h]”j)�”}”(hj÷äh]”hŒpercpu_dequeue_lim”…”�”}”(hjùäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjõäubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KThjñäubj2)�”}”(hhh]”hÝ)�”}”(hŒ7Number of per-CPU callback queues in use for dequeuing.”h]”hŒ7Number of per-CPU callback queues in use for dequeuing.”…”�”}”(hjåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j åh´KThj åubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjñäubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j åh´KThj„ßubj)�”}”(hŒZ``percpu_dequeue_gpseq`` RCU grace-period number to propagate enqueue limit to dequeuers. ”h]”(j)�”}”(hŒ``percpu_dequeue_gpseq``”h]”j)�”}”(hj0åh]”hŒpercpu_dequeue_gpseq”…”�”}”(hj2åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj.åubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KUhj*åubj2)�”}”(hhh]”hÝ)�”}”(hŒ@RCU grace-period number to propagate enqueue limit to dequeuers.”h]”hŒ@RCU grace-period number to propagate enqueue limit to dequeuers.”…”�”}”(hjIåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jEåh´KUhjFåubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj*åubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jEåh´KUhj„ßubj)�”}”(hŒ2``barrier_q_mutex`` Serialize barrier operations. ”h]”(j)�”}”(hŒ``barrier_q_mutex``”h]”j)�”}”(hjiåh]”hŒbarrier_q_mutex”…”�”}”(hjkåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjgåubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KVhjcåubj2)�”}”(hhh]”hÝ)�”}”(hŒSerialize barrier operations.”h]”hŒSerialize barrier operations.”…”�”}”(hj‚åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j~åh´KVhjåubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjcåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j~åh´KVhj„ßubj)�”}”(hŒ6``barrier_q_count`` Number of queues being waited on. ”h]”(j)�”}”(hŒ``barrier_q_count``”h]”j)�”}”(hj¢åh]”hŒbarrier_q_count”…”�”}”(hj¤åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj åubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KWhjœåubj2)�”}”(hhh]”hÝ)�”}”(hŒ!Number of queues being waited on.”h]”hŒ!Number of queues being waited on.”…”�”}”(hj»åh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j·åh´KWhj¸åubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjœåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j·åh´KWhj„ßubj)�”}”(hŒ8``barrier_q_completion`` Barrier wait/wakeup mechanism. ”h]”(j)�”}”(hŒ``barrier_q_completion``”h]”j)�”}”(hjÛåh]”hŒbarrier_q_completion”…”�”}”(hjÝåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÙåubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KXhjÕåubj2)�”}”(hhh]”hÝ)�”}”(hŒBarrier wait/wakeup mechanism.”h]”hŒBarrier wait/wakeup mechanism.”…”�”}”(hjôåh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jðåh´KXhjñåubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÕåubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jðåh´KXhj„ßubj)�”}”(hŒ:``barrier_q_seq`` Sequence number for barrier operations. ”h]”(j)�”}”(hŒ``barrier_q_seq``”h]”j)�”}”(hjæh]”hŒ barrier_q_seq”…”�”}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KYhjæubj2)�”}”(hhh]”hÝ)�”}”(hŒ'Sequence number for barrier operations.”h]”hŒ'Sequence number for barrier operations.”…”�”}”(hj-æh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j)æh´KYhj*æubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)æh´KYhj„ßubj)�”}”(hŒ:``barrier_q_start`` Most recent barrier start in jiffies. ”h]”(j)�”}”(hŒ``barrier_q_start``”h]”j)�”}”(hjMæh]”hŒbarrier_q_start”…”�”}”(hjOæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjKæubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KZhjGæubj2)�”}”(hhh]”hÝ)�”}”(hŒ%Most recent barrier start in jiffies.”h]”hŒ%Most recent barrier start in jiffies.”…”�”}”(hjfæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jbæh´KZhjcæubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjGæubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jbæh´KZhj„ßubj)�”}”(hŒ%``name`` This flavor's textual name. ”h]”(j)�”}”(hŒ``name``”h]”j)�”}”(hj†æh]”hŒname”…”�”}”(hjˆæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„æubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K[hj€æubj2)�”}”(hhh]”hÝ)�”}”(hŒThis flavor's textual name.”h]”hŒThis flavor’s textual name.”…”�”}”(hjŸæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›æh´K[hjœæubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€æubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›æh´K[hj„ßubj)�”}”(hŒ%``kname`` This flavor's kthread name.”h]”(j)�”}”(hŒ ``kname``”h]”j)�”}”(hj¿æh]”hŒkname”…”�”}”(hjÁæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj½æubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K[hj¹æubj2)�”}”(hhh]”hÝ)�”}”(hŒThis flavor's kthread name.”h]”hŒThis flavor’s kthread name.”…”�”}”(hjØæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´K\hjÕæubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¹æubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÔæh´K[hj„ßubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj<ßubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œcall_rcu_tasks (C function)”Œc.call_rcu_tasks”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ?void call_rcu_tasks (struct rcu_head *rhp, rcu_callback_t func)”h]”j)�”}”(hŒ>void call_rcu_tasks(struct rcu_head *rhp, rcu_callback_t func)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjçh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjçh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M™ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj(çh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjçh²hh³j'çh´M™ubj{)�”}”(hŒcall_rcu_tasks”h]”j�)�”}”(hŒcall_rcu_tasks”h]”hŒcall_rcu_tasks”…”�”}”(hj:çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj6çubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjçh²hh³j'çh´M™ubjœ)�”}”(hŒ+(struct rcu_head *rhp, rcu_callback_t func)”h]”(j¢)�”}”(hŒstruct rcu_head *rhp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjVçh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjRçubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjcçh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRçubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hjtçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjqçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jvçŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j<çsbŒc.call_rcu_tasks”†”asbuh1hhjRçubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”çh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjRçubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¢çh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjRçubj�)�”}”(hŒrhp”h]”hŒrhp”…”�”}”(hj¯çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjRçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjNçubj¢)�”}”(hŒrcu_callback_t func”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcu_callback_t”h]”hŒrcu_callback_t”…”�”}”(hjËçh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÈçubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jÍçŒmodname”NŒ classname”Nj] j` )�”}”jc ]”j�çŒc.call_rcu_tasks”†”asbuh1hhjÄçubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjéçh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÄçubj�)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hj÷çh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÄçubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjNçubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjçh²hh³j'çh´M™ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjçh²hh³j'çh´M™ubah}”(h]”j çah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j'çh´M™hjçh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ3Queue an RCU for invocation task-based grace period”h]”hŒ3Queue an RCU for invocation task-based grace period”…”�”}”(hj!èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M™hjèh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjçh²hh³j'çh´M™ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj9èjæj9èjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX–**Parameters** ``struct rcu_head *rhp`` structure to be used for queueing the RCU updates. ``rcu_callback_t func`` actual callback function to be invoked after the grace period **Description** The callback function will be invoked some time after a full grace period elapses, in other words after all currently executing rcu-tasks read-side critical sections have completed. call_rcu_tasks() assumes that the read-side critical sections end at a voluntary context switch (not a preemption!), cond_resched_tasks_rcu_qs(), entry into idle, or transition to usermode execution. As such, there are no read-side primitives analogous to rcu_read_lock() and rcu_read_unlock() because this primitive is intended to determine that all tasks have passed through a safe state, not so much for data-structure synchronization. See the description of call_rcu() for more detailed information on memory ordering guarantees.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjCèh]”hŒ Parameters”…”�”}”(hjEèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjAèubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M�hj=èubj )�”}”(hhh]”(j)�”}”(hŒL``struct rcu_head *rhp`` structure to be used for queueing the RCU updates. ”h]”(j)�”}”(hŒ``struct rcu_head *rhp``”h]”j)�”}”(hjbèh]”hŒstruct rcu_head *rhp”…”�”}”(hjdèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`èubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Mšhj\èubj2)�”}”(hhh]”hÝ)�”}”(hŒ2structure to be used for queueing the RCU updates.”h]”hŒ2structure to be used for queueing the RCU updates.”…”�”}”(hj{èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jwèh´Mšhjxèubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj\èubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jwèh´MšhjYèubj)�”}”(hŒV``rcu_callback_t func`` actual callback function to be invoked after the grace period ”h]”(j)�”}”(hŒ``rcu_callback_t func``”h]”j)�”}”(hj›èh]”hŒrcu_callback_t func”…”�”}”(hj�èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj™èubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M›hj•èubj2)�”}”(hhh]”hÝ)�”}”(hŒ=actual callback function to be invoked after the grace period”h]”hŒ=actual callback function to be invoked after the grace period”…”�”}”(hj´èh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j°èh´M›hj±èubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj•èubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j°èh´M›hjYèubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj=èubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÖèh]”hŒ Description”…”�”}”(hjØèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÔèubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M�hj=èubhÝ)�”}”(hXmThe callback function will be invoked some time after a full grace period elapses, in other words after all currently executing rcu-tasks read-side critical sections have completed. call_rcu_tasks() assumes that the read-side critical sections end at a voluntary context switch (not a preemption!), cond_resched_tasks_rcu_qs(), entry into idle, or transition to usermode execution. As such, there are no read-side primitives analogous to rcu_read_lock() and rcu_read_unlock() because this primitive is intended to determine that all tasks have passed through a safe state, not so much for data-structure synchronization.”h]”hXmThe callback function will be invoked some time after a full grace period elapses, in other words after all currently executing rcu-tasks read-side critical sections have completed. call_rcu_tasks() assumes that the read-side critical sections end at a voluntary context switch (not a preemption!), cond_resched_tasks_rcu_qs(), entry into idle, or transition to usermode execution. As such, there are no read-side primitives analogous to rcu_read_lock() and rcu_read_unlock() because this primitive is intended to determine that all tasks have passed through a safe state, not so much for data-structure synchronization.”…”�”}”(hjìèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Mœhj=èubhÝ)�”}”(hŒ^See the description of call_rcu() for more detailed information on memory ordering guarantees.”h]”hŒ^See the description of call_rcu() for more detailed information on memory ordering guarantees.”…”�”}”(hjûèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M¦hj=èubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"synchronize_rcu_tasks (C function)”Œc.synchronize_rcu_tasks”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ!void synchronize_rcu_tasks (void)”h]”j)�”}”(hŒ void synchronize_rcu_tasks(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj*éh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj&éh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M±ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj9éh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj&éh²hh³j8éh´M±ubj{)�”}”(hŒsynchronize_rcu_tasks”h]”j�)�”}”(hŒsynchronize_rcu_tasks”h]”hŒsynchronize_rcu_tasks”…”�”}”(hjKéh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjGéubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj&éh²hh³j8éh´M±ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjgéh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjcéubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj_éubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj&éh²hh³j8éh´M±ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj"éh²hh³j8éh´M±ubah}”(h]”jéah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j8éh´M±hjéh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1wait until an rcu-tasks grace period has elapsed.”h]”hŒ1wait until an rcu-tasks grace period has elapsed.”…”�”}”(hj‘éh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M±hjŽéh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjéh²hh³j8éh´M±ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj©éjæj©éjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX7**Parameters** ``void`` no arguments **Description** Control will return to the caller some time after a full rcu-tasks grace period has elapsed, in other words after all currently executing rcu-tasks read-side critical sections have elapsed. These read-side critical sections are delimited by calls to schedule(), cond_resched_tasks_rcu_qs(), idle execution, userspace execution, calls to synchronize_rcu_tasks(), and (in theory, anyway) cond_resched(). This is a very specialized primitive, intended only for a few uses in tracing and other situations requiring manipulation of function preambles and profiling hooks. The synchronize_rcu_tasks() function is not (yet) intended for heavy use from multiple CPUs. See the description of synchronize_rcu() for more detailed information on memory ordering guarantees.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj³éh]”hŒ Parameters”…”�”}”(hjµéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj±éubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Mµhj­éubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjÒéh]”hŒvoid”…”�”}”(hjÔéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÐéubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KhjÌéubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjëéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jçéh´Khjèéubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÌéubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jçéh´KhjÉéubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj­éubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj êh]”hŒ Description”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Khj­éubhÝ)�”}”(hX’Control will return to the caller some time after a full rcu-tasks grace period has elapsed, in other words after all currently executing rcu-tasks read-side critical sections have elapsed. These read-side critical sections are delimited by calls to schedule(), cond_resched_tasks_rcu_qs(), idle execution, userspace execution, calls to synchronize_rcu_tasks(), and (in theory, anyway) cond_resched().”h]”hX’Control will return to the caller some time after a full rcu-tasks grace period has elapsed, in other words after all currently executing rcu-tasks read-side critical sections have elapsed. These read-side critical sections are delimited by calls to schedule(), cond_resched_tasks_rcu_qs(), idle execution, userspace execution, calls to synchronize_rcu_tasks(), and (in theory, anyway) cond_resched().”…”�”}”(hj#êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M²hj­éubhÝ)�”}”(hXThis is a very specialized primitive, intended only for a few uses in tracing and other situations requiring manipulation of function preambles and profiling hooks. The synchronize_rcu_tasks() function is not (yet) intended for heavy use from multiple CPUs.”h]”hXThis is a very specialized primitive, intended only for a few uses in tracing and other situations requiring manipulation of function preambles and profiling hooks. The synchronize_rcu_tasks() function is not (yet) intended for heavy use from multiple CPUs.”…”�”}”(hj2êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M¹hj­éubhÝ)�”}”(hŒeSee the description of synchronize_rcu() for more detailed information on memory ordering guarantees.”h]”hŒeSee the description of synchronize_rcu() for more detailed information on memory ordering guarantees.”…”�”}”(hjAêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´M¾hj­éubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcu_barrier_tasks (C function)”Œc.rcu_barrier_tasks”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_barrier_tasks (void)”h]”j)�”}”(hŒvoid rcu_barrier_tasks(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjpêh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjlêh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´MÉubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjêh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjlêh²hh³j~êh´MÉubj{)�”}”(hŒrcu_barrier_tasks”h]”j�)�”}”(hŒrcu_barrier_tasks”h]”hŒrcu_barrier_tasks”…”�”}”(hj‘êh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�êubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjlêh²hh³j~êh´MÉubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj­êh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj©êubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¥êubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjlêh²hh³j~êh´MÉubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjhêh²hh³j~êh´MÉubah}”(h]”jcêah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j~êh´MÉhjeêh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Wait for in-flight call_rcu_tasks() callbacks.”h]”hŒ.Wait for in-flight call_rcu_tasks() callbacks.”…”�”}”(hj×êh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´MÉhjÔêh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjeêh²hh³j~êh´MÉubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjïêjæjïêjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒ¼**Parameters** ``void`` no arguments **Description** Although the current implementation is guaranteed to wait, it is not obligated to, for example, if there are no pending callbacks.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjùêh]”hŒ Parameters”…”�”}”(hjûêh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷êubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´MÍhjóêubj •Ê)�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjëh]”hŒvoid”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjëubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Khjëubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj1ëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j-ëh´Khj.ëubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j-ëh´Khjëubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjóêubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjSëh]”hŒ Description”…”�”}”(hjUëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjQëubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KhjóêubhÝ)�”}”(hŒ‚Although the current implementation is guaranteed to wait, it is not obligated to, for example, if there are no pending callbacks.”h]”hŒ‚Although the current implementation is guaranteed to wait, it is not obligated to, for example, if there are no pending callbacks.”…”�”}”(hjiëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´MÊhjóêubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ'synchronize_rcu_tasks_rude (C function)”Œc.synchronize_rcu_tasks_rude”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ&void synchronize_rcu_tasks_rude (void)”h]”j)�”}”(hŒ%void synchronize_rcu_tasks_rude(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj˜ëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj”ëh²hh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Mmubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj§ëh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj”ëh²hh³j¦ëh´Mmubj{)�”}”(hŒsynchronize_rcu_tasks_rude”h]”j�)�”}”(hŒsynchronize_rcu_tasks_rude”h]”hŒsynchronize_rcu_tasks_rude”…”�”}”(hj¹ëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjµëubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj”ëh²hh³j¦ëh´Mmubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÕëh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÑëubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÍëubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj”ëh²hh³j¦ëh´Mmubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj�ëh²hh³j¦ëh´Mmubah}”(h]”j‹ëah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j¦ëh´Mmhj�ëh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ&wait for a rude rcu-tasks grace period”h]”hŒ&wait for a rude rcu-tasks grace period”…”�”}”(hjÿëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Mmhjüëh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj�ëh²hh³j¦ëh´Mmubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjìjæjìjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX/**Parameters** ``void`` no arguments **Description** Control will return to the caller some time after a rude rcu-tasks grace period has elapsed, in other words after all currently executing rude rcu-tasks read-side critical sections have elapsed. These read-side critical sections are delimited by calls to schedule(), cond_resched_tasks_rcu_qs(), userspace execution (which is a schedulable context), and (in theory, anyway) cond_resched(). This is a very specialized primitive, intended only for a few uses in tracing and other situations requiring manipulation of function preambles and profiling hooks. The synchronize_rcu_tasks_rude() function is not (yet) intended for heavy use from multiple CPUs. See the description of synchronize_rcu() for more detailed information on memory ordering guarantees.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj!ìh]”hŒ Parameters”…”�”}”(hj#ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Mqhjìubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj@ìh]”hŒvoid”…”�”}”(hjBìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj>ìubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Khj:ìubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjYìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jUìh´KhjVìubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj:ìubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jUìh´Khj7ìubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjìubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj{ìh]”hŒ Description”…”�”}”(hj}ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjyìubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´KhjìubhÝ)�”}”(hX…Control will return to the caller some time after a rude rcu-tasks grace period has elapsed, in other words after all currently executing rude rcu-tasks read-side critical sections have elapsed. These read-side critical sections are delimited by calls to schedule(), cond_resched_tasks_rcu_qs(), userspace execution (which is a schedulable context), and (in theory, anyway) cond_resched().”h]”hX…Control will return to the caller some time after a rude rcu-tasks grace period has elapsed, in other words after all currently executing rude rcu-tasks read-side critical sections have elapsed. These read-side critical sections are delimited by calls to schedule(), cond_resched_tasks_rcu_qs(), userspace execution (which is a schedulable context), and (in theory, anyway) cond_resched().”…”�”}”(hj‘ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´MnhjìubhÝ)�”}”(hXThis is a very specialized primitive, intended only for a few uses in tracing and other situations requiring manipulation of function preambles and profiling hooks. The synchronize_rcu_tasks_rude() function is not (yet) intended for heavy use from multiple CPUs.”h]”hXThis is a very specialized primitive, intended only for a few uses in tracing and other situations requiring manipulation of function preambles and profiling hooks. The synchronize_rcu_tasks_rude() function is not (yet) intended for heavy use from multiple CPUs.”…”�”}”(hj ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´MuhjìubhÝ)�”}”(hŒeSee the description of synchronize_rcu() for more detailed information on memory ordering guarantees.”h]”hŒeSee the description of synchronize_rcu() for more detailed information on memory ordering guarantees.”…”�”}”(hj¯ìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³ŒW/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:421: ./kernel/rcu/tasks.h”h´Mzhjìubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ rcu_cpu_stall_reset (C function)”Œc.rcu_cpu_stall_reset”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒvoid rcu_cpu_stall_reset (void)”h]”j)�”}”(hŒvoid rcu_cpu_stall_reset(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjÞìh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÚìh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´Kµubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjíìh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÚìh²hh³jììh´Kµubj{)�”}”(hŒrcu_cpu_stall_reset”h]”j�)�”}”(hŒrcu_cpu_stall_reset”h]”hŒrcu_cpu_stall_reset”…”�”}”(hjÿìh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjûìubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÚìh²hh³jììh´Kµubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjíubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjíubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÚìh²hh³jììh´Kµubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÖìh²hh³jììh´Kµubah}”(h]”jÑìah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jììh´KµhjÓìh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6restart stall-warning timeout for current grace period”h]”hŒ6restart stall-warning timeout for current grace period”…”�”}”(hjEíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´KµhjBíh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÓìh²hh³jììh´Kµubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj]íjæj]íjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXg**Parameters** ``void`` no arguments **Description** To perform the reset request from the caller, disable stall detection until 3 fqs loops have passed. This is required to ensure a fresh jiffies is loaded. It should be safe to do from the fqs loop as enough timer interrupts and context switches should have passed. The caller must disable hard irqs.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjgíh]”hŒ Parameters”…”�”}”(hjiíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjeíubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´K¹hjaíubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj†íh]”hŒvoid”…”�”}”(hjˆíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj„íubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´Khj€íubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjŸíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j›íh´Khjœíubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj€íubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j›íh´Khj}íubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjaíubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÁíh]”hŒ Description”…”�”}”(hjÃíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj¿íubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´KhjaíubhÝ)�”}”(hX To perform the reset request from the caller, disable stall detection until 3 fqs loops have passed. This is required to ensure a fresh jiffies is loaded. It should be safe to do from the fqs loop as enough timer interrupts and context switches should have passed.”h]”hX To perform the reset request from the caller, disable stall detection until 3 fqs loops have passed. This is required to ensure a fresh jiffies is loaded. It should be safe to do from the fqs loop as enough timer interrupts and context switches should have passed.”…”�”}”(hj×íh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´K¶hjaíubhÝ)�”}”(hŒ"The caller must disable hard irqs.”h]”hŒ"The caller must disable hard irqs.”…”�”}”(hjæíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´K»hjaíubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ.rcu_stall_chain_notifier_register (C function)”Œ#c.rcu_stall_chain_notifier_register”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@int rcu_stall_chain_notifier_register (struct notifier_block *n)”h]”j)�”}”(hŒ?int rcu_stall_chain_notifier_register(struct notifier_block *n)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´Mzubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj$îh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîh²hh³j#îh´Mzubj{)�”}”(hŒ!rcu_stall_chain_notifier_register”h]”j�)�”}”(hŒ!rcu_stall_chain_notifier_register”h]”hŒ!rcu_stall_chain_notifier_register”…”�”}”(hj6îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj2îubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjîh²hh³j#îh´Mzubjœ)�”}”(hŒ(struct notifier_block *n)”h]”j¢)�”}”(hŒstruct notifier_block *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjRîh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjNîubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj_îh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNîubh)�”}”(hhh]”j�)�”}”(hŒnotifier_block”h]”hŒnotifier_block”…”�”}”(hjpîh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjmîubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jrîŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j8îsbŒ#c.rcu_stall_chain_notifier_register”†”asbuh1hhjNîubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�îh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjNîubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjžîh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjNîubj�)�”}”(hj�h]”hŒn”…”�”}”(hj«îh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjNîubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjJîubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjîh²hh³j#îh´Mzubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj îh²hh³j#îh´Mzubah}”(h]”jîah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j#îh´Mzhj îh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒAdd an RCU CPU stall notifier”h]”hŒAdd an RCU CPU stall notifier”…”�”}”(hjÔîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´MzhjÑîh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj îh²hh³j#îh´Mzubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjìîjæjìîjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXq**Parameters** ``struct notifier_block *n`` Entry to add. **Description** Adds an RCU CPU stall notifier to an atomic notifier chain. The **action** passed to a notifier will be **RCU_STALL_NOTIFY_NORM** or friends. The **data** will be the duration of the stalled grace period, in jiffies, coerced to a void* pointer. Returns 0 on success, ``-EEXIST`` on error.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjöîh]”hŒ Parameters”…”�”}”(hjøîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjôîubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M~hjðîubj )�”}”(hhh]”j)�”}”(hŒ+``struct notifier_block *n`` Entry to add. ”h]”(j)�”}”(hŒ``struct notifier_block *n``”h]”j)�”}”(hjïh]”hŒstruct notifier_block *n”…”�”}”(hjïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjïubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M{hjïubj2)�”}”(hhh]”hÝ)�”}”(hŒ Entry to add.”h]”hŒ Entry to add.”…”�”}”(hj.ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j*ïh´M{hj+ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjïubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j*ïh´M{hj ïubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjðîubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjPïh]”hŒ Description”…”�”}”(hjRïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjNïubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M}hjðîubhÝ)�”}”(hŒõAdds an RCU CPU stall notifier to an atomic notifier chain. The **action** passed to a notifier will be **RCU_STALL_NOTIFY_NORM** or friends. The **data** will be the duration of the stalled grace period, in jiffies, coerced to a void* pointer.”h]”(hŒ@Adds an RCU CPU stall notifier to an atomic notifier chain. The ”…”�”}”(hjfïh²hh³Nh´Nubjõ)�”}”(hŒ **action**”h]”hŒaction”…”�”}”(hjnïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfïubhŒ passed to a notifier will be ”…”�”}”(hjfïh²hh³Nh´Nubjõ)�”}”(hŒ**RCU_STALL_NOTIFY_NORM**”h]”hŒRCU_STALL_NOTIFY_NORM”…”�”}”(hj€ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfïubhŒ or friends. The ”…”�”}”(hjfïh²hh³Nh´Nubjõ)�”}”(hŒ**data**”h]”hŒdata”…”�”}”(hj’ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjfïubhŒZ will be the duration of the stalled grace period, in jiffies, coerced to a void* pointer.”…”�”}”(hjfïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M|hjðîubhÝ)�”}”(hŒ+Returns 0 on success, ``-EEXIST`` on error.”h]”(hŒReturns 0 on success, ”…”�”}”(hj«ïh²hh³Nh´Nubj)�”}”(hŒ ``-EEXIST``”h]”hŒ-EEXIST”…”�”}”(hj³ïh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj«ïubhŒ on error.”…”�”}”(hj«ïh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M�hjðîubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ0rcu_stall_chain_notifier_unregister (C function)”Œ%c.rcu_stall_chain_notifier_unregister”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒBint rcu_stall_chain_notifier_unregister (struct notifier_block *n)”h]”j)�”}”(hŒAint rcu_stall_chain_notifier_unregister(struct notifier_block *n)”h]”(j )�”}”(hŒint”h]”hŒint”…”�”}”(hjìïh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjèïh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M‘ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûïh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèïh²hh³júïh´M‘ubj{)�”}”(hŒ#rcu_stall_chain_notifier_unregister”h]”j�)�”}”(hŒ#rcu_stall_chain_notifier_unregister”h]”hŒ#rcu_stall_chain_notifier_unregister”…”�”}”(hj ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj ðubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjèïh²hh³júïh´M‘ubjœ)�”}”(hŒ(struct notifier_block *n)”h]”j¢)�”}”(hŒstruct notifier_block *n”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj)ðh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj%ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj6ðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%ðubh)�”}”(hhh]”j�)�”}”(hŒnotifier_block”h]”hŒnotifier_block”…”�”}”(hjGðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjDðubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jIðŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jðsbŒ%c.rcu_stall_chain_notifier_unregister”†”asbuh1hhj%ðubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjgðh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj%ðubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjuðh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj%ðubj�)�”}”(hj�h]”hŒn”…”�”}”(hj‚ðh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj%ðubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!ðubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjèïh²hh³júïh´M‘ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjäïh²hh³júïh´M‘ubah}”(h]”jßïah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³júïh´M‘hjáïh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ Remove an RCU CPU stall notifier”h]”hŒ Remove an RCU CPU stall notifier”…”�”}”(hj«ðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M‘hj¨ðh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjáïh²hh³júïh´M‘ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÃðjæjÃðjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒÁ**Parameters** ``struct notifier_block *n`` Entry to add. **Description** Removes an RCU CPU stall notifier from an atomic notifier chain. Returns zero on success, ``-ENOENT`` on failure.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjÍðh]”hŒ Parameters”…”�”}”(hjÏðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjËðubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M•hjÇðubj )�”}”(hhh]”j)�”}”(hŒ+``struct notifier_block *n`` Entry to add. ”h]”(j)�”}”(hŒ``struct notifier_block *n``”h]”j)�”}”(hjìðh]”hŒstruct notifier_block *n”…”�”}”(hjîðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjêðubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M’hjæðubj2)�”}”(hhh]”hÝ)�”}”(hŒ Entry to add.”h]”hŒ Entry to add.”…”�”}”(hjñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jñh´M’hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjæðubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñh´M’hjãðubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjÇðubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj'ñh]”hŒ Description”…”�”}”(hj)ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj%ñubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M”hjÇðubhÝ)�”}”(hŒ@Removes an RCU CPU stall notifier from an atomic notifier chain.”h]”hŒ@Removes an RCU CPU stall notifier from an atomic notifier chain.”…”�”}”(hj=ñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M“hjÇðubhÝ)�”}”(hŒ0Returns zero on success, ``-ENOENT`` on failure.”h]”(hŒReturns zero on success, ”…”�”}”(hjLñh²hh³Nh´Nubj)�”}”(hŒ ``-ENOENT``”h]”hŒ-ENOENT”…”�”}”(hjTñh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLñubhŒ on failure.”…”�”}”(hjLñh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:423: ./kernel/rcu/tree_stall.h”h´M•hjÇðubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ&rcu_read_lock_tasks_trace (C function)”Œc.rcu_read_lock_tasks_trace”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ;struct srcu_ctr __percpu * rcu_read_lock_tasks_trace (void)”h]”j)�”}”(hŒ9struct srcu_ctr __percpu *rcu_read_lock_tasks_trace(void)”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj�ñh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj‰ñh²hh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj›ñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰ñh²hh³jšñh´K&ubh)�”}”(hhh]”j�)�”}”(hŒsrcu_ctr”h]”hŒsrcu_ctr”…”�”}”(hj¬ñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj©ñubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j®ñŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY Œrcu_read_lock_tasks_trace”sbŒc.rcu_read_lock_tasks_trace”†”asbuh1hhj‰ñh²hh³jšñh´K&ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÍñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰ñh²hh³jšñh´K&ubhŒ__percpu”…”�”}”(hj‰ñh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjßñh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‰ñh²hh³jšñh´K&ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjíñh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj‰ñh²hh³jšñh´K&ubj{)�”}”(hŒrcu_read_lock_tasks_trace”h]”j�)�”}”(hjÊñh]”hŒrcu_read_lock_tasks_trace”…”�”}”(hjþñh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjúñubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj‰ñh²hh³jšñh´K&ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjòh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjòubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjòubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj‰ñh²hh³jšñh´K&ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj…ñh²hh³jšñh´K&ubah}”(h]”j€ñah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jšñh´K&hj‚ñh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6mark beginning of RCU-trace read-side critical section”h]”hŒ6mark beginning of RCU-trace read-side critical section”…”�”}”(hjCòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K&hj@òh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj‚ñh²hh³jšñh´K&ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj[òjæj[òjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXh**Parameters** ``void`` no arguments **Description** When synchronize_rcu_tasks_trace() is invoked by one task, then that task is guaranteed to block until all other tasks exit their read-side critical sections. Similarly, if call_rcu_trace() is invoked on one task while other tasks are within RCU read-side critical sections, invocation of the corresponding RCU callback is deferred until after the all the other tasks exit their critical sections. For more details, please see the documentation for srcu_read_lock_fast(). For a description of how implicit RCU readers provide the needed ordering for architectures defining the ARCH_WANTS_NO_INSTR Kconfig option (and thus promising never to trace code where RCU is not watching), please see the __srcu_read_lock_fast() (non-kerneldoc) header comment. Otherwise, the smp_mb() below provided the needed ordering.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjeòh]”hŒ Parameters”…”�”}”(hjgòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjcòubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K*hj_òubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj„òh]”hŒvoid”…”�”}”(hj†òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj‚òubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Khj~òubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj�òh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j™òh´Khjšòubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj~òubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j™òh´Khj{òubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj_òubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¿òh]”hŒ Description”…”�”}”(hjÁòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj½òubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Khj_òubhÝ)�”}”(hXŽWhen synchronize_rcu_tasks_trace() is invoked by one task, then that task is guaranteed to block until all other tasks exit their read-side critical sections. Similarly, if call_rcu_trace() is invoked on one task while other tasks are within RCU read-side critical sections, invocation of the corresponding RCU callback is deferred until after the all the other tasks exit their critical sections.”h]”hXŽWhen synchronize_rcu_tasks_trace() is invoked by one task, then that task is guaranteed to block until all other tasks exit their read-side critical sections. Similarly, if call_rcu_trace() is invoked on one task while other tasks are within RCU read-side critical sections, invocation of the corresponding RCU callback is deferred until after the all the other tasks exit their critical sections.”…”�”}”(hjÕòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K'hj_òubhÝ)�”}”(hXžFor more details, please see the documentation for srcu_read_lock_fast(). For a description of how implicit RCU readers provide the needed ordering for architectures defining the ARCH_WANTS_NO_INSTR Kconfig option (and thus promising never to trace code where RCU is not watching), please see the __srcu_read_lock_fast() (non-kerneldoc) header comment. Otherwise, the smp_mb() below provided the needed ordering.”h]”hXžFor more details, please see the documentation for srcu_read_lock_fast(). For a description of how implicit RCU readers provide the needed ordering for architectures defining the ARCH_WANTS_NO_INSTR Kconfig option (and thus promising never to trace code where RCU is not watching), please see the __srcu_read_lock_fast() (non-kerneldoc) header comment. Otherwise, the smp_mb() below provided the needed ordering.”…”�”}”(hjäòh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K.hj_òubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(rcu_read_unlock_tasks_trace (C function)”Œc.rcu_read_unlock_tasks_trace”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ@void rcu_read_unlock_tasks_trace (struct srcu_ctr __percpu *scp)”h]”j)�”}”(hŒ?void rcu_read_unlock_tasks_trace(struct srcu_ctr __percpu *scp)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjóh²hh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj"óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjóh²hh³j!óh´KBubj{)�”}”(hŒrcu_read_unlock_tasks_trace”h]”j�)�”}”(hŒrcu_read_unlock_tasks_trace”h]”hŒrcu_read_unlock_tasks_trace”…”�”}”(hj4óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj0óubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjóh²hh³j!óh´KBubjœ)�”}”(hŒ(struct srcu_ctr __percpu *scp)”h]”j¢)�”}”(hŒstruct srcu_ctr __percpu *scp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjPóh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjLóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj]óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjLóubh)�”}”(hhh]”j�)�”}”(hŒsrcu_ctr”h]”hŒsrcu_ctr”…”�”}”(hjnóh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjkóubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jpóŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j6ósbŒc.rcu_read_unlock_tasks_trace”†”asbuh1hhjLóubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjŽóh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjLóubhŒ__percpu”…”�”}”(hjLóh²hh³Nh´Nubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj óh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjLóubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj®óh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjLóubj�)�”}”(hŒscp”h]”hŒscp”…”�”}”(hj»óh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjLóubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjHóubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjóh²hh³j!óh´KBubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj óh²hh³j!óh´KBubah}”(h]”jóah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j!óh´KBhjóh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0mark end of RCU-trace read-side critical section”h]”hŒ0mark end of RCU-trace read-side critical section”…”�”}”(hjåóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KBhjâóh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjóh²hh³j!óh´KBubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjýójæjýójç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXž**Parameters** ``struct srcu_ctr __percpu *scp`` return value from corresponding rcu_read_lock_tasks_trace(). **Description** Pairs with the preceding call to rcu_read_lock_tasks_trace() that returned the value passed in via scp. For more details, please see the documentation for rcu_read_unlock(). For memory-ordering information, please see the header comment for the rcu_read_lock_tasks_trace() function.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjôh]”hŒ Parameters”…”�”}”(hj ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjôubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KFhjôubj )�”}”(hhh]”j)�”}”(hŒ_``struct srcu_ctr __percpu *scp`` return value from corresponding rcu_read_lock_tasks_trace(). ”h]”(j)�”}”(hŒ!``struct srcu_ctr __percpu *scp``”h]”j)�”}”(hj&ôh]”hŒstruct srcu_ctr __percpu *scp”…”�”}”(hj(ôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj$ôubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KChj ôubj2)�”}”(hhh]”hÝ)�”}”(hŒah"]”h$]”h&]”uh1j1hj±ôh²hh³jÃôh´KUubj{)�”}”(hŒrcu_read_lock_trace”h]”j�)�”}”(hŒrcu_read_lock_trace”h]”hŒrcu_read_lock_trace”…”�”}”(hjÖôh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒôubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj±ôh²hh³jÃôh´KUubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjòôh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîôubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjêôubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj±ôh²hh³jÃôh´KUubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj­ôh²hh³jÃôh´KUubah}”(h]”j¨ôah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÃôh´KUhjªôh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ6mark beginning of RCU-trace read-side critical section”h]”hŒ6mark beginning of RCU-trace read-side critical section”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KUhjõh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjªôh²hh³jÃôh´KUubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj4õjæj4õjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX **Parameters** ``void`` no arguments **Description** When synchronize_rcu_tasks_trace() is invoked by one task, then that task is guaranteed to block until all other tasks exit their read-side critical sections. Similarly, if call_rcu_trace() is invoked on one task while other tasks are within RCU read-side critical sections, invocation of the corresponding RCU callback is deferred until after the all the other tasks exit their critical sections. For more details, please see the documentation for rcu_read_lock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj>õh]”hŒ Parameters”…”�”}”(hj@õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj<õubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KYhj8õubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj]õh]”hŒvoid”…”�”}”(hj_õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj[õubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KhjWõubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjvõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jrõh´Khjsõubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjWõubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jrõh´KhjTõubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj8õubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj˜õh]”hŒ Description”…”�”}”(hjšõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj–õubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Khj8õubhÝ)�”}”(hXŽWhen synchronize_rcu_tasks_trace() is invoked by one task, then that task is guaranteed to block until all other tasks exit their read-side critical sections. Similarly, if call_rcu_trace() is invoked on one task while other tasks are within RCU read-side critical sections, invocation of the corresponding RCU callback is deferred until after the all the other tasks exit their critical sections.”h]”hXŽWhen synchronize_rcu_tasks_trace() is invoked by one task, then that task is guaranteed to block until all other tasks exit their read-side critical sections. Similarly, if call_rcu_trace() is invoked on one task while other tasks are within RCU read-side critical sections, invocation of the corresponding RCU callback is deferred until after the all the other tasks exit their critical sections.”…”�”}”(hj®õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KVhj8õubhÝ)�”}”(hŒCFor more details, please see the documentation for rcu_read_lock().”h]”hŒCFor more details, please see the documentation for rcu_read_lock().”…”�”}”(hj½õh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K]hj8õubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ"rcu_read_unlock_trace (C function)”Œc.rcu_read_unlock_trace”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ!void rcu_read_unlock_trace (void)”h]”j)�”}”(hŒ void rcu_read_unlock_trace(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjìõh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjèõh²hh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Ksubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjûõh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjèõh²hh³júõh´Ksubj{)�”}”(hŒrcu_read_unlock_trace”h]”j�)�”}”(hŒrcu_read_unlock_trace”h]”hŒrcu_read_unlock_trace”…”�”}”(hj öh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj öubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjèõh²hh³júõh´Ksubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj)öh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj%öubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj!öubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjèõh²hh³júõh´Ksubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjäõh²hh³júõh´Ksubah}”(h]”jßõah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³júõh´Kshjáõh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0mark end of RCU-trace read-side critical section”h]”hŒ0mark end of RCU-trace read-side critical section”…”�”}”(hjSöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KshjPöh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjáõh²hh³júõh´Ksubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjköjæjköjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXV**Parameters** ``void`` no arguments **Description** Pairs with a preceding call to rcu_read_lock_trace(), and nesting is allowed. Invoking a rcu_read_unlock_trace() when there is no matching rcu_read_lock_trace() is verboten, and will result in lockdep complaints. For more details, please see the documentation for rcu_read_unlock().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjuöh]”hŒ Parameters”…”�”}”(hjwöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjsöubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Kwhjoöubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj”öh]”hŒvoid”…”�”}”(hj–öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj’öubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KhjŽöubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj­öh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j©öh´Khjªöubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŽöubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j©öh´Khj‹öubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjoöubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÏöh]”hŒ Description”…”�”}”(hjÑöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÍöubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KhjoöubhÝ)�”}”(hŒÕPairs with a preceding call to rcu_read_lock_trace(), and nesting is allowed. Invoking a rcu_read_unlock_trace() when there is no matching rcu_read_lock_trace() is verboten, and will result in lockdep complaints.”h]”hŒÕPairs with a preceding call to rcu_read_lock_trace(), and nesting is allowed. Invoking a rcu_read_unlock_trace() when there is no matching rcu_read_lock_trace() is verboten, and will result in lockdep complaints.”…”�”}”(hjåöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KthjoöubhÝ)�”}”(hŒEFor more details, please see the documentation for rcu_read_unlock().”h]”hŒEFor more details, please see the documentation for rcu_read_unlock().”…”�”}”(hjôöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Kxhjoöubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ!call_rcu_tasks_trace (C function)”Œc.call_rcu_tasks_trace”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒEvoid call_rcu_tasks_trace (struct rcu_head *rhp, rcu_callback_t func)”h]”j)�”}”(hŒDvoid call_rcu_tasks_trace(struct rcu_head *rhp, rcu_callback_t func)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj#÷h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj÷h²hh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj2÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj÷h²hh³j1÷h´K�ubj{)�”}”(hŒcall_rcu_tasks_trace”h]”j�)�”}”(hŒcall_rcu_tasks_trace”h]”hŒcall_rcu_tasks_trace”…”�”}”(hjD÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj@÷ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj÷h²hh³j1÷h´K�ubjœ)�”}”(hŒ+(struct rcu_head *rhp, rcu_callback_t func)”h]”(j¢)�”}”(hŒstruct rcu_head *rhp”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hj`÷h²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hj\÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjm÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\÷ubh)�”}”(hhh]”j�)�”}”(hŒrcu_head”h]”hŒrcu_head”…”�”}”(hj~÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj{÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j€÷Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jF÷sbŒc.call_rcu_tasks_trace”†”asbuh1hhj\÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjž÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj\÷ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj¬÷h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj\÷ubj�)�”}”(hŒrhp”h]”hŒrhp”…”�”}”(hj¹÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj\÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjX÷ubj¢)�”}”(hŒrcu_callback_t func”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcu_callback_t”h]”hŒrcu_callback_t”…”�”}”(hjÕ÷h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÒ÷ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j×÷Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jš÷Œc.call_rcu_tasks_trace”†”asbuh1hhjÎ÷ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjó÷h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÎ÷ubj�)�”}”(hŒfunc”h]”hŒfunc”…”�”}”(hjøh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÎ÷ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjX÷ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj÷h²hh³j1÷h´K�ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj÷h²hh³j1÷h´K�ubah}”(h]”j÷ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j1÷h´K�hj÷h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ.Queue a callback trace task-based grace period”h]”hŒ.Queue a callback trace task-based grace period”…”�”}”(hj+øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K�hj(øh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj÷h²hh³j1÷h´K�ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjCøjæjCøjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX^**Parameters** ``struct rcu_head *rhp`` structure to be used for queueing the RCU updates. ``rcu_callback_t func`` actual callback function to be invoked after the grace period **Description** The callback function will be invoked some time after a trace rcu-tasks grace period elapses, in other words after all currently executing trace rcu-tasks read-side critical sections have completed. These read-side critical sections are delimited by calls to rcu_read_lock_trace() and rcu_read_unlock_trace(). See the description of call_rcu() for more detailed information on memory ordering guarantees.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjMøh]”hŒ Parameters”…”�”}”(hjOøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjKøubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K”hjGøubj )�”}”(hhh]”(j)�”}”(hŒL``struct rcu_head *rhp`` structure to be used for queueing the RCU updates. ”h]”(j)�”}”(hŒ``struct rcu_head *rhp``”h]”j)�”}”(hjløh]”hŒstruct rcu_head *rhp”…”�”}”(hjnøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjjøubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K‘hjføubj2)�”}”(hhh]”hÝ)�”}”(hŒ2structure to be used for queueing the RCU updates.”h]”hŒ2structure to be used for queueing the RCU updates.”…”�”}”(hj…øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�øh´K‘hj‚øubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjføubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�øh´K‘hjcøubj)�”}”(hŒV``rcu_callback_t func`` actual callback function to be invoked after the grace period ”h]”(j)�”}”(hŒ``rcu_callback_t func``”h]”j)�”}”(hj¥øh]”hŒrcu_callback_t func”…”�”}”(hj§øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj£øubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K’hjŸøubj2)�”}”(hhh]”hÝ)�”}”(hŒ=actual callback function to be invoked after the grace period”h]”hŒ=actual callback function to be invoked after the grace period”…”�”}”(hj¾øh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jºøh´K’hj»øubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjŸøubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jºøh´K’hjcøubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjGøubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjàøh]”hŒ Description”…”�”}”(hjâøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÞøubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K”hjGøubhÝ)�”}”(hX5The callback function will be invoked some time after a trace rcu-tasks grace period elapses, in other words after all currently executing trace rcu-tasks read-side critical sections have completed. These read-side critical sections are delimited by calls to rcu_read_lock_trace() and rcu_read_unlock_trace().”h]”hX5The callback function will be invoked some time after a trace rcu-tasks grace period elapses, in other words after all currently executing trace rcu-tasks read-side critical sections have completed. These read-side critical sections are delimited by calls to rcu_read_lock_trace() and rcu_read_unlock_trace().”…”�”}”(hjöøh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K“hjGøubhÝ)�”}”(hŒ^See the description of call_rcu() for more detailed information on memory ordering guarantees.”h]”hŒ^See the description of call_rcu() for more detailed information on memory ordering guarantees.”…”�”}”(hjùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K™hjGøubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ(synchronize_rcu_tasks_trace (C function)”Œc.synchronize_rcu_tasks_trace”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'void synchronize_rcu_tasks_trace (void)”h]”j)�”}”(hŒ&void synchronize_rcu_tasks_trace(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj4ùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj0ùh²hh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K£ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjCùh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj0ùh²hh³jBùh´K£ubj{)�”}”(hŒsynchronize_rcu_tasks_trace”h]”j�)�”}”(hŒsynchronize_rcu_tasks_trace”h]”hŒsynchronize_rcu_tasks_trace”…”�”}”(hjUùh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjQùubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj0ùh²hh³jBùh´K£ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjqùh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjmùubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjiùubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj0ùh²hh³jBùh´K£ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj,ùh²hh³jBùh´K£ubah}”(h]”j'ùah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jBùh´K£hj)ùh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ'wait for a trace rcu-tasks grace period”h]”hŒ'wait for a trace rcu-tasks grace period”…”�”}”(hj›ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K£hj˜ùh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj)ùh²hh³jBùh´K£ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj³ùjæj³ùjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXÞ**Parameters** ``void`` no arguments **Description** Control will return to the caller some time after a trace rcu-tasks grace period has elapsed, in other words after all currently executing trace rcu-tasks read-side critical sections have elapsed. These read-side critical sections are delimited by calls to rcu_read_lock_trace() and rcu_read_unlock_trace(). This is a very specialized primitive, intended only for a few uses in tracing and other situations requiring manipulation of function preambles and profiling hooks. The synchronize_rcu_tasks_trace() function is not (yet) intended for heavy use from multiple CPUs. See the description of synchronize_rcu() for more detailed information on memory ordering guarantees.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj½ùh]”hŒ Parameters”…”�”}”(hj¿ùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj»ùubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K§hj·ùubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjÜùh]”hŒvoid”…”�”}”(hjÞùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjÚùubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KhjÖùubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjõùh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jñùh´Khjòùubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjÖùubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jñùh´KhjÓùubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj·ùubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjúh]”hŒ Description”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjúubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Khj·ùubhÝ)�”}”(hX3Control will return to the caller some time after a trace rcu-tasks grace period has elapsed, in other words after all currently executing trace rcu-tasks read-side critical sections have elapsed. These read-side critical sections are delimited by calls to rcu_read_lock_trace() and rcu_read_unlock_trace().”h]”hX3Control will return to the caller some time after a trace rcu-tasks grace period has elapsed, in other words after all currently executing trace rcu-tasks read-side critical sections have elapsed. These read-side critical sections are delimited by calls to rcu_read_lock_trace() and rcu_read_unlock_trace().”…”�”}”(hj-úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K¤hj·ùubhÝ)�”}”(hXThis is a very specialized primitive, intended only for a few uses in tracing and other situations requiring manipulation of function preambles and profiling hooks. The synchronize_rcu_tasks_trace() function is not (yet) intended for heavy use from multiple CPUs.”h]”hXThis is a very specialized primitive, intended only for a few uses in tracing and other situations requiring manipulation of function preambles and profiling hooks. The synchronize_rcu_tasks_trace() function is not (yet) intended for heavy use from multiple CPUs.”…”�”}”(hj<úh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Kªhj·ùubhÝ)�”}”(hŒeSee the description of synchronize_rcu() for more detailed information on memory ordering guarantees.”h]”hŒeSee the description of synchronize_rcu() for more detailed information on memory ordering guarantees.”…”�”}”(hjKúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K¯hj·ùubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ$rcu_barrier_tasks_trace (C function)”Œc.rcu_barrier_tasks_trace”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ#void rcu_barrier_tasks_trace (void)”h]”j)�”}”(hŒ"void rcu_barrier_tasks_trace(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjzúh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjvúh²hh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K¹ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj‰úh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvúh²hh³jˆúh´K¹ubj{)�”}”(hŒrcu_barrier_tasks_trace”h]”j�)�”}”(hŒrcu_barrier_tasks_trace”h]”hŒrcu_barrier_tasks_trace”…”�”}”(hj›úh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj—úubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjvúh²hh³jˆúh´K¹ubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj·úh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj³úubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj¯úubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjvúh²hh³jˆúh´K¹ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjrúh²hh³jˆúh´K¹ubah}”(h]”jmúah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jˆúh´K¹hjoúh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4Wait for in-flight call_rcu_tasks_trace() callbacks.”h]”hŒ4Wait for in-flight call_rcu_tasks_trace() callbacks.”…”�”}”(hjáúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K¹hjÞúh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjoúh²hh³jˆúh´K¹ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjùújæjùújç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒ°**Parameters** ``void`` no arguments **Description** Note that rcu_barrier_tasks_trace() is not obligated to actually wait, for example, if there are no pending callbacks.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjûh]”hŒ Parameters”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´K½hjýúubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hj"ûh]”hŒvoid”…”�”}”(hj$ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj ûubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Khjûubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hj;ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j7ûh´Khj8ûubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjûubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j7ûh´Khjûubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjýúubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj]ûh]”hŒ Description”…”�”}”(hj_ûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj[ûubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KhjýúubhÝ)�”}”(hŒvNote that rcu_barrier_tasks_trace() is not obligated to actually wait, for example, if there are no pending callbacks.”h]”hŒvNote that rcu_barrier_tasks_trace() is not obligated to actually wait, for example, if there are no pending callbacks.”…”�”}”(hjsûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Kºhjýúubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ-rcu_tasks_trace_expedite_current (C function)”Œ"c.rcu_tasks_trace_expedite_current”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ,void rcu_tasks_trace_expedite_current (void)”h]”j)�”}”(hŒ+void rcu_tasks_trace_expedite_current(void)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hj¢ûh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjžûh²hh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KÄubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±ûh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjžûh²hh³j°ûh´KÄubj{)�”}”(hŒ rcu_tasks_trace_expedite_current”h]”j�)�”}”(hŒ rcu_tasks_trace_expedite_current”h]”hŒ rcu_tasks_trace_expedite_current”…”�”}”(hjÃûh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿ûubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjžûh²hh³j°ûh´KÄubjœ)�”}”(hŒ(void)”h]”j¢)�”}”(hŒvoid”h]”j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjßûh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÛûubah}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×ûubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjžûh²hh³j°ûh´KÄubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjšûh²hh³j°ûh´KÄubah}”(h]”j•ûah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j°ûh´KÄhj—ûh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1Expedite the current Tasks Trace RCU grace period”h]”hŒ1Expedite the current Tasks Trace RCU grace period”…”�”}”(hj üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KÄhjüh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj—ûh²hh³j°ûh´KÄubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj!üjæj!üjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXm**Parameters** ``void`` no arguments **Description** Cause the current Tasks Trace RCU grace period to become expedited. The grace period following the current one might also be expedited. If there is no current grace period, one might be created. If the current grace period is currently sleeping, that sleep will complete before expediting will take effect.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj+üh]”hŒ Parameters”…”�”}”(hj-üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj)üubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KÈhj%üubj )�”}”(hhh]”j)�”}”(hŒ``void`` no arguments ”h]”(j)�”}”(hŒ``void``”h]”j)�”}”(hjJüh]”hŒvoid”…”�”}”(hjLüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjHüubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KhjDüubj2)�”}”(hhh]”hÝ)�”}”(hŒ no arguments”h]”hŒ no arguments”…”�”}”(hjcüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j_üh´Khj`üubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjDüubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j_üh´KhjAüubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj%üubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj…üh]”hŒ Description”…”�”}”(hj‡üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjƒüubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´Khj%üubhÝ)�”}”(hX3Cause the current Tasks Trace RCU grace period to become expedited. The grace period following the current one might also be expedited. If there is no current grace period, one might be created. If the current grace period is currently sleeping, that sleep will complete before expediting will take effect.”h]”hX3Cause the current Tasks Trace RCU grace period to become expedited. The grace period following the current one might also be expedited. If there is no current grace period, one might be created. If the current grace period is currently sleeping, that sleep will complete before expediting will take effect.”…”�”• ù}”(hj›üh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œc/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:425: ./include/linux/rcupdate_trace.h”h´KÅhj%üubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œsynchronize_rcu_mult (C macro)”Œc.synchronize_rcu_mult”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒsynchronize_rcu_mult”h]”j)�”}”(hŒsynchronize_rcu_mult”h]”j{)�”}”(hŒsynchronize_rcu_mult”h]”j�)�”}”(hjÄüh]”hŒsynchronize_rcu_mult”…”�”}”(hjÎüh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÊüubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÆüh²hh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:427: ./include/linux/rcupdate_wait.h”h´K'ubah}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÂüh²hh³jáüh´K'ubah}”(h]”j½üah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jáüh´K'hj¿üh²hubjÃ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj¿üh²hh³jáüh´K'ubeh}”(h]”h ]”(jߌmacro”eh"]”h$]”h&]”jäjßjåjúüjæjúüjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´NubhÝ)�”}”(hŒ``synchronize_rcu_mult (...)``”h]”j)�”}”(hjýh]”hŒsynchronize_rcu_mult (...)”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjþüubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:427: ./include/linux/rcupdate_wait.h”h´K)hjôÖh²hubj•)�”}”(hŒ-Wait concurrently for multiple grace periods ”h]”hÝ)�”}”(hŒ,Wait concurrently for multiple grace periods”h]”hŒ,Wait concurrently for multiple grace periods”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:427: ./include/linux/rcupdate_wait.h”h´K'hjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j(ýh´K'hjôÖh²hubjë)�”}”(hXŸ**Parameters** ``...`` List of call_rcu() functions for different grace periods to wait on **Description** This macro waits concurrently for multiple types of RCU grace periods. For example, synchronize_rcu_mult(call_rcu, call_rcu_tasks) would wait on concurrent RCU and RCU-tasks grace periods. Waiting on a given SRCU domain requires you to write a wrapper function for that SRCU domain's call_srcu() function, with this wrapper supplying the pointer to the corresponding srcu_struct. Note that call_rcu_hurry() should be used instead of call_rcu() because in kernels built with CONFIG_RCU_LAZY=y the delay between the invocation of call_rcu() and that of the corresponding RCU callback can be multiple seconds. The first argument tells Tiny RCU's _wait_rcu_gp() not to bother waiting for RCU. The reason for this is because anywhere synchronize_rcu_mult() can be called is automatically already a full grace period.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj5ýh]”hŒ Parameters”…”�”}”(hj7ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj3ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:427: ./include/linux/rcupdate_wait.h”h´K+hj/ýubj )�”}”(hhh]”j)�”}”(hŒL``...`` List of call_rcu() functions for different grace periods to wait on ”h]”(j)�”}”(hŒ``...``”h]”j)�”}”(hjTýh]”hŒ...”…”�”}”(hjVýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjRýubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:427: ./include/linux/rcupdate_wait.h”h´K(hjNýubj2)�”}”(hhh]”hÝ)�”}”(hŒCList of call_rcu() functions for different grace periods to wait on”h]”hŒCList of call_rcu() functions for different grace periods to wait on”…”�”}”(hjmýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jiýh´K(hjjýubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjNýubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jiýh´K(hjKýubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj/ýubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj�ýh]”hŒ Description”…”�”}”(hj‘ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ýubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:427: ./include/linux/rcupdate_wait.h”h´K*hj/ýubhÝ)�”}”(hX|This macro waits concurrently for multiple types of RCU grace periods. For example, synchronize_rcu_mult(call_rcu, call_rcu_tasks) would wait on concurrent RCU and RCU-tasks grace periods. Waiting on a given SRCU domain requires you to write a wrapper function for that SRCU domain's call_srcu() function, with this wrapper supplying the pointer to the corresponding srcu_struct.”h]”hX~This macro waits concurrently for multiple types of RCU grace periods. For example, synchronize_rcu_mult(call_rcu, call_rcu_tasks) would wait on concurrent RCU and RCU-tasks grace periods. Waiting on a given SRCU domain requires you to write a wrapper function for that SRCU domain’s call_srcu() function, with this wrapper supplying the pointer to the corresponding srcu_struct.”…”�”}”(hj¥ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:427: ./include/linux/rcupdate_wait.h”h´K)hj/ýubhÝ)�”}”(hŒâNote that call_rcu_hurry() should be used instead of call_rcu() because in kernels built with CONFIG_RCU_LAZY=y the delay between the invocation of call_rcu() and that of the corresponding RCU callback can be multiple seconds.”h]”hŒâNote that call_rcu_hurry() should be used instead of call_rcu() because in kernels built with CONFIG_RCU_LAZY=y the delay between the invocation of call_rcu() and that of the corresponding RCU callback can be multiple seconds.”…”�”}”(hj´ýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:427: ./include/linux/rcupdate_wait.h”h´K0hj/ýubhÝ)�”}”(hŒÍThe first argument tells Tiny RCU's _wait_rcu_gp() not to bother waiting for RCU. The reason for this is because anywhere synchronize_rcu_mult() can be called is automatically already a full grace period.”h]”hŒÏThe first argument tells Tiny RCU’s _wait_rcu_gp() not to bother waiting for RCU. The reason for this is because anywhere synchronize_rcu_mult() can be called is automatically already a full grace period.”…”�”}”(hjÃýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œb/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:427: ./include/linux/rcupdate_wait.h”h´K5hj/ýubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcuref_init (C function)”Œ c.rcuref_init”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ2void rcuref_init (rcuref_t *ref, unsigned int cnt)”h]”j)�”}”(hŒ1void rcuref_init(rcuref_t *ref, unsigned int cnt)”h]”(j )�”}”(hŒvoid”h]”hŒvoid”…”�”}”(hjòýh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjîýh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjîýh²hh³jþh´Kubj{)�”}”(hŒ rcuref_init”h]”j�)�”}”(hŒ rcuref_init”h]”hŒ rcuref_init”…”�”}”(hjþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjþubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjîýh²hh³jþh´Kubjœ)�”}”(hŒ!(rcuref_t *ref, unsigned int cnt)”h]”(j¢)�”}”(hŒ rcuref_t *ref”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcuref_t”h]”hŒrcuref_t”…”�”}”(hj2þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj/þubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j4þŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jþsbŒ c.rcuref_init”†”asbuh1hhj+þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjRþh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj+þubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj`þh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj+þubj�)�”}”(hŒref”h]”hŒref”…”�”}”(hjmþh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj+þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj'þubj¢)�”}”(hŒunsigned int cnt”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj†þh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‚þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj”þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚þubj )�”}”(hŒint”h]”hŒint”…”�”}”(hj¢þh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj‚þubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj°þh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj‚þubj�)�”}”(hŒcnt”h]”hŒcnt”…”�”}”(hj¾þh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj‚þubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj'þubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjîýh²hh³jþh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjêýh²hh³jþh´Kubah}”(h]”jåýah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jþh´Khjçýh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒBInitialize a rcuref reference count with the given reference count”h]”hŒBInitialize a rcuref reference count with the given reference count”…”�”}”(hjèþh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Khjåþh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjçýh²hh³jþh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjÿjæjÿjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hŒ„**Parameters** ``rcuref_t *ref`` Pointer to the reference count ``unsigned int cnt`` The initial reference count typically '1'”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj ÿh]”hŒ Parameters”…”�”}”(hj ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÿubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Khjÿubj )�”}”(hhh]”(j)�”}”(hŒ1``rcuref_t *ref`` Pointer to the reference count ”h]”(j)�”}”(hŒ``rcuref_t *ref``”h]”j)�”}”(hj)ÿh]”hŒ rcuref_t *ref”…”�”}”(hj+ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj'ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Khj#ÿubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the reference count”h]”hŒPointer to the reference count”…”�”}”(hjBÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j>ÿh´Khj?ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj#ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j>ÿh´Khj ÿubj)�”}”(hŒ>``unsigned int cnt`` The initial reference count typically '1'”h]”(j)�”}”(hŒ``unsigned int cnt``”h]”j)�”}”(hjbÿh]”hŒunsigned int cnt”…”�”}”(hjdÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj`ÿubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Khj\ÿubj2)�”}”(hhh]”hÝ)�”}”(hŒ)The initial reference count typically '1'”h]”hŒ-The initial reference count typically ‘1’”…”�”}”(hj{ÿh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Khjxÿubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj\ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jwÿh´Khj ÿubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hjÿubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcuref_read (C function)”Œ c.rcuref_read”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ(unsigned int rcuref_read (rcuref_t *ref)”h]”j)�”}”(hŒ'unsigned int rcuref_read(rcuref_t *ref)”h]”(j )�”}”(hŒunsigned”h]”hŒunsigned”…”�”}”(hj¼ÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¸ÿh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjËÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸ÿh²hh³jÊÿh´Kubj )�”}”(hŒint”h]”hŒint”…”�”}”(hjÙÿh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj¸ÿh²hh³jÊÿh´Kubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjçÿh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj¸ÿh²hh³jÊÿh´Kubj{)�”}”(hŒ rcuref_read”h]”j�)�”}”(hŒ rcuref_read”h]”hŒ rcuref_read”…”�”}”(hjùÿh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjõÿubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj¸ÿh²hh³jÊÿh´Kubjœ)�”}”(hŒ(rcuref_t *ref)”h]”j¢)�”}”(hŒ rcuref_t *ref”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcuref_t”h]”hŒrcuref_t”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jûÿsbŒ c.rcuref_read”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj8h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒref”h]”hŒref”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj¸ÿh²hh³jÊÿh´Kubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj´ÿh²hh³jÊÿh´Kubah}”(h]”j¯ÿah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jÊÿh´Khj±ÿh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ4Read the number of held reference counts of a rcuref”h]”hŒ4Read the number of held reference counts of a rcuref”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Khjzh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj±ÿh²hh³jÊÿh´Kubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj•jæj•jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXu**Parameters** ``rcuref_t *ref`` Pointer to the reference count **Return** The number of held references (0 ... N). The value 0 does not indicate that it is safe to schedule the object, protected by this reference counter, for deconstruction. If you want to know if the reference counter has been marked DEAD (as signaled by rcuref_put()) please use rcuread_is_dead().”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjŸh]”hŒ Parameters”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K"hj™ubj )�”}”(hhh]”j)�”}”(hŒ1``rcuref_t *ref`` Pointer to the reference count ”h]”(j)�”}”(hŒ``rcuref_t *ref``”h]”j)�”}”(hj¾h]”hŒ rcuref_t *ref”…”�”}”(hjÀh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj¼ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Khj¸ubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the reference count”h]”hŒPointer to the reference count”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jÓh´KhjÔubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj¸ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jÓh´Khjµubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj™ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjùh]”hŒReturn”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K!hj™ubhÝ)�”}”(hX%The number of held references (0 ... N). The value 0 does not indicate that it is safe to schedule the object, protected by this reference counter, for deconstruction. If you want to know if the reference counter has been marked DEAD (as signaled by rcuref_put()) please use rcuread_is_dead().”h]”hX%The number of held references (0 ... N). The value 0 does not indicate that it is safe to schedule the object, protected by this reference counter, for deconstruction. If you want to know if the reference counter has been marked DEAD (as signaled by rcuref_put()) please use rcuread_is_dead().”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K!hj™ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcuref_is_dead (C function)”Œc.rcuref_is_dead”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ#bool rcuref_is_dead (rcuref_t *ref)”h]”j)�”}”(hŒ"bool rcuref_is_dead(rcuref_t *ref)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhj:h²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K0ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjLh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj:h²hh³jKh´K0ubj{)�”}”(hŒrcuref_is_dead”h]”j�)�”}”(hŒrcuref_is_dead”h]”hŒrcuref_is_dead”…”�”}”(hj^h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjZubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhj:h²hh³jKh´K0ubjœ)�”}”(hŒ(rcuref_t *ref)”h]”j¢)�”}”(hŒ rcuref_t *ref”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcuref_t”h]”hŒrcuref_t”…”�”}”(hj}h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjzubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j`sbŒc.rcuref_is_dead”†”asbuh1hhjvubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjvubjã)�”}”(hjæh]”hŒ*”…”�”}”(hj«h²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjvubj�)�”}”(hŒref”h]”hŒref”…”�”}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjvubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjrubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hj:h²hh³jKh´K0ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj6h²hh³jKh´K0ubah}”(h]”j1ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jKh´K0hj3h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ0Check if the rcuref has been already marked dead”h]”hŒ0Check if the rcuref has been already marked dead”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K0hjßh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj3h²hh³jKh´K0ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjújæjújç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX;**Parameters** ``rcuref_t *ref`` Pointer to the reference count **Return** True if the object has been marked DEAD. This signals that a previous invocation of rcuref_put() returned true on this reference counter meaning the protected object can safely be scheduled for deconstruction. Otherwise, returns false.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjh]”hŒ Parameters”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K4hjþubj )�”}”(hhh]”j)�”}”(hŒ1``rcuref_t *ref`` Pointer to the reference count ”h]”(j)�”}”(hŒ``rcuref_t *ref``”h]”j)�”}”(hj#h]”hŒ rcuref_t *ref”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj!ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K1hjubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the reference count”h]”hŒPointer to the reference count”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j8h´K1hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j8h´K1hjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjþubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hj^h]”hŒReturn”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K3hjþubhÝ)�”}”(hŒëTrue if the object has been marked DEAD. This signals that a previous invocation of rcuref_put() returned true on this reference counter meaning the protected object can safely be scheduled for deconstruction. Otherwise, returns false.”h]”hŒëTrue if the object has been marked DEAD. This signals that a previous invocation of rcuref_put() returned true on this reference counter meaning the protected object can safely be scheduled for deconstruction. Otherwise, returns false.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K3hjþubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcuref_get (C function)”Œ c.rcuref_get”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒbool rcuref_get (rcuref_t *ref)”h]”j)�”}”(hŒbool rcuref_get(rcuref_t *ref)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hj£h²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjŸh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KBubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj±h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjŸh²hh³j°h´KBubj{)�”}”(hŒ rcuref_get”h]”j�)�”}”(hŒ rcuref_get”h]”hŒ rcuref_get”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj¿ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjŸh²hh³j°h´KBubjœ)�”}”(hŒ(rcuref_t *ref)”h]”j¢)�”}”(hŒ rcuref_t *ref”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcuref_t”h]”hŒrcuref_t”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjßubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”jäŒmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jÅsbŒ c.rcuref_get”†”asbuh1hhjÛubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÛubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjÛubj�)�”}”(hŒref”h]”hŒref”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjÛubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj×ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjŸh²hh³j°h´KBubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hj›h²hh³j°h´KBubah}”(h]”j–ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j°h´KBhj˜h²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ1Acquire one reference on a rcuref reference count”h]”hŒ1Acquire one reference on a rcuref reference count”…”�”}”(hjGh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KBhjDh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhj˜h²hh³j°h´KBubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj_jæj_jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX **Parameters** ``rcuref_t *ref`` Pointer to the reference count **Description** Similar to atomic_inc_not_zero() but saturates at RCUREF_MAXREF. Provides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See documentation in lib/rcuref.c True if a reference was successfully acquired **Return** False if the attempt to acquire a reference failed. This happens when the last reference has been put already”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjih]”hŒ Parameters”…”�”}”(hjkh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjgubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KFhjcubj )�”}”(hhh]”j)�”}”(hŒ1``rcuref_t *ref`` Pointer to the reference count ”h]”(j)�”}”(hŒ``rcuref_t *ref``”h]”j)�”}”(hjˆh]”hŒ rcuref_t *ref”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj†ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KChj‚ubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the reference count”h]”hŒPointer to the reference count”…”�”}”(hj¡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j�h´KChjžubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj‚ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j�h´KChjubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjcubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjÃh]”hŒ Description”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KEhjcubhÝ)�”}”(hŒ@Similar to atomic_inc_not_zero() but saturates at RCUREF_MAXREF.”h]”hŒ@Similar to atomic_inc_not_zero() but saturates at RCUREF_MAXREF.”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KDhjcubhÝ)�”}”(hŒÙProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See documentation in lib/rcuref.c”h]”hŒÙProvides no memory ordering, it is assumed the caller has guaranteed the object memory to be stable (RCU, etc.). It does provide a control dependency and thereby orders future stores. See documentation in lib/rcuref.c”…”�”}”(hjèh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KFhjcubj•)�”}”(hŒ.True if a reference was successfully acquired ”h]”hÝ)�”}”(hŒ-True if a reference was successfully acquired”h]”hŒ-True if a reference was successfully acquired”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KKhj÷ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j h´KKhjcubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjh]”hŒReturn”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KMhjcubhÝ)�”}”(hŒmFalse if the attempt to acquire a reference failed. This happens when the last reference has been put already”h]”hŒmFalse if the attempt to acquire a reference failed. This happens when the last reference has been put already”…”�”}”(hj(h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KKhjcubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcuref_put_rcusafe (C function)”Œc.rcuref_put_rcusafe”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ'bool rcuref_put_rcusafe (rcuref_t *ref)”h]”j)�”}”(hŒ&bool rcuref_put_rcusafe(rcuref_t *ref)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjSh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Kyubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjSh²hh³jdh´Kyubj{)�”}”(hŒrcuref_put_rcusafe”h]”j�)�”}”(hŒrcuref_put_rcusafe”h]”hŒrcuref_put_rcusafe”…”�”}”(hjwh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjsubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjSh²hh³jdh´Kyubjœ)�”}”(hŒ(rcuref_t *ref)”h]”j¢)�”}”(hŒ rcuref_t *ref”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcuref_t”h]”hŒrcuref_t”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj“ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j˜Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jysbŒc.rcuref_put_rcusafe”†”asbuh1hhj�ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj¶h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hj�ubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÄh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhj�ubj�)�”}”(hŒref”h]”hŒref”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj�ubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hj‹ubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjSh²hh³jdh´Kyubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjOh²hh³jdh´Kyubah}”(h]”jJah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jdh´KyhjLh²hubjÃ)�”}”(hhh]”j›)�”}”(hhh]”j )�”}”(hŒ;Release one reference for a rcuref reference count RCU safe”h]”hÝ)�”}”(hjh]”hŒ;Release one reference for a rcuref reference count RCU safe”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Kyhjþubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjûh²hh³jh´Nubah}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³jh´Kyhjøh²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjLh²hh³jdh´Kyubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj%jæj%jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXt**Parameters** ``rcuref_t *ref`` Pointer to the reference count **Description** Provides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after. Can be invoked from contexts, which guarantee that no grace period can happen which would free the object concurrently if the decrement drops the last reference and the slowpath races against a concurrent get() and put() pair. rcu_read_lock()'ed and atomic contexts qualify. False if there are still active references or the put() raced with a concurrent get()/put() pair. Caller is not allowed to release the protected object. **Return** True if this was the last reference with no future references possible. This signals the caller that it can safely release the object which is protected by the reference counter.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj/h]”hŒ Parameters”…”�”}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj-ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K}hj)ubj )�”}”(hhh]”j)�”}”(hŒ1``rcuref_t *ref`` Pointer to the reference count ”h]”(j)�”}”(hŒ``rcuref_t *ref``”h]”j)�”}”(hjNh]”hŒ rcuref_t *ref”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´KzhjHubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the reference count”h]”hŒPointer to the reference count”…”�”}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jch´Kzhjdubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjHubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jch´KzhjEubah}”(h]”h ]”h"]”h$]”h&]”uh1j hj)ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj‰h]”hŒ Description”…”�”}”(hj‹h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj‡ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K|hj)ubhÝ)�”}”(hŒ¡Provides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.”h]”hŒ¡Provides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K{hj)ubhÝ)�”}”(hXCan be invoked from contexts, which guarantee that no grace period can happen which would free the object concurrently if the decrement drops the last reference and the slowpath races against a concurrent get() and put() pair. rcu_read_lock()'ed and atomic contexts qualify.”h]”hXCan be invoked from contexts, which guarantee that no grace period can happen which would free the object concurrently if the decrement drops the last reference and the slowpath races against a concurrent get() and put() pair. rcu_read_lock()’ed and atomic contexts qualify.”…”�”}”(hj®h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´Khj)ubj•)�”}”(hŒ™False if there are still active references or the put() raced with a concurrent get()/put() pair. Caller is not allowed to release the protected object. ”h]”hÝ)�”}”(hŒ˜False if there are still active references or the put() raced with a concurrent get()/put() pair. Caller is not allowed to release the protected object.”h]”hŒ˜False if there are still active references or the put() raced with a concurrent get()/put() pair. Caller is not allowed to release the protected object.”…”�”}”(hjÁh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K…hj½ubah}”(h]”h ]”h"]”h$]”h&]”uh1j”h³jÏh´K…hj)ubhÝ)�”}”(hŒ **Return**”h]”jõ)�”}”(hjØh]”hŒReturn”…”�”}”(hjÚh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÖubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K‰hj)ubhÝ)�”}”(hŒ²True if this was the last reference with no future references possible. This signals the caller that it can safely release the object which is protected by the reference counter.”h]”hŒ²True if this was the last reference with no future references possible. This signals the caller that it can safely release the object which is protected by the reference counter.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K…hj)ubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œrcuref_put (C function)”Œ c.rcuref_put”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒbool rcuref_put (rcuref_t *ref)”h]”j)�”}”(hŒbool rcuref_put(rcuref_t *ref)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjh²hh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K”ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj+h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjh²hh³j*h´K”ubj{)�”}”(hŒ rcuref_put”h]”j�)�”}”(hŒ rcuref_put”h]”hŒ rcuref_put”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj9ubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjh²hh³j*h´K”ubjœ)�”}”(hŒ(rcuref_t *ref)”h]”j¢)�”}”(hŒ rcuref_t *ref”h]”(h)�”}”(hhh]”j�)�”}”(hŒrcuref_t”h]”hŒrcuref_t”…”�”}”(hj\h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjYubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j^Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY j?sbŒ c.rcuref_put”†”asbuh1hhjUubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjUubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjŠh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjUubj�)�”}”(hŒref”h]”hŒref”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjUubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjQubah}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjh²hh³j*h´K”ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjh²hh³j*h´K”ubah}”(h]”jah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³j*h´K”hjh²hubjÃ)�”}”(hhh]”j›)�”}”(hhh]”j )�”}”(hŒ2Release one reference for a rcuref reference count”h]”hÝ)�”}”(hjÆh]”hŒ2Release one reference for a rcuref reference count”…”�”}”(hjÈh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K”hjÄubah}”(h]”h ]”h"]”h$]”h&]”uh1jŸhjÁh²hh³jÕh´Nubah}”(h]”h ]”h"]”h$]”h&]”jôjõuh1jšh³jÕh´K”hj¾h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjh²hh³j*h´K”ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåjëjæjëjç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hX¤**Parameters** ``rcuref_t *ref`` Pointer to the reference count **Description** Can be invoked from any context. Provides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after. True if this was the last reference with no future references possible. This signals the caller that it can safely schedule the object, which is protected by the reference counter, for deconstruction. False if there are still active references or the put() raced with a concurrent get()/put() pair. Caller is not allowed to deconstruct the protected object.”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hjõh]”hŒ Parameters”…”�”}”(hj÷h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjóubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K˜hjïubj )�”}”(hhh]”j)�”}”(hŒ1``rcuref_t *ref`` Pointer to the reference count ”h]”(j)�”}”(hŒ``rcuref_t *ref``”h]”j)�”}”(hjh]”hŒ rcuref_t *ref”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K•hjubj2)�”}”(hhh]”hÝ)�”}”(hŒPointer to the reference count”h]”hŒPointer to the reference count”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j)h´K•hj*ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j)h´K•hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1j hjïubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hjOh]”hŒ Description”…”�”}”(hjQh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjMubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K—hjïubhÝ)�”}”(hŒ Can be invoked from any context.”h]”hŒ Can be invoked from any context.”…”�”}”(hjeh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K–hjïubhÝ)�”}”(hŒ¡Provides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.”h]”hŒ¡Provides release memory ordering, such that prior loads and stores are done before, and provides an acquire ordering on success such that free() must come after.”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K˜hjïubj•)�”}”(hXfTrue if this was the last reference with no future references possible. This signals the caller that it can safely schedule the object, which is protected by the reference counter, for deconstruction. False if there are still active references or the put() raced with a concurrent get()/put() pair. Caller is not allowed to deconstruct the protected object.”h]”(hÝ)�”}”(hŒÈTrue if this was the last reference with no future references possible. This signals the caller that it can safely schedule the object, which is protected by the reference counter, for deconstruction.”h]”hŒÈTrue if this was the last reference with no future references possible. This signals the caller that it can safely schedule the object, which is protected by the reference counter, for deconstruction.”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K�hjƒubhÝ)�”}”(hŒœFalse if there are still active references or the put() raced with a concurrent get()/put() pair. Caller is not allowed to deconstruct the protected object.”h]”hŒœFalse if there are still active references or the put() raced with a concurrent get()/put() pair. Caller is not allowed to deconstruct the protected object.”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ[/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:429: ./include/linux/rcuref.h”h´K¢hjƒubeh}”(h]”h ]”h"]”h$]”h&]”uh1j”h³j•h´K�hjïubeh}”(h]”h ]”Œ kernelindent”ah"]”h$]”h&]”uh1jêhjôÖh²hh³Nh´Nubhþ)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(j Œ,same_state_synchronize_rcu_full (C function)”Œ!c.same_state_synchronize_rcu_full”hNt”auh1hýhjôÖh²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒ[bool same_state_synchronize_rcu_full (struct rcu_gp_seq *rgosp1, struct rcu_gp_seq *rgosp2)”h]”j)�”}”(hŒZbool same_state_synchronize_rcu_full(struct rcu_gp_seq *rgosp1, struct rcu_gp_seq *rgosp2)”h]”(j )�”}”(hjª8h]”hŒbool”…”�”}”(hjËh²hh³Nh´Nubah}”(h]”h ]”j,ah"]”h$]”h&]”uh1jhjÇh²hh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:431: ./include/linux/rcutree.h”h´K.ubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjÇh²hh³jØh´K.ubj{)�”}”(hŒsame_state_synchronize_rcu_full”h]”j�)�”}”(hŒsame_state_synchronize_rcu_full”h]”hŒsame_state_synchronize_rcu_full”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjçubah}”(h]”h ]”(j”j•eh"]”h$]”h&]”j™jšuh1jzhjÇh²hh³jØh´K.ubjœ)�”}”(hŒ6(struct rcu_gp_seq *rgosp1, struct rcu_gp_seq *rgosp2)”h]”(j¢)�”}”(hŒstruct rcu_gp_seq *rgosp1”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubh)�”}”(hhh]”j�)�”}”(hŒ rcu_gp_seq”h]”hŒ rcu_gp_seq”…”�”}”(hj%h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj"ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j'Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jf )�”}”jY jísbŒ!c.same_state_synchronize_rcu_full”†”asbuh1hhjubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjEh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjubj�)�”}”(hŒrgosp1”h]”hŒrgosp1”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÿubj¢)�”}”(hŒstruct rcu_gp_seq *rgosp2”h]”(j¨)�”}”(hj …h]”hŒstruct”…”�”}”(hjyh²hh³Nh´Nubah}”(h]”h ]”j´ah"]”h$]”h&]”uh1j§hjuubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuubh)�”}”(hhh]”j�)�”}”(hŒ rcu_gp_seq”h]”hŒ rcu_gp_seq”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hj”ubah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”jߌreftype”jY Œ reftarget”j™Œmodname”NŒ classname”Nj] j` )�”}”jc ]”jAŒ!c.same_state_synchronize_rcu_full”†”asbuh1hhjuubj2)�”}”(hŒ ”h]”hŒ ”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”j>ah"]”h$]”h&]”uh1j1hjuubjã)�”}”(hjæh]”hŒ*”…”�”}”(hjÃh²hh³Nh´Nubah}”(h]”h ]”jïah"]”h$]”h&]”uh1jâhjuubj�)�”}”(hŒrgosp2”h]”hŒrgosp2”…”�”}”(hjÐh²hh³Nh´Nubah}”(h]”h ]”j�ah"]”h$]”h&]”uh1j€hjuubeh}”(h]”h ]”h"]”h$]”h&]”Œnoemph”ˆj™jšuh1j¡hjÿubeh}”(h]”h ]”h"]”h$]”h&]”j™jšuh1j›hjÇh²hh³jØh´K.ubeh}”(h]”h ]”h"]”h$]”h&]”j™jšj´ˆuh1jjµj¶hjÃh²hh³jØh´K.ubah}”(h]”j¾ah ]”(jºj»eh"]”h$]”h&]”j¿ˆjÀ)jÁhuh1jh³jØh´K.hjÀh²hubjÃ)�”}”(hhh]”hÝ)�”}”(hŒ#Are two old-state values identical?”h]”hŒ#Are two old-state values identical?”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:431: ./include/linux/rcutree.h”h´K.hj÷h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1jÂhjÀh²hh³jØh´K.ubeh}”(h]”h ]”(jߌfunction”eh"]”h$]”h&]”jäjßjåj jæj jç‰jè‰jé‰uh1jh²hhjôÖh³Nh´Nubjë)�”}”(hXu**Parameters** ``struct rcu_gp_seq *rgosp1`` First old-state value. ``struct rcu_gp_seq *rgosp2`` Second old-state value. **Description** The two old-state values must have been obtained from either get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or get_completed_synchronize_rcu_full(). Returns **true** if the two values are identical and **false** otherwise. This allows structures whose lifetimes are tracked by old-state values to push these values to a list header, allowing those structures to be slightly smaller. Note that equality is judged on a bitwise basis, so that an **rcu_gp_seq** structure with an already-completed state in one field will compare not-equal to a structure with an already-completed state in the other field. After all, the **rcu_gp_seq** structure is opaque so how did such a situation come to pass in the first place?”h]”(hÝ)�”}”(hŒ**Parameters**”h]”jõ)�”}”(hj h]”hŒ Parameters”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:431: ./include/linux/rcutree.h”h´K2hj ubj )�”}”(hhh]”(j)�”}”(hŒ5``struct rcu_gp_seq *rgosp1`` First old-state value. ”h]”(j)�”}”(hŒ``struct rcu_gp_seq *rgosp1``”h]”j)�”}”(hj; h]”hŒstruct rcu_gp_seq *rgosp1”…”�”}”(hj= h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhj9 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:431: ./include/linux/rcutree.h”h´K/hj5 ubj2)�”}”(hhh]”hÝ)�”}”(hŒFirst old-state value.”h]”hŒFirst old-state value.”…”�”}”(hjT h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³jP h´K/hjQ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hj5 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³jP h´K/hj2 ubj)�”}”(hŒ6``struct rcu_gp_seq *rgosp2`` Second old-state value. ”h]”(j)�”}”(hŒ``struct rcu_gp_seq *rgosp2``”h]”j)�”}”(hjt h]”hŒstruct rcu_gp_seq *rgosp2”…”�”}”(hjv h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jhjr ubah}”(h]”h ]”h"]”h$]”h&]”uh1jh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:431: ./include/linux/rcutree.h”h´K0hjn ubj2)�”}”(hhh]”hÝ)�”}”(hŒSecond old-state value.”h]”hŒSecond old-state value.”…”�”}”(hj� h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³j‰ h´K0hjŠ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j1hjn ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jh³j‰ h´K0hj2 ubeh}”(h]”h ]”h"]”h$]”h&]”uh1j hj ubhÝ)�”}”(hŒ**Description**”h]”jõ)�”}”(hj¯ h]”hŒ Description”…”�”}”(hj± h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhj­ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:431: ./include/linux/rcutree.h”h´K2hj ubhÝ)�”}”(hX–The two old-state values must have been obtained from either get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or get_completed_synchronize_rcu_full(). Returns **true** if the two values are identical and **false** otherwise. This allows structures whose lifetimes are tracked by old-state values to push these values to a list header, allowing those structures to be slightly smaller.”h]”(hŒ´The two old-state values must have been obtained from either get_state_synchronize_rcu_full(), start_poll_synchronize_rcu_full(), or get_completed_synchronize_rcu_full(). Returns ”…”�”}”(hjÅ h²hh³Nh´Nubjõ)�”}”(hŒ**true**”h]”hŒtrue”…”�”}”(hjÍ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅ ubhŒ% if the two values are identical and ”…”�”}”(hjÅ h²hh³Nh´Nubjõ)�”}”(hŒ **false**”h]”hŒfalse”…”�”}”(hjß h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jôhjÅ ubhŒ¬ otherwise. This allows structures whose lifetimes are tracked by old-state values to push these values to a list header, allowing those structures to be slightly smaller.”…”�”}”(hjÅ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hÜh³Œ\/var/lib/git/docbuild/linux/Documentation/core-api/kernel-api:431: ./include/linux/rcutree.h”h´K1hj ubhÝ)�”}”(hXKNote that equality is judged on a bitwise basis, so that an **rcu_gp_seq** structure with an already-completed state in one field will compare not-equal to a structure with an already-completed state in the other field. After all, the **rcu_gp_seq** structure is opaque so how did such a situation come to pass in the first place?”h]”(hŒesŒrefids”}”jÁ<]”(j°<jí>esŒnameids”}”(jG jD j<æj9æjšej—ej4æj1æjƒžj€žj j jêhjçhjt?jÁ<j›pj˜pjg|jd|j‰j¿‰j{žjxžj*;j';jØj Øjµûj²ûj!jjjj¤7j¡7j";j;jrtjotjjtjgtjK«jH«jC«j@«j#Ýj ÝjÝjÝjcäj`äj†ßjƒßj4äj1äj6áj3áj,äj)äj[äjXäjå-jâ-j—çj”çj¼+j¹+jÝ-jÚ-j�6j�6jö„jó„jB‰j?‰jA6j>6jTjTjàÖjÝÖj? j< j7 j4 uŒ nametypes”}”(jG ‰j<æ‰jše‰j4æ‰jƒž‰j ‰jêh‰jt?ˆj›p‰jg|‰j‰‰j{ž‰j*;‰j؉jµû‰j!‰j‰j¤7‰j";‰jrt‰jjt‰jK«‰jC«‰j#݉j݉jcä‰j†ß‰j4ä‰j6á‰j,ä‰j[ä‰jå-‰j—ç‰j¼+‰jÝ-‰j�6‰jö„‰jB‰‰jA6‰jT‰jàÖ‰j? ‰j7 ‰uh}”(jD h·j9æhËj—ehìj jjjjœj¡j j j´ j¹ jxj}j¥jªj‚j‡jajfjûjjTjYj¬ j± j=$jB$jœ&j¡&jÉ(jÎ(jX+j]+jÊ-jÏ-jt0jy0j3j3j�5j•5j8j8jè9jí9j•<jš<jB?jG?jÞBjãBj¬Ej±EjÛHjàHj>OjCOjúQjÿQj"Tj'Tj¿UjÄUjdWjiWjeYjjYj¡\j¦\j³_j¸_jnbjsbj1æj�ejºej¿ej�gj”gjÏijÔij kjkjRojWoj€qj…qjÕtjÚtjBwjGwj¡yj¦yj|j|jß}jä}j>€jC€j5‚j:‚j„j„jÙ…jÞ…jSˆjXˆjcŠjhŠjsŒjxŒj\ŽjaŽj}�j‚�jÊ’jÏ’jP•jU•jÕ—jÚ—jZšj_šjÑœjÖœjHŸjMŸj¹¡j¾¡j>¤jC¤j°¦jµ¦j«¨j°¨j«j«j´­j¹­jS°jX°já²jæ²joµjtµjÌ·jÑ·jÿ¹jºjë»jð»j@½jE½j"¿j'¿jÚÀjßÀj›Âj ÂjÄjÄj‡ÅjŒÅjýÆjÇjyÈj~ÈjõÉjúÉjúÌjÿÌjCÏjHÏj„Ñj‰Ñj£Ój¨ÓjàÕjåÕjÇØjÌØjhÛjmÛjÞj Þjàjàj$âj)âj-äj2äj€žj?æj j^æj{æj€æj“èj˜èj‰êjŽêj ìj¥ìj•îjšîjŠðj�ðjòj„òj‘ôj–ôj£öj¨öjµøjºøjÆújËúj×üjÜüjèþjíþjîjójôjùjêjïjàjåjÕjÚjçhj jÎ jÓ jÉjÎjüjj jj¤j©jy!j~!j¦%j«%j0(j5(jº*j¿*jD-jI-jÎ/jÓ/j¤3j©3jº<j°<j÷>jí>jÁ<jbjKejPej˜pjíhj ijijRkjWkj3nj8njd|jžpj»pjÀpjÅqjÊqjasjfsjktjptjûujvjŠwj�wjyj yj’zj—zj¿‰jj|j‡|jŒ|j’€j—€j„j„„jxžjʼnjŽŠj“Šj0Œj5Œjè�jí�jo‘jt‘j‡•jŒ•j—j —j]™jb™j£›j¨›j �j�j';j†žj Øj—žj´žj¹žjM jR jÉ¡jΡjc£jh£j ¥j¥j”¦j™¦j.¨j3¨jÇ©jÌ©jC«jH«jz®j®jL°jQ°j[²j`²jI´jN´jF¶jK¶j4¸j9¸jw¹j|¹jˆ»j�»j™½jž½j¸¿j½¿jFÁjKÁjÃj$ÃjøÄjýÄjÑÆjÖÆj¼ÈjÁÈj\ÊjaÊj$Ìj)ÌjÎjÎj3Ðj8ÐjŸÒj¤ÒjÎÓjÓÓjØÔjÝÔjÀÖjÅÖj²ûjØj.Øj3ØjßÚjäÚjœÝj¡Ýj�ßj’ßj|áj�ájÃäjÈäjXçj]çjÈéjÍéj^ìjcìjÝïjâïj>ójCój®öj³öjùjùjj¸ûjÕûjÚûj~ýjƒýjÓþjØþj(j-j2j7jKjPjUjZj_jdj”j™j­j²jj$jAjFj< jA jA jF j[j`jÖjÛj¡7jj4j9j÷jüj«j°j8j=jÅjÊjRjWj?jDj,!j1!j@#jE#j-%j2%j–(j›(jy*j~*jr,jw,jÜ-já-jF/jK/j°0jµ0j2j2j„3j‰3jÍ5jÒ5j;j§7jÄ7jÉ7j^9jc9jotj-;jgtj>;j[;j`;j’<j—<j>j>j�Aj•AjÜCjáCj’Fj—Fj)Jj.JjÞMjãMj„Qj‰Qj®Sj³Sj¾UjÃUjèWjíWjZjZjÙ\jÞ\j'_j,_juajzaj±cj¶cjíejòej…ijŠij‰kjŽkjmpjrpjÐqjÕqjH«jutj@«j†tj£tj¨tjÀujÅujwjwjúwjÿwjvyj{yj¤zj©zjˆ{j�{jl|jq|jP}jU}jZ~j_~jdjijH€jM€j,�j1�jI‚jN‚jfƒjkƒjJ„jO„j.…j3…jK†jP†j/‡j4‡j9ˆj>ˆjĉjɉjˆ‹j�‹jlŒjqŒj÷�jü�jI�jN�j›�j �jí‘jò‘jx“j}“j-•j2•jâ–jç–jm˜jr˜j"šj'šj×›jÜ›j¿�jÄ�j§Ÿj¬Ÿj²¡j·¡j£j £j!¥j&¥js¦jx¦jþ§j¨j­©j²©j ÝjN«jÝjm«jŠ«j�«j­j­j®®j³®j�³j•³j¾µjõjc¸jh¸jí¹jò¹jw»j|»j̽jѽjÀj ÀjÛÁjàÁjeÃjjÃjÀÄjÅÄjKÆjPÆjÕÇjÚÇj_ÉjdÉjsËjxËjþÌjÍj ÏjÏj<ÑjAÑjÆÒjËÒjñÔjöÔj%×j*×jÙjÙj²Új·Új`äj&Ýjƒßj7ÝjTÝjYÝj1äj‰ßj3ájCàj)äj9ájXäj7äjâ-jfäj”çjwäj”äj™äjdæjiæj¹+jšçj·çj¼çjêj!êj×îjÜîjòj òjBôjGôjÅöjÊöjtøjyøj¡új¦újtüjyüjžþj£þjùÿjþÿj×jÜjdjij[ j` jqjvjªj¯jÔjÙjsjxjöjûj‘j–j j j#j #j.%j3%j(j"(jÚ-j¿+jÜ+já+j�6jè-j.j .j•/jš/j%1j*1j–3j›3j§5j¬5j¸7j½7jH9jM9jØ:jÝ:jh<jm<jø=jý=jˆ?j�?jAjAj¨Bj­Bj8Dj=DjÈEjÍEjJjJjïKjôKjšNjŸNjEQjJQjÆTjËTj WjWjÖXjÛXj�\j¢\jLajQajødjýdjhjhjÑijÖijNkjSkjÕmjÚmjëojðoj/rj4rjõtjútjÓvjØvj¥xjªxjezjjzj¶|j»|j+j0j|�j��j6ƒj;ƒjÉ„j΄j\†ja†j1ˆj6ˆj¥ŠjªŠjqŒjvŒjã�jè�j “j“j’•j—•j˜j˜j›j"›jX�j]�j ŸjŸj<¢jA¢jf¤jk¤jÒ¦jצjÔ©jÙ©jé¬jî¬j¬®j±®j±j±jÙ³jÞ³jœµj¡µjÆ·jË·jÀºjźj½j½jø¿jý¿jIÂjNÂjœÅj¡ÅjÉÉjÎÉjqËjvËjSÎjXÎjiÐjnÐjÓjÓjÄÔjÉÔjQÙjVÙjÝj Ýjûßjàjôâjùâjíåjòåjãèjèèjìj„ìjáîjæîj›ðj ðj£ój¨ójºõj¿õj øjøj\újaújüj üjgþjlþj�j¢jÞjãj j jY j^ jo jt jjj˜j�jjjÊjÏjKjPjjj²j·jnjsj j¥j¤"j©"j[$j`$jP'jU'jø(jý(j…*jŠ*j?,jD,jh.jm.jé/jî/j$2j)2j¥3jª3j’6j—6j×8jÜ8j;j;ju=jz=jí>jò>jýAjBj EjEj�Gj¢GjéIjîIj¢Kj§Kj[Mj`Mj”Oj™OjÍQjÒQj†Sj‹Sj—VjœVj§Yj¬Yj`[je[j]j]jÒ^j×^jªbj¯bj=fjBfjfhjkhj)jj.jj?ljDljinjnnjpjpj’qj—qjLsjQsjßtjätjõvjúvjyj"yj|j|jújÿj´�j¹�jGƒjLƒj]…jb…j—‡jœ‡j^ŠjcŠjŒjŒj«�j°�jÁ�jÆ�jé‘jî‘j(•j-•j¾˜jØjþ›jœjyŸj~Ÿj®¢j³¢jÝ¥jâ¥j…§jЧjÖ©jÛ©j‹¬j�¬jë¯jð¯jβjÓ²j±µj¶µjÇ·jÌ·j*ºj/ºjé¼jî¼jÀjÀj¾ÁjÃÁjfÃjkÃjüÅjÆj’Èj—ÈjºÊj¿ÊjîÍjóÍjÿÏjÐj–Òj›ÒjÔjÔj€Öj…ÖjÑØjÖØj/Ûj4Ûj×ÜjÜÜj¨ßj­ßj(áj-ájQãjVãj›æj æjõèjúèjëëjðëjlíjqíjLðjQðjŽòj“òjÆöjËöj]újbújüjüjhýjmýjŸj¤j­j²jÖjÛj~jƒjå jê jLjQjajfjÀjÅjñjöjrjwjójøjtjyjñjöj™jžjjj jÇ jj"jo"j?$jD$jŽ%j“%j6'j;'j…(jŠ(j­)j²)j.j.j¾0jÃ0jø4jý4jó„j“6j°6jµ6jj9jo9jä;jé;j>j>j�?j”?jæBjëBjXGj]Gj\IjaIjÝJjâJj^LjcLj¹Mj¾Mj:Oj?Oj—QjœQjðRjõRj¢Tj§TjXjXjÀYjÅYjA[jF[jê]jï]j`j`j^bjcbj`ejeejWgj\gj3ij8ijŽjj“jjsmjxmj(oj-oj´pj¹pjrrjwrjósjøsj wjwjkyjpyj¯zj´zjë|jð|jujzj>�jC�j„‚j‰‚j?‰jù„j…j…j»†jÀ†jGˆjLˆj>6jE‰jb‰jg‰j(‹j-‹j@ŽjEŽjF‘jK‘j¦“j«“j}•j‚•j —j—j™j ™j›j#›jŸœj¤œj?žjDžjÈŸjÍŸjð¡jõ¡jj£jo£j‡¤jŒ¤j1¨j6¨jx©j}©j=«jB«jc­jh­j“¯j˜¯j®±j³±j@³jE³j$µj)µj·j ·j¤¸j©¸j=ºjBºj—»jœ»j½j½j½¾j¾j>ÀjCÀj&Âj+Âj%Åj*ÅjÂÆjÇÆj‚Èj‡ÈjcÊjhÊjÌj ÌjâÍjçÍjÒjÒj�Ój¢Ój®Öj³Öj ØjØjŠÙj�Ùj ÛjÛjgÝjlÝjÃßjÈßjâj$âjáäjæäj+èj0èjCëjHëj'íj,íj±îj¶îj¾ñjÃñj2öj7öjÀùjÅùjüjüjpýjuýjj j(j-j&j+j. j3 jå jê j‚ j‡ j"j'jØjÝjåjêjfjkj;j@jãjèj²j·jÀ jÅ jÖ"jÛ"j~$jƒ$j&&j+&jï'jô'jp)ju)j›,j ,j¥.jª.j80j=0j¹1j¾1j'4j,4jTjD6ja6jf6j¿8jÄ8j©;j®;jÊ?jÏ?jµAjºAjõDjúDjwGj|Gj Ij¥Ij3Lj8Lj“Nj˜NjLPjQPj±Qj¶QjÝÖjTj Tj¥TjxVj}VjXjXjƒYjˆYj­[j²[j±]j¶]j„`j‰`jbj bjôcjùcjuejzej hjhjjjjjÈljÍljvnj{njÓpjØpjrrjwrjšsjŸsjÂtjÇtjRvjWvjâwjçwj€yj…yj8|j=|j3j8j©�j®�jA„jF„jè†jí†jã‰jè‰j¢Œj§Œja�jf�j¹‘j¾‘j”j”j—j —jÿ™jšjöœjûœjÉŸjΟjœ¢j¡¢jo¥jt¥j̨jѨjö«jû«j•­jš­j®¯j³¯jM±jR±ju³jz³jì´jñ´j|¶j�¶jz¸j¸jxºj}ºj±¼j¶¼j-¿j2¿jGÁjLÁjpÃjuÃjÆjÆj—ÈjœÈj¢Êj§Êj­Ìj²Ìj×ÎjÜÎj“Ðj˜ÐjÓjÓj•ÔjšÔj< jãÖj4 jôÖj×j×jÙj#ÙjFÚjKÚj€Ûj…ÛjÃÜjÈÜjrÝjwÝj!Þj&ÞjÐÞjÕÞjŽßj“ßjªàj¯àjŽáj“ájþâjãjÔäjÙäjüåjæjAèjFèj„éj‰éjÇêjÌêj ìjìjníjsíjxîj}îj‚ïj‡ïjŒðj‘ðj–ñj›ñj¯òj´òj"ôj'ôjYõj^õj�öj•öj¸÷j½÷jïøjôøjújújqüjvüj´ýj¹ýjEÿjJÿjªj¯jjj�j”jjjcjhj¨ j­ jß jä já jæ j' j, jØjÝj$j)j5j:j‘j–jõjújˆj�jÌjÑjnjsj²j·jEjJjOjTjk!jp!jû"j#j¾$jÃ$jõ%jú%j;'j@'j�(j†(jÅ)jÊ)jF+jK+jÖ,jÛ,j™.jž.jl0jq0j”1j™1j¼2jÁ2jä3jé3j 5j5js6jx6jË7jÐ7jL9jQ9jÍ:jÒ:jN<jS<j’=j—=jÖ>jÛ>jã@jè@j�Bj¢Bj>DjCDj‚Ej‡EjžFj£Fj.Hj3Hj)Jj.Jj$Lj)LjNjNj‘Oj–Oj0Qj5QjSj$Sj[Uj`Uj—WjœWjÓYjØYjÂ[jÇ[j±]j¶]jè^jí^j`j$`j aj¥aj!cj&cj¢dj§dj#fj(fjìhjñhj|jj�jj‰ljŽlj&nj+njÃojÈojýqjrjXsj]sjÙtjÞtjvvj{vjxjxj=zjBzjï{jô{j }j¥}jà~jå~jêjïj#‚j(‚j\„ja„j †j†j߇jä‡j}‰j‚‰jŒjŒj<ŽjAŽj’j’jÏ”jÔ”j�—j•—j/™j4™jºšj¿šj~œjƒœj3žj8žjèŸjíŸj‡¡jŒ¡j£j£j ¤j¥¤j=¦jB¦jÛ§jà§j)ªj.ªj÷¬jü¬j¯j$¯jG±jL±jp³ju³j™µjžµjN·jS·j¹j¹jŽºj“ºj ¼j¼j'½j,½jD¾jI¾ja¿jf¿jÿÀjÁjãÁjèÁjÙÂjÞÂjÏÃjÔÃjmÅjrÅj•ÇjšÇj½ÉjÂÉjöËjûËjdÎjiÎj<ÐjAÐjîÑjóÑjnÓjsÓjÉÔjÎÔjwÖj|ÖjØj ØjˆÙj�ÙjãÚjèÚjÑÞjÖÞj çjçjéj"éjcêjhêj‹ëj�ëjÑìjÖìjîj îjßïjäïj€ñj…ñjój ój¨ôj­ôjßõjäõj÷j÷j'ùj,ùjmújrúj•ûjšûj½üjÂüjåýjêýj¯ÿj´ÿj1j6j–j›jJjOjjj¾jÃu(uŒ footnote_refs”}”j¬ ]”(j°<jí>esŒ citation_refs”}”Œ autofootnotes”]”jeŒsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”jz Ks…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.